关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复168或者20151104可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!
以前的博文 微软Dynamics CRM 2013介绍系列之二十三:操作(Action)的开发与配置 简单介绍了Dynamics CRM 2013起新增一种新的流程类型--操作,英文是action,没有做实验证实,操作中所有的步骤是否是同一个事务?是否存在可选的选项?如果不是的话,Microsoft Dynamics CRM Online 2015 Update 1 的更新中包括了一个新的消息叫做 ExecuteTransactionRequest 用来在同一个事务中执行多个消息应该是个补充,我因为没有CRM Online 2015 Update 1环境,而Dynamics CRM 2015本地部署的版本又一直没有出Update 1功能包,所以暂时无法演示给这个消息给大家看。相信待到今年出来Dynamics CRM 2016出来后是可以演示的。
在解决方案中,我们建立一个简单的流程,如下:我这里选择的实体是 无(全局) ,这样执行起来方便点。
我先增加两个简单的字符串类型的参数如下:
我这里增加两个简单的类型为 创建记录 的步骤,步骤一创建的客户为本操作的参数AccountName1的值,步骤二创建的客户为本操作的参数 AccoutName2 的值。

然后激活这个操作,这样我们就可以调用这个操作了。

我目前阶段只能通过代码来调用这个操作。因为在Dynamics CRM 2015中还不支持直接在工作流中调用操作,而到了Dynamics CRM 2015 Update 1则支持了。代码如下:
static void Main(string[] args)
{var service = GetOrganizationService();var whoAmIReq = new WhoAmIRequest();var whoAmIResp = service.Execute(whoAmIReq) as WhoAmIResponse;OrganizationRequest req = new OrganizationRequest("new_TestAction");req["AccountName1"] = "测试创建的客户一";req["AccountName2"] = "测试创建的客户二";req["Target"] = new EntityReference("systemuser", whoAmIResp.UserId);service.Execute(req);Console.WriteLine("程序运行完成!");Console.ReadKey();
}

运行代码后真的创建了两个客户如下:
为了测试我将这两个新建的客户删除,然后我在创建客户时间上注册了一个实时工作流来让创建客户产生异常:
 

激活工作流以后,如果我手工创建客户名称包括 二 的客户会报错如下:
当然用代码来执行也会报错,我还是执行前面的代码,代码会跑出异常如下:
这个时候我去刷新下客户界面看看第一个步骤增加的 测试创建的客户一 是否增加,发现没有增加。是我的代码没有处理异常吗?我用异常处理块将代码包括起来还是同样的错误。看来至少两个CRM操作是在同一个事务中。
细心的朋友可能会发现,定义操作的时候有个选项默认是选中的,那就是启用回滚选项,如下:
所以我在想,如果我去掉这个选中,也就是不选中 启用回滚 ,会不会就不在同一事务中了?于是我这样修改后激活去测试下:
然后我去执行前面相同的代码,结果是创建了 测试创建的客户一,没有创建 测试创建的客户二 ,看来是没有回滚,也就是这个选项还是很重要的。
我们继续做一个小实验,就是在前面两个步骤以后加一个调用自定义工作流活动的步骤,这个自定义工作流活动我只是简单的下载一个链接的文件作为第二个客户的附件而已,代码如下:稍微注意下,如果输入类型是EntityReference,需要通过ReferenceTarget属性指定是那个实体。
public sealed class GetNoteContent : CodeActivity
{[RequiredArgument][Input("要添加附件的客户")][ReferenceTarget("account")]public InArgument<EntityReference> InAccount { get; set; }protected override void Execute(CodeActivityContext executionContext){IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);try{// TODO: Implement your custom Workflow business logic.using (WebClient client = new WebClient()){byte[] responseBytes = client.DownloadData(@"http://www.luoyong.me/GetAnnotationDocument.ashx?AnnotationId=B39F0691-C377-E511-80ED-000D3A800514");var annotationEntity = new Entity("annotation");annotationEntity["documentbody"] = Convert.ToBase64String(responseBytes);annotationEntity["subject"] = "微软MVP罗勇用代码增加的带附件的注释标题";annotationEntity["notetext"] = "微软MVP罗勇用代码增加的带附件的注释内容";annotationEntity["filename"] = "附件.pdf";annotationEntity["mimetype"] = "application/pdf";annotationEntity["isdocument"] = true;annotationEntity["objectid"] = InAccount.Get(executionContext);service.Create(annotationEntity);}}catch (FaultException<OrganizationServiceFault> e){tracingService.Trace("Exception: {0}", e.ToString());// Handle the exception.throw;}tracingService.Trace("Exiting GetNoteContent.Execute(), Correlation Id: {0}", context.CorrelationId);}
}

同时我还禁用然后删除了之前创建的自定义工作流,这样创建第二个客户才能成功。修改了测试的操作,增加了一个调用自定义工作流活动的步骤如下:
我先测试 启用回滚的情况,测试结果发现两个客户创建成功,且第二个客户也增加了附件。

正常的能成功,我就稍微修改下自定义工作流活动的代码,故意把URL搞错,然后测试,抛出了如下异常:
然后我们去看创建的客户,发现没有创建客户。

如果我将操作的 启用回滚 选项去掉,然后激活测试结果如下,可以看到客户创建了,但是附件没有创建。

然后我还测试下,将这个创建附件的步骤放到第二步,且是为第一个创建的客户添加附件:
当没有选中 启用回滚 选项的时候测试结果是:客户一创建成功,第二个步骤出错,没有回滚整个操作,第三个步骤没有执行。
如果我选中 启用回滚 选项的话,测试结果是回滚了整个操作所做的事情。
所以稍微总结下就是,操作如果选中了 启用回滚 这个选项,操作的所有步骤都是一个事务,如果没有选中,则是成功的会commit,失败的当然失败,后面的步骤不会执行。可以用来保证一次多个操作的事务性。
当我要删除创建的测试工作流活动的时候,又碰到使用SDK的插件注册工具(PluginRegistration)删除自定义工作流活动的时候登陆以后出现空白的情况,按照帖子 CRM SDK 2015 Plugin registration tool not working 的说法,是语言包的问题,我得解决办法就是把插件注册工具文件夹中的除了 en, en-us 文件夹外所有的语言包都删除掉:
当然还可以用Developer Toolkit来删除,如下,自己再删除源文件和 RegisterFile.crmregister 文件中的相应内容即可:

转载于:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Is_Action_In_Transaction.html

Dynamics CRM中的操作(action)是否是一个事务(transaction)?相关推荐

