public void 主活动终止事件同时终止子活动(string bpmnFile, string subBpmnFile) { var ex = Record.Exception(() => { string 主任务 = Guid.NewGuid().ToString(); string 一任务 = Guid.NewGuid().ToString(); string[] subUsers = new string[] { Guid.NewGuid().ToString() }; string[] subUsers1 = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; var bizIds = new string[] { Guid.NewGuid().ToString() }; ctx.Deploy(bpmnFile); ctx.Deploy(subBpmnFile); WorkflowVariable vars = new WorkflowVariable(); vars.AddAssignee(nameof(主任务), 主任务) .AddAssignee(nameof(一任务), 一任务) .AddAssignee(nameof(subUsers), subUsers) .AddAssignee(nameof(subUsers1), subUsers1); vars.Add("ids", bizIds); string bizId = Guid.NewGuid().ToString(); ProcessInstance[] instances = ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId).GetAwaiter().GetResult(); ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient(); Assert.NotEmpty(taskClient.MyTasks(主任务).GetAwaiter().GetResult().List); Assert.NotEmpty(taskClient.MyTasks(subUsers[0]).GetAwaiter().GetResult().List); ///完成主任务节点的任务 taskClient.CompleteTask(new CompleteTaskCmd { BusinessKey = bizId, Assignee = 主任务 }).GetAwaiter().GetResult(); Assert.Empty(taskClient.MyTasks(subUsers[0]).GetAwaiter().GetResult().List); Assert.Empty(taskClient.MyTasks(一任务).GetAwaiter().GetResult().List); var pi = ctx.CreateWorkflowHttpProxy().GetProcessInstanceClient().GetProcessInstanceById(instances[0].Id).GetAwaiter().GetResult(); }); Assert.NotNull(ex); }
public void 部分完成并行子活动(string bpmnFile, string subBpmnFile) { var ex = Record.Exception(() => { string teachers = Guid.NewGuid().ToString(); string students = Guid.NewGuid().ToString(); string[] subUsers = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; string[] subUsers1 = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; var bizIds = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; ctx.Deploy(bpmnFile); ctx.Deploy(subBpmnFile); WorkflowVariable vars = new WorkflowVariable(); vars.AddAssignee(nameof(teachers), teachers) .AddAssignee(nameof(students), students) .AddAssignee(nameof(subUsers), subUsers) .AddAssignee(nameof(subUsers1), subUsers1); vars.Add("ids", bizIds); string bizId = Guid.NewGuid().ToString(); ProcessInstance[] instances = ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId).GetAwaiter().GetResult(); ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient(); ///完成子任务节点1的任务 foreach (var uid in subUsers) { var myTasks = taskClient.MyTasks(uid).GetAwaiter().GetResult().List.ToList(); myTasks.ForEach(tsk => { taskClient.CompleteTask(new CompleteTaskCmd { TaskId = tsk.Id }).GetAwaiter().GetResult(); }); } { //任务节点1仅完成子用户1的任务,子活动1应该停在任务节点2 var myTask = taskClient.MyTasks(subUsers1[0]).GetAwaiter().GetResult().List.First(); _ = taskClient.CompleteTask(new CompleteTaskCmd { TaskId = myTask.Id }).GetAwaiter().GetResult(); //完成子活动2的所有任务 var myTasks = taskClient.MyTasks(subUsers1[1]).GetAwaiter().GetResult().List.ToList(); myTasks.ForEach(tsk => taskClient.CompleteTask(new CompleteTaskCmd { TaskId = tsk.Id }).GetAwaiter().GetResult()); Assert.NotEmpty(taskClient.MyTasks(subUsers1[0]).GetAwaiter().GetResult().List); } var sTasks = taskClient.MyTasks(students).GetAwaiter().GetResult().List; Assert.Empty(sTasks); }); Assert.Null(ex); }
public void 使用子活动BUSINEEKEY完成并行子活动(string bpmnFile, string subBpmnFile) { var ex = Record.Exception(() => { string teachers = Guid.NewGuid().ToString(); string students = Guid.NewGuid().ToString(); string[] subUsers = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; string[] subUsers1 = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; var bizIds = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; ctx.Deploy(bpmnFile); ctx.Deploy(subBpmnFile); WorkflowVariable vars = new WorkflowVariable(); vars.AddAssignee(nameof(teachers), teachers) .AddAssignee(nameof(students), students) .AddAssignee(nameof(subUsers), subUsers) .AddAssignee(nameof(subUsers1), subUsers1); vars.Add("ids", bizIds); string bizId = Guid.NewGuid().ToString(); ProcessInstance[] instances = ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId).GetAwaiter().GetResult(); ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient(); ///完成子任务节点1的任务 foreach (var uid in subUsers) { foreach (var bid in bizIds) { taskClient.CompleteTask(new CompleteTaskCmd { Assignee = uid, BusinessKey = bid }).GetAwaiter().GetResult(); } } //完成子活动1,2的所有任务 foreach (var uid in subUsers1) { foreach (var bid in bizIds) { taskClient.CompleteTask(new CompleteTaskCmd { Assignee = uid, BusinessKey = bid }).GetAwaiter().GetResult(); } } var sTasks = taskClient.MyTasks(students).GetAwaiter().GetResult().List; Assert.NotEmpty(sTasks); }); Assert.Null(ex); }
public void 完成并行子活动(string bpmnFile, string subBpmnFile) { var ex = Record.Exception(() => { string teachers = Guid.NewGuid().ToString(); string students = Guid.NewGuid().ToString(); string[] subUsers = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; string[] subUsers1 = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; var bizIds = new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; ctx.Deploy(bpmnFile); ctx.Deploy(subBpmnFile); WorkflowVariable vars = new WorkflowVariable(); vars.AddAssignee(nameof(teachers), teachers) .AddAssignee(nameof(students), students) .AddAssignee(nameof(subUsers), subUsers) .AddAssignee(nameof(subUsers1), subUsers1); vars.Add("ids", bizIds); string bizId = Guid.NewGuid().ToString(); ProcessInstance[] instances = ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId).GetAwaiter().GetResult(); ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient(); ///完成子任务节点1的任务 foreach (var uid in subUsers) { var myTasks = taskClient.MyTasks(uid).GetAwaiter().GetResult().List; Task.WhenAll(Enumerable.Select(myTasks, (task) => { return(taskClient.CompleteTask(new CompleteTaskCmd { TaskId = task.Id })); })).GetAwaiter().GetResult(); } { //完成子活动1,2的所有任务 foreach (var uid in subUsers1) { var myTasks = taskClient.MyTasks(uid).GetAwaiter().GetResult().List; taskClient.CompleteTask(myTasks.Select(tsk => new CompleteTaskCmd { TaskId = tsk.Id }).ToArray()).GetAwaiter().GetResult(); } } var sTasks = taskClient.MyTasks(students).GetAwaiter().GetResult().List; Assert.NotEmpty(sTasks); }); Assert.Null(ex); }