Excel連携 Dynamics CRM(Dynamics 365) データインポート処理の仕様に注意!?
みなさん、こんにちは。
今回は、Dynamics CRM(Dynamics 365)Excelデータインポート処理の仕様に関してハマってしまいましたので備忘録としてブログで配信したいと思います。
もし同様にハマってしまった方がいらっしゃれば、このブログを見て解決の一助になれば幸いと思います。
実現したいことと実際のギャップについて
- 実行環境
- Microsoft Dynamics 365
- Version 1612 (8.2.0.720) (DB 8.2.0.720) オンライン
- 実現したいこと
- ケース(サポート案件)レコードを新規登録する際、機械の製造番号から機械マスタの情報を自動的に紐づけて登録する
- データベースへの登録時にカスタムプラグインを動作させ、製造番号をキーに機械マスタを参照し合致する機械レコードを取得し、ケースの関連項目(Lookupフィールド)へ設定する(いわゆる、製造番号を入力すると機械マスタの情報を自動的に紐づける入力支援)
- ただし、機械の製造番号と機械マスタの情報を両方指定した場合(①)、機械の製造番号をキーに検索できた結果を優先する(指定された機械マスタの情報は最新でない可能性があるので無視する)
- 上記はフォーム画面によるレコードの登録とExcelデータインポートにも対応する
- 実際のギャップ
- ①の場合において、フォーム画面によるレコードの登録についてはプラグインが正常に動作するものの、Excelデータインポートによる登録についてはExcelで指定した機械マスタの情報が登録されてしまう。
発生事象の調査結果について
Dynamics 365はExcelデータインポート時に2つの処理を行っていることが判明しました。
1つは、ケースの属性情報(件名、ステータス、等)を登録(Create)する
2つは、登録後にケースの関連情報(Lookupフィールド)のみを更新(Update)する
今回、機械の製造番号はケースの属性情報のため1で処理され、機械マスタの情報はケースの関連情報のため2で処理されるという別々のトランザクションとして処理されていました。
そのため、登録時のカスタムプラグインで入力支援を行ったとしても、後続の更新処理でデータが上書きされてしまう事象が発生しました。
時系列
① Excelデータインポート 機械の製造番号:A 機械マスタの情報:X
② プラグイン Aをキーに機械マスタを参照して機械マスタの最新情報:Zを取得
③ ケースを登録 機械の製造番号:A 機械マスタの情報:Z
→期待している結果
④ ケースを更新 関連項目である機器マスタのみに対して情報:X(①で指定した値)へ更新
⑤ ケースのレコード状態=機械の製造番号:A 機械マスタの情報:X
→実際に発生した結果
これらはエンティティの監査ならびに変更履歴を設定しておくと、監査概要ビューにて動作の流れを把握することができるので一度確認されてはいかがでしょうか。
監査概要ビューにある通り、ケースのレコードに対して作成と更新が別々に行われていることが確認できると思います。
その他、気になること
ケースはDynamics 365の標準提供するエンティティです。今回確認できたExcelデータインポートにおいて作成と更新の2つ処理が行われるのは標準のエンティティのみでした。試しにカスタムエンティティを作成し行ってみたところ、こちらは関連項目(Lookupフィールド)を指定したとしても現時点では作成のみ行われる仕様でした。また、フォーム画面での動作も作成のみ行われることで問題ないことを確認できました。
エンティティの持つフィールドの数により処理が分けられているのか?詳しい仕様は分かっていませんが、Dynamics 365の標準エンティティにおけるExcelデータインポート処理仕様に今後注視していく必要がありそうです。またハマることがあればブログで配信したいと思います笑。
※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。