Tech Dynamics 365 (CRM)

Microsoft Dynamics 365 (CRM) を中心とした技術情報を提供しています。

廃止されるクライアントAPIの置換方法

こんにちは。

Dynamics 365 の開発をされている方ならご存知かもしれませんが、バージョン 9 以降、一部のクライアントAPIが廃止される旨のアナウンスがありました。
docs.microsoft.com

これによって廃止対象となっているクライアントAPI(以降、「旧API」)が将来的に使えなくなる可能性があるため、現在実装しているJavaScriptを新しいクライアントAPI(以降、「新API」)を使用する方法へ書き直す必要があります。

そこで今回は、新APIを使用したコードへの書き直し(置換)方法をご紹介します。


APIへの置換方法

さて廃止されるAPIの一覧は上記サイトで確認することができますが、一番影響が大きいのは間違いなく「Xrm.Page」の廃止だと思います。
例えばフォーム上の値を取得するとき、多くの方は以下のようなコードを書いているかと思いますが、こちらは今後、非推奨となる書き方です。

function GetTitleValue() {
    var title = Xrm.Page.getAttribute("new_title").getValue();
}

上記は getValue() を例としましたが、setValue() 等についても同様です。

そこで、新APIでは以下のように書き直します。

function GetTitleValue(executionContext) {
    // 実行コンテキストの取得
    var formContext = executionContext.getFormContext();
    var title = formContext.getAttribute("new_title").getValue();
}

一見、 Xrm.Page の部分を formContext に書き換えているだけのようにも見えますが、よく見ると新APIの方ではファンクションに引数が渡されていたり、1行目に謎の1文が加わっていることに気付くかと思います。

なぜこのようなコーディングを行っているのかというと、新APIでは「実行コンテキスト」というフォームやサブグリッドにアクセスするための変数をあらかじめ引数として取得し、それをメソッド内で利用する方法に変更となったからです。

実行コンテキストを引数として取得さえすれば、formContext 以下は今まで使用していた Xrm.Page と同じメソッドを利用することができますが、ひとつ注意点があります。
それは、イベントハンドラーのプロパティで「実行コンテキストを最初のパラメーターとして渡す」にチェックを入れることです。
f:id:westcoastline:20180226170056p:plain

この部分にチェックを入れることにより、JavaScriptの実行時に実行コンテキストを引数として渡し、メソッド内で利用することができます。