FetchXML视图包含嵌套链接实体的属性

时间:2013-11-18 07:53:30

标签: dynamics-crm-2011 dynamics-crm fetchxml

我想有一个显示来自3个实体的属性的视图:
统计信息具有查找帐户和帐户查找地址
视图在Statistics上,我想要来自所有3个实体的属性;这有可能吗?

问题出在GridXML上 我想在GridXML中包含属性wl_city。

这是带有链接实体的FetchXML:

<fetchxml>
  <fetch version="1.0" output-format="xml-platform" mapping="logical">
    <entity name="sb_statistics">
      <order attribute="sb_amount" descending="false" />
      <!-- It is easy to get these into the GridXML -->
      <attribute name="sb_debtor" />
      <attribute name="sb_date" />
      <attribute name="sb_amount" />
      <link-entity name="account" from="accountid" to="sb_debtor" 
       alias="relatedAccount" link-type="outer">
        <!-- It is possible to get this into the GridXML
             by using the link-entity alias: relatedAccount.wl_towncity -->
        <attribute name="wl_towncity" />
        <link-entity name="wl_postalcode" from="wl_postalcodeid" 
          to="wl_postaltowncity" alias="relatedAddress" link-type="outer">
          <!-- I have trouble getting this attribute into the GridXML -->
          <attribute name="wl_city" />
        </link-entity>
      </link-entity>
      <attribute name="sb_statisticsid" />
    </entity>
  </fetch>
</fetchxml>

当我更改GridXML时,如果打开视图,则会显示此错误:
“要使用此保存的查询,您必须删除引用已删除或不可搜索项目的条件和列”

  <layoutxml>
    <grid name="resultset" object="10008" jump="sb_name" select="1" preview="1" 
     icon="1">
      <row name="result" id="sb_statisticsid" multiobjectidfield="1">
        <cell name="sb_amount" width="100" />
        <cell name="sb_date" width="100" />
        <cell name="sb_debtor" width="100" />
        <cell name="relatedAccount.relatedAddress.wl_city" width="100" />
      </row>
    </grid>
  </layoutxml>

以下GridXML在打开视图时显示此错误:
意外错误发生错误”。

  <layoutxml>
    <grid name="resultset" object="10008" jump="sb_name" select="1" preview="1" 
     icon="1">
      <row name="result" id="sb_statisticsid" multiobjectidfield="1">
        <cell name="sb_amount" width="100" />
        <cell name="sb_date" width="100" />
        <cell name="sb_debtor" width="100" />
        <cell name="relatedAddress.wl_city" width="100" />
      </row>
    </grid>
  </layoutxml>

下面的GridXML导致在打开视图时显示此错误:
“要使用此保存的视图,您必须删除引用已删除或不可搜索列的条件和列”。

  <layoutxml>
    <grid name="resultset" object="10008" jump="sb_name" select="1" preview="1" 
     icon="1">
      <row name="result" id="sb_statisticsid" multiobjectidfield="1">
        <cell name="sb_amount" width="100" />
        <cell name="sb_date" width="100" />
        <cell name="sb_debtor" width="100" />
        <cell name="wl_city" width="100" />
      </row>
    </grid>
  </layoutxml>

此保存的查询有效,但它只包含主要实体和第一个链接实体的属性。

<savedquery>
  <IsCustomizable>1</IsCustomizable>
  <CanBeDeleted>0</CanBeDeleted>
  <isquickfindquery>0</isquickfindquery>
  <isprivate>0</isprivate>
  <isdefault>0</isdefault>
  <returnedtypecode>10008</returnedtypecode>
  <savedqueryid>{df101ac4-2e4d-e311-9377-005056bd0001}</savedqueryid>
  <layoutxml>
    <grid name="resultset" object="10008" jump="sb_name" select="1" preview="1" 
     icon="1">
      <row name="result" id="sb_statisticsid" multiobjectidfield="1">
        <cell name="sb_amount" width="100" />
        <cell name="sb_date" width="100" />
        <cell name="sb_debtor" width="100" />  
        <cell name="relatedAccount.wl_city" width="100" />              
      </row>
    </grid>
  </layoutxml>
  <querytype>0</querytype>
  <fetchxml>
    <fetch version="1.0" output-format="xml-platform" mapping="logical">
      <entity name="sb_statistics">
        <order attribute="sb_amount" descending="false" />
        <attribute name="sb_debtor" />
        <attribute name="sb_date" />
        <attribute name="sb_amount" />
        <link-entity name="account" from="accountid" to="sb_debtor" 
         alias="relatedAccount" link-type="outer">
          <attribute name="wl_towncity" />
          <link-entity name="wl_postalcode" from="wl_postalcodeid" 
           to="wl_postaltowncity" alias="relatedAddress" link-type="outer">
            <attribute name="wl_city" />
          </link-entity>
        </link-entity>
        <attribute name="sb_statisticsid" />
      </entity>
    </fetch>
  </fetchxml>
  <LocalizedNames>
    <LocalizedName description="Statistics and Address" languagecode="1033" />
  </LocalizedNames>
