カスタム関数とスケジュールを使用したレコードの重複排除
お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の
英語版を参照してください。
概要 :
Data Migration Wizardを使用すると、Zoho CRMへデータを移行できます。場合によっては、Zoho CRM内にすでに手動で作成済みのデータが存在し、移行しようとしているデータと類似または同一の場合があります。このような場合、Data Migrationによって新しくデータが作成され、ビジネスにとって望ましくないことがあります。
パートナーが、クライアントに対して段階的な移行を実施したいと考えており、複数のフェーズに分けて連絡先および商談をインポートします。各フェーズには同じ連絡先が含まれますが、異なる商談のセットが関連付けられています。また、各時点で連絡先には移行元の有効な環境から取得済みの更新が反映されています。
要件 :
連絡先タブには、各段階的移行ごとに同じ連絡先が異なる商談セットとともに取り込まれるため、重複が発生します。重複した連絡先をデータから除去し、各移行で関連付けられた商談との紐付けを維持する必要があります。連絡先の一意の識別子はメール項目であり、これを利用して重複を特定します。
DeduplicationまたはFind & Merge機能を使ってデータを統合する作業は、重複データの量が多い場合、手作業が多く非常に手間のかかるタスクとなります。
解決策 :
カスタム関数を使用して、カスタムビュー内の連絡先に対し、MergeデータAPIを用いて連絡先データを統合します。連絡先を検索し、重複を抽出し、カスタムビュー内の連絡先に対してマージ処理を実施します。
期待される結果は、一意の識別子を用いて連絡先が1件に統合され、データ移行時に関連付けられた商談が、統合された連絡先に紐付けられることです。
操作プラン :
-
新たに移行された連絡先は、カスタムチェックボックス用の列を追加することでマスター データとして扱われます。このカスタムチェックボックスは、新たに移行されたデータについてのみ「真」になります。
-
カスタムチェックボックスを使い、連絡先タブ内でマスター連絡先のみを抽出するカスタムビューを作成します。
-
2時間ごとにカスタム関数を実行するスケジュール処理を作成します。
主なポイント:
- APIで利用可能なクレジットを確認し、制限内で実行を管理してください。APIのクレジットが枯渇すると処理が失敗する可能性があります。
- カスタムCheckbox項目を更新し、マージ完了後に連絡先がカスタムリスト表示から除外されるように設定してください。
- 実行が失敗した場合のフェイルセーフとしてメールを送信し、失敗した連絡先IDをコピーしてください。
- 更新が法人稼働時間中に行われないよう、スケジュール実行は法人稼働時間外に設定してください。
設定 / Configuration :
スケジュールを作成し、法人稼働時間後の金曜日に2時間ごとに実行されるよう設定します。以下のように、カスタム関数スクリプトを関連付けて作成してください。
レイアウトエディタでカスタムCheckbox項目を作成:
カスタムリスト表示を作成:
カスタム関数スクリプト:
- 無効 schedule.mergeContacts()
- {
- listrec = invokeurl
- [
- url :'https://www.zohoapis.com/crm/v7/連絡先?cvid=638969*******7354017&page=1&per_page=100'
- 種類 :取得する
- connection:'zohocrm'
- ];
- // カスタムリストからmasterデータを取得し、表示する
- master_reclist = listrec.取得する('data');
- for each master_rec in master_reclist
- {
- uniqueemail = master_rec.取得する('メール');
- uniqueemailid = master_rec.取得する('id');
- info 'masterデータID : ' + uniqueemailid + ' uniqueメール : ' + uniqueemail;
- searchrec = invokeurl
- [
- url :'https://www.zohoapis.com/crm/v7/連絡先/検索する?メール=' + uniqueemail
- 種類 :取得する
- connection:'zohocrm'
- ];
- // masterデータのメールアドレスを使ってchildデータを検索する
- totalrec = searchrec.取得する('data');
- totalsize = totalrec.size();
- if(totalsize > 0)
- {
- for each elem in totalrec
- {
- recid = elem.取得する('id');
- info uniqueemailid;
- if(recid != uniqueemailid)
- {
- info '実行する for - RecId : ' + recid + ' & メール : ' + uniqueemail;
- fieldList = Map();
- fieldList.put('api_name','電話番号');
- // fieldList は上書きが必要な新規データからの値です
- overwritefields = List();
- overwritefields.追加する(fieldList);
- master_idslist = Map();
- master_idslist.put('id',recid);
- master_idslist.put('_fields',overwritefields);
- master_rec_det = List();
- master_rec_det.追加する(master_idslist);
- m = Map();
- // m.put('master_record_fields',master_rec_det);
- m.put('data',master_rec_det);
- dat = List();
- dat.追加する(m);
- mergedata = Map();
- mergedata.put('merge',dat);
- mergedataJson = mergedata.ToString();
- // 情報 'MergeData : ' + mergedataJson;
- try
- {
- mergerec = invokeurl
- [
- url :'https://www.zohoapis.com/crm/v7/連絡先/' + uniqueemailid + '/処理/merge'
- 種類 :POST
- パラメーター:mergedataJson
- connection:'zohocrm'
- ];
- info mergerec;
- // データのマージおよびレスポンス
- fieldupdmp.put('customCheckBox','');
- fieldupdmp = Map();
- updrec = Zoho.crm.updateRecord('連絡先',uniqueemailid,fieldupdmp);
- // 最終的にカスタムCheckboxを更新し、連絡先がカスタムリスト表示から利用不可となるようにします。
- }
- catch (e)
- {
- ステータス = mergerec.取得する('コード');
- info 'ステータス' + ステータス + ' 理由 :' + mergerec;
- if(ステータス != '完了')
- {
- emailmessage = '
実行失敗 Master Id : ' + uniqueemailid + ' & Child Id : ' + recid + '---- ステータス : ' + ステータス + '
' + e;
- sub = 'マイグレーション失敗ID - フェイルセーフ';
- sendmail
- [
- 開始:Zoho.adminuserid
- to :'admin1@xyz.com,admin2@xyz.com,admin3@xyz.com'
- 件名 :sub
- メッセージ :emailmessage
- ]
- // try-catch構文で失敗したデータIDのメールを送信します。
- }
- }
- }
- }
- }
- }
- }
カスタム関数スクリプトの修正点:
-
スコープ「ZohoCRM.タブ.連絡先.すべて」でカスタムコネクション「zohocrm」を作成する
-
Zoho CRM組織でCustomCheckboxの正しいAPI名を使用する
-
折れ線グラフ いいえ 5:正しいカスタムリスト表示IDをURLから取得して使用する
期待される結果:
- マージ成功:
{'merge':[{'コード':'完了','詳細':{'id':'5434640000015154110'},'メッセージ':'データは正常にマージされました','ステータス':'完了'}]}
上記のメッセージは、連絡先データのマージが成功した際にログに出力されます。
- マスター連絡先データのメールと一致する複製連絡先は見つかりませんでした:
{'コード':'INVALID_DATA','詳細':{'resource_path_index':1},'メッセージ':'マスターデータが次の値と等しくない found','ステータス':'エラー'}
上記のメッセージは、マスター連絡先データと同じメールアドレスを持つ連絡先が存在しない場合にログに出力されます。
- 失敗したメール:
- CustomCheckboxが無効から真に更新されました

- できること 設定 > Developer Hub > Functions > My Functions > Schedules > カスタム関数を選択 > Logs > 対象の期間を選択 > 実行インスタンスをクリック > 出力されたログや発生したエラーの確認も可能です。

メモ:こちらは実行ログを示すサンプルであり、スケジュール実行ではなく単体で実行したものです。
完了:
すべての子連絡先がマージされた後、CustomCheckbox項目を削除し、スケジュール処理を停止できます。APIクレジットの使用状況を緩和し、マージされた連絡先データを確認してください。