Free MuleSoft CONNECT Keynote & Expo Pass Available!

Register now+
Nav

Microsoft Dynamics CRM Connector

Select

The Microsoft Dynamics CRM connector allows Mule applications to interact with Microsoft Dynamics CRM’s SOAP Organization Service.

Read through this user guide to understand how to set up and configure a basic flow using the connector. Track feature additions, compatibility, limitations, and API version updates using the Microsoft Dynamics CRM Connector Release Notes.

Prerequisites

This document assumes that you are familiar with Microsoft Dynamics CRM, Mule, Anypoint Connectors, Anypoint Studio, Mule concepts, elements in a Mule flow, and Global Elements.

You need login credentials to test your connection to your target resource.

For hardware and software requirements and compatibility information, see the Connector Release Notes.

To use this connector with Maven, view the pom.xml dependency information in the Dependency Snippets in Anypoint Exchange.

What’s New in this Connector

This connector is the first release for Mule 4.

To Connect in Design Center

  1. In Design Center, click a trigger such as an HTTP Listener or Scheduler trigger.

  2. To create an optional global element, click Reusable Configurations, and configure the following options:

    • Username: Enter the Dynamics CRM username.

    • Password: Enter the corresponding password.

    • Organization Service URL: Enter the corresponding organization service URL.

    • Authentication retries: Enter the desired number of retries for authentication.

    • Disable cn check: Choose if you want to bypass SSL Certificates.

      Design Center Global Element General tab

  3. Select the plus sign to add a component.

  4. Select the connector as a component.

  5. Configure these fields:

    Create:

    • Logical Name - The logical name of the entity

    • Attributes - The attributes of the record as a Map<String, Object>.

      Design Center Create configuration

      Update:

    • Logical Name - The logical name of the entity.

    • Id* - The ID of the record to update..

    • Attributes - The attributes to be updated as a Map<String, Object>.

      Design Center Update configuration

      Delete:

    • Logical Name - The logical name of the entity.

    • Id - The ID of the record to delete.

      Design Center Delete configuration

      Retrieve:

      • Logical Name - The logical name of the entity.

      • Id - The ID of the record to retrieve.

      • Attributes - The attributes of the specified entity as a Map<String, Object>.

        Design Center Retrieve configuration

        Retrieve Multiple By Query:

    • Query - For DataSense Query Language, the DSQL query. For Native Query Language, the Fetch XML query.

    • Items Per Page - The number of items returned per page.

    • Single Page Number - If greater than 0, returns only that specific page.

      Design Center Retrieve Multiple configuration

      Associate:

    • Logical Name - The logical name of the entity.

    • Id*- The ID of the record to which the related records are associated.

    • Relationship Entity Role Is Referenced:

      • false: When the primary entity record is Referencing the record to associate.

      • true: When the primary entity record is Referenced by the record to associate.

        Design Center Associate configuration

        Execute:

    • Request Name - The logical name of request to make.

    • Request Parameters - [DEPRECATED] This parameter will be removed from the configuration in the near future. Set the #[payload] correctly before calling the connector.

    • Request Id - The ID of the request to make.

      Design Center Execute configuration

To Install Connector in Studio

  1. In Anypoint Studio, click the Exchange icon in the Studio taskbar.

  2. Click Login in Anypoint Exchange.

  3. Search for this connector and click Install.

  4. Follow the prompts to install this connector.

When Studio has an update, a message displays in the lower right corner, which you can click to install the update.

Configure in Studio

  1. Drag and drop the connector to the Studio Canvas.

  2. To create a global element for the connector, set these fields:

    Online Authentication (Default):

    • Username: Enter the Dynamics CRM username.

    • Password: Enter the corresponding password.

    • Organization Service URL: Enter the corresponding organization service URL.

    • Authentication retries: Enter the desired number of retries for authentication.

    • Disable cn check: Choose if you want to bypass SSL Certificates.

      Credentials configuration

