如何将null或empty传递给FetchXML过滤器?

时间:2019-04-10 10:56:52

标签: filter dynamics-crm-2011 fetchxml

方案:我在Dynamics CRM中的订单类型上有一个文本字段。该字段与其他一些系统集成在一起,它将仅接受已经声明的值列表;例如ABC,IJK,XYZ等。现在,我可以使用“高级查找”查询此字段是否包含数据。

现在在报告中,我有一个参数,该参数具有所有可能的值以及一个附加值,例如“不包含数据”,其值为空字符串。我还启用了此报告参数以进行多选。但是,如果从报表参数中选择任何值,我将无法获得订单。

下面是我的FetchXML查询,请让我知道下面缺少的内容。

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="invoicedetail">
   <attribute name="productid" />
    <attribute name="invoicedetailid" />
    <attribute name="tv_ordertype" />
    <order attribute="productid" descending="false" />
    <filter type="and">
        <condition attribute="tv_ordertype" operator="in" value="@Order_Types" />
    </filter>
  </entity>
</fetch>

3 个答案:

答案 0 :(得分:0)

不幸的是,您不能将值(“ ABC”,“ IJK”,“ XYZ”)与空字符串选项结合使用。考虑一下SSRS如何将空字符串解析为FetchXml:

<condition attribute="tv_ordertype" operator="in" value="" />

由于in运算符具有空字符串,因此将没有匹配的结果。

一种可行的方法是将FetchXml更改为使用or过滤器,例如

<filter type="or">
    <condition attribute="tv_ordertype" operator="null" />
    <condition attribute="tv_ordertype" operator="in" value="@Order_Types" />
</filter>

这现在将返回CRM中与您的条件匹配的所有值,或者返回空的tv_ordertype

然后,您可以在tablix /报告级别应用其他过滤

答案 1 :(得分:-1)

尝试以下类似方法

  <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
    <entity name="invoicedetail">
        <attribute name="productid" />
        <attribute name="invoicedetailid" />
        <attribute name="tv_ordertype" />
        <order attribute="productid" descending="false" />      
        <filter type='and'>         
<condition attribute="tv_ordertype" operator="in" value="@Order_Types" />
        </filter>
    </entity>
</fetch>

答案 2 :(得分:-1)

您的提取XML应该如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
   <entity name="invoicedetail">
      <attribute name="productid" />
      <attribute name="invoicedetailid" />
      <attribute name="tv_ordertype" />
      <order attribute="productid" descending="false" />
      <filter type="and">
         <condition attribute="tv_ordertype" operator="in"/>
            <value>@Order_Types[0]</value>
            <value>@Order_Types[1]</value>
            <!-- etc -->
         </condition>
      </filter>
   </entity>
</fetch>