Skip to content

Instantly share code, notes, and snippets.

@IW-hub
Created July 14, 2020 08:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IW-hub/515a075f6cd8ff174f03db2ae0237e22 to your computer and use it in GitHub Desktop.
Save IW-hub/515a075f6cd8ff174f03db2ae0237e22 to your computer and use it in GitHub Desktop.
<?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