変更要約: PL-400 第3章を新規作成(ドメイン: プラットフォーム拡張の前半=プラグイン)。Dataverse プラグイン(実行パイプラインのステージ pre-validation/pre-operation/post-operation・同期/非同期・実行コンテキスト IPluginExecutionContext・Pre/Post Image・Organization service CRUD・sandbox/性能・Plug-in Registration Tool)、カスタム API とビジネスイベント(custom API message bound/unbound・Dataverse business events・プラグイン実装)。
3.1Dataverse プラグイン
実行パイプラインのステージ、同期/非同期、実行コンテキスト、Pre/Post Image、Organization service、性能、Plug-in Registration Tool を理解します。
プラグイン は Dataverse のイベントに サーバーサイドでビジネスロジックを差し込む 拡張です。いつ・どの段階で 実行するかが設計の核心です。
3.1.1実行パイプラインのステージ
プラグインは イベント実行パイプライン の段階に登録します。pre-validation(トランザクション外・最初・入力検証/権限前チェックに)、pre-operation(トランザクション内・DB 書き込み前・値の補正に)、post-operation(トランザクション内・DB 書き込み後・関連更新/通知に)の順です。さらに 同期(即時・ユーザー待ち・例外でロールバック)か 非同期(システムジョブで後追い実行・重い処理向け)かを選びます。
3.1.2実行コンテキストと Image
実行コンテキスト(IPluginExecutionContext) から InputParameters/OutputParameters/Depth(無限ループ防止)などを取得します。更新前後の値が必要なら Pre Image(操作 前 のレコードの値)と Post Image(操作 後 の値)を登録して参照します。データ操作は Organization service(IOrganizationService) の CRUD(Create/Retrieve/Update/Delete)で行います。
3.1.3性能と登録
プラグインは sandbox(分離実行) で動き、2 分のタイムアウト等の制約があるため重い処理は 非同期 や Azure へ逃がします。同期プラグインで例外を投げると トランザクションがロールバックします。登録は Plug-in Registration Tool でステップ(メッセージ/テーブル/ステージ/Image)を構成します。
決め手:「トランザクション外・最初・入力検証」=pre-validation。「DB書込前・値補正」=pre-operation。「DB書込後・関連更新」=post-operation。「即時・例外でロールバック」=同期。「重い処理を後追い」=非同期。「操作前の値」=Pre Image、「操作後の値」=Post Image。「サーバーCRUD」=Organization service。登録=Plug-in Registration Tool。
混同に注意:
①pre-validation(トランザクション外)とpre-operation(内)を取り違えない。
②Pre Image(前)とPost Image(後)を逆にしない。
③同期(待ち/ロールバック)と非同期(後追い)の使い分け。
④重い処理は同期プラグインに置かない(タイムアウト)。
⑤Organization service(サーバー)とClient API(クライアント)は別。
3.1.4この節のまとめ
- ステージ=pre-validation(外)/pre-operation(前)/post-operation(後)・同期vs非同期
- Pre Image=操作前/Post Image=操作後・Organization serviceでCRUD・コンテキストでDepth
- sandbox実行・重い処理は非同期/Azure・登録はPlug-in Registration Tool
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. データベースへの書き込み後に、関連レコードの更新や通知を行うプラグインを登録したい。最適なステージはどれですか?
Q2. トランザクションの外で最初に実行し、入力検証や事前の権限チェックを行いたい。最適なステージはどれですか?
Q3. プラグインで更新操作の「変更前の値」を参照したい。最適なのはどれですか?
Q4. 時間のかかる重い処理をプラグインで実行したい。タイムアウトやユーザー待ちを避ける最適な方法はどれですか?
Q5. プラグインからサーバーサイドで Dataverse のレコードを CRUD 操作したい。最適なのはどれですか?