Use Case: Create, Update, Retrieve, and Delete

To build and run this demo project you need:

  • Anypoint Studio 7 with at least Mule Runtime 4.1 Runtime.

  • Microsft Dynamics 365 Connector v1.0.0 or higher.

  • Dynamics 365 (CRM 8.2).

Use Case Studio 7 Flows

Studio 7 Flow Diagram

Studio 7 Flow Diagram

Studio 7 Flow Diagram

Studio 7 Flow Diagram

To Test the Flows

  1. Import the demo project into your workspace via Anypoint Exchange or Import…​ from File menu.

  2. Specify your OAuth2 credentials for OAuth2 Username Password Config in /src/main/resources/mule-artifact.properties.

  3. Set:

    • config-oauth-user-pass.username - Username used to initialize the session.

    • config-oauth-user-pass.password - Password used to authenticate the user.

    • config-oauth-user-pass.resource - The application ID URI of the web API (secured resource). It must be root URI, without specifing the CRM version (Example: https://<your-org>.crm2.dynamics.com/).

    • config-oauth-user-pass.clientId - The application ID assigned to your app when you registered it with Azure AD. You can find this in the Azure Portal. Click Active Directory, click the directory, choose the application, and click Configure.

    • config-oauth-user-pass.clientSecret - The application secret that you created in the app registration portal for your app. It should not be used in a native app, because client_secrets cannot be reliably stored on devices. It is required for web apps and web APIs, which have the ability to store the client_secret securely on the server side.

    • config-oauth-user-pass.tokenRequestEndpoint - The token endpoint that is called to get the access token. (Example: https://login.windows.net/<tenant-id>/oauth2/token where 'tenant-id' is the Azure AD ID).

  4. Make sure you specify DataSense Connection Timeout with more than 200 seconds because the connector makes several requests to provide DataSense information.

  5. Run the project in Studio.

  6. Type localhost:8081 in your browser to access the selection menu of the demo.

  7. Optionally you can configure the Connection Timeout and Read Timeout. The Connection Timeout is the timeout in making the initial connection with the server. The Read Timeout is the timeout on waiting to read data from the server.

About the Demo Flows

  1. CREATE_EMPTY_CONTACT_DEMO: This flow creates an empty contact entity that is required later in other flows.

    [GET] The HTTP connector listens to the following URL: http://localhost:8081/createContact

  2. CREATE_EMPTY_OPPORTUNITY_DEMO: This flow creates an empty opportunity entity that is required later in other flows.

    [GET] The HTTP connector listens to the following URL: http://localhost:8081/createOpportunity

  3. CREATE_ACCOUNT_DEMO: This flow creates an account with specified attributes and also associates the account with a contact.

    [POST] HTTP connector listens to the following URL: http://localhost:8081/createAccount

    Request example:

    
                 
              
    1
    2
    3
    
    {"AccountName":"Test Account Name","CreditOnHold":true,
    "CreditLimit":1000,
    "ContactID":"<CONTACT_ID"}
  4. CREATE_MULTIPLE_ENTITIES_DEMO: This flow creates multiple entities of the same type in a single batch request.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/createMultipleAccounts

    Request example:

    
                 
              
    1
    2
    3
    4
    
    [{"AccountName":"Account Name 1",
    "CreditOnHold":true,"CreditLimit":1500},
    {"AccountName":"Account Name 2",
    "CreditOnHold":false,"CreditLimit":2000}]
  5. CREATE_MULTIPLE_ENTITIES_DEMO: This flow creates multiple entities of the same type in a single batch request.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/createMultipleAccounts

    Request example:

    
                 
              
    1
    2
    3
    4
    
    [{"AccountName":"Account Name 1",
    "CreditOnHold":true,"CreditLimit":1500},
    {"AccountName":"Account Name 2",
    "CreditOnHold":false,"CreditLimit":2000}]
  6. UPDATE_ENTITY_DEMO: This flow updates an account with specified attributes.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/updateAccount

    Request example:

    
                 
              
    1
    2
    
    {"EntityId":"<ENTITY_ID>",
    "AccountName":"Updated Name","CreditLimit":1500}
  7. UPDATE_MULTIPLE_ENTITIES_DEMO: This flow updated multiple entities of the same type in a single batch request.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/updateMultipleAccounts

    Request example:

    
                 
              
    1
    2
    3
    4
    
    [{"EntityId":"<ENTITY_ID>",
    "AccountName":"Updated Name 1"},
    {"EntityId":"<ENTITY_ID>",
    "AccountName":"Updated Name 2"}]
  8. DELETE_ENTITY_DEMO: This flow deletes an entity of a specified type.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/deleteAccount

    Request example:

    {"EntityId":"<ENTITY_ID>"}
  9. RETRIEVE_ENTITY_DEMO: This flow retrieves an entity of a specified type.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/retrieveAccount

    Request example:

    {"EntityId":"<ENTITY_ID>"}
  10. RETRIEVE_ENTITIES_BY_URL_DEMO: This flow retrieves multiple entities based on url request.

    [GET] The HTTP connector listens to the following URL: http://localhost:8081/retrieveAccountsByURL

  11. RETRIEVE_ENTITIES_BY_QUERY_DEMO: This flow retrieves multiple entities based on Datasense Query Language.

    [GET] The HTTP connector listens to the following URL: http://localhost:8081/retrieveAccountsByQuery

  12. DISASSOCIATE_ENTITIES_DEMO: This flow dissasociates entities. Provide the ID of the entity upon which to make the request and the keys to dissasociate.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/disassociateEntities

    Request example:

    
                 
              
    1
    2
    
    {"EntityId":"<ENTITY_ID>",
    "EntityLinkKeys":["primarycontactid"]}
  13. DO_ACTION_DEMO: This flow calls the WinOpportunity Action.

    [POST] The HTTP connector listens to the following URL: http://localhost:8081/doAction

    Request example:

    
                 
              
    1
    2
    
    {"Subject":"Won Opportunity","Status":3,
    "OpportunityId":"<OPPORTUNITY_ID>"}

You can use the selection menu from http://localhost:8081 to test the flows or you can POST JSONs using a tool like curl, or any other tool (Chrome/Mozilla Firefox extensions) that lets you POST a body when calling the URL.

Use Case XML


         
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:dynamics="http://www.mulesoft.org/schema/mule/dynamics"
        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/core
http://www.mulesoft.org/schema/mule/core/current/mule.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/dynamics
http://www.mulesoft.org/schema/mule/dynamics/current/mule-dynamics.xsd">

        <configuration-properties file="mule-artifact.properties" />
        <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>
        <dynamics:dynamics-config name="Dynamics_365_config" doc:name="Dynamics 365 Dynamics 365">
                <dynamics:oauth-user-pass-connection
            username="${config-oauth-user-pass.username}"
            password="${config-oauth-user-pass.password}"
                        resource="${config-oauth-user-pass.resource}" clientId="${config-oauth-user-pass.clientId}"
                        clientSecret="${config-oauth-user-pass.clientSecret}"
            tokenRequestEndpoint="${config-oauth-user-pass.tokenRequestEndpoint}" />
        </dynamics:dynamics-config>
        <flow name="PARSE_DEMO_TEMPLATE">
        <http:listener config-ref="HTTP_Listener_config" doc:name="HTTP" path="/"/>
        <parse-template location="form.html" doc:name="Parse Template"/>
    </flow>
    <flow name="CREATE_EMPTY_CONTACT_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/createContact" doc:name="HTTP"/>
        <logger message="Requested 'Create Contact Operation'" level="INFO" doc:name="Logger"/>
                <dynamics:create config-ref="Dynamics_365_config" logicalName="contact"
            doc:name="Microsoft Dynamics 365">
                        <dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes>
                </dynamics:create>

        <logger message="#['Received Response from &quot;Create Contact Operation&quot;:' ++ payload]"
         level="INFO" doc:name="Logger"/>
    </flow>
    <flow name="CREATE_EMPTY_OPPORTUNITY_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/createOpportunity" doc:name="HTTP"/>
        <logger message="Requested 'Create Opportunity Operation'" level="INFO" doc:name="Logger"/>
                <dynamics:create config-ref="Dynamics_365_config" logicalName="opportunity"
            doc:name="Microsoft Dynamics 365">
                        <dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes>
                </dynamics:create>
        <logger message="#['Received Response from &quot;Create Opportunity Operation&quot;: ' ++ payload]"
         level="INFO" doc:name="Logger"/>
    </flow>
    <flow name="CREATE_ACCOUNT_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/createAccount" doc:name="HTTP"/>
        <logger message="Requested 'Create Account Operation'" level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload>
            <![CDATA[%dw 2.0
output application/java
---
{
        name: payload.AccountName,
        creditonhold: payload.CreditOnHold,
        creditlimit: payload.CreditLimit,
        "primarycontactid@odata.bind": "/contacts(" ++ payload.ContactID ++ ")"
}]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
        <dynamics:create config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
            <dynamics:attributes>#[payload]</dynamics:attributes>
        </dynamics:create>
        <logger message="#['Received Response from &quot;Create Account Operation&quot; : ' ++ payload]"
         level="INFO" doc:name="Logger"/>
    </flow>
    <flow name="CREATE_MULTIPLE_ENTITIES_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/createMultipleAccounts" doc:name="HTTP"/>
        <logger message="Requested 'Create Multiple Accounts Operation'" level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
input payload application/json
output application/java
---
payload map {
      name: $.AccountName,
      creditlimit : $.CreditLimit,
      creditonhold : $.CreditOnHold
}]]></ee:set-payload>
                        </ee:message>
        </ee:transform>
        <dynamics:create-multiple config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
            <dynamics:entities-attributes>#[payload]</dynamics:entities-attributes>
        </dynamics:create-multiple>
        <logger message="Received Response from 'Create Multiple Entities Operation'" level="INFO"
            doc:name="Logger"/>
        <ee:transform doc:name="Response to JSON">
                        <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="UPDATE_ENTITY_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/updateAccount" doc:name="HTTP"/>
        <logger message="Requested 'Update Entity Operation'" level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
        entityId: payload.EntityId,
        attributes: {
                creditlimit: payload.CreditLimit,
                name: payload.AccountName
        }
}]]></ee:set-payload>
                        </ee:message>
        </ee:transform>
        <dynamics:update config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
            <dynamics:attributes>#[payload]</dynamics:attributes>
        </dynamics:update>
        <logger message="'Update Entity Operation' has ended with success" level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Response to JSON">
                        <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="UPDATE_MULTIPLE_ENTITIES_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/updateMultipleAccounts" doc:name="HTTP"/>
        <logger message="Requested 'Update Multiple Entities Operation'" level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
