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>
Salesforce オブジェクトは、オブジェクト間で標準リレーションまたはカスタムリレーションを持つことができます。
オブジェクト間のリレーションは通常一対多の親-子リレーションですが、Salesforce に存在する 2 つのオブジェクトをどのような形でも結び付けることができます。
リレーションが設定されたオブジェクトを作成または変更するのは厄介です。このセクションでは、Salesforce Connector を使用してオブジェクトの更新/挿入を実行する方法を示します。
Salesforce にこのリレーションの構造を作成します。
この例では、MyCustomObject と MyOtherCustomObject の 2 つのカスタム種別を想定しています。
MyCustomObject は MyOtherCustomObject とのリレーションを維持する必要があります。MyCustomObject を更新/挿入すると、Salesforce Connector に入力として送信される POJO は次のようになります。
{
...
// MyCustomObject's fields ...
OtherObject__r:
{
CustomField__c : 'ABC123',
type: 'MyOtherCustomObject__c'
}
}
OtherObject は、MyCustomObject 項目の名前で、この値が MyOtherCustomObjectオブジェクトへの参照である必要があります。OtherObject__r は、設定され、別のオブジェクトへのリレーションである項目の名前を示します。
この項目の値は、2 つの項目が設定されたオブジェクトである必要があります。
1 つは、種別の名前の項目で、参照先のオブジェクト種別の名前が値になります。この場合の種別は MyOtherCustomObject です。
もう 1 つは、参照する MyOtherCustomObject の適正なインスタンスを識別するのに適した値と名前の項目です。この場合は、ABC123 という値がある CustomField という項目です。
次の XML の例は、これらのオブジェクトを更新する方法を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata"
xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/sfdc
http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.mulesoft.org/schema/mule/ee/dw
http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/tracking
http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<sfdc:config name="Salesforce__Basic_Authentication"
username="username"
password="password"
securityToken="token"
url="https://test.salesforce.com/services/Soap/u/34.0"
doc:name="Salesforce: Basic Authentication"/>
<flow name="DirectUpsert" initialState="stopped">
<poll doc:name="Poll">
<fixed-frequency-scheduler frequency="10000" startDelay="5000"/>
<set-payload
value="#[ [ ['Name' :'test'+server.dateTime, 'field_1__c' : 'test', 'OtherObject__r' : ['CustomField__c' : 'customFieldValue', 'type': 'MyOtherCustomObject__c'] ] ] ]"
doc:name="Set Payload"/>
</poll>
<sfdc:upsert config-ref="Salesforce__Basic_Authentication" externalIdFieldName="Id"
type="MyCustomObject__c" doc:name="Salesforce">
<sfdc:objects ref="#[payload]"/>
</sfdc:upsert>
<logger message="Upsert completed!" level="INFO" doc:name="Logger"/>
</flow>
<flow name="TransformBefore" initialState="stopped">
<poll doc:name="Poll">
<fixed-frequency-scheduler frequency="10000" startDelay="5000"/>
<set-payload
value="#[ {'name' :"Paul", 'customData' : 'JULY 11TH', 'parentRef': 'Carlos' } ]"
doc:name="Set Payload"/>
</poll>
<dw:transform-message metadata:id="7f3eb56a-b4ee-49db-8722-8b303c1c8e7a"
doc:name="Transform Message">
<dw:input-payload doc:sample="Input.dwl"/>
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
[{
Name: payload.name,
field_1__c: payload.customData,
OtherObject__r: {'CustomField__c' : payload.parentRef, 'type': 'MyOtherCustomObject__c'}
}]]]></dw:set-payload>
</dw:transform-message>
<sfdc:upsert config-ref="Salesforce__Basic_Authentication"
externalIdFieldName="Id" type="MyCustomObject__c" doc:name="Salesforce">
<sfdc:objects ref="#[payload]"/>
</sfdc:upsert>
<logger message="#[payload[0].created ? "Created" : "Updated"]"
level="INFO" doc:name="Logger"/>
</flow>
</mule>