Я пытаюсь получить объект Invoices, связанный с объектом Invoiceline, но не получаю результата - PullRequest
0 голосов
/ 30 июня 2019

Моя выборка работает нормально, когда я использую только атрибуты, но когда я добавляю объект-ссылку или фильтр, он не работает. Вот код ссылки. Пожалуйста, помогите найти мою ошибку!

Эти два объекта связаны с полем имени в Invoice и полем счета в invoiceline.

    var fetchInvoices = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">';
        fetchInvoices += '<entity name="hms_invoice">';
        fetchInvoices += '<attribute name="hms_name"/>';
        fetchInvoices += '<attribute name="hms_customer" />';
        fetchInvoices += '<link-entity name="hms_invoiceline" from="hms_invoice" to="hms_name">';
        fetchInvoices += '<attribute name="hms_amount" />';
        fetchInvoices += '</link-entity>';
        fetchInvoices += '</entity>';
        fetchInvoices += '</fetch>';

    var invoices = XrmServiceToolkit.Soap.Fetch(fetchInvoices);
    alert(invoices.length);

Мне нужно получить имя и клиента из счета-фактуры и сумму из строк счета-фактуры.

1 Ответ

0 голосов
/ 01 июля 2019

Я бы воздержался от использования формы XrmServiceToolkit.Soap.Fetch, так как вам придется добавить стороннюю библиотеку для ее использования, а SOAP не поддерживается в последней версии. Вместо этого я бы посоветовал использовать Webapi, поскольку это поддерживаемый и самый простой способ извлечения данных.

Вот ссылка, которая предоставит вам более подробную информацию о вызовах Webserevice в D365 crm.

Ниже я попытался извлечь все контакты для определенного идентификатора учетной записи, например: У учетной записи A есть 3 контакта, связанныхи я выбираю все 3 контакта.

Вот пример кода для него.

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/contacts?$select=_accountid_value,contactid,fullname&$filter=_accountid_value eq 4930FC98-5F75-E911-A83C-000D3A385DD4", 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 results = JSON.parse(this.response);
            for (var i = 0; i < results.value.length; i++) {
                var _accountid_value = results.value[i]["_accountid_value"];
                var _accountid_value_formatted = results.value[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"];
                var _accountid_value_lookuplogicalname = results.value[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
                var contactid = results.value[i]["contactid"];
                var fullname = results.value[i]["fullname"];
            }
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();

Существует еще один новый способ вызова webapi с меньшим кодом, какниже

Xrm.WebApi.online.retrieveMultipleRecords("contact", "?$select=_accountid_value,contactid,fullname&$filter=_accountid_value eq 4930FC98-5F75-E911-A83C-000D3A385DD4").then(
    function success(results) {
        for (var i = 0; i < results.entities.length; i++) {
            var _accountid_value = results.entities[i]["_accountid_value"];
            var _accountid_value_formatted = results.entities[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"];
            var _accountid_value_lookuplogicalname = results.entities[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
            var contactid = results.entities[i]["contactid"];
            var fullname = results.entities[i]["fullname"];
        }
    },
    function(error) {
        Xrm.Utility.alertDialog(error.message);
    }
);
...