共用方式為


建立即時工作流程

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

類似非同步工作流程,即時工作流程可用來建立實際商務程序的模型和自動化。 它們可以選擇性要求使用者輸入、根據指定的事件條件自動啟動,或可由使用者手動啟動。 即時工作流程適用於商務使用者,例如商務分析師,實作類似於同步外掛程式的功能,而不需要 .NET Framework 程式設計經驗。 您可以在 Microsoft Dynamics 365 Web 應用程式中或使用程式碼建立非同步或即時工作流程。

關於即時工作流程的一些重點包括下列項目:

  • 透過使用 Workflow 實體記錄定義,類似於非同步工作流程。

  • 在事件執行管線階段中執行,類似於同步外掛程式。 即時工作流程可以在核心作業之前執行 (前置作業)、之後 (後置作業),或是在核心作業時執行。 在核心作業時執行的即時工作流程為自訂動作實作。 即時工作流程可以在階段中指定順位,就如同處理外掛程式一樣。其他資訊:準銷售案源階段

  • 不論設定為指定執行或因應事件執行,即時工作流程會立即執行,而不是排入佇列之後執行。

  • 可於登入使用者或工作流程負責人的安全性內容中執行。 不過,設定為指定執行的工作流程始終是在登入使用者安全性內容下執行。

  • 無法包含任何延遲工作或等候活動。

  • 只在啟用記錄時只記錄錯誤。

  • 在目前交易中執行。 工作流程和所有子工作流程的活動 (但非同步工作流程除外) 都是單一交易的一部分。 非同步子工作流程會排入佇列,在不同交易中執行。

  • 可以轉換為非同步工作流程和轉換回即時工作流程。

本主題內容

必要的安全性權限

使用程式碼建立即時工作流程

將非同步工作流程轉換為即時工作流程,以及轉換回非同步工作流程

錯誤處理和回復

封裝發佈的即時工作流程

必要的安全性權限

需要名為「啟用即時程序」(prvActivateSynchronousWorkflow) 的安全性權限,才能啟動即時工作流程,使其可執行。 需要執行工作流程作業 (prvWorkflowExecution) 權限,才能啟動工作流程。 因為即時工作流程影響核心系統作業,建議只授與一小群有經驗的使用者啟用權限。

如需這些權限的詳細資訊,請參閱自訂索引標籤

使用程式碼建立即時工作流程

雖然 Microsoft Dynamics 365 (線上) 支援即時工作流程,但是必須在 Web 應用程式中以互動方式建立它們。 本節討論的 XAML 架構工作流程只受到內部部署或 IFD 伺服器支援。 如需有關 XAML 工作流程的詳細資訊,請參閱 自訂 XAML 工作流程

您可以透過程式碼建立 Workflow 實體記錄,來建立即時工作流程。 使用中繼資料瀏覽器工具或 SDK 套件中的 EntityMetadata.xlsx 試算表,檢視 Workflow 實體的屬性中繼資料。若要檢視組織的實體中繼資料,請安裝瀏覽組織的中繼資料中敘述的中繼資料瀏覽器解決方案。 您也可以下載 SDK 後開啟其頂層資料夾內所附名為 EntityMetadata.xlsx 的 Excel 檔案,從中檢視未經自訂組織的中繼資料。 下載 Microsoft Dynamics CRM SDK 套件。

下列範例比較建立非同步工作流程的程式碼與建立即時工作流程的程式碼。


// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);

// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

即時工作流程有一些非同步工作流程沒有的額外屬性:

工作流程屬性

描述

Category

設定為 WorkflowCategory.Workflow

RunAs

指定在工作流程負責人 (workflow_runas.Owner) 或登入使用者 (workflow_runas.CallingUser) 的安全性內容下執行工作流程。

SyncWorkflowLogOnError

true,錯誤會記錄到 ProcessSession 記錄。 不同於非同步工作流程,即時工作流程不會記錄到 System Job 記錄。

CreateStageDeleteStageUpdateStage

找出在事件執行管線中工作流程執行的階段:在核心作業之前 (workflow_stage.Preoperation) 或之後 (workflow_stage.Postoperation)。 您必須將階段符合所要作業的觸發事件。 例如,如果 TriggerOnUpdatetrue,您也必須設定 UpdateStage

即時工作流程無法在擷取時執行。 除了擷取之外,其餘支援的 Web 服務訊息對應至這三種支援的事件之一。 例如,指派或設定狀態作業最終會和更新一樣。

Mode

這是執行模式。 將它設定為 WorkflowMode.Realtime

Rank

您可以透過設定順位,在階段中排列外掛程式和即時工作流程的執行順序。 順位 1 的所有外掛程式或即時工作流程在順位 2 的外掛程式或即時工作流程之前執行,依此類推。

Xaml

設定為可定義即時工作流程的 XAML 程式碼。

您可以在範例:在程式碼中建立即時工作流程主題中查看建立即時工作流程的完整範例程式碼。

將非同步工作流程轉換為即時工作流程,以及轉換回非同步工作流程

只要非同步工作流程不包含任何等待或延遲活動,您可以使用 UpdateRequest 將非同步工作流程轉換為即時,以及轉換回非同步工作流程,不需要重寫工作流程。 您也可以在 Web 應用程式中以互動方式執行轉換。 在轉換執行之前,工作流程必須在草稿狀態 (未啟用)。

將非同步工作流程轉換為即時工作流程

  1. 建立工作流程的 UpdateRequest

  2. 將工作流程的 Mode 屬性設定為 WorkflowMode.Realtime

  3. 適當設定工作流程的 CreateStageUpdateStageDeleteStage。 例如,工作流程若已設定 TriggerOnDelete,同時也必須設定 DeleteStage 屬性。

  4. 呼叫 Execute 方法,傳遞更新要求做為參數。

將即時工作流程轉換成非同步工作流程

  1. 建立工作流程的 UpdateRequest

  2. 將工作流程的 Mode 屬性設定為 WorkflowMode.Background

  3. 呼叫 Execute 方法,傳遞更新要求做為參數。

錯誤處理和回復

在資料庫交易時執行並將例外狀況傳遞回平台的任何工作流程活動都會取消核心作業。 如核心作業已進行,這會造成核心作業回復。 此外,任何前置事件或後置事件會註冊未執行的外掛程式或即時工作流程。 以相同事件觸發的所有非同步工作流程不會執行。

如果您在工作流程中包含已取消選項的停止工作流程 (TerminateWorkflow 類別) 活動,可在該活動中新增包含單行文字的自訂狀態訊息 (Reason 屬性),在 [商務程序錯誤] 對話方塊中顯示給使用者。

SyncWorkflowLogOnError 設定為 true 時,即時工作流程錯誤會記錄到 ProcessSession 實體記錄。

封裝發佈的即時工作流程

若要發佈工作流程,以便匯入 Microsoft Dynamics 365 組織,請將工作流程新增至 Microsoft Dynamics 365 解決方案。 使用 Web 應用程式,瀏覽至 [設定] > [自訂] > [解決方案],輕鬆執行此操作。 您也可以撰寫程式碼建立解決方案。 如需解決方案的詳細資訊,請參閱使用解決方案,封裝與發佈擴充功能

另請參閱

使用 Dynamics 365 程序自動化商務程序
建立自己的動作
事件執行準銷售案源
撰寫可擴充商務程序的外掛程式

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權