2017-04-06 87 views
0

我正在使用OOB工作流(使用CRM UI工作流設計器設計)和自定義操作(使用編寫的操作)的組合設計CRM中冗長的批准系統。 NET代碼)。想法是在OOB工作流程中保留整個分支/更簡單的邏輯,並在必要時調用自定義操作。但是我有這個方法幾個問題:處理操作錯誤/開箱即用輸出工作流程

  1. 我怎麼能處理的操作代碼運行時產生的錯誤? 例如,我的一個操作包含通過Web服務將數據推送到外部系統的代碼。如果此Web服務調用失敗,則需要在父工作流程中執行一些步驟。

  2. 如何處理'檢查條件'無法處理的'條件'步驟?例如,假設在執行某個工作流程步驟之前,我需要檢查一些CRM中無法查詢的數據。我可以創建一個Action,它將基於自定義邏輯返回true/false,然後可以在父級工作流程中檢查該自定義邏輯。

另一種方法是使用插件,但我傾向於儘可能多地使用OOB功能。任何輸入都會有幫助。

回答

2

首先,讓我們澄清的語義,因爲我不知道你是否明白你在說什麼 - 有行動(你可以把它們稱爲自定義操作,但你應該是指您創建的每個工作流程作爲自定義,我從你的帖子中發現,你將它們描述爲OOB,這也是語義錯誤的 - 你創建的每個工作流程都是一個自定義工作流程,也許是使用OOB步驟,但這是一個不同的故事)和Custom Workflow Activities。我假設你想使用自定義工作流程活動,因爲它更適合你在這裏實現的目標。您還將您的問題標記爲CRM 2011和CRM 2013--不確定您的意思,因爲操作不適用於CRM 2011.

所以基本上自定義工作流程活動可以有輸入和輸出參數。輸出參數可以解答您的問題,因爲您可以使用它們在自定義處理後獲取錯誤消息,或稍後在條件語句中使用,然後在工作流程中使用。通過簡單地調用

ErrorMessage.Set(executionContext, messageText) 

所以,現在當你定義 https://technet.microsoft.com/en-us/library/gg327842.aspx

當然你也可以設置該屬性:輸出參數可以定義這樣的:這裏

[Output("Error message")] 
public OutArgument<string> ErrorMessage { get; set; } 

你可以找到更多的例子你的工作流程,無論你需要什麼東西都不能在OOB塊中配置,你可以把你的Custom塊,在完成後只需檢查它的輸出是否有錯誤(這只是一個例子,你可以通過添加額外的輸出來壓縮它參數,使其更通用),如果它是空的,然後做一些事情,如果不是,那麼做一些其他的事情,例如發送帶有錯誤信息的電子郵件。這一切都取決於你想達到什麼。

操作都服務於不同的目的,他們是爲了創造一個可以通過插件或JavaScript(的WebAPI)很容易調用,讓你也把一個插件,它旁邊一個事務中所做的一切邏輯電路。也許它會在你的工作流程的某個地方有用,但據我記得在CRM 2013中,行動無法從工作流中調用...

UPDATE: 好了,所以,如果我們面對的是CRM 2016年,我們可以從工作流調用操作。在這種情況下最好的取決於場景和我們想要實現的目標,但爲了讓決定更容易讓我強調一下主要區別:

1)活動只是一段代碼,可以放在裏面你的工作流程本身的行爲不是代碼,它們是可以調用的自定義消息。當然,你可以在這個自定義消息上註冊一個插件,並在那裏執行你想要的任何定製邏輯,但這是採取另一步驟

2)動作可以在事務中運行,活動不可以(但你可以運行Actions ,所以在這種情況下,他們可以在事務中運行)

3)操作可以直接從JavaScript,插件和工作流程進行調用。這是一件很棒的事情,但是如果你會讓我們說10個自定義動作,你將只在你的工作流程中使用它們,當你註冊插件時它們將是可見的(並且任何js開發者都可以用JS調用它們) )

所以基本上操作是一個又大又肥的功能,可用於多種用途(包括對自己的跑步活動!),活動要簡單得多,但在你的情況下,他們也會做好自己的工作。所以,你應該問自己的問題:

我需要我的邏輯,以內幕交易運行?

而且

我需要到別的地方調用這個邏輯不是我的工作流程?

如果您有任何「是」,然後去操作的沒有,然後去活動,因爲你沒有任何正當理由被過於複雜的事情。

+0

謝謝帕維爾。爲了澄清我的問題,通過OOB工作流程,我的意思是可以使用CRM UI工作流設計器和自定義操作設計的工作流程。我的意思是使用.NET代碼編寫的操作。 (在這個問題的更正) 來到你的答案,我想自定義工作流活動,是我一直在尋找的解決方案。但據我所知,在2016年我們也可以從工作流調用Action(類似於調用Custom Workflow Activities)。所以我正在嘗試從工作流程中使用自定義工作流程活動和自定義代碼操作。思考? – Ashish

+0

是的,在CRM 2016中,我們可以調用工作流中的操作,但是您爲CRM 2011和CRM 2013標記了您的問題,請驗證您的代碼。 –

+0

我已經更新了我的答案 –