2012-11-13 69 views
2

我在服務活動的預先創建中註冊了一個插件。在插件中,我檢查一些條件,如果他們符合我想停止創建服務活動。而不是那個服務活動,我想創建另外兩個替代品。但我不想讓用戶知道這一切。防止在插件中創建

有沒有辦法阻止在CRM 2011插件中創建SA記錄?

回答

5

因此,如果用戶通過Dynamics CRM GUI觸發創建服務活動,通常會保存表單(通過發送內部UpdateRequest),然後通過另一次行程刷新到數據庫。如果您通過插件刪除了兩個事件之間的記錄,則用戶將通過肯定通過標準的「無法找到記錄」錯誤消息進行通知。在這種情況下,在插件中拋出一個阻止創建記錄的異常是等同的,因爲用戶會收到通知,但至少他會看到一個可定製的消息,可能告訴他爲什麼保存不起作用。

這似乎我通過一個插件來處理這個問題的最好辦法是

  1. 檢查條件。
  2. 更改(不刪除)現有的保存服務活動以匹配您想要創建的其他服務活動之一的條件。這樣,沒有不必要的刪除。
  3. 創建其他服務活動。
  4. 表單刷新後,現在改變的服務活動,你可以做任何你想要的JavaScript(打開其他記錄,關閉當前記錄等)。

如果你有對GUI的控制,你可以做一些不同的事情(例如刪除記錄後操作,雖然這仍然會導致一個額外的和不必要的數據庫操作),並且你總是可以使用javascript用於客戶端驗證。

還有一點:我必須補充一點,從用戶的角度來看,保存一條記錄然後不會立即看到它將構成一個意外的CRM行爲。如果發生這樣的事情,我至少會期望接受一些CRM部分工作方面的培訓,或者實際上發生了根本不同的通知。

0

,如果你拋出一個異常,這樣你可以停止:

throw new InvalidPluginExecutionException("Something is wrong!"); 

希望這有助於。 如果我回答了您的問題,請將回復標記爲答案,並投票表示爲有幫助。

+2

根據OP:「但我不希望用戶被告知這一切。」。這使得拋出一個例外是不行的。 –

4

不直接 - 例如從InputParameters中刪除Target會導致出現錯誤。

終止插件的常用方法是拋出一個異常,但當然你的用戶會看到這個(加上它可能會回滾你之前實現的任何其他邏輯)。

我已經找到了最好的解決辦法是有一個同步的前置作業插件,創建你想要的紀錄(大概是基於原始記錄提供的數據)和異步後操作插件,刪除不需要的記錄。它必須是異步的,因爲例如對話過程或工作流程假定在沒有引發異常的情況下成功創建記錄,並且在創建後立即嘗試訪問記錄(即使不需要進一步處理)。