關注本人微信和易信公眾號: 微軟動態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(); } } } }
結果如下,捕獲到了異常,這是因為最后一個刪除操作沒有找到記錄,導致刪除失敗導致的,前面兩個步驟也沒有創建或者更新記錄: