Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule フローは以下をセットアップします。
HTTP リスナー: HTTP 要求からデータを受け入れます。
メッセージの変換: データの構造と形式を変換し、Salesforce Connector が想定する出力を生成する。
Salesforce Connector:
(アウトバウンド) Salesforce に接続して、Salesforce にデータを転送する操作を実行します。
設定に従ってフローをトリガーします。
Salesforce に接続して、クエリ結果を含む InputStream
を返します。
メッセージの変換: データの構造と形式を変換して、File Connector エンドポイントが想定する出力を生成します。
File Connector: データをファイル (CSV など) に記録し、ユーザーが定義したディレクトリまたは場所に保存する。
HTTP リスナーをセットアップし、メッセージを変換して、アカウントを作成します。
トリガーをスケジュールし、結果ストリームに対してクエリを実行し、メッセージを変換して、ファイルに書き込みます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns:salesforce="http://www.mulesoft.org/schema/mule/salesforce"
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
http://www.mulesoft.org/schema/mule/salesforce/current/mule-salesforce.xsd
http://www.mulesoft.org/schema/mule/file
http://www.mulesoft.org/schema/mule/file/current/mule-file.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:sfdc-config name="Salesforce_Sfdc_config"
doc:name="Salesforce SFDC config">
<salesforce:basic-connection
username="${salesforce.username}"
password="${salesforce.password}"
securityToken="${salesforce.securityToken}" />
</salesforce:sfdc-config>
<flow name="crud_app_template">
<http:listener config-ref="HTTP_Listener_config"
path="/" doc:name="Listener" />
<parse-template location="form.html" doc:name="Parse Template" />
</flow>
<flow name="create_accountFlow" >
<http:listener config-ref="HTTP_Listener_config"
path="/createAccount" doc:name="Listener" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{
Name: payload.Name,
AccountNumber: payload.AccountNumber,
BillingCity: payload.BillingCity
}]]]></ee:set-payload>
</ee:message>
</ee:transform>
<salesforce:create doc:name="Create" type="Account"
config-ref="Salesforce_Sfdc_config"/>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id:$.id,
errors:$.errors,
success:$.success
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="delete_accountFlow" >
<http:listener config-ref="HTTP_Listener_config"
path="/delete" doc:name="Listener" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[payload.Id]]]></ee:set-payload>
</ee:message>
</ee:transform>
<salesforce:delete config-ref="Salesforce_Sfdc_config" doc:name="Delete" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id:$.id,
errors:$.errors,
success:$.success
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="query_accountFlow" >
<http:listener config-ref="HTTP_Listener_config"
path="/query" doc:name="Listener" />
<salesforce:query config-ref="Salesforce_Sfdc_config" doc:name="Query" >
<salesforce:salesforce-query>
SELECT AccountNumber,BillingAddress,Id,Name FROM Account WHERE Name = ':name'
</salesforce:salesforce-query>
<salesforce:parameters ><![CDATA[#[output application/java
---
{
name : payload.name
}]]]></salesforce:parameters>
</salesforce:query>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
AccountNumber:$.AccountNumber,
BillingAddress:$.BillingAddress,
Id:$.Id,
Name:$.Name
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="update_accountFlow" >
<http:listener config-ref="HTTP_Listener_config"
path="/update" doc:name="Listener" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{
Name: payload.Name,
AccountNumber: payload.AccountNumber,
Id:payload.Id
}]]]></ee:set-payload>
</ee:message>
</ee:transform>
<salesforce:update config-ref="Salesforce_Sfdc_config"
type="Account" doc:name="Update" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id:$.id,
errors:$.errors,
success:$.success
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="upsert_accountFlow" >
<http:listener config-ref="HTTP_Listener_config"
path="/upsert" doc:name="Listener" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{
Name: payload.Name,
AccountNumber: payload.AccountNumber,
Id:payload.Id
}]]]></ee:set-payload>
</ee:message>
</ee:transform>
<salesforce:upsert config-ref="Salesforce_Sfdc_config"
externalIdFieldName="Id" type="Account" doc:name="Upsert" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map {
id:$.id,
errors:$.errors,
success:$.success,
created:$.created
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="find_duplicates_for_account_flow" >
<http:listener config-ref="HTTP_Listener_config"
path="/findDuplicates" doc:name="Listener" />
<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:find-duplicates config-ref="Salesforce_Sfdc_config"
type="Account"
doc:name="Find duplicates" />
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
success: payload.success,
duplicateResults: {
(payload.duplicateResults map {
matchRecords: $.matchResults
}
)
},
duplicateRuleEntityType: payload.duplicateRuleEntityType,
duplicateRule: payload.duplicateRule,
allowSave: payload.allowSave,
errorMessage: payload.errorMessage
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="crud-appFlow" >
<http:listener doc:name="Listener"
config-ref="HTTP_Listener_config" path="/"/>
<salesforce:convert-lead doc:name="Convert lead"
config-ref="Salesforce_Sfdc_config"/>
</flow>
</mule>
xml
Salesforce オブジェクトは、オブジェクト間で標準リレーションまたはカスタムリレーションを持つことができます。
オブジェクト間のリレーションは通常一対多の親-子リレーションですが、Salesforce に存在する 2 つのオブジェクトをどのような形でも結び付けることができます。
リレーションが設定されたオブジェクトを作成または変更するのは厄介です。この例は、Salesforce でオブジェクトリレーション構造を作成し、Salesforce Connector を使用してオブジェクトの更新/挿入を実行する方法を示しています。
この例では、2 つのカスタム Salesforce オブジェクト種別を使用します: Componentc
c` と Plane`Planec
Plane__c
エンティティは環境内に存在している必要があります。
Componentc
c` と Plane`Planec
オブジェクトは互いにリレーションを持つ必要があり、Plane__r
で 2 つのオブジェクト間のリレーションの名前を指定します。
Component__c
を更新/挿入すると、Salesforce Connector に入力として送信される POJO は次のようになります。
[{ // Component__c's fields ... Plane__r: { "type": "Plane__c", "Name": "Cobra" } }]
linenums
作成する Componentc
c` オブジェクトの項目に加えて、親 Plane`Planec
オブジェクトとのリレーションを Plane__r
項目で指定する必要があります。
Plane__r
項目の値は、2 つの項目が設定されたオブジェクトである必要があります。この例には、次の項目があります。
Plane__c
という名前の参照先オブジェクトを値として持つ type
という名前の項目。
参照する正しいインスタンス ((Cobra) of `Plane__c
) を識別する値を持つ Name
項目。
つまり、更新/挿入する Componentc
c` には、名前 Cobra
のエンティティ Plane`Planec
がその親として存在します。
次の XML の例は、これらのオブジェクトを更新/挿入する方法を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:salesforce="http://www.mulesoft.org/schema/mule/salesforce"
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 http://www.mulesoft.org/schema/mule/salesforce/current/mule-salesforce.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="88f6a4cd-e00a-46c6-b0a0-aaf99fb2dd74" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<salesforce:sfdc-config name="Salesforce_Config" doc:name="Salesforce Config" doc:id="5605405f-3c7b-40d9-bc64-af06ebdfc8dd" >
<salesforce:basic-connection username="user" password="pass" securityToken="token" />
</salesforce:sfdc-config>
<flow name="Copy_of_idp-policy-benefitsFlow" doc:id="e26d68af-d4fb-45f3-9eaa-1f320ffba2b2" >
<http:listener doc:name="Listener" doc:id="e8014cfd-3af7-43ca-99ef-cd231cda02fd" config-ref="HTTP_Listener_config" path="/" />
<ee:transform doc:name="Transform Message" doc:id="a0353598-6084-4053-88ab-b2b67ecd4531" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[{
Name: "NewPlaneComponent",
Plane__r: {
"type": "Plane__c",
"Name": "Cobra"
}
}]]]></ee:set-payload>
</ee:message>
</ee:transform>
<salesforce:upsert objectType="Component__c" doc:name="Upsert" doc:id="3bbdcfd6-09a4-43cf-bc75-19fb24ed33b1" config-ref="Salesforce_Config" externalIdFieldName="Id"/>
<ee:transform doc:name="Transform Message" doc:id="ed6dcb06-ef6a-4332-a715-e2f27498801b" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
</mule>
xml
Invoke APEX Rest 操作を使用すると、ユーザーは REST サービスとして公開されている Apex クラスからメソッドを呼び出すことができます。次の例は、この操作のペイロードを示しています。
<ee:transform doc:name="Transform Message"> <ee:message > <ee:set-payload ><![CDATA[output application/java --- { body: { URLParameters: { Parameter1: "parameter1Value", Parameter2: "parameter2Value" }, account: { Name: "Example", AccountNumber: "55" } }, headers: { header1:"header1Value" }, cookies: { cookie1:"cookie1Value" }, queryParameters: { queryParam1Name:"queryParam1Value", queryParam2Name:"queryParam2Value" } }]]></ee:set-payload> </ee:message> </ee:transform>
example
例について説明します。
body
要素に含まれる URLParameters
は、Apex クラスに記述されている REST リソースのパス内のワイルドカードを置き換えるパラメーターが含まれるマップです。
たとえば、REST リソースが @RestResource(urlMapping='/myResource/\/mySubResource/')
に設定されている場合、Parameter1
の値で 1 番目の *
が置き換えられ、Parameter2
の値で 2 番目の *
が置き換えられます。
キー名は Parameter
で始まり、その後に、置き換える *
の位置を示す数値が続く必要があります。
URLParameters
ブロックの後に、REST リソースに送信する body
値の内容を指定します (例の account
ブロックを参照)。
headers
および cookies
項目では、HTTP 要求と共に目的のサービスに渡すヘッダーと Cookie を記述します。
queryParameters
項目では、使用するクエリパラメーターのほか、指定した Apex クラスで受け入れられる必要があるこのマップ内のキーと値を記述します。