我有一個插件需要創建一堆實體,並且這樣做使用;CRM插件在執行操作之前異常
service.Create(Entity);
在插件的末尾(更新前同步),我有時需要取消保存操作。我知道如何拋出一個異常,但如果我這樣做,我的service.Create(Entity)不會被執行。
如何強制服務執行插件中的操作,然後通過拋出異常取消保存?
編輯:代碼是;
var id = service.Create(newEntity);
throw new Exception("Cancelled Save but created the new entity");
如果我拋出異常,實體不會被創建。如果我不拋出異常,實體會創建。我需要它來創建並拋出異常,以便保存操作被取消。
感謝您的指點。
您是否嘗試在更新實體之前執行驗證,如果驗證失敗,請使用'service.Create(Entity)'寫入錯誤表(新實體),並通知用戶更新操作失敗信息? –
本質上,我創建了一個自定義實體,它記錄有關用戶嘗試更改的詳細信息,然後禁止保存。我在插件中這樣做,因爲可能有工作流和/或其他服務試圖修改記錄。 – creatiive
如果'IPluginExecutionContext.IsInTransaction == true',那麼如果拋出異常,你所做的任何事情都將被回滾。順便說一句,不知道你的評論是什麼意思 - 但如果工作流更新記錄,插件仍然可以觸發。您可以嘗試在預驗證階段進行註冊,有時在交易之外進行註冊,但並非總是如此。在我看來,您實施的解決方案體系結構與Dynamics CRM平臺不一致。 – Nicknow