Получение значения объекта поиска с использованием CRM REST BUILDER - PullRequest
0 голосов
/ 12 января 2020

Я новичок в CRM Dynamics. У меня есть требование.

Предположим, что у меня есть 2 связанных объекта: "Cat" и "Dog", и у меня есть простые поля "Cat_Food" и "Dog_Food" на них соответственно. У меня есть поле поиска Entity Dog в форме Entity Cat, названное "Lookup_Cat". Теперь, как только значение поиска Dog выбрано, я хочу, чтобы поле Cat "Cat_Food" было заполнено значением поля "Dog_Food" (selected lookup) Dog, используя Javascript.

Теперь я видел на на многих сайтах был предложен CRM REST BUILDER. Я использовал его, но он не заполняется и не выдает никакой ошибки: Вот код:

// JavaScript source code

function abc(executionContext)
{
var formContext = executionContext.getFormContext();
var new_dogfood;
var lookup = new Array();
lookup = formContext.getAttribute("Cat_Food").getValue();
if (lookup != null)
{
var name = lookup[0].name;
var id = lookup[0].id;
var entityType = lookup[0].entityType;
}
var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/Dog(id)?$select=Dog_Food", false);
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 result = JSON.parse(this.response);
    new_dogfood = result["Dog_Food"];
    }  
    else 
    {
    Xrm.Utility.alertDialog(this.statusText);
    }
}
};
req.send();
var x =  formContext.getAttribute("Cat_Food");
x.setValue(new_dogfood);
}

1 Ответ

0 голосов
/ 16 января 2020

Когда вы используете Webpi для извлечения данных и особенно схемы Lookup Id, Lookup основного имени и имени Lookup Entity, вы должны включить аннотации в заголовок вашего запроса.

req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");

Я опубликую короткий пример запросите здесь для Учетной записи, и я пытаюсь получить Первичную Учетную запись (поиск) для сущности Учетной записи и Первичный контакт (поиск) для Учетной записи.

запрос, как показано ниже

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/accounts(290FB459-D1F4-E911-A813-000D3A4AA4FD)?$select=name,_parentaccountid_value,_primarycontactid_value", 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.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {
            var result = JSON.parse(this.response);
            var name = result["name"];
            var _parentaccountid_value = result["_parentaccountid_value"];
            var _parentaccountid_value_formatted = result["_parentaccountid_value@OData.Community.Display.V1.FormattedValue"];
            var _parentaccountid_value_lookuplogicalname = result["_parentaccountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
            var _primarycontactid_value = result["_primarycontactid_value"];
            var _primarycontactid_value_formatted = result["_primarycontactid_value@OData.Community.Display.V1.FormattedValue"];
            var _primarycontactid_value_lookuplogicalname = result["_primarycontactid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};

, и вот ответ Я получаю

{
    "@odata.context": "https://abc.xyz.dynamics.com/api/data/v9.1/$metadata#accounts(name,_parentaccountid_value,_primarycontactid_value)/$entity",
    "@odata.etag": "W/\"23463189\"",
    "name": "ABC Account name",
    "_parentaccountid_value@OData.Community.Display.V1.FormattedValue": "Account Reassignment - 3010 NE",
    "_parentaccountid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "parentaccountid",
    "_parentaccountid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
    "_parentaccountid_value": "75e562f9-06fb-e911-a813-000d3a4aa2c1",
    "_primarycontactid_value": null,
    "accountid": "290fb459-d1f4-e911-a813-000d3a4aa4fd"
}

Теперь для вас интересный код сверху ниже 4 строк результата для родительского аккаунта

"_parentaccountid_value@OData.Community.Display.V1.FormattedValue": "Account Reassignment - 3010 NE",
        "_parentaccountid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "parentaccountid",
        "_parentaccountid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
        "_parentaccountid_value": "75e562f9-06fb-e911-a813-000d3a4aa2c1",
...