Dynamics 365 Customer Engagement中使用JavaScript和C#调用操作Action示例
微软动态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示例的更多相关文章
- Dynamics 365 Customer Engagement中插件的调试
微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...
- Dynamics 365 Customer Engagement 中对API的调整内容分享
当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...
- 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365 Customer Engagement安装FAQ
微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...
- Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 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方面 ...
- Dynamics 365 Customer Engagement V9.X新引入的自动编号属性介绍
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
随机推荐
- c++ LeetCode(初级数组篇)十一道算法例题代码详解(一)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10940636.html 唉!最近忙着面试找实习,然后都是面试的很多是leetcode的算法题, ...
- SQL Server 数据类型详解
引言 SQL Server是我们日常工作中经常用到的数据库,也是商业系统运用最广泛的数据库之一.如何构建合理.高效.节省空间的数据库?是非常考验程序的基本功底,因为数据库是程序的根基,直接影响着系统效 ...
- Cesium专栏-地形开挖(附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- Xcode更新到10.0之后遇到的那些坑:
1.之前不在一个文件里的图片可以重新,更新之后图片不能重名了. 2.之前的双击.h.m文件不能重新开出个界面了 3. 4. ...... 未完待续
- 【JDBC】CRUD操作
JDBC的CRUD操作 向数据库中保存记录 修改数据库中的记录 删除数据库中的记录 查询数据库中的记录 保存代码的实现 package demo1; import java.sql.Connectio ...
- android 对于asset和raw下文件的操作
Android 中资源分为两种,一种是res下可编译的资源文件, 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,访问也很简单,只需要调用R.XXX.id即可;第二种就是放在assets ...
- 201871010116-祁英红《面向对象程序设计(java)》第十五周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- nginx学习(三):nginx的进程模型
概述 nginx 进程分为 master进程和work进程 1.打开配置文件查看,这里我修改为2 [root@xxx conf]# vim nginx.conf #user nobody; worke ...
- <Matrix> 311 378
311. Sparse Matrix Multiplication 稀疏矩阵的计算.稀疏矩阵的特点是有大量的0,如果采用暴力算法则比然会有很多无意义的计算. C[ i ][ j ] += A[ i ] ...
- LeetCode 1:两数之和 Two Sum
题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...