Dynamics CRM WEB API - Выберите поле из объекта ссылки - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь выбрать поле из другого объекта CRM, используя раскрытие с моим запросом odata.

Строка запроса: studios$?Select=studioid,studioname,titleid&$Expand=

Идентификатор заголовка - это поле в пользовательском объекте, которое называетсязаглавие.Как написать предложение по расширению для расширения заголовка и выбора titleid?

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

сначала вы можете обратиться к этой статье от docs.microsoft , подробно объясняющей функцию $ expand, однако для простоты следует имя отношения с целевым объектом, а затем поля, которые вы хотите выбрать в скобках

для отл.$expand={relation_name}($select=filed1,field2)

, что может быть что-то вроде этого
$expand=new_new_entity1_new_entity2($select=new_name,createdon)

Примечание: значения, которые вы получите из отношения расширения, будут фактически URL-адресом навигации к фактическим данным, так что вы не ожидаете, что [new_name, creationon] из new_entity2 будет извлечен, то вы получите URL-адрес для OData этих значений, и для этого вы, возможно, ниже помогаете функции 1 сделать это за вас

Также вы можете использовать XRM Rest Builder , это удивительное решение, когда вы устанавливаете на crm, вы найдете его кнопку в представлении решений.Это решение - инструмент, помогающий вам разработать запрос OData с красивым графическим интерфейсом, чтобы вам не нужно было писать и уточнять запрос OData, что быстрее и проще.

Функция помощи 1

`

function OdataExpand(expandUrl) {
    var result = null;
    var req = new XMLHttpRequest();
    req.open("GET", expandUrl, 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.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);
                result = results;
            } else {
                console.log("OdataExpand Error : ");
                console.log(this);
            }
        }
    };
    req.send();
    return result;
}

`

, но если вы хотите получить все данные одним вызовоми, возможно, вы захотите расширить до более чем одной сущности, я рекомендую вам использовать Fetch XML, просто спроектируйте нужную выборку с помощью инструмента расширенного поиска, чтобы извлечь fetchXML, а затем передать его в справочную функцию 2, которая должна вернуть полные данные, но помните, что maxдлина выборки в этом подходе ограничена 2048 символами [Макс. длина для запроса GET].

Функция помощи 2
`

function ExecuteFetchXMLQuery(dataSet, fetchQuery) {
    var encodedFetchXML = encodeURIComponent(fetchQuery);
    var result;
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/" + dataSet + "?fetchXml=" + encodedFetchXML, false);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200 || (this.status >= 200 && this.status <= 206)) {
                console.log("Success Executing Fetch");
                var results = JSON.parse(this.response);
                result = results;
            }
            else {
                console.log("Error Executing Fetch");
                console.log(this);
                console.log(this.statusText);
            }
        }
    };
    req.send();
    return result;}

`

0 голосов
/ 11 октября 2018

Попробуйте:

studios?$select=studioid,studioname,titleid&$expand=titleid($select=titleid,name)

Также рекомендуется использовать CRM REST Builder для составления и тестирования запросов веб-API CRM.

Подробнее

Примечание. Проверьте имена объектов и полей, они должны выглядеть как new_studio & new_studioid

...