在PREM Dynamics CRM 2016上相当于我的C#QueryExpression

问题描述 投票:2回答:2

我正在尝试从Dynamics CRM获取特定查询表达式的FetchXML查询。我已经在C#项目中使用XRM SDK进行了如下操作。

       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#那样友好(也许它只是我:)。我真的很感激任何能够尝试编写上述代码的JS等价物的人,或者指导一个可以帮助我自己解决问题的好材料。我的主要兴趣是从动态强类型QueryExpression对象生成FetchXml查询。谢谢!

javascript c# dynamics-crm dynamics-crm-2016 query-expressions
2个回答
3
投票

您应该能够在Advanced中构建查询并从那里下载fetchxml以在JavaScript中使用。 Read more

您可以使用XrmToolBox - FetchXml Builder以及for building queries(这也会给SQL,QueryExpression等效),然后使用此online formatter tool生成语言兼容输出

可以在this blog中找到在JavaScript中使用fetchxml的代码示例。例如:

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中使用。


2
投票

除了@ Arun的优秀答案之外,另一种可能性是将您的逻辑保留在C#中并将其作为custom Action在系统中注册,然后call from JavaScript

© www.soinside.com 2019 - 2024. All rights reserved.