使用lt和gt以及使用ge&le时如何获取fetchxml来查找所有帐户无法正常工作

时间:2019-07-15 13:02:33

标签: crm dynamics-365 fetchxml

我刚开始使用fetchxml和dynamics 365(v9)...

因此,我有一个Dynamics 365计划服务,需要将其分成较小的块。但是,在为每个计划构建fetchxml查询时,我发现总和没有加起来。

未过滤帐户名的整个查询为1158。

但是当使用条件(如下)时,当我将所有结果加起来时,我仍然短缺37个帐户。

<!-- this query Returns 1158 account objects. -->

<fetch distinct="true">
  <entity name="account" >
    <attribute name="name" />
    <attribute name="accountid" />
    <filter type="and" >
      <condition attribute="accounttype" operator="in" >
        <value>1</value>
        <value>2</value>
      </condition>
      <condition attribute="statuscode" operator="eq" value="1" />
    </filter>
    <link-entity name="account" from="parentaccountid" to="accountid" link-type="inner" >
      <filter type="or" >
        <condition attribute="statuscode" operator="eq" value="403310000" />
        <condition attribute="statuscode" operator="eq" value="403310007" />
      </filter>
    </link-entity>
  </entity>
</fetch>

我分解了过滤器,只包含以两个字母开头的帐户名称,然后重复此操作,直到覆盖了整个字母。


    <filter type="and" >
     <condition attribute="name" operator="gt" value="a" />
     <condition attribute="name" operator="lt" value="i" />
    </filter>

    <filter type="and" >
     <condition attribute="name" operator="gt" value="j" />
     <condition attribute="name" operator="lt" value="q" />
    </filter>

    <filter type="and" >
     <condition attribute="name" operator="gt" value="r" />
     <condition attribute="name" operator="lt" value="z" />
    </filter>

然后我发现我还需要添加数字...足够公平...

    <filter type="and" >
     <condition attribute="name" operator="gt" value="0" />
     <condition attribute="name" operator="lt" value="9" />
    </filter>

所有这些查询加起来为1121,仍然短了37。

所以,我认为我一定犯错了,应该在上面的过滤器中使用'ge'和'le',我得到的结果完全相同。

    <filter type="and" >
     <condition attribute="name" operator="ge" value="s1" />
     <condition attribute="name" operator="le" value="s2" />
    </filter>

通过这种方法,我还应该使用其他哪些过滤器来检索整个集合?

不应该使用“较少平等”和“更大平等”的工作,并包括当前字母给我的全部吗?

编辑1:在Guido的建议之后:

结果仅比总数少5。如此接近!

 <filter type="or" >
    <filter type="and" >
     <condition attribute="name" operator="ge" value="a" />
     <condition attribute="name" operator="le" value="z" />
    </filter>
   <filter type="and" >
     <condition attribute="name" operator="ge" value="0" />
     <condition attribute="name" operator="le" value="9" />
    </filter>

    <!-- adding this extra condition almost finds the entire results 5 short -->
   <filter type="and" >
     <condition attribute="name" operator="gt" value="a" />
     <condition attribute="name" operator="lt" value="z" />
    </filter>

   <filter type="and" >
     <condition attribute="name" operator="ge" value=" " />
     <condition attribute="name" operator="le" value="~" />
    </filter>
</filter>

编辑2:已更正。感谢Guido。这可行。检索所有帐户。

<filter type="or" > 
 <filter type="and" > 
  <condition attribute="name" operator="le" value="a" /> 
 </filter>

 <filter type="and" > 
  <condition attribute="name" operator="gt" value="a" /> 
  <condition attribute="name" operator="lt" value="z" /> 
 </filter> 

 <filter type="and" > 
  <condition attribute="name" operator="ge" value="z" /> 
  </filter> 
</filter>

下一步是使用此方法将结果分成较小的块...

1 个答案:

答案 0 :(得分:0)

如果您需要将结果分成较小的块,建议使用分页。 您可以通过在查询的count节点上设置属性pagefetch来添加页面大小和要检索的页面。

<fetch count='5' page='1' distinct='true' >

在结果中,您可以查找属性morerecords,以查看是否应该继续查询下一页。