当前位置:   article > 正文

elsa-workflows工作流持久化及通过MVC Page页面发起及完成

elsa-workflows

https://elsa-workflows.github.io/

elsa-workflows工作流持久化及通过MVC Page页面发起及完成

手工通过Page页面发起工作流,通过流程的实例Id,从数据库获取正在运行的实例,执行下一个节点(Activity)

多种方式启动Elsa工作流

 //http://localhost:49814/Test/Start?name=dacong345
    public class StartModel : PageModel
    {

        private readonly IWorkflowRegistry workflowRegistry;
        private readonly IWorkflowDefinitionDispatcher workflowDispatcher;
        private readonly IStartsWorkflow startsWorkflow;
        private readonly IBuildsAndStartsWorkflow workflowRunner;

        public StartModel(IWorkflowRegistry workflowRegistry,
            IWorkflowDefinitionDispatcher workflowDispatcher,
            IStartsWorkflow startsWorkflow,
            IBuildsAndStartsWorkflow workflowRunner
            )
        {
            this.workflowRegistry = workflowRegistry;
            this.workflowDispatcher = workflowDispatcher;
            this.startsWorkflow = startsWorkflow;
            this.workflowRunner = workflowRunner;
        }
        public string Id { get; set; }

        [BindProperty(SupportsGet = true)]
        public string name { get; set; }

        public async Task OnGetAsync()
        {
            var eventData = new NonConformingApplyEvent { Name = name, CreateTime = DateTime.Now };
            if (string.IsNullOrEmpty(eventData.Name))
                eventData.Name = "dacong2";
            // Dispatch each workflow. Each workflow will be correlated by Document ID.
            var instance = await workflowRunner.BuildAndStartWorkflowAsync<NonConformingWorkflow>(input: new WorkflowInput(eventData));
            Id = instance.WorkflowInstance.Id;
        }
        public async Task OnGet2Async()
        {
            var workflowBlueprint = await workflowRegistry.FindByNameAsync(nameof(NonConformingWorkflow), VersionOptions.Published);
            var eventData = new NonConformingApplyEvent { Name = name, CreateTime = DateTime.Now };
            if (string.IsNullOrEmpty(eventData.Name))
                eventData.Name = "dacong";
            // Dispatch each workflow. Each workflow will be correlated by Document ID.
            var instance = await startsWorkflow.StartWorkflowAsync(workflowBlueprint, input: new WorkflowInput(eventData));
            Id = instance.WorkflowInstance.Id;
        }

执行,信号量触发

//http://localhost:49814/test/instance?id=923f4f58ebde4a8ba69e4982987f1015&userAction=Approve
    public class instanceModel : PageModel
    {
        private readonly IWorkflowInstanceStore workflowInstanceStore;
        private readonly ISignaler signaler;

        public instanceModel(IWorkflowInstanceStore workflowInstanceStore, ISignaler signaler)
        {
            this.workflowInstanceStore = workflowInstanceStore;
            this.signaler = signaler;
        }
        [BindProperty(SupportsGet = true)]
        public string id { get; set; }

        [BindProperty(SupportsGet = true)]
        public string userAction { get; set; }


        public string DisplayName { get; set; }
        public async Task OnGetAsync()
        {
            var ins = await workflowInstanceStore.FindAsync(new WorkflowInstanceIdSpecification(id));
            DisplayName = $"{ins.Id},{ins.Input.GetType()}";
            Log.Debug($"{this},Document={ins.Variables.Get("Document")}");
            ins.Variables.Set("Document", "dacong");            
            var startedWorkflows = await signaler.TriggerSignalAsync(userAction, workflowInstanceId:id);
        }
    }

--用户任务

/// <summary>
    /// http://localhost:49814/test/usertask?userAction=Accept
    /// http://localhost:49814/test/usertask?userAction=Reject
    /// </summary>
    public class userTaskModel : PageModel
    {
        private readonly IWorkflowTriggerInterruptor _workflowInterruptor;
        private readonly IWorkflowTriggerInterruptor workflowTriggerInterruptor;

        public userTaskModel(IWorkflowTriggerInterruptor workflowInterruptor, IWorkflowTriggerInterruptor workflowTriggerInterruptor)
        {
            _workflowInterruptor = workflowInterruptor;
            this.workflowTriggerInterruptor = workflowTriggerInterruptor;
        }

        public string Msg { get; set; }
        [BindProperty(SupportsGet = true)]
        public string userAction { get; set; }
        public async Task OnGetAsync()
        {
            
             var workflowInstances = (await _workflowInterruptor.InterruptActivityTypeAsync(nameof(UserTask))).ToList();
            var s = workflowInstances.FirstOrDefault();
            if (s == null)
            {
                Msg = "0个";
                return;
            }
            Msg = $"{s.ActivityId},{s.WorkflowInstance.CorrelationId}";
            
            await workflowTriggerInterruptor.InterruptActivityTypeAsync(s.WorkflowInstance, userAction);

        }

elsa 2.8.2,net6.0 vs2022

 

源代码下载:

通过asp.netcore页面发起Elsa工作流-C#文档类资源-CSDN下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/864525
推荐阅读
相关标签
  

闽ICP备14008679号