【问题标题】:On PREM Dynamics CRM 2016 JavaScript equivalent of my C# QueryExpression在 PREM Dynamics CRM 2016 JavaScript 上相当于我的 C# QueryExpression
【发布时间】:2019-01-24 23:02:09
【问题描述】:

我正在尝试从 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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复。我主要是插入动态创建 FetchXml 内容。 “ColumnSet”、“FilterExpression”和“ConditionExpression”都将是动态的。它们会根据字段数量、通过的过滤器/过滤器的类型而变化。显然,我的代码在当前状态下没有显示出来。
    • 一个问题,这个代码有没有对应的JS:QueryExpressionToFetchXmlResponse resp = (QueryExpressionToFetchXmlResponse)service.Execute(req);
    • QueryExpressionToFetchXml 仅存在于 .NET SDK 中。 WebAPI 缺少任何 QueryExpression 功能。
    【解决方案2】:

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

    【讨论】:

    • 不幸的是,我将在一个名为 Mule 的 ESB 中使用这个逻辑。我唯一的其他选择是Java。他们有一个 .Net 的连接器,但我试图避免这种情况..
    • 明白。在这种情况下,直接通过 OData 或 FetchXML 使用 WebAPI 是可行的方法。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2017-02-23
    相关资源
    最近更新 更多