バックグラウンド
CRM 2011 (および CRM Online) のワークフローとダイアログ プロセスにより、電子メールが有効なレコード (連絡先、アカウント、ユーザーなど) に電子メールを送信できます。メールが有効なレコードにメール アドレスがない場合、プロセスは例外で失敗します (ワークフローは待機状態のままになり、ダイアログは例外をスローします)。
未処理の例外: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: パーティーまたはパーティーでオブジェクト アドレスが見つかりません電子メール不可としてマークされています
私のシナリオ
多くのシナリオでは、電子メールを送信できなかったためにプロセス全体を失敗させるのは大変なことです (同様に、この動作が望ましいシナリオもたくさんあることを認めます)。例として、大規模なワークフローの一部として多くのレコードを作成および更新していて、プロセスの最後に単純な礼儀正しい確認メールを送信したいだけの場合、この最終ステップが原因でプロセス全体が失敗することは望ましくありません。完了できませんでした。ワークフローに簡単な条件文を追加して、メール送信ステップの前にアドレスの存在を確認できます。これは機能しますが、私 (より具体的にはユーザー)は、作成されたすべての電子メール ステップでこれを行うことを覚えておく必要があります。
理論上の解決策
理想的には、電子メール オブジェクトを入力として受け入れる子ワークフローを用意し、電子メールを送信する前に、送信者と受信者が存在することを確認するために少しチェックを実行します。データが欠落している場合は、サブプロセスを暗黙のうちに失敗させるか、元のユーザーに電子メールを送信するか、エラー レコードを書き込むなどの別のロジックを呼び出すことができます。
ただし、以下を考えると....
- カスタム ワークフロー アセンブリは、CRM Online ではまだサポートされていません
- ワークフローは着信パラメーターを受け入れません
- ダイアログでさえ、入力パラメーターとしての「メール オブジェクト」や、入力パラメーターとしての値の配列 (受信者など) をサポートしていません。
- 子ダイアログは、完了後に制御を呼び出し元に戻さない
...私は、ユーザーが作成するすべてのワークフローまたはダイアログにハードコーディングされたチェックを入れることを覚えておく必要を効果的に回避できるパターンまたはソリューションを思いつくのに苦労しています (受信者の電子メールの存在を確認するため)。住所)。
理想的には、電子メール オブジェクト (またはそのシリアル化またはその他の表現) を取得し、可能であればチェックを行い、電子メールを送信する汎用の子ワークフローのようなものが必要です。
あなたに
カスタム ソリューションを設計しようとしましたが、すぐに設計しすぎてしまいます (システム エンティティのプラグインなど)。そうでなければ、ユーザーに責任を負わせることを避ける方法がわかりません。他の誰かが同様の要件に遭遇し、さらに良い解決策を考案しましたか?