web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Microsoft Dynamics CRM (Archived)

Converting JavaScript SOAP complex fetch join queries to the new endpoint

(0) ShareShare
ReportReport
Posted on by 5,421

Hi,

I'm trying to convert this query to run on crm 2013 with the new endpoints and active x free :

var xml = "" +
        "        <q1:EntityName>serviceappointment</q1:EntityName>" +
        "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
        "          <q1:Attributes>" +
        "            <q1:Attribute>scheduledstart</q1:Attribute>" +
        "            <q1:Attribute>scheduledend</q1:Attribute>" +
        "            <q1:Attribute>activityid</q1:Attribute>" +
        "          </q1:Attributes>" +
        "        </q1:ColumnSet>" +
        "        <q1:Distinct>false</q1:Distinct>" +
        "        <q1:LinkEntities>" +
        "          <q1:LinkEntity>" +
        "            <q1:LinkFromAttributeName>activityid</q1:LinkFromAttributeName>" +
        "            <q1:LinkFromEntityName>serviceappointment</q1:LinkFromEntityName>" +
        "            <q1:LinkToEntityName>activityparty</q1:LinkToEntityName>" +
        "            <q1:LinkToAttributeName>activityid</q1:LinkToAttributeName>" +
        "            <q1:JoinOperator>Natural</q1:JoinOperator>" +
        "            <q1:LinkEntities>" +
        "              <q1:LinkEntity>" +
        "                <q1:LinkFromAttributeName>partyid</q1:LinkFromAttributeName>" +
        "                <q1:LinkFromEntityName>activityparty</q1:LinkFromEntityName>" +
        "                <q1:LinkToEntityName>equipment</q1:LinkToEntityName>" +
        "                <q1:LinkToAttributeName>equipmentid</q1:LinkToAttributeName>" +
        "                <q1:JoinOperator>Natural</q1:JoinOperator>" +
        "                <q1:LinkCriteria>" +
        "                  <q1:FilterOperator>And</q1:FilterOperator>" +
        "                  <q1:Conditions>" +
        "                    <q1:Condition>" +
        "                      <q1:AttributeName>aar_territoryid</q1:AttributeName>" +
        "                      <q1:Operator>Equal</q1:Operator>" +
        "                      <q1:Values>" +
        "                       <q1:Value xmlns:q2=\"http://microsoft.com/wsdl/types/\" xsi:type=\"q2:guid\">" + territoryId + "</q1:Value>" +
        "                      </q1:Values>" +
        "                    </q1:Condition>" +
        "                    <q1:Condition>" +
        "                      <q1:AttributeName>aar_resourcetype</q1:AttributeName>" +
        "                      <q1:Operator>Equal</q1:Operator>" +
        "                      <q1:Values>" +
        "                        <q1:Value xsi:type=\"xsd:int\">3</q1:Value>" +
        "                      </q1:Values>" +
        "                    </q1:Condition>" +
        "                  </q1:Conditions>" +
        "                </q1:LinkCriteria>" +
        "              </q1:LinkEntity>" +
        "            </q1:LinkEntities>" +
        "          </q1:LinkEntity>" +
        "        </q1:LinkEntities>" +
        "        <q1:Criteria>" +
        "          <q1:FilterOperator>And</q1:FilterOperator>" +
        "          <q1:Conditions>" +
        "            <q1:Condition>" +
        "              <q1:AttributeName>statecode</q1:AttributeName>" +
        "              <q1:Operator>Equal</q1:Operator>" +
        "              <q1:Values>" +
        "                <q1:Value xsi:type=\"xsd:int\">3</q1:Value>" +
        "              </q1:Values>" +
        "            </q1:Condition>" +
        "            <q1:Condition>" +
        "              <q1:AttributeName>statuscode</q1:AttributeName>" +
        "              <q1:Operator>Equal</q1:Operator>" +
        "              <q1:Values>" +
        "                <q1:Value xsi:type=\"xsd:int\">4</q1:Value>" +
        "              </q1:Values>" +
        "            </q1:Condition>" +
        "          </q1:Conditions>" +
        "        </q1:Criteria>" +
        "";


I tried XrmServiceToolkit but it keep on throwing an error message that appear to be a framework bug