input payload application/json
output application/java
---
payload map {
        entityId: $.EntityId,
        attributes: {
                name: $.AccountName
        }
}]]></ee:set-payload>
                        </ee:message>
        </ee:transform>
        <dynamics:update-multiple config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
            <dynamics:entities-attributes>#[payload]</dynamics:entities-attributes>
        </dynamics:update-multiple>
        <logger message="Received Response from 'Update Multiple Entities Operation'"
            level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Response to JSON">
                        <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="DELETE_ENTITY_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/deleteAccount" doc:name="HTTP"/>
        <logger message="Requested 'Delete Entitiy Operation'" level="INFO" doc:name="Logger"/>
        <dynamics:delete config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
                        <dynamics:id>#[payload.EntityId]</dynamics:id>
                </dynamics:delete>
        <logger message="'Delete Entity Operation' has ended with success" level="INFO" doc:name="Logger"/>
    </flow>
    <flow name="RETRIEVE_ENTITY_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccount" doc:name="HTTP"/>
        <logger message="Requested 'Retrieve Entitiy Operation'" level="INFO" doc:name="Logger"/>
        <dynamics:retrieve config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
                        <dynamics:id>#[payload.EntityId]</dynamics:id>
                </dynamics:retrieve>
        <logger message="Received Response from 'Retrieve Entitiy Operation'"
            level="INFO" doc:name="Logger"/>
        <ee:transform doc:name="Response to JSON">
                        <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="RETRIEVE_ENTITIES_BY_URL_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccountsByURL" doc:name="HTTP"/>
        <logger message="Requested 'Retrieve Multiple Operation'" level="INFO" doc:name="Logger"/>
        <dynamics:retrieve-multiple config-ref="Dynamics_365_config" doc:name="Microsoft Dynamics 365">
                <dynamics:data-query-url>${config-oauth-user-pass.resource}/api/data/v8.2/accounts?$select=name,accountnumber&amp;$top=3</dynamics:data-query-url>
        </dynamics:retrieve-multiple>

        <logger message="Received Response from 'Retrieve Multiple Operation'" level="INFO"
            doc:name="Logger"/>
        <ee:transform doc:name="Response to JSON">
                        <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="RETRIEVE_ENTITIES_BY_QUERY_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/retrieveAccountsByQuery" doc:name="HTTP"/>
        <logger message="Requested 'Retrieve Multiple By Query Operation'" level="INFO" doc:name="Logger"/>
        <dynamics:retrieve-multiple-by-query config-ref="Dynamics_365_config"
            doc:name="Microsoft Dynamics 365">
                <dynamics:query>dsql:SELECT accountid,accountnumber,name FROM accounts LIMIT 2</dynamics:query>
        </dynamics:retrieve-multiple-by-query>

        <logger message="Received Response from 'Retrieve Multiple By Query Operation'"
            level="INFO" doc:name="Logger"/>
                <ee:transform doc:name="Response to JSON">
                        <ee:message>
                                <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
                        </ee:message>
                </ee:transform>
    </flow>
    <flow name="DISASSOCIATE_ENTITIES_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/disassociateEntities" doc:name="HTTP"/>
        <logger level="INFO" doc:name="Logger" message="Requested 'Dissasociate Entities Operation'"/>
        <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
        entityId: payload.EntityId,
        attributes: payload.EntityLinkKeys
}]]></ee:set-payload>
                        </ee:message>
        </ee:transform>
        <dynamics:disassociate config-ref="Dynamics_365_config" logicalName="account"
            doc:name="Microsoft Dynamics 365">
            <dynamics:attributes>#[payload]</dynamics:attributes>
        </dynamics:disassociate>
        <logger level="INFO" doc:name="Logger"
            message="Finished 'Dissasociate Entities Operation' with success"/>
    </flow>
    <flow name="DO_ACTION_DEMO">
        <http:listener config-ref="HTTP_Listener_config" path="/doAction" doc:name="HTTP"/>
        <logger message="Requested 'Do Action Operation'" level="INFO" doc:name="Logger"/>

                <ee:transform doc:name="Transform Message">
            <ee:message>
                    <ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
        OpportunityClose: {
                subject: payload.Subject,
                "opportunityid@odata.bind": "/opportunities(" ++ payload.OpportunityId ++ ")"
        },
        Status: payload.Status
}]]></ee:set-payload>
                        </ee:message>
        </ee:transform>
        <dynamics:do-action config-ref="Dynamics_365_config" actionName="WinOpportunity"
            doc:name="Microsoft Dynamics 365"/>
        <logger message="Finished 'Do Action Operation'" level="INFO" doc:name="Logger"/>
    </flow>
</mule>