CRM 2011: получение сущности с помощью Javascript

Я работаю над некоторыми настройками CRM 2011 Online, и мне нужно получить сущность, используя javascript.

Нужная мне сущность будет основана на значении идентификатора другого поля (контактной сущности) - этот контактный идентификатор я могу получить в порядке.

Сущность, которую я хочу, является пользовательской сущностью. Может быть несколько совпадений на основе идентификатора контакта, поэтому я просто хочу получить первое в списке (порядок не важен)

До сих пор я рассмотрел несколько способов сделать это ...

OData - я не смог найти достаточно примеров по поводу того, какие выражения запросов я могу создать, также я не знаю, если / как заставить это работать для пользовательских объектов

FetchXML - я могу создать хороший запрос FetchXML, используя встроенный «расширенный поиск», и был бы рад вызвать его из javascript, если кто-нибудь может помочь? Я нашел один многообещающий ответВот но я не мог видеть, как устанавливаются возвращаемые данные «результатов» (функция Service.Fetch)

Запрос SOAP. Первое, что я попробовал, - это метод, подобный тому, который я мог бы сделать в CRM 4, но, похоже, он не работает. Хотя запрос выполняется, мои данные о результатах просто кажутся пустыми. Это все, что у меня есть код, так что если кто-то может обнаружить проблему с кодом ниже, это было бы здорово.

РЕДАКТИРОВАТЬЯ обнаружил некоторые избыточные данные запроса (я удалил теги открытия ссылок, но оставил закрывающие теги) - после удаления я теперь получаю данные результатов XML ... однако предложение where, кажется, не применяется (просто получить список всех объектов )

    var xml = "<?xml version='1.0' encoding='utf-8'?>" + 
    "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + 
    GenerateAuthenticationHeader() +
    "<soap:Body>" + 
    "<RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + 
    "<query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" + 
    "<q1:EntityName>new_vehicle</q1:EntityName>" + 
    "<q1:ColumnSet xsi:type='q1:ColumnSet'>" + 
    "<q1:Attributes>" + 
    "<q1:Attribute>new_vehicleid</q1:Attribute>" +
    "<q1:Attribute>new_primarydriver</q1:Attribute>" +
    "<q1:Attribute>statuscode</q1:Attribute>" +
    "<q1:Attribute>new_registration</q1:Attribute>" +
    "</q1:Attributes>" + 
    "</q1:ColumnSet>" + 
    "<q1:Distinct>false</q1:Distinct>" + 

    "<q1:Conditions>" + 

                     "<q1:Condition>" +
                     "<q1:AttributeName>new_primarydriver</q1:AttributeName>" +
    "<q1:Operator>Equal</q1:Operator>" +
    "<q1:Values>" +
    "<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>" +
    customerID +
    "</q1:Value></q1:Values></q1:Condition>" + 

    "</q1:Conditions>" +

    "</query></RetrieveMultiple>" +
    "</soap:Body></soap:Envelope>";


    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
    xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);

    var result = xmlHttpRequest.responseXML.xml;
    var doc = new ActiveXObject("MSXML2.DOMDocument");
    doc.async = false;
    doc.loadXML(result);

    var id = doc.selectSingleNode("//new_vehicleid");
    var registration = doc.selectSingleNode("//new_registration");

    if(id == null)
       return null;

    var vehicle = new Array();
                     value[0] = new Object();
                     value[0].id = id;
                     value[0].name = registration;
                     value[0].entityType = "new_vehicle";

    return vehicle;

Извините за большой пост кода, но, надеюсь, кто-то, кто лучше понимает, может помочь

Ответы на вопрос(1)

Ваш ответ на вопрос