• 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

  • 相关阅读:
    Redhat7.x静默安装19C客户端
    利用增量备份修复DG备库中的gap>>>>>>>>>>>有新增数据文件
    利用增量备份修复DG备库中的gap>>>>>>>>>>>无新增数据文件
    ORA-01665 control file is not a standby control file
    ORA-01110 ORA-01122 ORA-01110 ORA-01200解决办法
    Zabbix5.0+Grafana可视化部署教程
    RedHat 7.5配置bonding双网卡绑定(转)
    11.2.0.1 RAC环境部分磁盘组无法自动挂载,导致数据库实例无法启动(转)
    11.2.0.1 RAC环境经典bug CRS-4124: Oracle High Availability Services startup failed.
    Git配置SSH及常用命令
  • 原文地址:https://www.cnblogs.com/Qbit/p/14040127.html
Copyright © 2020-2023  润新知