Можете ли вы написать один запрос FetchXML, чтобы получить отношение 1: много? - PullRequest
2 голосов
/ 20 мая 2010

Можно ли написать один запрос FetchXML, который получает корневую сущность и несколько дочерних элементов? Все, что я смог сделать, это 1: 1.

Ответы [ 4 ]

6 голосов
/ 19 июля 2013

Джеймс Вуд прав . Извлечение XML является рекурсивным, поэтому с помощью сущности ссылки вы можете получить необходимую информацию.

Например, допустимо следующее:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
  <entity name="account">
    <attribute name="name" />
    <attribute name="primarycontactid" />
    <attribute name="telephone1" />
    <attribute name="accountid" />
    <order attribute="name" descending="false" />
    <link-entity name="contact" from="parentcustomerid" to="accountid" alias="aj">
        <attribute name="firstname" />
        <attribute name="lastname" />
        <attribute name="telephone1" />
        <link-entity name="businessunit" from="businessunitid" to="owningbusinessunit" alias="ak">
            <attribute name="name" />
            <attribute name="address1_line1" />
            <attribute name="address1_line2" />
            <attribute name="address1_line3" />
            <filter type="and">
              <condition attribute="name" operator="not-null" />
            </filter>
        </link-entity>
    </link-entity>
  </entity>
</fetch>

Если ваш вопрос действительно «Можно ли написать один запрос FetchXML, который получает корневую сущность SINGLE и несколько дочерних элементов», то, к сожалению, ответ - нет. Однако если вы можете обрабатывать дубликаты корневых данных (например, с помощью функции группировки отчета SSRS), то все, что вам нужно, вполне возможно

5 голосов
/ 30 сентября 2012

Если я не понял вопрос, это очень возможно.

Так, например, вы хотите найти все контакты, связанные с данной учетной записью. Это представлено в Crm поиском родительского клиента в контакте с учетной записью.

enter image description here

<fetch mapping="logical" count="100" version="1.0">
    <entity name="account">
        <attribute name="name" />
        <link-entity name="contact" from="parentcustomerid" to="accountid">
            <attribute name="fullname" />
        </link-entity>
    </entity>
</fetch>

Что дает вам набор результатов, который выглядит следующим образом:

<resultset morerecords="0" paging-cookie="&lt;cookie page=&quot;1&quot;&gt;&lt;accountid last=&quot;{E704FAD6-2D4B-E111-9FED-00155D828444}&quot; first=&quot;{AD912122-6B3C-E111-9B37-00155D828444}&quot; /&gt;&lt;/cookie&gt;">
    <result>
        <name>RGD Mining Inc</name>
        <accountid>{E704FAD6-2D4B-E111-9FED-00155D828444}</accountid>
        <accountid.fullname>Bill Miner</accountid.fullname>
    </result>
    <result>
        <name>RGD Mining Inc</name>
        <accountid>{E704FAD6-2D4B-E111-9FED-00155D828444}</accountid>
        <accountid.fullname>Green</accountid.fullname>
    </result>
</resultset>
3 голосов
/ 20 мая 2010

Нет, это невозможно.

0 голосов
/ 27 августа 2015

Я рад сообщить, что это возможно. У меня есть решение, которое хорошо сработало для меня.

Единственное предостережение: если у вас несколько дочерних учетных записей, вы получите несколько результатов для родителя. Например:

parent 1: child 1
parent 2: child 1
parent 2: child 2

Это означает, что вам нужно будет выполнить результаты с помощью функции сортировки, чтобы получить все дочерние элементы в родительском массиве в многомерном массиве или получить все учетные записи как уникальные записи в плоском массиве.

Кроме того, это снижается только на один уровень. Если ваша иерархия многоуровневая, этот код необходимо будет изменить.

<fetch distinct="false" mapping="logical"> 
   <entity name="account">     
        <attribute name="name" />
        <link-entity name="account"  alias="childaccount" to="accountid" from="parentaccountid"  link-type="outer">
            <attribute name="name" alias="childname" />
        </link-entity>
    </entity>           
</fetch>
...