На PREM Dynamics CRM 2016 JavaScript эквивалент моего C # QueryExpression - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь получить запрос FetchXML для конкретного выражения запроса из Dynamics CRM. Мне удалось сделать это с помощью XRM SDK в проекте C # следующим образом.

       string connectionStr = @"Server=https://mycompany.com/XRMServices/2011/Organization.svc; Username=theUserName; Password=pwd";

        Microsoft.Xrm.Client.CrmConnection conn = Microsoft.Xrm.Client.CrmConnection.Parse(connectionStr);


        var service = new Microsoft.Xrm.Client.CrmOrganizationServiceContext(conn);

        var query = new QueryExpression();

        QueryExpressionToFetchXmlRequest req = new QueryExpressionToFetchXmlRequest();

        query.EntityName = "my_entity";

        query.ColumnSet = new ColumnSet("_accountnumber", "_id");

        FilterExpression filter = new FilterExpression();

        filter.Conditions.Add(new ConditionExpression("_Oactivedate", ConditionOperator.NotNull));
        filter.Conditions.Add(new ConditionExpression("_Oinactivedate", ConditionOperator.Null));
        filter.Conditions.Add(new ConditionExpression("_state", ConditionOperator.Equal, 0));

        FilterExpression filter1 = new FilterExpression(LogicalOperator.Or);


        var filter2 = new FilterExpression(LogicalOperator.And);
        filter2.Conditions.Add(new ConditionExpression("_lastname", ConditionOperator.Equal, lastName));
        filter2.Conditions.Add(new ConditionExpression("_accountnumber", ConditionOperator.Equal, accountId));


        var filter3 = new FilterExpression(LogicalOperator.And);
        filter3.Conditions.Add(new ConditionExpression("_accountactivedate", ConditionOperator.NotNull));
        filter3.Conditions.Add(new ConditionExpression("_accountinactivedate", ConditionOperator.Null));




        filter1.AddFilter(filter2);
        filter1.AddFilter(filter3);

        filter.AddFilter(filter1);




        query.Criteria = filter;
        req.Query = query;
        QueryExpressionToFetchXmlResponse resp = (QueryExpressionToFetchXmlResponse)service.Execute(req);


        //fetchxml string
        string myfetch = resp.FetchXml; 

Мое требование не допускает .Net DLL, поэтому я хотел бы сделать это в JS. Я попытался взглянуть на JS SDK, и он не такой дружелюбный, как C # one (возможно, это только я :). Я был бы очень признателен всем, кто может попытаться написать JS-эквивалент моего кода выше или дать хороший материал, который поможет мне разобраться самому. Мой основной интерес - это генерация запроса FetchXml из динамически строго типизированного объекта QueryExpression. Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

В дополнение к превосходному ответу @ Аруна, другой возможностью было бы сохранить вашу логику в C # и зарегистрировать ее в системе как пользовательское действие , которое вы затем вызываете из JavaScript .

0 голосов
/ 25 января 2019

Вы должны быть в состоянии построить свой запрос в расширенном поиске и загрузите оттуда fetchxml для использования в JavaScript. Читать дальше

Вы можете использовать XrmToolBox - FetchXml Builder , а также для построения запросов (это также даст SQL, эквивалентный QueryExpression), а затем генерировать совместимый с языком вывод, используя этот онлайн-форматер инструмент

Пример кода для использования fetchxml в JavaScript можно найти в этом блоге . Например:

var encodedFetchXml = encodeURI(fetchContact);
var reqURL = clientURL + “/api/data/v8.2/contacts?fetchXml=” + encodedFetchXml;
var req = new XMLHttpRequest();
req.open(“GET”, reqURL, false);

QueryExpression, FetchXml, LINQ - все это варианты для написания одного и того же запроса. Как вы знаете - QueryExpression нельзя использовать в JavaScript, но fetchxml можно использовать как в C #, так и в JS.

...