Dynamics CRM 2015/2016新特性之二十四:使用Web API執行操作
阿新 • • 發佈:2020-06-14
關注本人微信和易信公眾號: 微軟動態CRM專家羅勇 ,回覆207或者20160316可方便獲取本文,同時可以在第一間得到我釋出的最新的博文資訊,follow me!
操作(action)是可重複利用的操作,操作會改變資料,可以呼叫的系統自帶的操作列表請參考SDK的 Web API Action Reference 章節,當然自己建立的操作(流程的一種)也是可以像系統自帶的操作那樣可以通過Web API呼叫。 操作也分繫結操作(bound action)和非繫結操作(unbound action),也是根據操作的元資料是否有IsBound="true"。這裡以呼叫 WinOpportunity 這個非繫結操作為例來檢視和呼叫系統自帶的操作。var clientURL = Xrm.Page.context.getClientUrl(); var req = new XMLHttpRequest() req.open("POST",encodeURI(clientURL + "/api/data/v8.0/WinOpportunity"),true); req.setRequestHeader("Accept","application/json"); req.setRequestHeader("Content-Type","application/json; charset=utf-8"); req.setRequestHeader(下面我們來看看呼叫繫結操作(bound action),我們拿 RemoveMembersTeam 這個操作來演示,先看看它的定義: 然後下面是我撰寫的示例程式碼,注意呼叫繫結操作的話,第一個引數是在呼叫的URL裡面指定的,而且操作的名稱的前面要加上名稱空間Microsoft.Dynamics.CRM,第二個引數如果是某個型別的Collection,則是一個數組,這個型別則是指定其主鍵的值即可,這是我猜測的,適用於當前的例子。"OData-MaxVersion","4.0"); req.setRequestHeader("OData-Version","4.0"); req.onreadystatechange = function () { if (this.readyState == 4 /* complete */) { req.onreadystatechange = null; if (this.status == 204) { Xrm.Utility.alertDialog("將商機作為贏單關閉成功!"); } else{ var error = JSON.parse(this.response).error; Xrm.Utility.alertDialog("將商機作為贏單關閉出錯." + error.message); } } }; var requestmsg = {}; requestmsg.Status = 3; requestmsg.OpportunityClose = {}; requestmsg.OpportunityClose.subject = "羅勇結束了這個商機"; requestmsg.OpportunityClose["[email protected]"] = "/opportunities(6025165A-3AA3-E511-80C7-000D3A807EC7)"; req.send(JSON.stringify(requestmsg));
var clientURL = Xrm.Page.context.getClientUrl(); var req = new XMLHttpRequest() req.open("POST",encodeURI(clientURL + "/api/data/v8.0/teams(E4CC382D-02B9-E511-80DC-000D3A804C3F)/Microsoft.Dynamics.CRM.RemoveMembersTeam"),"4.0"); req.onreadystatechange = function () { if (this.readyState == 4 /* complete */) { req.onreadystatechange = null; if (this.status == 204) { Xrm.Utility.alertDialog("將使用者移出團隊成功!"); } else { var error = JSON.parse(this.response).error; Xrm.Utility.alertDialog("將使用者移出團隊出錯." + error.message); } } }; var requestmsg = {}; requestmsg.Members = []; requestmsg.Members[0] = {}; requestmsg.Members[0].systemuserid = "A576C4B5-44A9-E511-80CF-000D3A806074"; requestmsg.Members[1] = {}; requestmsg.Members[1].systemuserid = "CEFE67E5-44A9-E511-80CF-000D3A806074"; req.send(JSON.stringify(requestmsg));下面我模仿SDK上面的說明配置一個操作如下,並用程式碼來呼叫它。 釋出這個操作以後,我們去元資料頁面(比如我的是 http://lycrmvm.cloudapp.net:5555/Demo/api/data/v8.0/$metadata ,需要啟用操作並且釋出,然後重新整理頁面哦)可以搜尋到如下的操作定義: 然後呼叫程式碼如下:
var clientURL = Xrm.Page.context.getClientUrl(); var req = new XMLHttpRequest() req.open("POST",encodeURI(clientURL + "/api/data/v8.0/ly_tests(A9B987FB-A4A4-E511-80CC-000D3A80CE7F)/Microsoft.Dynamics.CRM.ly_AddNoteToContact"),"4.0"); req.onreadystatechange = function () { if (this.readyState == 4 /* complete */) { req.onreadystatechange = null; if (this.status == 200) { var responseJSON = JSON.parse(this.responseText); Xrm.Utility.alertDialog("註釋建立成功,註釋ID是" + responseJSON.annotationid); } else { var error = JSON.parse(this.response).error; Xrm.Utility.alertDialog("建立註釋出錯." + error.message); } } }; var requestmsg = {}; requestmsg.NoteTitle = "這是羅勇通過WEB API建立的註釋標題"; requestmsg.NoteText = "這是羅勇通過WEB API建立的註釋內容"; req.send(JSON.stringify(requestmsg));
從Dynamics 365 V9版本開始提供了新的客戶端API來方便程式設計,請參考Xrm.WebApi.online.execute (Client API reference),還可以參考我的博文Dynamics 365 V9版本新的客戶端API Xrm.WebApi.online.execute 使用例項。
更多資訊請參考官方文件:Use Web API actions 。