微软动态CRM专家罗勇 ,回复334或者20190509可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

Action (操作)是流程的一种,可以在工作流中调用,可以使用JavaScript和C#代码方便的调用,用的好是个很不错的东西。

怎么创建Action请参考官方文档:Create your own actions ,或者我以前的博文也不错。

假设操作的名称为new_InvokeOrderApitoCreateReturnPartsAction,是一个绑定到实体new_returnreq的操作,包括一个类型string的输入参数OrderNumber,没有输出参数:

下面是JavaScript调用示例:

var params = {};
params.OrderNumber = "";
var req = new XMLHttpRequest();
var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
req.open("POST", encodeURI(clientUrl + "/api/data/v9.1/new_returnreqs(e95e8829-c370-e911-a82b-000d3a365fc2)/Microsoft.Dynamics.CRM.new_InvokeOrderApitoCreateReturnPartsAction"), 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 == ) {
req.onreadystatechange = null;
if (this.status == ) {
var alertStrings = { text: "调用操作成功!" };
var alertOptions = { height: , width: };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
function success() { },
function () { }
);
}
else {
var error = JSON.parse(this.response).error;
Xrm.Navigation.openErrorDialog({ message: error.message }).then(
function () {
},
function () {
});
}
}
};
req.send(JSON.stringify(params));

如果你的Action有复杂的参数类型,可以参考我的博文:通过Web API调用Action时各种类型输入参数传递值的方法

下面是C#代码调用示例:

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;
using System; namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
CrmServiceClient crmSvc = new CrmServiceClient(@"AuthType=Office365;Url=https://luoyongdemo.api.crm.dynamics.com;UserName=luoyong@luoyong.me;Password=pppsssss");
if (!crmSvc.IsReady)
{
throw new Exception("Crm Service is not ready!" + crmSvc.LastCrmError + crmSvc.LastCrmException.Message);
}
OrganizationRequest orgReq = new OrganizationRequest("new_InvokeOrderApitoCreateReturnPartsAction");
orgReq["OrderNumber"] = "";
orgReq["Target"] = new EntityReference("new_returnreq", Guid.Parse("e95e8829-c370-e911-a82b-000d3a365fc2"));
OrganizationResponse response = crmSvc.Execute(orgReq);
Console.WriteLine("程序执行完成,按任意键退出...");
Console.ReadKey();
}
}
}

如果创建的是全局的Action,现在Dynamcis 365 Customer Engagement从 9.0版本开始有新的简便调用方法了,就是 invokeProcessAction (Client API reference)

虽然官方文档没有明说仅仅支持全局Action,从我测试结果来看是仅仅支持全局Action,或许也有可能我不知道怎么调用绑定Action吧。

var params = {};
params.EntityLogicalName = "new_b2borderreturnreqdetails";
params.EntityId = "c87f8979-d172-e911-a833-000d3a375590";
Xrm.Utility.invokeProcessAction("new_DeleteDoNotNeedReturnPartsRecordsAction", params).then(
function () {
var alertStrings = { text: "调用全局操作成功!" };
var alertOptions = { height: 120, width: 160 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
function success(results) { },
function () { }
);
},
function (errorobj) {
console.log(errorobj);
Xrm.Navigation.openErrorDialog({ message: "调用全局操作失败!" + errorobj.message }).then(
function () {
},
function () {
});
});

若是上面例子调用全局action报错,比如:This action is not supported ,那就用旧的方法去调用全局Action吧,示例如下:

var params = {};
params.EntityLogicalName = "new_demo";
params.EntityId = "c87f8979-d172-e911-a833-000d3a375590";
var req = new XMLHttpRequest();
var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
req.open("POST", encodeURI(clientUrl + "/api/data/v9.1/new_demoAction"), 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) {
req.onreadystatechange = null;
if (this.status == 204) {
var alertStrings = { text: "调用操作成功!" };
var alertOptions = { height: 120, width: 160 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
function success() { },
function () { }
);
}
else {
var error = JSON.parse(this.response).error;
Xrm.Navigation.openErrorDialog({ message: error.message }).then(
function () {
},
function () {
});
}
}
};
req.send(JSON.stringify(params));

Dynamics 365 Customer Engagement中使用JavaScript和C#调用操作Action示例的更多相关文章

  1. Dynamics 365 Customer Engagement中插件的调试

    微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...

  2. Dynamics 365 Customer Engagement 中对API的调整内容分享

    当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...

  3. 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  4. 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. Dynamics 365 Customer Engagement安装FAQ

    微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...

  7. Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  8. Dynamics 365 Customer Engagement导入解决方案时出错:Microsoft.Crm.CrmException: Plug-in assembly does not contain the required types or assembly content cannot be updated.

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. Dynamics 365 Customer Engagement V9.X新引入的自动编号属性介绍

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

随机推荐

  1. 一起学SpringMVC之Json

    本文主要以一个简单的小例子,简述SpringMVC开发中,Json的相关应用,仅供学习分享使用,如有不足之处,还请指正. 什么是Json ? JSON 指的是 JavaScript 对象表示法(Jav ...

  2. C# 重置IE安全等级

    打开IE设置-安全 dynamic shellObject = Interaction.CreateObject("WScript.Shell", ""); / ...

  3. Git - Git简介与客户端安装

    简介 Git是目前世界上最先进的分布式版本控制系统(没有之一)! 集中式版本控制系统(CVS/SVN),版本库是集中存放在中央服务器的,而一般工作的时候,用的都是自己的电脑,所以要先从中央服务器取得最 ...

  4. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)

    场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  5. 在nodejs中怎么使用redis缓存组件

    redis量个强大的缓存组件,可以部署在windows和linux环境之上,它有五大存储结构,其中有一种为列表list,它可以实现quene和stack的功能,即队列和堆栈的功能. 当然使用先安装py ...

  6. 页面QQ临时对话的实现

    一.开通QQ服务 点我进入QQ推广官网>然后点击推广工具即可后面自己看中文 二.页面a标签 <a target="_blank" href="http://w ...

  7. FCC---Use the CSS Transform scale Property to Scale an Element on Hover

    The transform property has a variety of functions that let you scale, move, rotate, skew, etc., your ...

  8. docker 踩坑日记The last packet sent successfully to the server was 0 milliseconds ago.

    The last packet sent successfully to the server was 0 milliseconds ago. 今日遇到了这个坑,看似平白无奇. 首先,我定位到是数据库 ...

  9. 如何将RAC数据库的 RMAN Disk 备份 Restore 到另一个节点上的单个实例 (Doc ID 415579.1)

    HowTo Restore RMAN Disk backups of RAC Database to Single Instance On Another Node (Doc ID 415579.1) ...

  10. 安装 openmpi 4.0 用于 horovod 编译

    最近编译 horovod框架过程中,需要使用openmpi 4.0但是环境中的openmpi版本比较低,所以在手动安装openmpi4.0 用于编译,下面对过程进行简要记录,进行备忘: curl -O ...