Dynamics CRM 代替キーとUPSERT(API) のススメ 前編
みなさん、こんにちは。
今日は技術ブログ書きますよ~(笑)書けるか心配してませんか?私自身が一番心配してますw
最近技術的なブログが減って悲しいなぁと思ってたのでちょうどいいかなぁと思ったりもしてます(笑)
タイトルにもある通り、Dynamics CRM 2015 で採用された代替キーとUPSERT(API)を使用してどんだけ楽になるかというのを書いて行こうと思います。前編では従来のプログラムがどれだけ手がかかっていたのかを理解して頂けると大成功です(笑)
前・後編では10件の取引先企業と20件の取引先担当者をSDKを使用して作成する方法をやっていきまぁ~す♪
(SDKを触るのが久しぶりで緊張してまぁすwww)
今回の方法はDynamics CRM Online、Dynamics CRM 2016でも使用できます。
※ 代替キーとUPSERT(API)については後編でご説明します。
CREATEを使用したデータ作成
通常は ExecuteMultiple というものを使って一括投入するのですが、今回は分かりやすくするために1件ずつ処理します。
ここで気をつけなければならないのは[取引先担当者]エンティティには[会社]フィールドという[取引先企業]を参照する検索フィールドがあるので、先に[取引先企業]のレコードを作成する必要があります。作成順序としては[取引先企業]を作成してから[取引先担当者]を作成します。
ここでめんどくさいのがGUIDです。Dynamics CRM はレコードをGUIDを主キーとして管理されており、検索フィールドを設定するには、このGUIDを使用する必要があります。それでは実際に作っていきましょ~♪
サンプルコードの作成
- [取引先企業]のデータを作成(ループ変数があるのでややこしいかも・・・)
Entity account = new Entity("account"); // 取引先企業名 account["name"] = string.Format("Account{0:00}", i + 1); // 電話 account["telephone1"] = string.Format("01-2345-67{0:00}", i+1); // メールアドレス account["emailaddress1"] = string.Format("some@account{0:00}.com", i+1); // 住所1:都道府県 account["address1_stateorprovince"] = "東京都"; // 住所1:市区町村 account["address1_city"] = "調布市"; // 取引先企業作成 Guid accountid = service.Create(account);
- 作成した[取引先企業]レコードのGUID を使用して[取引先担当者]の[会社]に設定するEntityReferenceを作成
// 取引先企業の参照のインスタンス作成 EntityReference accountRef = new EntityReference(account.LogicalName, accountid);
- [取引先担当者]のデータ作成(ここでもループ変数があるからややこしいかも・・・)
Entity contact = new Entity("contact"); // 姓 contact["lastname"] = string.Format(account["name"] + "-Contact{0:00}", j+1); // 名 contact["firstname"] = "John"; // 電子メール contact["emailaddress1"] = string.Format("contact{1:00}@account{0:00}.com", i + 1, j + 1); // 勤務先電話番号 contact["telephone1"] = string.Format("01-23{0:00}-67{1:00}", i + 1, j + 1); // 会社 contact["parentcustomerid"] = accountRef; // 取引先担当者作成 service.Create(contact);
このように作成した[取引先企業]のGUIDがないと[取引先担当者]の[会社]を設定できません。無駄のないようにデータを作成しようとすると、ひとつの[取引先企業]を作成して、そのあと[取引先担当者]を作るプログラムが必要となるわけです。(ね?めんどくさいでしょ?笑)w
どんな問題がある?
登録データの元となるデータが基幹システムやその他システムからのデータである場合に、すでに登録済みCRMデータのGUIDがないとDynamics CRMの最大のメリットである関連付けが行えないとなるのです。。。(大変だぁ~!ワァワァ)
また、実際にデータの連携を行う際はデータの登録と更新があると思います。更新する際に必ずGUIDが必要となるので、先に登録済みのデータを抽出する必要があり、パフォーマンス劣化の大きな要因となります。
そして、複数件を一度に処理できる ExecuteMultiple を使用するのにすでに登録済みでないと検索フィールドを設定できないので、必ずエンティティごとの処理が必要となります。
では、どうしたら?
ここで出てくるのが代替キーとUpsert(API)となるのです。
(やっとタイトルの文言出てきたw)
代替キーでキーを作成し、Upsertで代替キーを利用することで、上記の問題が解決します。(ヤッタァ♪)
次回は上記をサンプルを用いてご説明します。乞うご期待♪♪♪
※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。