Search code examples
soapdynamics-crmcrm

Need a raw xml for PropagateByExpressionRequest for MS Dynamics CRM


I need a small help.

In MS Dynamics CRM there is a request - PropagateByExpressionRequest. Its purpouse to create a QuickCampaign. Here is an exmaple for C#:

MSDN:

// create the bulkoperation
PropagateByExpressionRequest request = new PropagateByExpressionRequest() {
    Activity = emailActivityEntity,
    ExecuteImmediately = false, // Default value.
    FriendlyName = "Query Based Quick Campaign",
    OwnershipOptions = ownershipOption,
    QueryExpression = query,
    Owner = new EntityReference("systemuser", _currentUser),
    PostWorkflowEvent = true,
    SendEmail = false,
    TemplateId = Guid.Empty
};

Thing is, we are using Java and i need a raw XML-example of this request but i could not find it.

If someone knows how it looks like or how to get it - please help. :)

Edit 1: CRM Version 2015.

Edit 2: Example (question in attributes name, format):

<s:Envelope
    xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts"
    xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:c="http://www.w3.org/2001/XMLSchema"
>
  <s:Body>
    <Execute>
      <request i:type="a:PropagateByExpressionRequest">
        <a:Parameters>
          <a:KeyValuePairOfstringanyType>
            <b:key>FriendlyName</b:key>
            <b:value i:type="c:string">Query Based Quick Campaign</b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>ExecuteImmediately</b:key>
            <b:value i:type="c:boolean">true</b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>Activity</b:key>
            <b:value i:type="a:Entity">
              <a:KeyValuePairOfstringanyType>
                <b:key>activityid</b:key>
                <b:value i:type="c:string">00000000-0000-0000-0000-000000000000</b:value>
              </a:KeyValuePairOfstringanyType>
            </b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>TemplateId</b:key>
            <b:value i:type="a:EntityReference">
              <a:Id>00000000-0000-0000-0000-000000000000</a:Id>
              <a:LogicalName>phonecall</a:LogicalName>
              <a:Name></a:Name>
            </b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>OwnershipOptions</b:key>
            <b:value i:type="c:integer">1</b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>PostWorkflowEvent</b:key>
            <b:value i:type="c:boolean">true</b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>Owner</b:key>
            <b:value i:type="a:EntityReference">
              <a:Id>00000000-0000-0000-0000-000000000000</a:Id>
              <a:LogicalName>systemuserid</a:LogicalName>
              <a:Name></a:Name>
            </b:value>
          </a:KeyValuePairOfstringanyType>
          <a:KeyValuePairOfstringanyType>
            <b:key>SendEmail</b:key>
            <b:value i:type="c:boolean">false</b:value>
          </a:KeyValuePairOfstringanyType>
        </a:Parameters>
        <a:RequestId>00000000-0000-0000-0000-000000000000</a:RequestId>
        <a:RequestName>PropagateByExpression</a:RequestName>
      </request>
    </Execute>
  </s:Body>
</s:Envelope>

Solution

  • SOAP endpoint is deprecated and we have a REST web api - so we can use PropagateByExpression Action. Read more

    Sample code will look like this: (Sorry I'm not from Java background but I know Javascript)

    var parameters = {};
    parameters.FriendlyName = "Query Based Quick Campaign";
    parameters.ExecuteImmediately = false;
    var activity = {};
    activity.activityid = "00000000-0000-0000-0000-000000000000"; //Delete if creating new record 
    activity["@odata.type"] = "Microsoft.Dynamics.CRM.email";
    parameters.Activity = activity;
    parameters.TemplateId = "00000000-0000-0000-0000-000000000000";
    parameters.OwnershipOptions = ownershipOption;
    parameters.PostWorkflowEvent = true;
    var owner = {};
    owner.systemuserid = "00000000-0000-0000-0000-000000000000"; //Delete if creating new record 
    owner["@odata.type"] = "Microsoft.Dynamics.CRM.systemuser";
    parameters.Owner = owner;
    parameters.SendEmail = false;
    
    var req = new XMLHttpRequest();
    req.open("POST", "https://devcrmorgname.crm.dynamics.com/api/data/v9.1/PropagateByExpression", true);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.onreadystatechange = function() {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200) {
                var results = JSON.parse(this.response);
            } else {
    
            }
        }
    };
    req.send(JSON.stringify(parameters));