サポートカテゴリ: 選択
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 ファイル情報を取得する手順は、次のとおりです。
-
Anypoint Exchange に移動します。
-
Exchange で、[Login (ログイン)] をクリックし、Anypoint Platform のユーザー名とパスワードを指定します。
-
Exchange で、コネクタ名を検索します。
-
[Dependency Snippets (連動関係スニペット)] をクリックします。
Design Center での接続
-
HTTP リスナートリガーやスケジューラートリガーなどのトリガーをクリックします。
-
コネクタ用に省略可能なグローバル要素を作成するには、[Reusable Configurations (再利用可能な設定)] をクリックします。使用できるのは、OAuth ユーザー名とパスワード認証のみです。
-
プラス記号を選択して、コンポーネントを追加します。
-
コンポーネントとしてコネクタを選択します。
-
Create SObject Tree 操作用に次の項目を設定します。
-
SObject Root Type (sObject ルート種別)
作成するツリーのルートの種別。 -
SObject Tree (sObject ツリー)
作成するツリーの構造全体。
-
Studio でコネクタに追加する
-
Studio で Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューで、[(X) Search in Exchange ((X) Exchange 内を検索)] をクリックします。
-
[Add Modules to Project (モジュールをプロジェクトに追加)] で、検索項目に「
composite」と入力します。 -
[Available modules (使用可能なモジュール)] で、このコネクタの名前をクリックします。
-
[Add (追加)] をクリックします。
-
[Finish (完了)] をクリックします。
Studio の更新がある場合、右下隅にメッセージが表示されます。メッセージをクリックすると、更新をインストールできます。
Studio でのコネクタのグローバル要素の設定
コネクタを設定する場合、アプリケーション内のそのコネクタのすべてのインスタンスで使用できるグローバル要素を設定することをお勧めします。グローバル要素を設定するには、コネクタが対象の Salesforce Composite システムにアクセスするために必要な認証ログイン情報を指定する必要があります。Salesforce Composite Connector では、OAuth のユーザー名とパスワード、OAuth 2.0、OAuth JWT、および OAuth SAML 認証方式がサポートされます。
-
コネクタの操作を Studio キャンバスにドラッグします。
-
操作の設定画面で、[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックし、グローバル要素設定項目にアクセスします。
-
[General (一般)] タブの [Connection (接続)] で、設定する認証方式を選択します。
-
OAuth v2.0
-
OAuth JWT
-
OAuth SAML
-
-
[Advanced (詳細)] タブで、必要に応じて再接続戦略を含む再接続情報を指定します。
-
[Test Connection (接続をテスト)] をクリックして、Mule が指定されたサーバーに接続できることを確認します。
-
[OK] をクリックします。
使用可能な接続種別の設定方法についての詳細は、「Salesforce Composite リファレンス」を参照してください。
OAuth のユーザー名とパスワード
[Global Element Properties (グローバル要素のプロパティ)] 画面の [General (一般)] タブで次の情報を入力し、基本認証を設定します。
-
Consumer Key (コンシューマーキー)
Salesforce 接続アプリケーションのコンシューマーキー。 -
Consumer Secret (コンシューマーシークレット)
Salesforce にアクセスするコネクタのコンシューマーシークレット。 -
Username (ユーザー名)
Salesforce ユーザー名。 -
Password (パスワード)
対応するパスワード。 -
Security Token (セキュリティトークン)
対応するセキュリティトークン。
Studio の例
-
Listener(HTTP)
HTTP 要求からデータを受け取ります。 -
Transform Message
HTTP 入力を適宜トランスフォームします。 -
Salesforce Composite Connector
Salesforce に接続し、Create SObject Tree 操作を実行します。 -
Transform Message
Create SObject Tree 操作の結果を JSON 形式で出力します。
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 の例のフローを示しています。
HTTP リスナーを追加してフローの作成を開始する
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/json --- { Name: "MyNewAccount" }
Pre Create 操作を追加する
Pre create 操作により、NewAccount という名前のオブジェクトを作成するためのメタデータが提供されます。 executeCompositeBatch 操作の下位要求が生成されます。
-
[Mule Palette (Mule パレット)] で「Salesforce」を検索し、Salesforce Composite Pre create 操作を選択します。
-
Pre create 操作を [Transform Message] の右にドラッグします。
-
[Connector configuration (コネクタ設定)] 項目の右にある緑のプラスアイコン (+) をクリックし、Salesforce Composite グローバル要素設定項目にアクセスします。
-
次の変数を使用して項目を設定します。
Figure 2. Salesforce Composite Connector の再利用可能なグローバル要素を作成するために、[General (一般)] セクションを設定します。 -
[Pre create] プロパティウィンドウで、[Type (種別)] 項目に
Account を入力します。 -
プロパティファイル
src/main/mule/mule-app.properties で、グローバル要素の変数の値を宣言して入力します。
2 つ目の [Transform Message] コンポーネントを追加する
この Transform Message コンポーネントにより、ID 項目と Type 項目の値が設定され、これらの値が Pre query 操作に渡されます。
-
2 つ目の [Transform Message] コンポーネントを [Pre create] の右にドラッグします。
-
次の名前-値ペアを入力します。
%dw 2.0 %output application/json --- { "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] コンポーネントを追加する
この 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] コンポーネントを追加する
この 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 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>