変更要約: PL-400 第2章を新規作成(ドメイン: Power Apps の改善 + UX 拡張)。高度な canvas アプリ(複雑な Power Fx・コンポーネントライブラリ・canvas からのクラウドフロー・委任 delegation/委任警告・事前読み込み・Monitor)、クライアントスクリプティング(Client API object model formContext/executionContext・OnLoad/OnChange/OnSave・Dataverse Web API・コマンド/ボタン・navigateTo)、PCF コードコンポーネント(init/updateView/getOutputs/destroy・manifest・インターフェイス・package/deploy/consume・Device/Utility/Web API)。
2.2クライアントスクリプティング
JavaScript Client API object model、イベントハンドラー登録、Dataverse Web API のクライアント呼び出し、コマンド/ボタン、カスタムページへのナビゲーションを理解します。
model-driven のフォームを コードで拡張 するのがクライアントスクリプティングです。Client API object model を正しく使うのが要点です。
2.2.1Client API object model とイベント
JavaScript Client API object model はフォームを操作する API で、formContext(フォーム/属性/コントロールへのアクセス)と executionContext(イベント情報)を使います。スクリプトは イベントハンドラー登録で OnLoad/OnSave/OnChange などに結びつけます。OnLoad はフォーム読込時、OnChange は項目変更時、OnSave は保存時、と発火タイミングが異なります。
2.2.2Dataverse Web API とコマンド
クライアントから Dataverse のデータを読み書きするには Dataverse Web API(Xrm.WebApi)を呼び出します。リボンの コマンドとボタン は Power Fx または JavaScript で動作や表示条件を構成します。Client API(Xrm.Navigation/navigateTo) で カスタムページへ遷移させ、リッチな UX を作ります。「サーバーサイドの実行」=plug-in に対し、これらは クライアント側 の拡張です。
決め手:「フォーム/属性/コントロール操作」=formContext。「イベント情報」=executionContext。「読込時/変更時/保存時」=OnLoad/OnChange/OnSave。「クライアントからDataverse読み書き」=Dataverse Web API(Xrm.WebApi)。「カスタムページ遷移」=Client APIのnavigateTo。クライアント拡張=client scripting、サーバー=plug-in。
混同に注意:
①client scripting(クライアント/UX)とplug-in(サーバー/Dataverseイベント)を取り違えない。
②formContext(フォーム操作)とexecutionContext(イベント情報)は別。
③OnLoad/OnChange/OnSaveの発火タイミングを区別。
④Client API(クライアントのWeb API呼出)とサーバーのOrganization serviceは別。
2.2.3この節のまとめ
- Client API object model=formContext/executionContext・OnLoad/OnChange/OnSaveで登録
- クライアントからDataverse Web API(Xrm.WebApi)で読み書き
- コマンド/ボタンはPower Fx+JS・navigateToでカスタムページ遷移
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. model-driven フォームで、属性やコントロールにアクセスして値を設定/表示制御するために使うオブジェクトはどれですか?
Q2. 項目(フィールド)の値が変更されたタイミングでスクリプトを実行したい。登録すべきイベントはどれですか?
Q3. クライアントスクリプトから Dataverse のレコードを読み書きしたい。最適な API はどれですか?
Q4. リボンのボタンを選択したときにカスタムページへ遷移させたい。最適な手段はどれですか?
Q5. client scripting と plug-in の違いとして正しいのはどれですか?