https://xrmservicetoolkit.codeplex.com/releases/view/134840

I also tried this but have bumped into different type of errors like "bad request"

Does anyone know a proper example on how to use the query above pointing to the new 2011 endpoint?

thanks

//Synchronous XMLHttpRequest to retrieve contact records
    var req = new XMLHttpRequest();
    req.open("POST", encodeURI(Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web"), false);
    try { req.responseType = 'msxml-document' } catch (e) { }
    req.setRequestHeader("Accept", "application/xml, text/xml, */*");
    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    req.setRequestHeader("SOAPAction","<a href="http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute</a>");
    req.onreadystatechange = function () {
        if (this.readyState == 4 /* complete */) {
            req.onreadystatechange = null; //Addresses potential memory leak issue with IE
            if (this.status == 200  /*success*/) {
                var doc = req.responseXML;
                successCallback(doc);
            }
            else {
                errorCallback(accountId);
            }
        }
    }
    req.send(request);
},


*This post is locked for comments

I have the same question (0)
  • NatrajY Profile Picture
    3,040 on at

    Maybe try using the crmrestbuilder.codeplex.com and see what code it produces

  • Suggested answer
    Royal King Profile Picture
    27,686 on at

    You may need to adjust Join operator . Generate fetchxml using advancd find  or XRM toolbox Fetchxml Builder

    https://fxb.codeplex.com/

    Below script should get what you are looking for.

    function getServiceAppointments(territoryId) {

       var fetchXml='<fetch>'+

    '  <entity name="serviceappointment" >'+

    '    <attribute name="actualend" />'+

    '    <attribute name="actualstart" />'+

    '    <attribute name="activityid" />'+

    '    <filter>'+

    '      <condition attribute="statecode" operator="eq" value="3" />'+

    '      <condition attribute="statuscode" operator="eq" value="4" />'+

    '    </filter>'+

    '    <link-entity name="activityparty" from="activityid" to="activityid" link-type="inner" >'+

    '      <link-entity name="equipment" from="partyid" to="equipmentid" link-type="inner" >'+

    '        <filter>'+

    '          <condition attribute="aar_territoryid" operator="eq" value="'+territoryId+'" />'+

    '          <condition attribute="aar_resourcetype" operator="eq" value="3" />'+

    '        </filter>'+

    '      </link-entity>'+

    '    </link-entity>'+

    '  </entity>'+

    '</fetch>';

       //request SOAP envelope for the encoded fetchXML query

       var request = [

           '<s:Envelope xmlns:s="schemas.xmlsoap.org/.../&quot;><s:Body>',

               '<Execute xmlns="schemas.microsoft.com/.../Services&quot; xmlns:i="www.w3.org/.../XMLSchema-instance&quot; >',

                   '<request i:type="a:RetrieveMultipleRequest" xmlns:a="schemas.microsoft.com/.../Contracts&quot;>',

                       '<a:Parameters xmlns:b="schemas.datacontract.org/.../System.Collections.Generic&quot;>',

                           '<a:KeyValuePairOfstringanyType>',

                               '<b:key>Query</b:key>',

                               '<b:value i:type="a:FetchExpression">',

                                   '<a:Query>', encodeFetch(fetchXml), '</a:Query>',

                               '</b:value>',

                           '</a:KeyValuePairOfstringanyType>',

                       '</a:Parameters>',

                       '<a:RequestId i:nil="true"/>',

                       '<a:RequestName>RetrieveMultiple</a:RequestName>',

                   '</request>',

               '</Execute>',

           '</s:Body></s:Envelope>'

       ].join("");

       //Synchronous XMLHttpRequest to retrieve contact records

       var req = new XMLHttpRequest();

       req.open("POST", encodeURI(Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web"), false);

       try { req.responseType = 'msxml-document' } catch (e) { }

       req.setRequestHeader("Accept", "application/xml, text/xml, */*");

       req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

       req.setRequestHeader("SOAPAction","<a href="schemas.microsoft.com/.../Execute&quot;>schemas.microsoft.com/.../Execute&lt;/a>");

       req.onreadystatechange = function () {

           if (this.readyState == 4 /* complete */) {

               req.onreadystatechange = null; //Addresses potential memory leak issue with IE

               if (this.status == 200  /*success*/) {

                   var doc = req.responseXML;

                 //  successCallback(doc);

               }

               else {

                   alert(accountId);

               }

           }

       }

       req.send(request);

    }

    function encodeFetch(strInput) {

       var c;

       var XmlEncode = '';

       if (strInput == null) {

           return null;

       }

       if (strInput == '') {

           return '';

       }

       for (var cnt = 0; cnt < strInput.length; cnt++) {

           c = strInput.charCodeAt(cnt);

           if (((c > 96) && (c < 123)) ||

                    ((c > 64) && (c < 91)) ||

                    (c == 32) ||

                    ((c > 47) && (c < 58)) ||

                    (c == 46) ||

                    (c == 44) ||

                    (c == 45) ||

                    (c == 95)) {

               XmlEncode = XmlEncode + String.fromCharCode(c);

           }

           else {

               XmlEncode = XmlEncode + '&#' + c + ';';

           }

       }

       return XmlEncode;

    }

  • Bruno Lucas Profile Picture
    5,421 on at

    I have managed to convert a few queries with XrmServiceToolkit

    except for the query above.

    now, if I try to convert it step by step , it will work until I add the linkentities.

    this works fine:

    var query1 =
                         "<a:ColumnSet>" +
                          "<a:AllColumns>false</a:AllColumns>" +
                          "<a:Columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                            "<b:string>scheduledstart</b:string>" +
                            "<b:string>scheduledend</b:string>" +
                            "<b:string>activityid</b:string>" +
                          "</a:Columns>" +
                        "</a:ColumnSet>" +
                        "<a:Criteria>" +
                          "<a:Conditions />" +
                          "<a:FilterOperator>And</a:FilterOperator>" +
                          "<a:Filters>" +
                            "<a:FilterExpression>" +
                              "<a:Conditions>" +
                                "<a:ConditionExpression>" +
                                  "<a:AttributeName>statecode</a:AttributeName>" +
                                  "<a:Operator>Equal</a:Operator>" +
                                  "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                    "<b:anyType i:type='c:int' xmlns:c='http://www.w3.org/2001/XMLSchema'>3</b:anyType>" +
                                  "</a:Values>" +
                                "</a:ConditionExpression>" +
                              "</a:Conditions>" +
                              "<a:FilterOperator>And</a:FilterOperator>" +
                              "<a:Filters />" +
                            "</a:FilterExpression>" +
                          "</a:Filters>" +
                        "</a:Criteria>" +
                        "<a:Distinct>false</a:Distinct>" +
                        "<a:EntityName>serviceappointment</a:EntityName>" +
                        "<a:LinkEntities />" +
                        "<a:Orders />" +
                        "<a:PageInfo>" +
                          "<a:Count>0</a:Count>" +
                          "<a:PageNumber>0</a:PageNumber>" +
                          "<a:PagingCookie i:nil='true' />" +
                          "<a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>" +
                        "</a:PageInfo>" +
                        "<a:NoLock>false</a:NoLock>";
    
    
    
            var retrievedContacts = XrmServiceToolkit.Soap.RetrieveMultiple(query1);

    but this does not work:

     var query1 =
                         "<a:ColumnSet>" +
                          "<a:AllColumns>false</a:AllColumns>" +
                          "<a:Columns xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                            "<b:string>scheduledstart</b:string>" +
                            "<b:string>scheduledend</b:string>" +
                            "<b:string>activityid</b:string>" +
                          "</a:Columns>" +
                        "</a:ColumnSet>" +
                        "<a:Criteria>" +
                          "<a:Conditions />" +
                          "<a:FilterOperator>And</a:FilterOperator>" +
                          "<a:Filters>" +
                            "<a:FilterExpression>" +
                              "<a:Conditions>" +
                                "<a:ConditionExpression>" +
                                  "<a:AttributeName>statecode</a:AttributeName>" +
                                  "<a:Operator>Equal</a:Operator>" +
                                  "<a:Values xmlns:b='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" +
                                    "<b:anyType i:type='c:int' xmlns:c='http://www.w3.org/2001/XMLSchema'>3</b:anyType>" +
                                  "</a:Values>" +
                                "</a:ConditionExpression>" +
                              "</a:Conditions>" +
                              "<a:FilterOperator>And</a:FilterOperator>" +
                              "<a:Filters />" +
                            "</a:FilterExpression>" +
                          "</a:Filters>" +
                        "</a:Criteria>" +
                        "<a:Distinct>false</a:Distinct>" +
                        "<a:EntityName>serviceappointment</a:EntityName>" +
                        "<a:LinkEntities>" +
                        "<a:LinkEntity>" +
                        "<a:LinkFromAttributeName>partyid</a:LinkFromAttributeName>" +
                        "<a:LinkFromEntityName>activityparty</a:LinkFromEntityName>" +
                        "<a:LinkToEntityName>equipment</a:LinkToEntityName>" +
                        "<a:LinkToAttributeName>equipmentid</a:LinkToAttributeName>" +
                        "<a:JoinOperator>Natural</a:JoinOperator>" +
                        "<a:LinkCriteria>" +
                        "<a:FilterOperator>And</a:FilterOperator>" +
                        "<a:Conditions>" +
                        "<a:Condition>" +
                        "<a:AttributeName>aar_territoryid</a:AttributeName>" +
                        "<a:Operator>Equal</a:Operator>" +
                        "<a:Values>" +
                        "<a:Value xmlns:q2=\"http://microsoft.com/wsdl/types/\" xsi:type=\"q2:guid\">" + territoryId + "</a:Value>" +
                        "</a:Values>" +
                        "</a:Condition>" +
                        "<a:Condition>" +
                        "<a:AttributeName>aar_resourcetype</a:AttributeName>" +
                        "<a:Operator>Equal</a:Operator>" +
                        "<a:Values>" +
                        "<a:Value xsi:type=\"xsd:int\">3</a:Value>" +
                        "</a:Values>" +
                        "</a:Condition>" +
                        "</a:Conditions>" +
                        "</a:LinkCriteria>" +
                        "</a:LinkEntity>" +
                        "</a:LinkEntities>" +
                        "</a:LinkEntity>" +
                        "</a:LinkEntities>" +
                        "<a:Orders />" +
                        "<a:PageInfo>" +
                          "<a:Count>0</a:Count>" +
                          "<a:PageNumber>0</a:PageNumber>" +
                          "<a:PagingCookie i:nil='true' />" +
                          "<a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>" +
                        "</a:PageInfo>" +
                        "<a:NoLock>false</a:NoLock>";
    
    
    
            var retrievedContacts = XrmServiceToolkit.Soap.RetrieveMultiple(query1);


    any ideas?

  • Community Member Profile Picture
    on at

    As per the crm SDK 

    LinkCriteria object is having the ConditionExpression (not Condition).. Kindly try..

    <LinkEntities>
    <LinkEntity>
    <isAllColumns>false</isAllColumns>
    <ColumnNames>name</ColumnNames>
    <EntityAlias>referencedm2o.role</EntityAlias>
    <JoinOperator>Inner</JoinOperator>
    <LinkFromAttributeName>roleid</LinkFromAttributeName>
    <LinkFromEntityName>systemuserroles</LinkFromEntityName>
    <LinkToAttributeName>roleid</LinkToAttributeName>
    <LinkToEntityName>role</LinkToEntityName>
    <LinkCriteria>
    <FilterOperator>Or</FilterOperator>
    <Conditions>
    <ConditionExpression>
    <ConditionOperator>NotIn</ConditionOperator>
    <AttributeName>Id</AttributeName>
    <Values>
    <Value>1</Value>
    <Value>2/Value>
    <Value>3</Value>
    </Values>
    </ConditionExpression>
    </Conditions>
    </LinkCriteria>
    </LinkEntity>
    </LinkEntities>

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > 🔒一 Microsoft Dynamics CRM (Archived)

#1
SA-08121319-0 Profile Picture

SA-08121319-0 4

#1
Calum MacFarlane Profile Picture

Calum MacFarlane 4

#3
Alex Fun Wei Jie Profile Picture

Alex Fun Wei Jie 2

Last 30 days Overall leaderboard

Featured topics

Product updates

Dynamics 365 release plans