private static StageElementInstance BuildStage(string id, tStage stage, string casePlanInstanceId) { var planItems = BuildPlanItems(stage, casePlanInstanceId); var result = new StageElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, stage.id, 0), Name = stage.name, EltId = id }; 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.ExitCriterions.Add(new Criteria(exitCriteria.name) { SEntry = BuildSEntry(sEntry) }); } } return(result); }
protected void SeedCasePlanItem(BaseCasePlanItemInstance casePlanItem) { foreach (var entryCritera in _entryCriterions) { casePlanItem.EntryCriterions.Add(entryCritera.Build()); } }
public static CasePlanItemInstanceResult ToDto(BaseCasePlanItemInstance casePlanItemInstance) { string stateStr = null, formId = null; if (casePlanItemInstance is BaseTaskOrStageElementInstance) { var state = ((BaseTaskOrStageElementInstance)casePlanItemInstance).State; stateStr = state == null ? null : Enum.GetName(typeof(TaskStageStates), state); } if (casePlanItemInstance is BaseMilestoneOrTimerElementInstance) { var state = ((BaseMilestoneOrTimerElementInstance)casePlanItemInstance).State; stateStr = state == null ? null : Enum.GetName(typeof(MilestoneEventStates), state); } if (casePlanItemInstance is HumanTaskElementInstance) { var humanTaskInstance = casePlanItemInstance as HumanTaskElementInstance; formId = humanTaskInstance.FormId; } return(new CasePlanItemInstanceResult { Id = casePlanItemInstance.Id, Name = casePlanItemInstance.Name, NbOccurrence = casePlanItemInstance.NbOccurrence, EltId = casePlanItemInstance.EltId, State = stateStr, FormId = formId, Type = Enum.GetName(typeof(CasePlanElementInstanceTypes), casePlanItemInstance.Type).ToUpperInvariant(), TransitionHistories = casePlanItemInstance.TransitionHistories.Select(_ => TransitionHistoryResult.ToDto(_)).ToList() }); }
public BaseCasePlanItemInstance GetNode(BaseCasePlanItemInstance casePlanElementInstance) { var node = Nodes.FirstOrDefault(_ => _.Id == casePlanElementInstance.Id); if (node != null) { return(node); } if (NextBranch != null) { return(NextBranch.GetNode(casePlanElementInstance)); } return(null); }
private bool IsElementCompleted(BaseCasePlanItemInstance planElementInstance) { var stageOrTask = planElementInstance as BaseTaskOrStageElementInstance; var milestone = planElementInstance as MilestoneElementInstance; if (stageOrTask != null && (stageOrTask.State == TaskStageStates.Completed || stageOrTask.State == TaskStageStates.Terminated || stageOrTask.State == TaskStageStates.Disabled)) { return(true); } if (milestone != null && (milestone.State == MilestoneEventStates.Completed || milestone.State == MilestoneEventStates.Terminated)) { return(true); } return(false); }
private async Task ExecuteNode(CMMNExecutionContext executionContext, BaseCasePlanItemInstance node, CancellationToken token) { await _processorFactory.Execute(executionContext, node, token); var domainEvts = executionContext.Instance.DomainEvents.Where((evt) => { var r = evt as CaseElementTransitionRaisedEvent; if (r == null) { return(false); } return(r.ElementId == node.Id); }).Cast <CaseElementTransitionRaisedEvent>() .Select(_ => new IncomingTransition(_.Transition, _.IncomingTokens)).ToList(); var nextNodes = executionContext.Instance.GetNextCasePlanItems(node); foreach (var nextNode in nextNodes) { executionContext.Instance.ConsumeTransitionEvts(nextNode, node.Id, domainEvts); await ExecuteNode(executionContext, nextNode, token); } }
private static BaseCasePlanItemInstance 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)); } } } } return(new HumanTaskElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, FormId = humanTask.formId, Implemention = humanTask.implementation, InputParameters = pars.ToDictionary(kvp => kvp.key, kvp => kvp.value), PerformerRef = humanTask.performerRef }); } if (planItemDef is tTask) { return(new EmptyTaskElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name }); } if (planItemDef is tTimerEventListener) { var timer = planItemDef as tTimerEventListener; CMMNExpression expression = new CMMNExpression { Body = timer.timerExpression.Text.First(), Language = timer.timerExpression.language }; return(new TimerEventListener { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, TimerExpression = expression }); } if (planItemDef is tMilestone) { return(new MilestoneElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name }); } if (planItemDef is tStage) { return(BuildStage(id, planItemDef as tStage, casePlanInstanceId)); } return(null); }
public void AddNode(BaseCasePlanItemInstance casePlanElementInstance) { Nodes.Add(casePlanElementInstance); }
private static BaseCasePlanItemInstance 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; return(new HumanTaskElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, FormId = humanTask.caseFormRef, PerformerRef = humanTask.performerRef }); } if (planItemDef is tTask) { return(new EmptyTaskElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name }); } if (planItemDef is tTimerEventListener) { var timer = planItemDef as tTimerEventListener; CMMNExpression expression = new CMMNExpression { Body = timer.timerExpression.Text.First(), Language = timer.timerExpression.language }; return(new TimerEventListener { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name, TimerExpression = expression }); } if (planItemDef is tMilestone) { return(new MilestoneElementInstance { Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0), EltId = id, NbOccurrence = 0, Name = name }); } if (planItemDef is tStage) { return(BuildStage(planItemDef as tStage, casePlanInstanceId)); } return(null); }
private async Task HandleCasePlan(CMMNExecutionContext executionContext, BaseCasePlanItemInstance casePlanElementInstance, CancellationToken token) { await _processorFactory.Execute(executionContext, casePlanElementInstance, casePlanElementInstance.GetType(), token); }