  1. mysql中哪种方式可以开启一个事务_网易技术类笔试题-2016

    一.单选题 1.下面两个结构体 struct One{ double d; char c; int i; } struct Two{ char c; double d; int i; } 在#prag ...

  2. Microsoft Dynamics CRM 2011 JS操作集锦

    1.Xrm.Page.context 用户ID:getUserId() 用户角色:getUserRoles() 用户语言:getUserLcid() 组织名称:getOrgUniqueName() 组 ...

  3. Dynamics CRM 中 Xrm.Page.getControl('name').getValue() 和 Xrm.Page.getAttribute('name').getValue() 的区别

    Xrm.Page.getControl('name').getValue() 获取的值是 Xrm.Page.getAttribute('name').getValue() 之前的值. 一般情况下,两者 ...

  4. Microsoft Dynamics CRM 2011中,Lookup字段的赋值

    在微软CRM中,有一种名为"查找"类型的字段,以代表子表中的外键字段,这种字段,被称为查找类型字段,lookup字段,或者EntityReference字段.该字段的数据类型是Gu ...

  5. Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况

    有的时候,当我们打开一条记录, 我们会发现这条记录或者记录中的某个字段变成了不可编辑的状态, 但让表单中的显示字段变成只读的情况有很多, 你可以使用JS代码中的setDisabled, 也可以使用系统 ...

  6. 在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话

    背景 在On-premises部署的Dynamics CRM中实现通过网页拨通客户电话的功能 要点 3CX 提供了开箱即用的Dynamics CRM Solution,只需要在Microsoft Dy ...

  7. Microsoft Dynamics CRM 2013升级2015(二)正式安装升级 2015及 Reporting Extensions安装

    Microsoft Dynamics CRM 2015 系统要求和所需技术 Microsoft Dynamics CRM(本地) 版本需要以下软件: ·Microsoft Windows Server ...

  8. Dynamics CRM中跨域调用Web API 2

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复224或者20160611可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  9. Microsoft Dynamics CRM 2013 试用之系统篇 正式安装 Microsoft Dynamics CRM Server 2013

    想学习Microsoft Dynamics CRM, 建议从本人博客CRM中从早到晚日期,完整看一遍,然后再安装. 安装需要的文件直接到微软官方下载 1. 下载  Microsoft Dynamics ...

最新文章

  1. 《用于物联网的Arduino项目开发:实用案例解析》—— 3.4 小结
  2. 技能 | Python处理图像10大经典库
  3. Gartner:企业架构开始更加紧密地向业务看齐
  4. 分布式缓存DistributedCache的使用
  5. python迷宫最短路径_python实现最短路径的实例方法
  6. 聚焦2020云栖大会 边缘计算专场畅谈技术应用创新
  7. java人民币读法转换
  8. Python笔记-centos7使用adb连接真实手机及初始化uiautomatro2项目
  9. HTML5教程:1.3 HTML 5的使用理由和待解决问题
  10. Bossie Awards 开源大数据工具最佳列表
  11. 机器学习:使用matlab实现逻辑回归解决数字识别(多元分类)问题
  12. JAVA 中文乱码转换
  13. 语法练习——动名词专项训练
  14. c语言手写平衡二叉树非递归实现
  15. Android 防止App退出 或者 启动另一个App
  16. 如何从初级程序员到中级程序员
  17. 信号处理基本概念:单位脉冲响应和单位阶跃响应
  18. 一口气从零读懂CAN总线以及应用
  19. 烽火移动设备管理:企业安全管理无处遁形
  20. C51---13 DS18B20温度传感器

热门文章

  1. 清楚xcode缓存(老是忘记所有记下来方便以后查阅)
  2. C#的变迁史 - C# 2.0篇
  3. sharepoint 2013 自定义列表eventhandle权限控制
  4. 热烈欢呼:cnblogs.com博客园首页通过W3C验证
  5. 基于OpenCV给图片添加边框
  6. B树、B+树、AVL树、红黑树
  7. View - RemoteViews
  8. 在VC中实现模拟键盘,输入内容并显示在ListBox中。
  9. Linux基础命令的操作(时间与日期,日历,计算器)
  10. 数据库,唯一索引,重复数据处理