JavaScript実装のつまづきポイント:「formContext」について
皆さん、こんにちは!
ITコンサルティング部の沖手です。
今回も、初心者がつまづきがちなポイントについて書いていきたいと思います。
やりたいこと
今回、Dynamics上で以下の様な実装を行いたいと考えました。
対象エンティティの既定フォームの画面で、あるフィールドの値を変更した際、
その値を別のフィールドにも自動で設定する。
※業務ルールで簡単に実装可能ですが、今回は勉強のためにJavaScriptで実装してみました。
作成したコードは以下です。
function TextFieldChange(exeContext){
var formContext = exeContext.getFormContext(); // get formContext
var InText = formContext.getAttribute("new_intext").getValue(); //入力テキストを読み込む
if (InText != null){
formContext.getAttribute("new_outtext").setValue(InText); //出力テキストに入力テキストの値を設定
}
else {
// 何もしない
}
}
対象エンティティの、フォームのプロパティ設定で、上記で作成したコードを追加し、
↓
動作させたいフィールドのイベントハンドラーに、OnChangeで登録します。
ここでつまづいた…
実際に動かしてみると、残念ながらエラーとなりました…
※エラーログは以下。
これで解決!
今回は以下のURLに記載の通り、Xrm.Pageの代わりにformContextを使ってコードを作成しました。
モデル駆動型アプリにおけるクライアント API フォーム コンテキスト - Power Apps | Microsoft Docs
エラーメッセージをみると、「Cannot read property 'getFormContext' of undefined」となっていますので、
上記URLの公式情報を再度確認してみます。
すると、以下の様な注意書きが。(思いっきり「重要」と書かれています…)
オプション設定が必要とのこと。
実際の画面では、以下のように設定します。
①フォームの設定画面を開く
②対象のフィールドをダブルクリックしてプロパティを開く
③ 「イベント」タブを開き、追加した関数をダブルクリック
④ ハンドラーのプロパティが開かれるので、以下の赤枠のチェックをON!
保存・公開して、フォームを開きます…
↓
上手くいきました!
感想
Microsoftの公式情報をしっかり読んでいれば、こんなところではまらなかったと思います…
ただ、文章を読んでも、実際の画面ではどこに当たるのかイメージがつきづらいなあ、と思いました。
公式情報の文章を読んですぐに「あそこだ!」と分かるようになれば、
実装が速くなるかな、と思います。
ここまで読んでいただき、ありがとうございました!
皆様の問題解決の助けになれば幸いです。