Dynamics 365 We API ODATA語法根據父記錄查詢子記錄,根據子記錄查詢父記錄

先舉個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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章