Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了

关注本人微信和易信公众号: 微软动态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();
            }
        }
    }
}
结果如下,捕获到了异常,这是因为最后一个删除操作没有找到记录,导致删除失败导致的,前面两个步骤也没有创建或者更新记录:
 
当然我也做了测试,如果删除的记录存在,是可以三个消息都执行成功的。
 
原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_CRM_2016_New_Feature_ExecuteTransactionRequest.html