Salesforce Composite Connector 2.7 - Mule 4

サポートカテゴリ: 選択

Salesforce Composite 用 Anypoint Connector では、Salesforce Batch API および sObject Tree API を操作できます。このコネクタでは、下位要求を準備し、1 つのバッチで実行して、結果を解析するための便利なメソッドが公開されています。

また、Salesforce Composite Connector を使用すると、バッチ操作とは別の ​createSobjectTree​ 操作を使用して SObject ツリーを作成することもできます。

このコネクタでは、実行のためおよび以下を行うための DataSense が提供されています。

  • 下位要求を準備して応答を解析する

  • SObject ツリーを作成する

互換性と解決された問題に関する情報は、「Salesforce Composite Connector リリースノート」を参照してください。

前提条件

このコネクタを使用するには、以下に精通している必要があります。

  • Salesforce Composite API

  • Anypoint Connector

  • Mule Runtime Engine (Mule)

  • Mule フローの要素とグローバル要素

  • Anypoint Studio (Studio) を使用した Mule アプリケーションの作成

アプリケーションを作成する前に、以下が必要です。

  • Salesforce Composite の対象リソースにアクセスするためのログイン情報

  • Anypoint Studio バージョン 7.0 以降

POM ファイル情報

<dependency>
  <groupId>com.mulesoft.connectors</groupId>
  <artifactId>mule-salesforce-composite-connector</artifactId>
  <version>x.x.x</version>
  <classifier>mule-plugin</classifier>
</dependency>

コネクタの ​version​ が、使用しているバージョンと一致していることを確認します。

最新の ​pom.xml​ ファイル情報を取得する手順は、次のとおりです。

  1. Anypoint Exchange​ に移動します。

  2. Exchange で、​[Login (ログイン)]​ をクリックし、Anypoint Platform のユーザー名とパスワードを指定します。

  3. Exchange で、コネクタ名を検索します。

  4. [Dependency Snippets (連動関係スニペット)]​ をクリックします。

Design Center での接続

  1. HTTP リスナートリガーやスケジューラートリガーなどのトリガーをクリックします。

  2. コネクタ用に省略可能なグローバル要素を作成するには、[Reusable Configurations (再利用可能な設定)] をクリックします。使用できるのは、OAuth ユーザー名とパスワード認証のみです。

    OAuth ユーザー名とパスワード認証を選択する
  3. プラス記号を選択して、コンポーネントを追加します。

  4. コンポーネントとしてコネクタを選択します。

    コンポーネントとしてコネクタ
  5. Create SObject Tree 操作用に次の項目を設定します。

    • SObject Root Type (sObject ルート種別)
      作成するツリーのルートの種別。

    • SObject Tree (sObject ツリー)
      作成するツリーの構造全体。

      Create SObject Tree 操作

必須パラメーター

OAuth ユーザー名とパスワードの設定では、次のパラメーターが必要です。

  • Consumer Key (コンシューマーキー)
    Salesforce 接続アプリケーションのコンシューマーキー。

  • Consumer Secret (コンシューマーシークレット)
    Salesforce にアクセスするコネクタのコンシューマーシークレット。

  • Username (ユーザー名)
    Salesforce ユーザー名。

  • Password (パスワード)
    対応するパスワード。

  • Security Token (セキュリティトークン)
    対応するセキュリティトークン。

    デザインセンター基本認証

Studio でコネクタに追加する

  1. Studio で Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューで、​[(X) Search in Exchange ((X) Exchange 内を検索)]​ をクリックします。

  3. [Add Modules to Project (モジュールをプロジェクトに追加)]​ で、検索項目に「​composite​」と入力します。

  4. [Available modules (使用可能なモジュール)]​ で、このコネクタの名前をクリックします。

  5. [Add (追加)]​ をクリックします。

  6. [Finish (完了)]​ をクリックします。

Studio の更新がある場合、右下隅にメッセージが表示されます。メッセージをクリックすると、更新をインストールできます。

Studio でのコネクタのグローバル要素の設定

