Si può scrivere una singola query FetchXML per ottenere 1: molti rapporto?
-
03-10-2019 - |
Domanda
E 'possibile scrivere una singola query FetchXML che ottiene un'entità root ed i bambini più? Tutto quello che ho potuto fare è 1: 1.
Soluzione
No, non è possibile.
Altri suggerimenti
James Wood è corretta . Fetch XML è così ricorsiva utilizzando l'entità di collegamento è possibile ottenere le informazioni desiderate.
Per esempio, il seguente è valido:
<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>
Se la tua domanda è davvero "E 'possibile scrivere una singola query FetchXML che ottiene un SINGLE entità root ed i bambini più" allora la risposta è purtroppo no. Tuttavia, se si è in grado di gestire i duplicati di dati principale (ad esempio, utilizzando la funzionalità di raggruppamento di un report SSRS) allora ciò che si richiede è del tutto possibile
Se non ho capito male la domanda a questo è molto possibile.
Così, per esempio si desidera trovare tutti i contatti relativi a un determinato account. Questo è rappresentata in Crm dalla Capogruppo cliente Ricerca sul contatto per l'account.
<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>
che vi dà un set di risultati che assomiglia a questo:
<resultset morerecords="0" paging-cookie="<cookie page="1"><accountid last="{E704FAD6-2D4B-E111-9FED-00155D828444}" first="{AD912122-6B3C-E111-9B37-00155D828444}" /></cookie>">
<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>
Sono felice di segnalare che è possibile. Ho una soluzione che ha funzionato bene per me.
L'unica avvertenza è che se si dispone di account figlio più si ottengono più risultati per il genitore. Ad esempio:
parent 1: child 1
parent 2: child 1
parent 2: child 2
Questo significa che si dovrebbe quindi avere a correre i risultati attraverso una funzione di ordinamento, per ottenere o tutti i bambini di età inferiore genitori in un array multidimensionale, o di ottenere tutti i conti come voci univoche in una matrice piatta.
Inoltre, questo va solo a un livello inferiore. Se la gerarchia è multi-livello, avrebbe bisogno di essere modificato questo codice.
<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>