Ejemplo n.º 1
0
        private static CaseEltInstance BuildStage(string id, tStage stage, string casePlanInstanceId)
        {
            var planItems = BuildPlanItems(stage, casePlanInstanceId);
            var result    = new CaseEltInstance
            {
                Id    = CaseEltInstance.BuildId(casePlanInstanceId, stage.id, 0),
                Name  = stage.name,
                EltId = id,
                Type  = CasePlanElementInstanceTypes.STAGE
            };

            foreach (var planItem in planItems)
            {
                result.AddChild(planItem);
            }

            if (!result.ExitCriterions.Any() && stage.exitCriterion != null)
            {
                foreach (var exitCriteria in stage.exitCriterion)
                {
                    var sEntry = stage.sentry.First(s => s.id == exitCriteria.sentryRef);
                    result.AddExitCriteria(new Criteria(exitCriteria.name)
                    {
                        SEntry = BuildSEntry(sEntry)
                    });
                }
            }

            return(result);
        }
        public async Task When_Execute_Human_Task()
        {
            var humanTaskInstanceId = Guid.NewGuid().ToString();
            var instance            = CasePlanInstanceBuilder.New("1", "firstCase")
                                      .AddHumanTask("2", "humanTask", null, (_) =>
            {
            })
                                      .Build();
            var jobServer = FakeCaseJobServer.New();

            jobServer.HttpMessageHandler.Protected()
            .As <IHttpMessageHandler>()
            .Setup(x => x.SendAsync(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new HttpResponseMessage
            {
                Content = new StringContent("{ 'id' : '{" + humanTaskInstanceId + "}' }")
            });
            await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None);

            await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None);

            await jobServer.PublishExternalEvt("complete", "1", CaseEltInstance.BuildId("1", "2", 0), new Dictionary <string, string> {
                { "firstname", "firstname" }
            }, CancellationToken.None);

            var casePlanInstance = await jobServer.Get("1", CancellationToken.None);

            var firstHumanTask = casePlanInstance.StageContent.Children.ElementAt(0);

            Assert.Equal(CaseStates.Completed, casePlanInstance.State);
            Assert.Equal(TaskStageStates.Completed, firstHumanTask.TakeStageState);
        }
        public async Task When_Execute_FileItem()
        {
            var instance = CasePlanInstanceBuilder.New("1", "firstCase")
                           .AddFileItem("2", "directory", (_) =>
            {
                _.DefinitionType = CMMNConstants.ContentManagementTypes.FAKE_CMIS_DIRECTORY;
            })
                           .AddEmptyTask("3", "emptytask", (_) =>
            {
                _.AddEntryCriteria("entry", (__) =>
                {
                    __.AddFileItemOnPart("2", CMMNTransitions.AddChild);
                });
            })
                           .Build();
            var jobServer = FakeCaseJobServer.New();
            await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None);

            await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None);

            await jobServer.PublishExternalEvt("addchild", "1", CaseEltInstance.BuildId("1", "2"), new Dictionary <string, string> {
                { "fileId", "file" }
            }, CancellationToken.None);

            var casePlanInstance = await jobServer.Get("1", CancellationToken.None);

            var firstFileItem  = casePlanInstance.FileItems.ElementAt(0);
            var firstEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0);

            Assert.Equal(CaseStates.Completed, casePlanInstance.State);
            Assert.Equal(CaseFileItemStates.Available, firstFileItem.FileState);
            Assert.Equal(TaskStageStates.Completed, firstEmptyTask.TakeStageState);
        }
        public async Task When_Execute_Task_With_ManualActivationRule()
        {
            var instance = CasePlanInstanceBuilder.New("1", "firstCase")
                           .AddEmptyTask("2", "firstTask", (_) =>
            {
                _.SetManualActivationRule("name", new CMMNExpression("csharp", "true"));
            })
                           .AddEmptyTask("3", "secondTask", (_) =>
            {
            })
                           .AddEmptyTask("4", "thirdTask", (_) =>
            {
                _.AddEntryCriteria("entry", (__) =>
                {
                    __.AddPlanItemOnPart("2", CMMNTransitions.Complete);
                    __.AddPlanItemOnPart("3", CMMNTransitions.Complete);
                });
            })
                           .Build();
            var jobServer = FakeCaseJobServer.New();
            await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None);

            await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None);

            await jobServer.PublishExternalEvt("manualstart", "1", CaseEltInstance.BuildId("1", "2", 0), new Dictionary <string, string>(), CancellationToken.None);

            var casePlanInstance = await jobServer.Get("1", CancellationToken.None);

            var firstEmptyTask  = casePlanInstance.StageContent.Children.ElementAt(0);
            var secondEmptyTask = casePlanInstance.StageContent.Children.ElementAt(0);
            var thirdEmptyTask  = casePlanInstance.StageContent.Children.ElementAt(0);

            Assert.Equal(CaseStates.Completed, casePlanInstance.State);
            Assert.Equal(TaskStageStates.Completed, firstEmptyTask.TakeStageState);
            Assert.Equal(TaskStageStates.Completed, secondEmptyTask.TakeStageState);
            Assert.Equal(TaskStageStates.Completed, thirdEmptyTask.TakeStageState);
        }