コネクタを設定する場合、アプリケーション内のそのコネクタのすべてのインスタンスで使用できるグローバル要素を設定することをお勧めします。グローバル要素を設定するには、コネクタが対象の Salesforce Composite システムにアクセスするために必要な認証ログイン情報を指定する必要があります。Salesforce Composite Connector では、OAuth のユーザー名とパスワード、OAuth 2.0、OAuth JWT、および OAuth SAML 認証方式がサポートされます。

  1. コネクタの操作を Studio キャンバスにドラッグします。

  2. 操作の設定画面で、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックし、グローバル要素設定項目にアクセスします。

  3. [General (一般)]​ タブの ​[Connection (接続)]​ で、設定する認証方式を選択します。

  4. [Advanced (詳細)]​ タブで、必要に応じて再接続戦略を含む再接続情報を指定します。

  5. [Test Connection (接続をテスト)]​ をクリックして、Mule が指定されたサーバーに接続できることを確認します。

  6. [OK]​ をクリックします。

使用可能な接続種別の設定方法についての詳細は、​「Salesforce Composite リファレンス」​を参照してください。

OAuth のユーザー名とパスワード

[Global Element Properties (グローバル要素のプロパティ)]​ 画面の ​[General (一般)]​ タブで次の情報を入力し、基本認証を設定します。

  • Consumer Key (コンシューマーキー)
    Salesforce 接続アプリケーションのコンシューマーキー。

  • Consumer Secret (コンシューマーシークレット)
    Salesforce にアクセスするコネクタのコンシューマーシークレット。

  • Username (ユーザー名)
    Salesforce ユーザー名。

  • Password (パスワード)
    対応するパスワード。

  • Security Token (セキュリティトークン)
    対応するセキュリティトークン。

    Studio 基本認証

Studio の例

  • Listener(HTTP)
    HTTP 要求からデータを受け取ります。

  • Transform Message
    HTTP 入力を適宜トランスフォームします。

  • Salesforce Composite Connector
    Salesforce に接続し、Create SObject Tree 操作を実行します。

  • Transform Message
    Create SObject Tree 操作の結果を JSON 形式で出力します。

    Studio のユースケース

Studio の例の XML

次の XML コードを Anypoint Studio に貼り付けて、前のセクションで説明したフローを試してください。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:salesforce-composite="http://www.mulesoft.org/schema/mule/salesforce-composite"
xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core"
   xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
   http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/salesforce-composite
http://www.mulesoft.org/schema/mule/salesforce-composite/current/mule-salesforce-composite.xsd">
	<configuration-properties file="mule-app.properties"/>
	<http:listener-config name="HTTP_Listener_config"
   doc:name="HTTP Listener config">
		<http:listener-connection host="localhost" port="8081" />
	</http:listener-config>
	<salesforce-composite:composite-config name="Salesforce_Composite_Salesforce_Composite"
   doc:name="Salesforce Composite Salesforce Composite">
		<salesforce-composite:oauth-user-pass-connection
      consumerKey="${consumerKey}"
      consumerSecret="${consumerSecret}"
      username="${username}"
      password="${password}"
      securityToken="${securityToken}"
      tokenEndpoint="${tokenEndpoint}" />
	</salesforce-composite:composite-config>
	<flow name="salesforce-composite-create-sobject-trees">
		<http:listener doc:name="Listener"
      path="/createSObjectTree"
      config-ref="HTTP_Listener_config"/>
		<ee:transform doc:name="Transform HTTP input for Create SObject Tree">
			<ee:message>
				<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
payload.records map ((record , indexOfRecord) -> {
	"attributes": {
		"type": record.attributes.objectType,
		"referenceId": record.attributes.referenceId
	},
	"Name": record.Name,
	"Phone": record.Phone,
	"Website": record.Website,
	"NumberOfEmployees": record.NumberOfEmployees as Number,
	("ChildAccounts": {
		"records": record.ChildAccounts.records map ((record01, indexOfRecord01) -> {
			"attributes": {
				"type": record01.attributes.objectType,
				"referenceId": record01.attributes.referenceId
			},
			"Name": record01.Name,
			"Phone": record01.Phone,
			"Website": record01.Website,
			"NumberOfEmployees": record01.NumberOfEmployees as Number
		})
	}),
	"Contacts": {
		"records": record.Contacts.records map ((record01, indexOfRecord01) -> {
			"attributes": {
				"type": record01.attributes.objectType,
				"referenceId": record01.attributes.referenceId
			},
			"LastName": record01.LastName,
			"Email": record01.Email,
			"Title": record01.Title
		})
	}
})
]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce-composite:create-sobject-tree
      doc:name="Create SObject tree"
      config-ref="Salesforce_Composite_Salesforce_Composite"
      type="Account"/>
		<ee:transform doc:name="Transform Message">
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
</mule>

Studio の例の HTTP 入力

前の Studio の例の HTTP 入力の例は次のとおりです。