</savedquery> 

GridXML仅限于显示主要实体和第一个链接实体的属性吗?

5 个答案:

答案 0 :(得分:5)

据我所知,这是不可能的,但请有人证明我错了。

GridXML的限制似乎是只能包含来自第一个链接实体的属性,而不是任何嵌套的链接实体。

答案 1 :(得分:2)

使用link-type =&#34; inner&#34;用于嵌套链接。

<entity name="sb_statistics">
    ...
    <link-entity name="account" from="accountid" to="sb_debtor" 
     alias="relatedAccount" link-type="outer">
      <attribute name="wl_towncity" />
      <link-entity name="wl_postalcode" from="wl_postalcodeid" 
       to="wl_postaltowncity" alias="relatedAddress" link-type="inner"> //link-type="inner"
        <attribute name="wl_city" />
      </link-entity>
    </link-entity>
    <attribute name="sb_statisticsid" />
  </entity>

答案 2 :(得分:2)

我没有发现可以做到的证据。无论是否有link-type ='inner',设计师(2013年)都说,“relatedAddress.wl_city列不再是有效列,因为它已作为列选项删除。您需要删除此列,如果您想要,添加一个不同的。“

它不需要多个dereferrence,也不需要。如果转储fetch返回的AttributeCollection的keyValuePairs,您将看到该键是relatedAddress.w1_city - 而不是其父级或组合。

与UI一样,只是看起来布局仅限于根和子,没有孙子,也没有其他后代。

答案 3 :(得分:0)

我认为回答这个问题有点晚了,但也许有人来这篇文章发现它很有帮助。

首先应该知道的是,fetchxml只会返回非空的列,所以如果你查询的列中没有数据,那么fetchxml会自动将其从结果集中删除。

第二件事是,如果你有不同关系的不同表,那么别名将被添加到列名中,所以在你的情况下relatedAccount.wl_towncityrelatedAddress.wl_city是正确的而不是{{1} }。在您的示例中,您将别名放在彼此之后,这是不正确的。

你应该知道的第三件事是,当嵌套的结果将返回时,类型是对象,但是原始类型relatedAccount.relatedAddress.wl_city,所以首先你必须将对象强制转换为AliasedValue。然后它就可以把它投射到AliasedValue了。之后,你必须寻找具有你想要的结果的OptionSetValue

答案 4 :(得分:0)

我是这样工作的:仍然存在未解决的列标题问题。

     <fetch distinct='true'>
    <entity name='rdiac_riskobject'>
      <attribute name='rdiac_riskobjectid' />
      <attribute name='rdiac_name' />
      <attribute name='rdiac_riskobjectproduct' />
      <link-entity name='rdiac_riskobject_rdiac_propertydetail' from='rdiac_riskobjectid' to='rdiac_riskobjectid' intersect='true'>
        <link-entity name='rdiac_propertydetail' alias='pd1' from='rdiac_propertydetailid' to='rdiac_propertydetailid'>
          <attribute name='rdiac_valuestring' />
          <link-entity name='rdiac_propertysvconfig' from='rdiac_property' to='rdiac_propertyid'>
            <filter>
              <condition attribute='rdiac_svfield' operator='eq' value='100000000'/>
            </filter>
          </link-entity>
        </link-entity>
      </link-entity>
      <link-entity name='rdiac_riskobject_rdiac_propertydetail'  from='rdiac_riskobjectid' to='rdiac_riskobjectid' intersect='true'>
        <link-entity name='rdiac_propertydetail' alias='pd2' from='rdiac_propertydetailid' to='rdiac_propertydetailid'>
          <attribute name='rdiac_valuestring' />
          <link-entity name='rdiac_propertysvconfig' from='rdiac_property' to='rdiac_propertyid'>
            <filter>
              <condition attribute='rdiac_svfield' operator='eq' value='100000001'/>
            </filter>
          </link-entity>
        </link-entity>
      </link-entity>
    </entity>
  </fetch>

  <grid name='resultset' object='10139' jump='rdiac_riskobjectproduct' select='1' preview='0' icon='1' >
    <row name='result' id='rdiac_riskobjectid' >
      <cell name='rdiac_riskobjectproduct' width='100' />
      <cell name='pd1.rdiac_valuestring' width='200' />
      <cell name='pd2.rdiac_valuestring' width='200' />
    </row>
  </grid>

enter image description here