Ejemplo n.º 5
0
        private static CaseEltInstance BuildPlanItem(string id, string name, tPlanItemDefinition planItemDef, string casePlanInstanceId)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                name = planItemDef.name;
            }

            if (planItemDef is tHumanTask)
            {
                var humanTask = planItemDef as tHumanTask;
                List <tHumanTaskParameter> pars = new List <tHumanTaskParameter>();
                if (humanTask.implementation == CMMNConstants.UserTaskImplementations.WSHUMANTASK)
                {
                    var parameters = humanTask.extensionElements?.Any.FirstOrDefault(_ => _.Name == "cmg:parameters");
                    if (parameters != null)
                    {
                        var xmlSerializer = new XmlSerializer(typeof(tHumanTaskParameter), "https://github.com/simpleidserver/CaseManagement");
                        foreach (XmlNode child in parameters.ChildNodes)
                        {
                            using (var txtReader = new StringReader(child.OuterXml))
                            {
                                pars.Add((tHumanTaskParameter)xmlSerializer.Deserialize(txtReader));
                            }
                        }
                    }
                }

                var result = new CaseEltInstance
                {
                    Id           = CaseEltInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId        = id,
                    NbOccurrence = 0,
                    Name         = name,
                    Type         = CasePlanElementInstanceTypes.HUMANTASK
                };
                result.UpdateFormId(humanTask.formId);
                result.UpdateImplementation(humanTask.implementation);
                result.UpdateInputParameters(pars.ToDictionary(kvp => kvp.key, kvp => kvp.value));
                result.UpdatePerformerRef(humanTask.performerRef);
                return(result);
            }

            if (planItemDef is tTask)
            {
                return(new CaseEltInstance
                {
                    Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    Type = CasePlanElementInstanceTypes.EMPTYTASK
                });
            }

            if (planItemDef is tTimerEventListener)
            {
                var            timer      = planItemDef as tTimerEventListener;
                CMMNExpression expression = new CMMNExpression
                {
                    Body     = timer.timerExpression.Text.First(),
                    Language = timer.timerExpression.language
                };
                var result = new CaseEltInstance
                {
                    Id           = CaseEltInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId        = id,
                    NbOccurrence = 0,
                    Name         = name,
                    Type         = CasePlanElementInstanceTypes.TIMER
                };
                result.UpdateTimerExpression(expression);
                return(result);
            }

            if (planItemDef is tMilestone)
            {
                return(new CaseEltInstance
                {
                    Id = CaseEltInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    Type = CasePlanElementInstanceTypes.MILESTONE
                });
            }

            if (planItemDef is tStage)
            {
                return(BuildStage(id, planItemDef as tStage, casePlanInstanceId));
            }

            return(null);
        }
Ejemplo n.º 6
0
 protected override string BuildId()
 {
     return(CaseEltInstance.BuildId(CasePlanInstanceId, EltId, Version));
 }