微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 RetrieveMultiple 查询为 Fetch Expression 时如何放置 And 和 OR 过滤器类型

如何解决当 RetrieveMultiple 查询为 Fetch Expression 时如何放置 And 和 OR 过滤器类型

当输入参数查询的类型为 Fetch Expression 时,请建议如何在 RetrieveMultiple 插件中使用以下相同的查询表达式过滤 CRM/模型驱动的应用程序统一客户端接口视图:

FilterExpression filter = new FilterExpression(LogicalOperator.Or);

string[] sourceChannel = new string[] { "Central Bank","AECB" };

FilterExpression filter1 = new FilterExpression(LogicalOperator.And);
filter1.Conditions.Add(new ConditionExpression("sourcechannelidname",Conditionoperator.notin,sourceChannel));
filter1.Conditions.Add(new ConditionExpression("casetypecode",Conditionoperator.Equal,1));

FilterExpression filter2 = new FilterExpression(LogicalOperator.And);
filter2.Conditions.Add(new ConditionExpression("sourcechannelidname",Conditionoperator.In,sourceChannel));
filter2.Conditions.Add(new ConditionExpression("valid",1));
filter2.Conditions.Add(new ConditionExpression("casetypecode",1));

FilterExpression filter3 = new FilterExpression(LogicalOperator.And);
filter3.Conditions.Add(new ConditionExpression("sourcechannelidname",sourceChannel));
filter3.Conditions.Add(new ConditionExpression("valid",2));
filter3.Conditions.Add(new ConditionExpression("reopeningcount",Conditionoperator.GreaterThan,0));
filter3.Conditions.Add(new ConditionExpression("casetypecode",1));

FilterExpression filter4 = new FilterExpression(LogicalOperator.And);
filter4.Conditions.Add(new ConditionExpression("sourcechannelidname",sourceChannel));
filter4.Conditions.Add(new ConditionExpression("valid",2));
filter4.Conditions.Add(new ConditionExpression("statecode",Conditionoperator.NotEqual,0));
filter4.Conditions.Add(new ConditionExpression("casetypecode",1));

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

qe.Criteria.AddFilter(filter);

我尝试了以下 Microsoft 文档的帮助,如下所述:

https://docs.microsoft.com/en-us/powerapps/developer/data-platform/org-service/samples/modify-query-preoperation-stage

但我不知道如何在下面的 XML 文档中放置 And 和 OR 过滤器类型。

非常感谢任何帮助或指导。

entityElement.Add(
  new XElement("filter",new XElement("condition",new XAttribute("attribute","sourcechannelidname"),new XAttribute("operator","not-in"),//not equal
      new XElement("value",new XText("Central Bank")),new XElement("value",new XText("AECB"))
    ),"casetypecode"),"eq"),//equal
      new XAttribute("value","1"),//Complaints
    )
  )
);

解决方法

在 FetchXml 中,您尝试编写的表达式是(参见 type='and'):

<filter type='and' >
  <condition attribute='sourcechannelidname' operator='not-in' >
    <value>Central Bank</value>
    <value>AECB</value>
  </condition>
  <condition attribute='casetypecode' operator='eq' value='1' >
</filter>

所以我认为您只需要在“过滤器”XAttribute

上指定一个 XElement
entityElement.Add(
  new XElement("filter",new XAttribute("type","and"),new XElement("condition",new XAttribute("attribute","sourcechannelidname"),new XAttribute("operator","not-in"),//not equal
      new XElement("value",new XText("Central Bank")),new XElement("value",new XText("AECB"))
    ),"casetypecode"),"eq"),//equal
      new XAttribute("value","1"),//Complaints
    )
  )
);
,

XrmToolbox 现在可以将 C# 解析为提取表达式。只需使用“查看”菜单并选择“QueryExpression”以使其拉开窗口,然后将您的有效代码输入(或粘贴)到其中并单击“解析”,它将为您将其转换为 FetchXml。 您没有包含完整的 fetchXml 查询,我不认识字段名称,但我将其复制到 OOTB 事件查询(因为我知道它有 casetypecode 字段)并用相同类型替换字段名称。我将它们设为参数,以便您可以轻松地用您自己的参数替换它们。这是我使用的代码:

// Instantiate QueryExpression query
var query = new QueryExpression("incident");
query.TopCount = 50;

// Add all columns to query.ColumnSet
query.ColumnSet.AllColumns = true;

FilterExpression filter = new FilterExpression(LogicalOperator.Or);

string[] sourceChannel = new string[] { "Central Bank","AECB" };
var stringColName = "ticketnumber";
var intColName = "timezoneruleversionnumber";
var pickColName = "servicestage";

FilterExpression filter1 = new FilterExpression(LogicalOperator.And);
filter1.Conditions.Add(new ConditionExpression(stringColName,ConditionOperator.NotIn,sourceChannel));
filter1.Conditions.Add(new ConditionExpression("casetypecode",ConditionOperator.Equal,1));

FilterExpression filter2 = new FilterExpression(LogicalOperator.And);
filter2.Conditions.Add(new ConditionExpression(stringColName,ConditionOperator.In,sourceChannel));
filter2.Conditions.Add(new ConditionExpression(pickColName,1));
filter2.Conditions.Add(new ConditionExpression("casetypecode",1));

FilterExpression filter3 = new FilterExpression(LogicalOperator.And);
filter3.Conditions.Add(new ConditionExpression(stringColName,sourceChannel));
filter3.Conditions.Add(new ConditionExpression(pickColName,2));
filter3.Conditions.Add(new ConditionExpression(intColName,ConditionOperator.GreaterThan,0));
filter3.Conditions.Add(new ConditionExpression("casetypecode",1));

FilterExpression filter4 = new FilterExpression(LogicalOperator.And);
filter4.Conditions.Add(new ConditionExpression(stringColName,sourceChannel));
filter4.Conditions.Add(new ConditionExpression(pickColName,2));
filter4.Conditions.Add(new ConditionExpression("statecode",ConditionOperator.NotEqual,0));
filter4.Conditions.Add(new ConditionExpression("casetypecode",1));

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

query.Criteria.AddFilter(filter); 

这是它创建的过滤器:

<filter type="and" >
  <filter type="or" >
    <filter type="and" >
      <condition attribute="ticketnumber" operator="not-in" >
        <value>Central Bank</value>
        <value>AECB</value>
      </condition>
      <condition attribute="casetypecode" operator="eq" value="1" />
    </filter>
    <filter type="and" >
      <condition attribute="ticketnumber" operator="in" >
        <value>Central Bank</value>
        <value>AECB</value>
      </condition>
      <condition attribute="servicestage" operator="eq" value="1" />
      <condition attribute="casetypecode" operator="eq" value="1" />
    </filter>
    <filter type="and" >
      <condition attribute="ticketnumber" operator="in" >
        <value>Central Bank</value>
        <value>AECB</value>
      </condition>
      <condition attribute="servicestage" operator="eq" value="2" />
      <condition attribute="timezoneruleversionnumber" operator="gt" value="0" />
      <condition attribute="casetypecode" operator="eq" value="1" />
    </filter>
    <filter type="and" >
      <condition attribute="ticketnumber" operator="in" >
        <value>Central Bank</value>
        <value>AECB</value>
      </condition>
      <condition attribute="servicestage" operator="eq" value="2" />
      <condition attribute="statecode" operator="ne" value="0" />
      <condition attribute="casetypecode" operator="eq" value="1" />
    </filter>
  </filter>
</filter>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?