エンジニアリングチームの杉本です。
F-RevoCRMの重複マージ処理についてご紹介します。
重複マージとは
F-RevoCRMには重複しているデータをマージする機能が備わっています。
重複マージの手順は以下となります。
一覧表示画面の操作メニューにて「重複の検出」をクリックするとマージ条件を設定する画面が表示されます。
「選択可能なフィールド」に任意の項目を設定することで、マージする条件を設定可能です。
設定した条件に従い、重複するデータの一覧が表示されます。
マージ選択にチェックを入れマージボタンを押下します。
マージするデータの中で、値を保持する方にチェックを入れ画面下にあるマージボタンを押下することでデータがマージされます。
関連情報をマージする際の処理について
関連情報をマージする際の処理はモジュール名.phpのtransferRelatedRecords関数内に記載されています。
※以下はAccounts.php内のコードです。
function transferRelatedRecords($module, $transferEntityIds, $entityId) {
global $adb,$log;
$log->debug("Entering function transferRelatedRecords ($module, $transferEntityIds, $entityId)");
//モジュール名⇒テーブル名
$rel_table_arr = Array(
"Contacts"=>"vtiger_contactdetails",
"Potentials"=>"vtiger_potential",
"Quotes"=>"vtiger_quotes",
"SalesOrder"=>"vtiger_salesorder",
"Invoice"=>"vtiger_invoice",
"Activities"=>"vtiger_seactivityrel",
"Documents"=>"vtiger_senotesrel",
"Attachments"=>"vtiger_seattachmentsrel",
"HelpDesk"=>"vtiger_troubletickets",
"Products"=>"vtiger_seproductsrel",
"ServiceContracts"=>"vtiger_servicecontracts",
"Campaigns"=>"vtiger_campaignaccountrel",
"Assets"=>"vtiger_assets",
"Project"=>"vtiger_project"
);
//テーブル名⇒table_index
$tbl_field_arr = Array(
"vtiger_contactdetails"=>"contactid",
"vtiger_potential"=>"potentialid",
"vtiger_quotes"=>"quoteid",
"vtiger_salesorder"=>"salesorderid",
"vtiger_invoice"=>"invoiceid",
"vtiger_seactivityrel"=>"activityid",
"vtiger_senotesrel"=>"notesid",
"vtiger_seattachmentsrel"=>"attachmentsid",
"vtiger_troubletickets"=>"ticketid",
"vtiger_seproductsrel"=>"productid",
"vtiger_servicecontracts"=>"servicecontractsid",
"vtiger_campaignaccountrel"=>"campaignid",
"vtiger_assets"=>"assetsid",
"vtiger_project"=>"projectid",
"vtiger_payments"=>"paymentsid"
);
//テーブル名⇒関連項目
$entity_tbl_field_arr = Array(
"vtiger_contactdetails"=>"accountid",
"vtiger_potential"=>"related_to",
"vtiger_quotes"=>"accountid",
"vtiger_salesorder"=>"accountid",
"vtiger_invoice"=>"accountid",
"vtiger_seactivityrel"=>"crmid",
"vtiger_senotesrel"=>"crmid",
"vtiger_seattachmentsrel"=>"crmid",
"vtiger_troubletickets"=>"parent_id",
"vtiger_seproductsrel"=>"crmid",
"vtiger_servicecontracts"=>"sc_related_to",
"vtiger_campaignaccountrel"=>"accountid",
"vtiger_assets"=>"account",
"vtiger_project"=>"linktoaccountscontacts",
"vtiger_payments"=>"relatedorganization"
);
foreach ($transferEntityIds as $transferId) {
foreach ($rel_table_arr as $rel_module=>$rel_table) {
$id_field = $tbl_field_arr[$rel_table];
$entity_id_field = $entity_tbl_field_arr[$rel_table];
// IN clause to avoid duplicate entries
$sel_result = $adb->pquery(
"select $id_field from $rel_table where $entity_id_field=? " .
" and $id_field not in (select $id_field from $rel_table where $entity_id_field=?)",
array($transferId,$entityId)
);
$res_cnt = $adb->num_rows($sel_result);
if ($res_cnt > 0) {
for ($i=0;$i<$res_cnt;$i++) {
$id_field_value = $adb->query_result($sel_result, $i, $id_field);
$adb->pquery(
"update $rel_table set $entity_id_field=? where $entity_id_field=? and $id_field=?",
array($entityId,$transferId,$id_field_value)
);
}
}
}
}
parent::transferRelatedRecords($module, $transferEntityIds, $entityId);
$log->debug("Exiting transferRelatedRecords...");
}
以下の変数にマージに必要な情報が記載されています。
$rel_table_arr・・・ モジュール名⇒テーブル名
$tbl_field_arr ・・・ テーブル名⇒table_index
$entity_tbl_field_arr ・・・ テーブル名⇒関連項目
こちらの変数をもとに重複マージ処理時に関連項目のマージを行います。
カスタマイズ時の注意点
カスタマイズにてモジュールを追加、又は関連項目を追加した場合は、transferRelatedRecords関数の実装・修正が必要となります。
こちらの関数を適切に実装していない場合は、重複マージ時に関連情報がマージされませんのでご注意ください。
重複マージは便利な機能ですので、是非活用してみてください。
それでは次回もまたThinkingReedエンジニアリングBlogをよろしくおねがいします!!