1. 程式人生 > WINDOWS開發 >Dynamics CRM 2015/2016新特性之二十四:使用Web API執行操作

Dynamics CRM 2015/2016新特性之二十四:使用Web API執行操作

關注本人微信和易信公眾號: 微軟動態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(
"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));

下面我們來看看呼叫繫結操作(bound action),我們拿 RemoveMembersTeam 這個操作來演示,先看看它的定義: 技術分享圖片

然後下面是我撰寫的示例程式碼,注意呼叫繫結操作的話,第一個引數是在呼叫的URL裡面指定的,而且操作的名稱的前面要加上名稱空間Microsoft.Dynamics.CRM,第二個引數如果是某個型別的Collection,則是一個數組,這個型別則是指定其主鍵的值即可,這是我猜測的,適用於當前的例子。
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