{
   "records":[
      {
         "ChildAccounts":{
            "records":[
               {
                  "Phone":"4321098765",
                  "Website":"www.salesforce.com",
                  "attributes":{
                     "objectType":"Account",
                     "referenceId":"ref5"
                  },
                  "NumberOfEmployees":"10",
                  "Name":"ChildAccount1"
               }
            ]
         },
         "Contacts":{
            "records":[
               {
                  "Email":"sample@salesforce.com",
                  "Title":"President",
                  "attributes":{
                     "objectType":"Contact",
                     "referenceId":"ref6"
                  },
                  "LastName":"Jones"
               }
            ]
         },
         "Phone":"9876543210",
         "Website":"www.salesforce.com",
         "attributes":{
            "objectType":"Account",
            "referenceId":"ref4"
         },
         "NumberOfEmployees":"101",
         "Name":"CreateSobjectTreeAccount2"
      },
      {
         "Contacts":{
            "records":[
               {
                  "Email":"sample@salesforce.com",
                  "Title":"President",
                  "attributes":{
                     "objectType":"Contact",
                     "referenceId":"ref2"
                  },
                  "LastName":"Smith"
               },
               {
                  "Email":"sample@salesforce.com",
                  "Title":"Vice President",
                  "attributes":{
                     "objectType":"Contact",
                     "referenceId":"ref3"
                  },
                  "LastName":"Evans"
               }
            ]
         },
         "Phone":"1234567890",
         "Website":"www.salesforce.com",
         "attributes":{
            "objectType":"Account",
            "referenceId":"ref1"
         },
         "NumberOfEmployees":"100",
         "Name":"CreateSobjectTreeAccount1"
      }
   ]
}

Pre-Query の例

この例では、照会するオブジェクトのメタデータを提供し、このメタデータが含まれる 2 つの下位要求を生成して、下位要求を実行します。次のスクリーンショットは、Pre-Query の例のフローを示しています。

Studio の Pre-Query フロー
Figure 1. この例のフローには、HTTP Listener コンポーネント、Transform コンポーネント、複数の Salesfore Composite 操作が含まれます。

HTTP リスナーを追加してフローの作成を開始する

HTTP Listener​ は、​executeFlow​ パスでイベントを検出したときにフローを開始します。

  1. Studio で新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ で​「HTTP」​を検索し、​Listener​ 操作を選択します。

  3. Listener​ 操作をキャンバスにドラッグします。

  4. [Listener] プロパティウィンドウで、​[Path (パス)]​ 項目を ​/executeFlow​ に設定します。

最初の [Transform Message] コンポーネントを追加する

この ​Transform Message​ コンポーネントにより、作成するオブジェクトの名前が設定され、その名前が ​Pre create​ 操作に渡されます。

  1. [Mule Palette (Mule パレット)]​ ビューで、​「Transform Message」​を検索します。

  2. Transform Message​ コンポーネントをキャンバスの ​[Listener]​ の右にドラッグします。

  3. 名前 ​MyNewAccount​ を入力します。

    %dw 2.0
    %output application/json
    ---
    {
       Name: "MyNewAccount"
    }

Pre Create 操作を追加する

Pre create​ 操作により、​NewAccount​ という名前のオブジェクトを作成するためのメタデータが提供されます。 executeCompositeBatch​ 操作の下位要求が生成されます。

  1. [Mule Palette (Mule パレット)]​ で​「Salesforce」​を検索し、​Salesforce Composite Pre create​ 操作を選択します。

  2. Pre create​ 操作を ​[Transform Message]​ の右にドラッグします。

  3. [Connector configuration (コネクタ設定)]​ 項目の右にある緑のプラスアイコン (​+​) をクリックし、Salesforce Composite グローバル要素設定項目にアクセスします。

  4. 次の変数を使用して項目を設定します。

    Salesforce Composite Connector のグローバル要素の設定
    Figure 2. Salesforce Composite Connector の再利用可能なグローバル要素を作成するために、[General (一般)] セクションを設定します。
  5. [Pre create] プロパティウィンドウで、​[Type (種別)]​ 項目に ​Account​ を入力します。

  6. プロパティファイル ​src/main/mule/mule-app.properties​ で、グローバル要素の変数の値を宣言して入力します。

2 つ目の [Transform Message] コンポーネントを追加する

