Elsa-Core 工作流 使用代碼啓動審批流或觸發審批任務

源代碼地址:Sample12

https://github.com/elsa-workflows/elsa-core/blob/2934bfce721ee96c85e4a4cedf46fda0bd1d1b51/src/samples/Sample12/Program.cs#L28

 

 var services = BuildServices();
            // 此處registry 對象應在構造函數中注入
            var registry = services.GetService<IWorkflowRegistry>();
            //獲取工作流實例 ,如果是 通過設計器拖拽的 工作流 使用   registry.GetWorkflowDefinitionAsync("工作流名稱", VersionOptions.Latest);   
            var workflowDefinition = await registry.GetWorkflowDefinitionAsync<UserTaskWorkflow>();
            // 注入
            var invoker = services.GetRequiredService<IWorkflowInvoker>();

            // 使用代碼啓動工作流 示例 , correlationId 是區分不同工作流實例的必要條件,不同的工作流實例 中 correlationId 應當是唯一的,建議使用你的申請單主鍵
            var correlationId = Guid.NewGuid().ToString("N");
            await invoker.StartAsync(workflowDefinition, correlationId: correlationId);
            WorkflowExecutionContext executionContext;

            // 示例代碼顯示如何從工作流定義中獲取可用操作的列表:其中 x.Name 對應工作流設計器中的 Name 文本框,如果需要用代碼獲取必須設置該值
            // Sample code showing how to get a list of available actions from the workflow definition:
            var availableActions = workflowDefinition.Activities.Single(x => x.Name == "WaitUser").State["Actions"].ToObject<string[]>();
            
            do
            {
                //現在,在用戶任務活動上停止了工作流。 要求用戶輸入: 實際應用中,比如網頁交互應該是用戶打開審批頁面
                // Workflow is now halted on the user task activity. Ask user for input:
                Console.WriteLine($"What action will you take? Choose one of: {string.Join(", ", availableActions)}");
                var userAction = Console.ReadLine();
                //讓工作流繼續執行,
                // Resume the workflow with the received stimulus.
                //當然,我們這裏首先要判斷 triggeredExecutionContexts 是否爲空。
                var triggeredExecutionContexts = await invoker.TriggerAsync(nameof(UserTask), new Variables { ["UserAction"] = new Variable(userAction)}, correlationId);
                executionContext = triggeredExecutionContexts.First();
                // 這個循環僅用作示例作用,實際情況不需要循環,直接用上面的代碼就可以了
            } while (executionContext.Workflow.IsExecuting());  

 

 

 

這個看起來可能舒服點:

 

 

 

 

 

 

 

原文地址: https://www.cnblogs.com/Qbit/p/14040127.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章