Salesforce Composite Connector 2.18 - 例 - Mule 4

SObject Tree 操作の例

この例では、次の操作を使用して SObject ツリーを作成し、Salesforce に接続して結果を JSON 形式に変換して出力します。

  • HTTP ​Listener

    HTTP 要求からデータを受け入れる

  • Transform Message

    HTTP 入力を変換します。

  • Create sobject tree

    Salesforce に接続し、SObject ツリーを作成します。

  • Transform Message

    Create sobject tree​ 操作の結果を JSON 形式で出力します。

HTTP Listener コンポーネント、Transform コンポーネント、Create 操作を含む Studio フロー

HTTP Listener を追加する

HTTP ​Listener​ ソース操作は、​createSObjectTree​ パスでイベントを検出したときにフローを開始します。リスナーを追加してフローをトリガーする手順は、次のとおりです。

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

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

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

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

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

最初の Transform Message コンポーネントは、入力データを使用して次の Create 操作の HTTP 入力を変換します。コンポーネントを追加する手順は、次のとおりです。

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

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

  3. 名前 ​Transform HTTP input for Create SObject Tree​ を入力します。

次に、Transform Message コンポーネントの 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":"5556543210",
         "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"
      }
   ]
}

Create SObject Tree 操作を追加する

Create SObject Tree 操作を追加して Salesforce に接続し、SObject ツリーを作成します。操作を追加する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで「​salesforce​」を検索し、​[Create sobject tree]​ を選択します。

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

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

  4. [Create sobject tree]​ プロパティウィンドウで、​[SObject Root Typ (sObject ルート種別)]​ 項目に「​Account​」と入力します。

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

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

2 つ目の Transform Message コンポーネントは出力結果を JSON に変換します。コンポーネントを追加する手順は、次のとおりです。

  1. もう一度 ​[Transform Message]​ コンポーネントを ​[Create sobject tree]​ の右にドラッグします。

  2. 次の情報を入力します。

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

SObject Tree 操作フローの XML

次の XML コードを Anypoint Studio キャンバスの ​[Configuration XML (設定 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">
	<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>

Pre-Query の例

この例では、照会するオブジェクトのメタデータを提供し、このメタデータが含まれる 2 つの下位要求を生成して、下位要求を実行します。

  • HTTP ​Listener

    HTTP 要求からデータを受け入れる

  • Transform Message

    オブジェクトの名前を指定します。

  • Pre create

    作成するオブジェクトのメタデータを提供し、実行で使用される下位要求を生成します。

  • Transform Message

    項目の値を指定します。

  • Pre query

    照会するオブジェクトのメタデータを提供し、実行で使用される下位要求を生成します。

  • Transform Message

    Pre query​ 操作から出力を渡します。

  • Execute composite batch

    1 つのバッチですべての下位要求を送信します。

  • Transform Message

    結果を JSON 形式で出力します。

HTTP Listener コンポーネント、Transform コンポーネント、複数の Salesfore Composite 操作を含む Studio フロー

HTTP Listener を追加する

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/java
    ---
    {
       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. [Pre create]​ プロパティウィンドウで、​[Type (種別)]​ 項目に「​Account​」と入力します。

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

Salesforce Composite Connector グローバル要素設定ウィンドウ

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

2 つ目の Transform Message コンポーネントは、​[ID]​ 項目と ​[Type (種別)]​ 項目の値を指定し、これらの値を ​Pre query​ 操作に渡します。コンポーネントを追加する手順は、次のとおりです。

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

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

    %dw 2.0
    %output application/java
    ---
    {
       "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] コンポーネントを追加する

3 つ目の 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] コンポーネントを追加する

4 つ目の 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 application/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>