Created
July 14, 2020 08:47
-
-
Save IW-hub/515a075f6cd8ff174f03db2ae0237e22 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<mule | |
xmlns:salesforce="http://www.mulesoft.org/schema/mule/salesforce" | |
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/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/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://www.mulesoft.org/schema/mule/salesforce http://www.mulesoft.org/schema/mule/salesforce/current/mule-salesforce.xsd"> | |
<configuration-properties | |
file="properties.yaml" /> | |
<http:listener-config name="HTTP_Listener_config" | |
doc:name="HTTP Listener config" basePath="/api"> | |
<http:listener-connection host="localhost" | |
port="8081" /> | |
</http:listener-config> | |
<salesforce-composite:composite-config | |
name="Salesforce_Composite" | |
doc:name="Salesforce Composite Salesforce Composite"> | |
<salesforce-composite:oauth-user-pass-connection | |
consumerKey="${salesforce.consumer.key}" | |
consumerSecret="${salesforce.consumer.secret}" | |
username="${salesforce.username}" password="${salesforce.password}" | |
securityToken="${salesforce.security.token}" /> | |
</salesforce-composite:composite-config> | |
<salesforce:sfdc-config name="Salesforce_Config" | |
doc:name="Salesforce Config" | |
doc:id="951ca5b3-6b88-45a2-be5f-6b1a5916c696"> | |
<salesforce:cached-basic-connection | |
username="${salesforce.username}" password="${salesforce.password}" | |
securityToken="${salesforce.security.token}" /> | |
</salesforce:sfdc-config> | |
<flow name="composite-create-sobject-tree"> | |
<http:listener doc:name="post /recordssobjecttree" path="/recordssobjecttree" config-ref="HTTP_Listener_config" /> | |
<ee:transform doc:name="Prepare Request for Create SObject Tree SFDC" doc:id="d53c8dcb-7b84-4075-b6ba-80dbdcdcd8d4"> | |
<ee:message> | |
<ee:set-payload><![CDATA[%dw 2.0 | |
output application/java | |
--- | |
payload.records map ((account , indexOfAccount) -> { | |
attributes: { | |
"type": account.attributes.objectType, | |
referenceId: account.attributes.referenceId | |
}, | |
Name: account.name, | |
Phone: account.phone, | |
Website: account.website, | |
NumberOfEmployees: account.numberOfEmployees as Number, | |
ChildAccounts: if (account.childAccounts.records != null) { | |
records: account.childAccounts.records map ((childAccount, indexOfChildAccount) -> { | |
attributes: { | |
"type": childAccount.attributes.objectType, | |
referenceId: childAccount.attributes.referenceId | |
}, | |
Name: childAccount.name, | |
Phone: childAccount.phone, | |
Website: childAccount.website, | |
NumberOfEmployees: childAccount.numberOfEmployees as Number | |
}) | |
} else {} , | |
Contacts: { | |
records: account.contacts.records map ((contact, indexOfContact) -> { | |
attributes: { | |
"type": contact.attributes.objectType, | |
referenceId: contact.attributes.referenceId | |
}, | |
LastName: contact.lastName, | |
Email: contact.email, | |
Title: contact.title | |
}) | |
} | |
}) | |
]]></ee:set-payload> | |
</ee:message> | |
</ee:transform> | |
<salesforce-composite:create-sobject-tree doc:name="Create Sobject Tree" config-ref="Salesforce_Composite" type="Account" > | |
</salesforce-composite:create-sobject-tree> | |
<ee:transform doc:name="Map Response"> | |
<ee:message> | |
<ee:set-payload><![CDATA[%dw 2.0 | |
output application/json | |
--- | |
payload]]></ee:set-payload> | |
</ee:message> | |
</ee:transform> | |
</flow> | |
<flow name="salesforceFlow" doc:id="135fd780-f7f1-4f39-991e-2c0435a9afa8"> | |
<http:listener doc:name="POST /records" doc:id="43a6172d-93dc-4172-b744-9374042ac0e1" config-ref="HTTP_Listener_config" path="/records" /> | |
<salesforce:create doc:name="Create Parent Accounts" doc:id="3e0e727c-efd4-43f7-9bb8-9753e7378d2e" config-ref="Salesforce_Config" type="Account" target="pAccountsRes"> | |
<salesforce:records ><![CDATA[#[%dw 2.0 | |
output application/java | |
--- | |
payload.records map (account,indexOfAccount) -> | |
{ | |
Name: account.name, | |
Phone: account.phone, | |
Website: account.website, | |
NumberOfEmployees: account.numberOfEmployees as Number, | |
Industry: account.industry | |
}]]]></salesforce:records> | |
</salesforce:create> | |
<salesforce:create doc:name="Create Parent Contacts" doc:id="ad8d365d-32c9-482a-bc0a-eab9ab901cbc" config-ref="Salesforce_Config" type="Contact" target="pContactsRes"> | |
<salesforce:records ><![CDATA[#[%dw 2.0 | |
output application/java | |
--- | |
flatten (payload.records map ((account,indexOfAccount) -> | |
(account.contacts.records map ((contact, indexOfContact) -> | |
{ | |
AccountId: vars.pAccountsRes[indexOfAccount].id, | |
LastName: contact.lastName, | |
Email: contact.email, | |
Title: contact.title | |
})) | |
))]]]></salesforce:records> | |
</salesforce:create> | |
<salesforce:create type="Account" doc:name="Create Child Accounts" doc:id="37753c79-638b-47a3-a4c1-1e15c4ef7f68" config-ref="Salesforce_Config" target="cAccountsRes"> | |
<salesforce:records ><![CDATA[#[%dw 2.0 | |
output application/json | |
--- | |
flatten (payload.records filter $.childAccounts.records != null map ((account,indexOfAccount) -> | |
account.childAccounts.records map ((childAccount, indexOfChildAccount) -> | |
{ | |
ParentId: vars.pAccountsRes[indexOfAccount].id, | |
Name: childAccount.name, | |
Phone: childAccount.phone, | |
Website: childAccount.website, | |
NumberOfEmployees: childAccount.numberOfEmployees as Number | |
}) | |
))]]]></salesforce:records> | |
</salesforce:create> | |
<ee:transform doc:name="Aggregate Responses" doc:id="6f638818-4ba1-4a06-b903-b4a02bfcef7f" > | |
<ee:message > | |
<ee:set-payload ><![CDATA[%dw 2.0 | |
output application/json | |
--- | |
vars.pAccountsRes ++ vars.pContactsRes ++ vars.cAccountsRes]]></ee:set-payload> | |
</ee:message> | |
</ee:transform> | |
</flow> | |
</mule> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment