2018.03.20

Salesforce上のデータをマージしたい(*>□<*)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

はじめに

暦は冬 現は秋
立冬を迎え 冬の足音が近づく

皆さん こんにちは(*´▽`)ノ゙
製品開発本部 開発部の塚本です。

読書の秋 食欲の秋 スポーツの秋・・・
色々な秋を満喫したいところですが、寒くて満喫する気がおきない今日この頃です(´∀`;)
皆さん いかがお過ごしでしょうか(´‐`*?)

今回は、アダプタとSalesforceのSOAP APIを組み合わせた小ネタを紹介します。

皆さんならどうしますか?

会社Aに会社Bが吸収合併されて1つの会社になりました。
会社Bの取引先責任者を会社Aの取引先責任者にマージしたいと思います。
皆さんならどのようにしますか(´‐`*?)

「Webサービスアダプタ」+「SalesforceのSOAP API」でマージができます!

使用するSalesforceのSOAP APIのコールは、login()merge()です。
login()は、ログインサーバにログインしてクライアントセッションを開始するためのAPIコールです。
SalesforceのSOAP API login()の詳細はこちら
merge()は、同じ種別の最大3つのレコードを1つのレコードに統合するためのAPIコールです。
SalesforceのSOAP API merge()の詳細はこちら

さっそくマージ方法をみていきましょう。

マージ方法

SalesforceのSOAP APIのmerge()を使用して取引先をマージすると、マージ元に関連付けられている取引先責任者をマージ先に関連付けすることができます。
こちらを使用して「会社Bの取引先責任者を会社Aの取引先責任者にマージしたい」というご要望を実現します!

以下のデータを使用してマージ方法をみていきます。

図1 株式会社Aのデータ

図2 株式会社Bのデータ

マージを実行するためには、Salesforceにログインして「セッションID」「サーバURL」を取得する必要があります。
Salesforceへ「Webサービスアダプタ」+「SalesforceのSOAP API」でログインができます!
Salesforceアダプタを使用して「セッションID」と「サーバURL」を取得できますが「Webサービスアダプタ」+「SalesforceのSOAP API」での実行方法に注目してほしいので、あえてSalesforceアダプタは使用しません。
まずは、Salesforceにログインして「セッションID」と「サーバURL」を取得してみましょう。

■ ログイン ■

1. コントロールパネルよりグローバルリソースを設定
     - WSDLファイルは、Salesforceから取得したPartner WSDLを使用します。

図3 ログイン用グローバルリソースの設定

2. デザイナを開き、【ツールパレット】→【ネットワーク】→【Webサービス】→【Webサービス実行】
     を配置
3. 必須設定のタブに必要な情報を入力

図4 Webサービス実行の必須設定

4. 手動設定タブよりSOAPエンベロープを定義
     - 定義に必要な情報は、スクリプト変数を使用して入力しています。
     - Salesforceで許可していない環境の場合は、パスワードにセキュリティトークンを付加する必要があり
       ます。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                                          xmlns:ns0="urn:fault.partner.soap.sforce.com" 
                                          xmlns:ns1="urn:sobject.partner.soap.sforce.com" 
                                          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Body>
          <login xmlns="urn:partner.soap.sforce.com">
               <username>${UserName}</username>
               <password>${PassWord}</password>
          </login>
     </soapenv:Body>
</soapenv:Envelope>

5. 実行

以上で「セッションID」と「サーバURL」が取得できました。
それでは、マージをしてみましょう。

■ マージ ■

1. 新たにWSDLファイルをSalesforceから取得し、Soap Service Endpointを書き換え
     - 先ほど取得した「サーバURL」に書き換えます。Partner WSDLを使用します。

<!-- Soap Service Endpoint -->
<service name="SforceService">
          <documentation>Sforce SOAP API</documentation>
          <port binding="tns:SoapBinding" name="Soap">
                    <soap:address location="ServerURL"/>
          </port>
</service>

2. コントロールパネルよりマージ用グローバルリソースを設定
     - WSDLファイルは、Soap Service Endpointを書き換えたものを使用します。
     - WSDLファイル以外の設定は、ログイン用と同じです。
3. デザイナを開き、【ツールパレット】→【ネットワーク】→【Webサービス】→【Webサービス実行】
     を配置
4. 必須設定のタブに必要な情報を入力
     - 接続先は、マージ用グローバルリソースを設定します。
     - オペレーションは、mergeを設定します。
     - 上記以外の設定は、ログイン時と同じです。
5. 手動設定タブよりSOAPエンベロープを定義
     - 定義に必要な情報は、一部スクリプト変数を使用して入力しています。
     - 「MasterRecordId」は、マージ先となる取引先のレコードIDを設定します。
       今回は、株式会社Aとなります。
     - 「RecordToMergeIds」は、マージ元となる取引先のレコードIDを設定します。
       今回は、株式会社Bとなります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                                          xmlns:ns0="urn:fault.partner.soap.sforce.com" 
                                          xmlns:ns1="urn:sobject.partner.soap.sforce.com" 
                                          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Header xmlns="urn:fault.partner.soap.sforce.com">
          <SessionHeader>
               <sessionId>${SessionID}</sessionId>
          </SessionHeader>
     </soapenv:Header>
     <soapenv:Body>
          <merge xmlns="urn:partner.soap.sforce.com">
               <request>
                    <masterRecord>
                         <ns1:type>Account</ns1:type>
                         <ns1:Id>${MasterRecordId}</ns1:Id>
                    </masterRecord>
                    <recordToMergeIds>${RecordToMergeIds}</recordToMergeIds>
               </request>
          </merge>
     </soapenv:Body>
</soapenv:Envelope>

6. 実行

以上でマージができました。
作成したスクリプトは、以下のようになります。

図5 スクリプト

図6 mapperの設定

マージした結果、株式会社Bが取引先から消えて、株式会社Bに関連付けられていた取引先責任者が株式会社Aに関連付けられました!

図7 取引先一覧

図8 マージ後の株式会社Aのデータ

おわりに

いかがでしたでしょうか(´‐`*?)

Webサービスアダプタは、汎用的なアダプタですので、SalesforceのSOAP API以外とも組み合わせることができます。
ぜひ色々と組み合わせてWebサービスアダプタを使用してみてください。

(*´▽`)ノ゙

22 件

関連する記事