2016-03-17 63 views
3

我正在爲Dynamics CRM(2015和CRM Online)定製C#插件進行插件註冊。Dynamics CRM插件註冊爲「post operation」在數據庫事務內部還是外部運行?

當您創建使用Visual Studio CRM Explorer的一個新的插件,你得到標準的「創建插件」對話框:

enter image description here

在「流水線階段」,有三個選項:

  1. 預驗證
  2. 操作前
  3. 後操作

在此處選擇Post-Operation導致這段代碼被添加到XML註冊文件:

<Plugin Description="..." FriendlyName="PostContactCreate" Name="Cacheron.PostContactCreate" Id="00000000-0000-0000-0000-000000000000" TypeName="Cacheron.PostContactCreate"> 
     <Steps> 
     <clear /> 
     <Step CustomConfiguration="" Name="PostContactCreate" Description="Post-Operation of Contact Create" Id="00000000-0000-0000-0000-000000000000" MessageName="Create" Mode="Synchronous" PrimaryEntityName="contact" Rank="1" SecureConfiguration="" Stage="PostOutsideTransaction" SupportedDeployment="ServerOnly"> 
      <Images /> 
     </Step> 
     </Steps> 
    </Plugin> 

的關鍵部分存在着中間線,在那裏它說系統產生Stage="PostOutsideTransaction"

相應的C#代碼由該工具包含的行:

base.RegisteredEvents.Add(
    new Tuple<int, string, string, Action<LocalPluginContext>>(
    40, 
    "Create", 
    "contact", 
    new Action<LocalPluginContext>(ExecutePostContactCreate) 
) 
); 

該插件註冊中的幻數40看來,以對應於https://msdn.microsoft.com/en-gb/library/gg327941.aspx記錄的「管道階段」,它說

事件後

手術後

階段在流水線的插件,這是在主操作之後執行。在這個階段註冊的插件在數據庫事務中執行。

由工具,清清楚楚地寫着生成所以我已經有了註冊XML通過相同的工具,它指定舞臺40,這是產生PostOutsideTransaction,和C#代碼「的數據庫事務中執行

那它是哪一個? XML註冊語法是否使用誤導性名稱,或者這是插件創建工具中的錯誤,還是執行管道做了一些我不明白的事情?

回答

3

這取決於您的發佈操作插件步驟已註冊的消息。

  • Create
  • Update
  • Delete
  • SetState
  • Assign

一些其它消息可外部的執行:對於最常見的消息的步驟的數據庫事務內執行數據庫事務,例如PublishPublishAll,並且對於其他變化(RetrieveRetrieveMultiple)。

IPluginExecutionContext對象中,您可以檢查IsInTransaction屬性。

+0

你有鏈接或文件,說明檢索不在數據庫事務中嗎? – Daryl

2

40肯定是後期操作和交易內部。你可以很容易地判斷出現這種情況,因爲如果你的stage 40插件步驟引發異常,那麼觸發插件的整個操作就會回滾。

在一個不相關的說明中,我強烈建議放棄SDK中的開發人員工具箱。由於多種原因,它很麻煩並且非常煩人。我強烈推薦免費和開源的CRM Developer Extensions,這是更好的。

相關問題