この ​Transform Message​ コンポーネントにより、​ID​ 項目と ​Type​ 項目の値が設定され、これらの値が ​Pre query​ 操作に渡されます。

  1. 2 つ目の ​[Transform Message]​ コンポーネントを ​[Pre create]​ の右にドラッグします。

  2. 次の名前-値ペアを入力します。

    %dw 2.0
    %output application/json
    ---
    {
    "Id": payload.Id,
    "Fields" : ["Id", "Name"],
    "Type": "Account"
    }

Pre Query 操作を追加する

Pre query​ 操作により、照会するオブジェクトのメタデータが提供されます。​Execute composite batch​ 操作の下位要求が生成されます。

  1. Salesforce Composite の ​Pre query​ 操作を 2 つ目の ​[Transform Message]​ の右にドラッグします。

  2. [Query (クエリ)]​ 項目に、次のクエリを入力します。

    Select Name from Account WHERE Name LIKE '%:name %'

3 つ目の [Transform Message] コンポーネントを追加する

この ​Transform Message​ 操作により、​Pre query​ 操作の出力が ​Execute composite batch​ 操作に渡されます。

  1. 3 つ目の ​[Transform Message]​ コンポーネントを ​[Pre query]​ の右にドラッグします。

  2. 出力を ​payload​ に設定します。

    %dw 2.0
    %output application/java
    ---
    [
    payload
    ]

Execute Composite Batch 操作を追加する

Execute composite batch​ 操作により、​Pre create​ 操作と ​Pre query​ 操作で作成された下位要求が実行されます。

Salesforce Composite の ​Execute composite batch​ 操作を 3 つ目の ​[Transform Message]​ の右にドラッグします。

4 つ目の [Transform Message] コンポーネントを追加する

この ​Transform Message​ 操作により、出力が JSON 形式に変換されます。

  1. 4 つ目の ​[Transform Message]​ コンポーネントを ​[Execute composite batch]​ の右にドラッグします。

  2. 出力を ​application/json​ に設定します。

    %dw 2.0
    %output application/json
    ---
    payload

Pre-Query の例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを XML エディターに貼り付けます。必要に応じて、環境に合わせて値を変更します。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:salesforce-composite="http://www.mulesoft.org/schema/mule/salesforce-composite" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
   xmlns:http="http://www.mulesoft.org/schema/mule/http"
   xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/salesforce-composite http://www.mulesoft.org/schema/mule/salesforce-composite/current/mule-salesforce-composite.xsd">
   <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
      <http:listener-connection host="0.0.0.0" port="8081" />
   </http:listener-config>
   <salesforce-composite:composite-config name="Salesforce_Composite_Config" doc:name="Salesforce Composite Config" >
      <salesforce-composite:oauth-user-pass-connection consumerKey="${consumerKey}" consumerSecret="${consumerSecret}" username="${username}" password="${password}" securityToken="${securityToken}" />
   </salesforce-composite:composite-config>
   <flow name="composite-prequery-exampleFlow" >
      <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/executeFlow"/>
      <ee:transform doc:name="Transform Message" >
         <ee:message >
            <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
{
   Name: "MyNewAccount"
}]]></ee:set-payload>
         </ee:message>
      </ee:transform>
      <salesforce-composite:pre-create type="Account" doc:name="Pre create" config-ref="Salesforce_Composite_Config">
      </salesforce-composite:pre-create>
      <ee:transform doc:name="Transform Message" >
         <ee:message >
            <ee:set-payload ><![CDATA[output application/java
---
{
   "Id": payload.Id,
   "Fields" : ["Id", "Name"],
   "Type": "Account"
}]]></ee:set-payload>
         </ee:message>
      </ee:transform>
      <salesforce-composite:pre-query doc:name="Pre query" config-ref="Salesforce_Composite_Config">
         <salesforce-composite:query >Select Name from Account WHERE Name LIKE '%:name %'
                    </salesforce-composite:query>
         <salesforce-composite:parameters ><![CDATA[#[output applicaton/java
---
{
   "name" : "MyNewAccount"
}]]]></salesforce-composite:parameters>
      </salesforce-composite:pre-query>
      <ee:transform doc:name="Transform Message" >
         <ee:message >
            <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[
   payload
]]]></ee:set-payload>
         </ee:message>
      </ee:transform>
      <salesforce-composite:execute-composite-batch doc:name="Execute composite batch" config-ref="Salesforce_Composite_Config"/>
      <ee:transform doc:name="Transform Message" >
         <ee:message >
            <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
         </ee:message>
      </ee:transform>
   </flow>
</mule>