Как передать null или пусто в фильтры 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>

person Mohsin A.    schedule 10.04.2019    source источник


Ответы (3)


К сожалению, вы не можете комбинировать значения ("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

Затем вы можете применить дополнительную фильтрацию на уровне табликса/отчета.

person jasonscript    schedule 08.05.2019
comment
Что такое @Order_Types? Я не могу найти документацию по этому типу переменных, которые начинаются с @ в FetchXML. - person Shadowfax; 06.05.2021
comment
@Shadowfax это из оригинального вопроса - person jasonscript; 07.05.2021
comment
правильно, это в исходном вопросе, но это действительная переменная или это просто какая-то тарабарщина, предназначенная для заполнителя? - person Shadowfax; 07.05.2021
comment
@Shadowfax о, я думаю, вы можете указать значения, разделенные запятыми, но обычно это будет так: <condition attribute="tv_ordertype" operator="in" ><value>option1</value><value>option2</value></condition> - person jasonscript; 11.05.2021

Попробуйте что-то вроде ниже

  <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>
person AnkUser    schedule 10.04.2019
comment
у меня не получилось и выдало ошибку: The FetchXML parameter "@Order_Types" cannot obtain multiple values. Change Parameter "@Order_Types" to single value parameter and try again - person Mohsin A.; 10.04.2019
comment
Я обновил свой ответ. Получает ли ваш параметр все Order_Types? Можете ли вы опубликовать скриншот вашего параметра и вашего запроса. Ссылка на ссылку nishantrana.me/2016/03/04/ - person AnkUser; 10.04.2019

Ваш 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>
person Zach Mast    schedule 12.04.2019