none
SDK.REST.retrieveRecordの実行処理について RRS feed

  • 質問

  • いつもお世話になります。
    DynamicsCRM2013オンプレを利用しています。

    CRMブログ「新機能その1-参照コントロール関連」を参考にJScriptを作成しています。

    addLookupFilterForContact() 内で SDK.REST.retrieveRecord() の検索結果を基に
    filter値を生成しaddCustomFilter()を実行しています。

    retrieveRecord() の successCallback の処理が終わった後に addCustomFilter() を
    実行してほしいのですが、先に filter値の生成・addCustomFilter() が実行されるときがあるようで
    意図した結果が得られない場合があります。


     SDK.REST.retrieveRecord()...filter値で利用する情報を取得
       ↓
     filter値を生成
      ↓
     addCustomFilter()


    初歩的な内容で申し訳ありませんが、間違いなどご教示頂けますと助かります。
    宜しくお願い致します。

    2015年5月15日 11:43

回答

  • SDK.RESTは標準では非同期処理です。

    そのせいでaddCustomefilterメソッドが先に実行され、うまくいっていないものと思われます。

      SDK.REST内のopenメソッドの第3引数をfalseにすれば、同期通信になり、うまく処理されるかもしれません。(他に色々と弊害が出るかも? もう少しSDK.REST内部を見てみないとなんとも)

    req.open("GET", encodeURI(this._ODataPath() + type + "Set(guid'" + id + "')" + systemQueryOptions), true ←これ);

    それ以外では、コードを見てみないとなんともですが、successCallbackの処理の中でaddCustomeFilterを実行してもいいのでは? とも思えます。

    • 回答としてマーク kotekote 2015年5月20日 4:48
    2015年5月15日 13:50

すべての返信

  • SDK.RESTは標準では非同期処理です。

    そのせいでaddCustomefilterメソッドが先に実行され、うまくいっていないものと思われます。

      SDK.REST内のopenメソッドの第3引数をfalseにすれば、同期通信になり、うまく処理されるかもしれません。(他に色々と弊害が出るかも? もう少しSDK.REST内部を見てみないとなんとも)

    req.open("GET", encodeURI(this._ODataPath() + type + "Set(guid'" + id + "')" + systemQueryOptions), true ←これ);

    それ以外では、コードを見てみないとなんともですが、successCallbackの処理の中でaddCustomeFilterを実行してもいいのでは? とも思えます。

    • 回答としてマーク kotekote 2015年5月20日 4:48
    2015年5月15日 13:50
  • 返信有難うございました。 大変助かりました。

    「openメソッドの引数false」にて同期通信用に作成し動作しました。 今のところ弊害も無いようなのでこのまま利用しようと思います。

    以前に 「successCallbackの処理の中でaddCustomeFilterを実行」 も試しました。addCustomeFilter のコードは実行されているようですがフィルターの設定がなされませんでした。同期通信用ではこの場合も動きましたので、非同期であったことが原因かもしれません。

    2015年5月20日 4:48