D365V9以後引入了新的API,其中比較Nice的是給我們封裝了WebApi,不需要我們再去寫request了,本篇要分享的是如何使用SDK中的Xrm.WebApi.online.execute來執行自定義的Entity類型的Action。
Docs中對execute執行Action是有示例的,比如下面的sample,但是這是global的Action,可以看到紅框中的boundParameter(關於參數的含義可以自己看docs,很簡單,這裏就不做闡述了)是null
那Entity的類型的該怎麼構建,docs的示例中沒有,那隻能自己琢磨了。
先來看下我定義的Action,很簡單就一個參數
再來看下這條Action在metadata中的顯示,會發現多了一個Name爲entity的輸入參數,因爲這是Entity類型的Action,所以得把Entity傳入
看下具體的代碼,getMetadata中的boundParameter的值是entity,parameterTypes即是你的輸入參數,在我定義的projectId的基礎上增加了一個entity,而這個entity的賦值方式搞對了就很簡單了,entityType的值即是上面metadata中紅框中的,其他的參數的說明還是看docs吧
var projectJs = window.ProjectJs || {};
(
function () {
this.SendSurvey = function (executionContext) {
var projectId = executionContext.data.entity.getId().replace('{', '').replace('}', '');
var sendSurvey = new projectJs.sendSurveyMail(projectId);
Xrm.WebApi.online.execute(sendSurvey).then(function (res) {
if (res.ok) {
Xrm.Navigation.openAlertDialog({ text: "Send Successfully"});
}
}, function (res) {
});
};
projectJs.sendSurveyMail = function (projectId) {
this.projectId = projectId;
this.entity = { entityType: "msdyn_project", id: this.projectId};
};
projectJs.sendSurveyMail.prototype.getMetadata = function () {
return{
boundParameter: "entity",
parameterTypes: {
"entity": {
typeName: "mscrm.msdyn_project",
structuralProperty: 5
},
"projectId": {
"typeName": "Edm.String",
"structuralProperty": 1 // Primitive Type
}
},
operationType: 0, // This is an action. Use '1' for functions and '2' for CRUD
operationName: "sfdhl_ProjectServiceSendSurveyEmail"
};
};
}
).call(projectJs);
最後看下執行的結果,成功調用