Exemplo n.º 1
0
        public void WorkflowVariable_FromObject_测试()
        {
            var data = new ObjectData {
                ReviewDays = 10
            };

            WorkflowVariable wv = WorkflowVariable.FromObject(data);

            var obj = ExpressionEvaluator.GetValue(wv, "DateTimeHelper.AddDays(ReviewDays)");
        }
Exemplo n.º 2
0
        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);

                string bizId = Guid.NewGuid().ToString();
                ProcessInstance[] instances = ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId).GetAwaiter().GetResult();

                ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient();
                TaskModel task             = taskClient.MyTasks(teachers).GetAwaiter().GetResult().List.FirstOrDefault();

                _ = taskClient.CompleteTask(new CompleteTaskCmd
                {
                    TaskId          = task.Id,
                    OutputVariables = WorkflowVariable.FromObject(new
                    {
                        ids = bizIds,
                        完成  = true
                    }),
                    NotFoundThrowError = true
                }).GetAwaiter().GetResult();

                Resources <TaskModel> tasks = ctx.CreateWorkflowHttpProxy().GetProcessInstanceTasksClient()
                                              .GetTasks(new ProcessInstanceTaskQuery()
                {
                    IncludeCompleted  = false,
                    ProcessInstanceId = instances[0].Id
                }).GetAwaiter().GetResult();

                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());
                }

                foreach (var uid in subUsers1)
                {
                    var myTasks = taskClient.MyTasks(uid).GetAwaiter().GetResult().List.ToList();
                    myTasks.ForEach(tsk => taskClient.CompleteTask(new CompleteTaskCmd {
                        TaskId = tsk.Id
                    }).GetAwaiter().GetResult());
                }

                var sTasks = taskClient.MyTasks(students).GetAwaiter().GetResult().List.ToList();
                sTasks.ForEach(tsk => taskClient.CompleteTask(new CompleteTaskCmd {
                    TaskId = tsk.Id
                }).GetAwaiter().GetResult());

                ctx.CreateWorkflowHttpProxy().GetProcessInstanceClient().GetProcessInstanceById(instances[0].Id).GetAwaiter().GetResult();
            });

            Assert.NotNull(ex);
        }
Exemplo n.º 3
0
        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);

                string bizId = Guid.NewGuid().ToString();
                ProcessInstance[] instances = AsyncHelper.RunSync(() => ctx.StartUseFile(bpmnFile, null, vars, businessKey: bizId));

                ITaskController taskClient = ctx.CreateWorkflowHttpProxy().GetTaskClient();
                TaskModel task             = AsyncHelper.RunSync(() => taskClient.MyTasks(teachers)).List.FirstOrDefault();

                _ = AsyncHelper.RunSync(() => taskClient.CompleteTask(new CompleteTaskCmd
                {
                    TaskId          = task.Id,
                    OutputVariables = WorkflowVariable.FromObject(new
                    {
                        ids = bizIds,
                        完成  = true
                    }),
                    NotFoundThrowError = true
                }));

                ///完成子任务节点1的任务
                foreach (var uid in subUsers)
                {
                    var myTasks = AsyncHelper.RunSync(() => taskClient.MyTasks(uid)).List.ToList();
                    myTasks.ForEach(tsk => AsyncHelper.RunSync(() => taskClient.CompleteTask(new CompleteTaskCmd {
                        TaskId = tsk.Id
                    })));
                }

                {
                    //任务节点1仅完成子用户1的任务,子活动1应该停在任务节点2
                    var myTask = AsyncHelper.RunSync(() => taskClient.MyTasks(subUsers1[0])).List.First();
                    AsyncHelper.RunSync(() => taskClient.CompleteTask(new CompleteTaskCmd {
                        TaskId = myTask.Id
                    }));

                    //完成子活动2的所有任务
                    var myTasks = AsyncHelper.RunSync(() => taskClient.MyTasks(subUsers1[1])).List.ToList();
                    myTasks.ForEach(tsk => AsyncHelper.RunSync(() => taskClient.CompleteTask(new CompleteTaskCmd {
                        TaskId = tsk.Id
                    })));
                }

                var sTasks = AsyncHelper.RunSync(() => taskClient.MyTasks(students)).List;

                Assert.Empty(sTasks);
            });

            Assert.Null(ex);
        }