この一覧には、Dataverse 内でのプラグインとワークフロー開発のガイダンスとベスト プラクティスが含まれています。
| ベスト プラクティス | 説明 |
|---|---|
| プラグインおよびワークフロー アクティビティ内でバッチ要求タイプを使用しないでください | プラグインまたはワークフロー アクティビティのコンテキスト内で、 ExecuteMultipleRequest または ExecuteTransactionRequest メッセージ要求クラスを使用しないでください。 |
IPlugin の実装をステートレスとして開発する |
IPlugin を実装するクラス メンバーは、潜在的なスレッドの安全性の問題にさらされ、データの不整合性やパフォーマンスの問題につながる恐れがあります。 |
| プラグイン ステップ登録を重複させないでください | プラグインステップの登録が重複すると、プラグインは同じメッセージまたはイベントで複数回起動します。 |
| プラグインおよびワークフロー アクティビティ内でパラレル実行を使用しないでください | プラグインまたはカスタム ワークフロー アクティビティ内では、マルチスレッドまたは並列スレッドはサポートされていません。 |
PreOperation
RetrieveMultiple を使用してフィルター処理した場合に、すべての種類のクエリを実行する |
すべてのアプリケーションで最適なパフォーマンスと一貫性のある結果を得るには、 RetrieveMultipleの PreOperation ステージに登録されているプラグインで使用できるすべての種類のクエリのフィルター処理を実装します。 |
| プラグイン登録にフィルター属性を含める | プラグイン登録ステップのフィルター属性を設定しない場合、プラグインはそのイベントに対して更新メッセージが発生するたびに実行されます。 |
| retrieve および RetrieveMultiple メッセージ用のプラグインの登録を制限する | 同期プラグイン ロジックを Retrieve および RetrieveMultiple メッセージ イベントに追加すると、速度が低下する可能性があります。 |
| 1 つのソリューションでプラグインを管理する | 1 つのソリューション内でプラグイン アセンブリの定義を維持します。 |
| ユーザー定義のアセンブリ開発を最適化する | パフォーマンスと保守容易性を向上させるために、個別のプラグインとカスタム ワークフロー アクティビティを 1 つのカスタム アセンブリにマージすることを検討してください。 アセンブリ サイズがサンドボックス アセンブリ サイズの制約に近い場合は、プラグインとカスタム ワークフロー アクティビティを複数のカスタム アセンブリに移動します。 |
| プラグインで外部ホストを操作するときは、KeepAlive を false に設定する |
KeepAlive プロパティを HTTP 要求ヘッダーにtrueするか、明示的に定義しないfalse設定すると、プラグインの実行時間が増加する可能性があります。 |
| プラグインで外部呼び出しをする場合のタイムアウトを設定する | 外部呼び出しがプラグイン内での応答を期待する時間の長さを制限します。 |
| プラグインおよびワークフロー活動で InvalidPluginExecutionException を使用する | プラグインまたはワークフロー アクティビティのコンテキスト内でエラーを発生させる場合は、 InvalidPluginExecutionException を使用します。 |
| プラグインで ITracingService を使用する | プラグイン内の ITracingService を使用して、コードの実行時に何が起こるかを把握します。 |
| 発信通話を行うプラグインの証明書の依存関係を確認する | コードが送信呼び出しに依存する証明書に、有効な証明書チェーンがあることを確認します。 |
| メモリ効率の高いコードを書く | 必要なプラグイン内のデータのみを取得します。 |