SObject Tree 操作の例
この例では、次の操作を使用して SObject ツリーを作成し、Salesforce に接続して結果を JSON 形式に変換して出力します。
-
HTTP Listener
HTTP 要求からデータを受け取ります。
-
Transform Message
HTTP 入力を変換します。
-
Create sobject tree
Salesforce に接続し、SObject ツリーを作成します。
-
Transform Message
Create sobject tree 操作の結果を JSON 形式で出力します。
Figure 1. この例のフローには、HTTP Listener コンポーネント、Transform コンポーネント、Create 操作が含まれます。
HTTP Listener を追加する
HTTP Listener ソース操作は、createSObjectTree パスでイベントを検出したときにフローを開始します。リスナーを追加してフローをトリガーする手順は、次のとおりです。
-
Studio で新しい Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューで「
http」を検索し、[Listener] 操作を選択します。 -
Listener 操作をキャンバスにドラッグします。
-
[Listener] プロパティウィンドウで、[Path (パス)] 項目を
/createSObjectTree に設定します。
最初の [Transform Message] コンポーネントを追加する
最初の Transform Message コンポーネントは、入力データを使用して次の Create 操作の HTTP 入力を変換します。コンポーネントを追加する手順は、次のとおりです。
-
[Mule Palette (Mule パレット)] ビューで、「Transform Message」を検索します。
-
Transform Message コンポーネントをキャンバスの [Listener] の右にドラッグします。
-
名前
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 ツリーを作成します。操作を追加する手順は、次のとおりです。
-
[Mule Palette (Mule パレット)] ビューで「
salesforce」を検索し、[Create sobject tree] を選択します。 -
[Create sobject tree] 操作を [Transform Message] の右にドラッグします。
-
[Connector configuration (コネクタ設定)] の右にある緑のプラス記号 (+) をクリックし、Salesforce Composite グローバル要素設定項目にアクセスします。
-
[Create sobject tree] プロパティウィンドウで、[SObject Root Typ (sObject ルート種別)] 項目に「
Account」と入力します。 -
プロパティファイル
src/main/mule/mule-app.properties で、グローバル要素の変数の値を宣言して入力します。
2 つ目の [Transform Message] コンポーネントを追加する
2 つ目の Transform Message コンポーネントは出力結果を JSON に変換します。コンポーネントを追加する手順は、次のとおりです。
-
もう一度 [Transform Message] コンポーネントを [Create sobject tree] の右にドラッグします。
-
次の情報を入力します。
%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 形式で出力します。
Figure 2. この例のフローには、HTTP Listener コンポーネント、Transform コンポーネント、複数の Salesfore Composite 操作が含まれます。
HTTP Listener を追加する
HTTP Listener ソース操作は、executeFlow パスでイベントを検出したときにフローを開始します。リスナーを追加してフローをトリガーする手順は、次のとおりです。
-
Studio で新しい Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューで「
http」を検索し、[Listener] 操作を選択します。 -
Listener 操作をキャンバスにドラッグします。
-
[Listener] プロパティウィンドウで、[Path (パス)] 項目を
/executeFlow に設定します。
最初の [Transform Message] コンポーネントを追加する
最初の Transform Message コンポーネントは、作成されるオブジェクトの名前を指定し、Pre create 操作の名前を渡します。コンポーネントを追加する手順は、次のとおりです。
-
[Mule Palette (Mule パレット)] ビューで、「Transform Message」を検索します。
-
[Transform Message] をキャンバスの [Listener] の右にドラッグします。
-
名前
MyNewAccount を入力します。%dw 2.0 %output application/java --- { Name: "MyNewAccount" }
Pre Create 操作を追加する
Pre Create 操作は、NewAccount と呼ばれるオブジェクトを作成するためのメタデータを提供し、executeCompositeBatch 操作の下位要求を生成します。操作を追加する手順は、次のとおりです。
-
[Mule Palette (Mule パレット)] ビューで「
salesforce」を検索し、Salesforce Composite の [Pre create] 操作を選択します。 -
Pre create 操作を [Transform Message] の右にドラッグします。
-
[Connector configuration (コネクタ設定)] 項目の右にある緑のプラスアイコン (+) をクリックし、Salesforce Composite グローバル要素設定項目にアクセスします。
-
[Pre create] プロパティウィンドウで、[Type (種別)] 項目に「
Account」と入力します。 -
プロパティファイル
src/main/mule/mule-app.properties で、グローバル要素の変数の値を宣言して入力します。
2 つ目の [Transform Message] コンポーネントを追加する
2 つ目の Transform Message コンポーネントは、[ID] 項目と [Type (種別)] 項目の値を指定し、これらの値を Pre query 操作に渡します。コンポーネントを追加する手順は、次のとおりです。
-
2 つ目の [Transform Message] コンポーネントを [Pre create] の右にドラッグします。
-
次の名前-値ペアを入力します。
%dw 2.0 %output application/java --- { "Id": payload.Id, "Fields" : ["Id", "Name"], "Type": "Account" }
Pre Query 操作を追加する
Pre Query 操作により、照会するオブジェクトのメタデータが提供されます。Execute composite batch 操作の下位要求が生成されます。操作を追加する手順は、次のとおりです。
-
Salesforce Composite の Pre query 操作を 2 つ目の [Transform Message] の右にドラッグします。
-
[Query (クエリ)] 項目に、以下を入力します。
Select Name from Account WHERE Name LIKE '%:name %'
3 つ目の [Transform Message] コンポーネントを追加する
3 つ目の Transform Message 操作は、Pre query 操作の出力を Execute composite batch 操作に渡します。コンポーネントを追加する手順は、次のとおりです。
-
3 つ目の [Transform Message] コンポーネントを [Pre query] の右にドラッグします。
-
出力を
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 形式に変換します。コンポーネントを追加する手順は、次のとおりです。
-
4 つ目の [Transform Message] コンポーネントを [Execute composite batch] の右にドラッグします。
-
出力を
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>