先舉個N:N關係的例子。這裏以根據團隊的名稱查找其所有團隊成員的主要郵箱爲例。用Web API ODATA語法執行fetchxml比較容易想到,如下:
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/systemusers?fetchXml=<fetch mapping='logical' no-lock='true'><entity name='systemuser'><attribute name='internalemailaddress' /><link-entity name='teammembership' from='systemuserid' to='systemuserid' visible='false' intersect='true'><link-entity name='team' from='teamid' to='teamid' alias='ab'><filter type='and'><condition attribute='name' operator='eq' value='B2C Supervisor Team' /></filter></link-entity></link-entity></entity></fetch>
也可以使用如下的查詢來解決,你可能會問下面查詢語法中的 teammembership_association 從哪兒來,就是該實體的N:N關係的 Schema Name。
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/teams?$select=name&$expand=teammembership_association($select=internalemailaddress)&$filter=name eq 'B2C Supervisor Team'
還可以使用兩次查詢來解決,如下,當然這個方法比較笨。
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/teams?$filter=name eq 'B2C Supervisor Team'
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/teams(
e4336d83-f45f-e911-a830-000d3a375590)/teammembership_association?$select=internalemailaddress
如果是1:N關係,可以參考如下語法,注意父實體一定要指定至少一個列,否則會把父實體的所有字段查出來,很浪費性能。$expand後面的名稱也是1:N關係的架構名稱。
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/new_returnreqs?$select=new_name&$expand=new_new_returnreq_new_returnreqapprovalhist_ReturnRequest($select=new_name)&$filter=contains(new_name,'RETURN-2019')
如果已知父記錄的ID,則還有如下語法可以使用:
當僅僅需要返回子記錄的ID的話,有簡單語法如下:
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/new_returnreqs(709c2ad3-7d71-e911-a82b-000d3a365662)/new_new_returnreq_new_returnreqapprovalhist_ReturnRequest/$ref
當僅僅需要返回子記錄數量的話,有如下簡單語法:
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/new_returnreqs(709c2ad3-7d71-e911-a82b-000d3a365662)/new_new_returnreq_new_returnreqapprovalhist_ReturnRequest/$count
在查詢記錄的時候可以順路查出其某個查找字段對應查找記錄的字段信息嗎?答案是可以。如下實例,這裏使用查找字段的架構名稱:
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/new_returnreqapprovalhists?$select=new_name&$expand=new_ReturnRequest($select=new_name,new_ordernumber)&$filter=contains(new_name,'2019')
但是對於標準的CreatedBy字段卻要使用邏輯名稱,奇怪:
https://luoyongdemo.api.crm.dynamics.com/api/data/v9.1/new_returnreqapprovalhists?$select=new_name&$expand=createdby($select=fullname)&$filter=contains(new_name,'2019')
轉載:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Web_API_ODATA_Query_Master_Detail.html