在Dynamics CRM中使用JS调用全局的或者指定实体的Action调用方式是不一样的, 下面我们就来说说两种调用的区别:
首先封装了一个方法用来调用Action:
有一点需要注意, 就是/api/data/v9.0/这块,你需要知道你的crm的版本,这个可以从Settings -> Customizations -> Developer Resources中找到Service Root URL字段来看你的版本.
ExecuteAction: function (actionUrl, actionPara) {
var lResponse = null;
var lXMLHttpRequest = new XMLHttpRequest();
lXMLHttpRequest.open("POST", encodeURI(this.GetClientUrl() + "/api/data/v9.0/" + actionUrl), false);
lXMLHttpRequest.setRequestHeader("Accept", "application/json");
lXMLHttpRequest.setRequestHeader("Content-Type", "application/json; charset=utf-8");
lXMLHttpRequest.setRequestHeader("OData-MaxVersion", "4.0");
lXMLHttpRequest.setRequestHeader("OData-Version", "4.0");
if (this.IsNullOrUndefined(actionPara)) {
lXMLHttpRequest.send();
}
else {
lXMLHttpRequest.send(JSON.stringify(actionPara));
}
if (lXMLHttpRequest.status === 200)
{
lResponse = JSON.parse(lXMLHttpRequest.responseText);
}
else {
if (lXMLHttpRequest.statusText !== null && lXMLHttpRequest.statusText !== undefined && lXMLHttpRequest.statusText !== "") {
Xrm.Navigation.openAlertDialog(lXMLHttpRequest.statusText);
}
}
return lResponse;
}
- 调用全局(global)Action
var parameters = { '<action参数名>': <action参数值> };
var result = ExecuteAction('<action的Unique Name>', parameters);
例如:
var parameters = { 'ID': '4024BD6B-BD1D-EB11-8320-FF5559DD3692' };
var result = ExecuteAction('CCSSending', parameters);
- 调用指定实体的Action
var parameters = { '<action参数名>': <action参数值> };
var result = ExecuteAction(<实体的复数名字> + '(' + <记录GUID>.replace('{', '').replace('}', '') + ')' + '/Microsoft.Dynamics.CRM.<action的Unique Name>', parameters);
例如:
var parameters = { 'ID': '4024BD6B-BD1D-EB11-8320-FF5559DD3692' };
var result = ExecuteAction('incidents' + '(' + caseID.replace('{', '').replace('}', '') + ')' + '/Microsoft.Dynamics.CRM.Caseupdate', parameters);
如果您不知道你的action是全局的还是指定实体的,可以通过这种方式去看:
首先通过Setting -> Processes, 找到你创建的action, 然后看红框中Entity的属性,如果是'None(global)' 则为全局的, 否则就是针对指定实体的.
- 全局Aciton
- 指定实体Action