[英]How to determine the Workflow Mode in the CRM 2011?
我想確定在Microsoft CRM 2011中如何啟動(后台/異步)或(實時/按需)工作流? 在OOB工作流程條件中還是在自定義工作流程活動中?
基於以下鏈接,我可以看到Microsoft在CRM 2013 SDK中引入了新屬性( IWorkflowContext.WorkflowMode )來公開該屬性。 我想要CRM 2011中的相同信息。
我認為無法在工作流設計器中區分按需工作流和觸發工作流。
在自定義工作流程活動中,如果工作流程是由觸發器啟動的,則只有Target輸入參數:
var context = activityContext.GetExtension<IWorkflowContext>();
if (context.InputParameters.Contains("Target"))
{
// Started by a trigger
}
else
{
// Started on demand
}
除此之外,您還可以通過Target的類型確定哪種觸發器啟動了工作流程。 此信息在context.MessageName中也可用,如果有更新消息,則包含字符串“ Update”。
if (context.MessageName == "Update")
// this is an update message
var context = activityContext.GetExtension<IWorkflowContext>();
if (context.InputParameters.Contains("Target"))
{
if (context.InputParameters["Target"].GetType() == typeof(Entity))
{
// create and update are Entity
}
else if (context.InputParameters["Target"].GetType() == typeof(EntityReference))
{
// delete and some other operations are EntityReference
}
}
else
{
// Started on demand
}
可以通過Target包含哪些屬性來確定更新了哪些特定字段。
這可用於確定哪個字段觸發了工作流。
如果創建消息觸發了工作流程,則Target將包含所有字段(用戶輸入的字段)。 要確定工作流是由字段更新觸發的,可以將context.MessageName與檢查Target包含的屬性結合使用。
您尋求的功能在CRM 2011中不存在IWorkflowContext.WorkflowMode
所有工作流都是異步運行的,因此不需要IWorkflowContext.WorkflowMode
。
您不能使CRM 2011同步運行OOTB工作流。 如果要在交易過程中執行代碼(CRM 2013可以使用同步工作流執行的方式),則必須在插件中編寫邏輯代碼。
我認為您可以通過在實體上添加“隱藏”字段並創建幾個填充該字段的“處理程序”工作流,然后觸發“實際”工作流來實現您的目標。
步驟1.在您的實體上創建一個字段以保存一個值,該值指示發起者
步驟2.將“實際”工作流程創建為子流程
步驟3.創建一個按需(僅)工作流:
一種。 在“啟動器”字段中的實體上設置一個值,指示工作流是手動運行的。
b。 調用子工作流程
步驟4.創建一個未選擇按需選擇的工作流:
一種。 在“啟動器”字段中的實體上設置一個值,以指示工作流程已自動化。
b。 調用子工作流程
步驟5.顯示結果
一種。 創建一個顯示該值的“管理員”表單和/或,
b。 將字段隱藏在用戶表單上,並根據需要通過js顯示和/或,
C。 創建一個包含顯示此字段的視圖和/或,
d。 創建包含此字段的報告和/或,
e。 檢查代碼中此字段的值
除非有特定值,否則該字段將不會包含在用戶表單或視圖中。
通過使用自定義字段並通過“處理程序”工作流填充它,您將能夠實現OOB目標。 (也就是說,如果您考慮使用Web GUI創建自定義字段和工作流程“ OOB”。)
通過以編程方式檢查此字段的值,您將實現您的“自定義工作流”目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.