关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复216或者20160329可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。
从Dynamics CRM 2015 UR1 开始,新增了ExecuteTransactionRequest,主要是用来处理以前面临的窘境:执行多个消息,有些消息成功,有些消息失败,系统是让成功的成功,让失败的失败。当然从Dynamics CRM 2013起也不是无计可施,我的博文:Dynamics CRM中的操作(action)是否是一个事务(transaction)? 提供了用操作来实现事务的方法。现在新增的ExecuteTransactionRequest消息则更加方便了,不需要借助操作了。
using Microsoft.Xrm.Client; using Microsoft.Xrm.Client.Services; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Query; using System; using System.Collections.Generic; using System.IO; using System.ServiceModel; namespace LuoYongLab { class Program { static void Main(string[] args) { try { var orgService = new OrganizationService(new CrmConnection("CRM")); var testEntity1 = new Entity("ly_test"); testEntity1["ly_name"] = "这是通过ExecuteTransactionRequest消息处理的-1"; CreateRequest req1 = new CreateRequest(); req1.Target = testEntity1; var testEntity2 = new Entity("ly_test", "ly_alternatekey", "13926492254"); testEntity2["ly_name"] = "这是通过ExecuteTransactionRequest消息处理的-2"; UpdateRequest req2 = new UpdateRequest(); req2.Target = testEntity2; DeleteRequest req3 = new DeleteRequest() { Target = new EntityReference("ly_test", "ly_alternatekey", "13926492260") }; ExecuteTransactionRequest req = new ExecuteTransactionRequest(); req.Requests = new OrganizationRequestCollection() { req1, req2, req3 }; orgService.Execute(req); Console.WriteLine("程序运行完成"); Console.ReadKey(); } catch (FaultException ex) { Console.WriteLine("程序出现异常:ex.Message=" + ex.Message); Console.WriteLine("ex.StackTrace=" + ex.StackTrace); Console.ReadKey(); } } } }
结果如下,捕获到了异常,这是因为最后一个删除操作没有找到记录,导致删除失败导致的,前面两个步骤也没有创建或者更新记录: