とんたんの技術メモ

注)ただのメモです。

トレジャーデータの取引先企業のデータをセールスフォースに自動連携した作業記録

奉行→RSDから流れてきた、トレジャーデータの取引先企業のデータをセールスフォースに自動連携するという作業記録。

営業サイドあるあるで、元データがめちゃくちゃになってて、おかしなデータの整理整頓に苦労した…。

(注)IDは適当な値に書き換えています。

1. TDのConnectionsでsales_force_connectionを設定して、TD上にSFの取引先企業のデータを保存。

毎日00:00に設定

2. TD取引先データとSF取引先データを付け合わせるSQLを作成

  • 企業と店舗の親子関係を成立させるために、企業テーブルと、店舗テーブルを先に作成して連結
  • TDにある住所が1行になっているので、郵政から取り込んだ全国の住所データを連結して、住所を分割
  • 一部企業のみ、bill_cd(奉行コード)と企業名を変更する

3. Query作成画面右上にあるOutput resultsでsales_force_connectionを設定してクエリーを実行

Object = SFテーブルID Mode = update Keys = JOINに使うkey(今回の場合、bill_cd) その他はそのまま

WITH companys AS (
    SELECT t1.tokcd bugyoCode, t2.id sfId
    FROM rsd_salesdb_mandi.tok_m t1
    LEFT JOIN rup_datamart.sf_account t2 ON t2.bugyocode__c = t1.tokcd
    WHERE t1.tok_tenmei = '' AND t1.tok_syamei NOT LIKE '%無効%'
)
, shops AS (
    SELECT
        t1.tokcd bugyoCode, 
        CASE
            WHEN t1.tok_syamei = '株式会社A' THEN 'D0000'
            WHEN t1.tok_syamei = '株式会社B' THEN 'D0001'
            ELSE t1.bill_cd
        END AS seikyuCode,
        CASE
            WHEN t1.tok_syamei = '株式会社C' THEN '株式会社CC'
            WHEN t1.tok_syamei = '株式会社D' THEN '株式会社DD'
            ELSE t1.tok_syamei
        END AS companyName,
        t1.tok_tenmei shopName, t1.tok_zip zip, t1.tok_add1 address, t1.tok_add2 builName, t1.tok_tel tel, t1.tok_fax fax,
        t2.id sfId, t2.parentid sfParentId,
        t3.col_6 state, t3.col_7 city,
        replace(t1.tok_add1, concat(t3.col_6, t3.col_7), '') street
    FROM rsd_salesdb_mandi.tok_m t1
    LEFT JOIN rup_datamart.sf_account t2 ON t2.bugyocode__c = t1.tokcd
    LEFT JOIN rup_datamart.zipcode_master t3 ON CAST(t3.col_2 AS VARCHAR) = replace(t1.tok_zip, '-', '') AND t1.tok_add1 LIKE concat(t3.col_6, t3.col_7, '%')
    WHERE
        t1.tokcd NOT IN ('00000000','00000000','00000000','00000000','00000000') -- 連携したくないリスト
        AND t1.tokcd NOT IN ('00000000','00000000') -- 仕入先除外リスト
        AND t1.tok_syamei NOT LIKE '%無効%'
)
, owner AS (
    SELECT t1.tokcd bugyoCode, t2.id sfOwnerId
    FROM rsd_salesdb_mandi.tok_m t1
    LEFT JOIN rup_datamart.sf_user t2 ON t1.tanto_cd = t2.code__c
    WHERE t1.tanto_cd != '' AND t2.isactive = 1
)
, tanto AS (
    SELECT t2.tokcd bugyoCode, t1.id sfTantoId
    FROM rup_datamart.sf_user t1
    LEFT JOIN rsd_salesdb_mandi.tok_m_sub t2 ON t2.rounder_id = t1.code__c
    WHERE t2.rounder_id != ''
)
SELECT
--  distinct shops.sfId id,
    distinct shops.bugyoCode BugyoCode__c,
    CASE WHEN shops.shopName = '' THEN shops.companyName ELSE concat(shops.companyName, ' ', shops.shopName) END AS Name,
    CASE WHEN shops.shopName = '' THEN 'sf_id' ELSE 'sf_id' END AS RecordTypeId, -- 本店, 支店
    CASE WHEN shops.shopName = '' THEN '' ELSE companys.sfId END AS ParentId,
    shops.tel Phone,
    shops.fax Fax,
    '日本' BillingCountry,
    shops.zip BillingPostalCode,
    shops.state BillingState,
    shops.city BillingCity,
    shops.street BillingStreet,
    CASE WHEN owner.sfOwnerId IS NULL THEN 'sf_id' ELSE owner.sfOwnerId END AS OwnerId,
    tanto.sfTantoId SA__c
FROM shops
LEFT JOIN companys ON companys.bugyoCode = shops.seikyuCode
LEFT JOIN owner ON owner.bugyoCode = shops.bugyoCode
LEFT JOIN tanto ON tanto.bugyoCode = shops.bugyoCode

セールスフォースって高い割に使いにくいな…

KINTONの方が全然いい