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();
            }
        }
    }
}

 

 

結果如下,捕獲到了異常,這是因為最后一個刪除操作沒有找到記錄,導致刪除失敗導致的,前面兩個步驟也沒有創建或者更新記錄:
 
當然我也做了測試,如果刪除的記錄存在,是可以三個消息都執行成功的。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM