Пример #1
0
        protected internal virtual HistoricDecisionInstanceEntity createDecisionEvaluatedEvt(DmnDecisionLogicEvaluationEvent evaluationEvent, ExecutionEntity execution)
        {
            // create event instance
            HistoricDecisionInstanceEntity @event = newDecisionInstanceEventEntity(execution, evaluationEvent);

            setReferenceToProcessInstance(@event, execution);

            if (HistoryRemovalTimeStrategyStart)
            {
                provideRemovalTime(@event);
            }

            // initialize event
            initDecisionInstanceEvent(@event, evaluationEvent, HistoryEventTypes.DMN_DECISION_EVALUATE);

            DecisionDefinition decisionDefinition = (DecisionDefinition)evaluationEvent.Decision;
            string             tenantId           = execution.TenantId;

            if (string.ReferenceEquals(tenantId, null))
            {
                tenantId = provideTenantId(decisionDefinition, @event);
            }
            @event.TenantId = tenantId;
            return(@event);
        }
Пример #2
0
        protected internal virtual void setReferenceToCaseInstance(HistoricDecisionInstanceEntity @event, CaseExecutionEntity execution)
        {
            @event.CaseDefinitionKey = getCaseDefinitionKey(execution);
            @event.CaseDefinitionId  = execution.CaseDefinitionId;

            @event.CaseInstanceId = execution.CaseInstanceId;
            @event.ExecutionId    = execution.Id;

            @event.ActivityId         = execution.ActivityId;
            @event.ActivityInstanceId = execution.Id;
        }
Пример #3
0
        protected internal virtual void setReferenceToProcessInstance(HistoricDecisionInstanceEntity @event, ExecutionEntity execution)
        {
            @event.ProcessDefinitionKey = getProcessDefinitionKey(execution);
            @event.ProcessDefinitionId  = execution.ProcessDefinitionId;

            @event.RootProcessInstanceId = execution.RootProcessInstanceId;
            @event.ProcessInstanceId     = execution.ProcessInstanceId;
            @event.ExecutionId           = execution.Id;

            @event.ActivityId         = execution.ActivityId;
            @event.ActivityInstanceId = execution.ActivityInstanceId;
        }
Пример #4
0
	  public virtual DateTime calculateRemovalTime(HistoricDecisionInstanceEntity historicRootDecisionInstance, DecisionDefinition decisionDefinition)
	  {

		int? historyTimeToLive = decisionDefinition.HistoryTimeToLive;

		if (historyTimeToLive != null)
		{
		  DateTime evaluationTime = historicRootDecisionInstance.EvaluationTime;
		  return determineRemovalTime(evaluationTime, historyTimeToLive);
		}

		return null;
	  }
Пример #5
0
        protected internal virtual void initDecisionInstanceEventForDecisionTable(HistoricDecisionInstanceEntity @event, DmnDecisionTableEvaluationEvent evaluationEvent)
        {
            if (evaluationEvent.CollectResultValue != null)
            {
                double?collectResultValue = getCollectResultValue(evaluationEvent.CollectResultValue);
                @event.CollectResultValue = collectResultValue;
            }

            IList <HistoricDecisionInputInstance> historicDecisionInputInstances = createHistoricDecisionInputInstances(evaluationEvent, @event.RootProcessInstanceId, @event.RemovalTime);

            @event.Inputs = historicDecisionInputInstances;

            IList <HistoricDecisionOutputInstance> historicDecisionOutputInstances = createHistoricDecisionOutputInstances(evaluationEvent, @event.RootProcessInstanceId, @event.RemovalTime);

            @event.Outputs = historicDecisionOutputInstances;
        }
Пример #6
0
        protected internal virtual void initDecisionInstanceEvent(HistoricDecisionInstanceEntity @event, DmnDecisionLogicEvaluationEvent evaluationEvent, HistoryEventTypes eventType, HistoricDecisionInstanceEntity rootDecisionInstance)
        {
            @event.EventType = eventType.EventName;

            DecisionDefinition decision = (DecisionDefinition)evaluationEvent.Decision;

            @event.DecisionDefinitionId   = decision.Id;
            @event.DecisionDefinitionKey  = decision.Key;
            @event.DecisionDefinitionName = decision.Name;

            if (!string.ReferenceEquals(decision.DecisionRequirementsDefinitionId, null))
            {
                @event.DecisionRequirementsDefinitionId  = decision.DecisionRequirementsDefinitionId;
                @event.DecisionRequirementsDefinitionKey = decision.DecisionRequirementsDefinitionKey;
            }

            // set current time as evaluation time
            @event.EvaluationTime = ClockUtil.CurrentTime;

            if (string.ReferenceEquals(@event.RootProcessInstanceId, null) && string.ReferenceEquals(@event.CaseInstanceId, null))
            {
                if (rootDecisionInstance != null)
                {
                    @event.RemovalTime = rootDecisionInstance.RemovalTime;
                }
                else
                {
                    DateTime removalTime = calculateRemovalTime(@event, decision);
                    @event.RemovalTime = removalTime;
                }
            }

            if (evaluationEvent is DmnDecisionTableEvaluationEvent)
            {
                initDecisionInstanceEventForDecisionTable(@event, (DmnDecisionTableEvaluationEvent)evaluationEvent);
            }
            else if (evaluationEvent is DmnDecisionLiteralExpressionEvaluationEvent)
            {
                initDecisionInstanceEventForDecisionLiteralExpression(@event, (DmnDecisionLiteralExpressionEvaluationEvent)evaluationEvent);
            }
            else
            {
                @event.Inputs  = System.Linq.Enumerable.Empty <HistoricDecisionInputInstance> ();
                @event.Outputs = System.Linq.Enumerable.Empty <HistoricDecisionOutputInstance> ();
            }
        }
Пример #7
0
        protected internal virtual HistoryEvent createHistoryEvent(DmnDecisionEvaluationEvent evaluationEvent, HistoricDecisionInstanceSupplier supplier)
        {
            HistoricDecisionEvaluationEvent @event = newDecisionEvaluationEvent(evaluationEvent);

            HistoricDecisionInstanceEntity rootDecisionEvent = supplier.createHistoricDecisionInstance(evaluationEvent.DecisionResult, null);

            @event.RootHistoricDecisionInstance = rootDecisionEvent;

            IList <HistoricDecisionInstanceEntity> requiredDecisionEvents = new List <HistoricDecisionInstanceEntity>();

            foreach (DmnDecisionLogicEvaluationEvent requiredDecisionResult in evaluationEvent.RequiredDecisionResults)
            {
                HistoricDecisionInstanceEntity requiredDecisionEvent = supplier.createHistoricDecisionInstance(requiredDecisionResult, rootDecisionEvent);
                requiredDecisionEvents.Add(requiredDecisionEvent);
            }
            @event.RequiredHistoricDecisionInstances = requiredDecisionEvents;

            return(@event);
        }
Пример #8
0
        protected internal virtual HistoricDecisionInstanceEntity createDecisionEvaluatedEvt(DmnDecisionLogicEvaluationEvent evaluationEvent, HistoricDecisionInstanceEntity rootDecisionInstance)
        {
            // create event instance
            HistoricDecisionInstanceEntity @event = newDecisionInstanceEventEntity(evaluationEvent);

            // initialize event
            initDecisionInstanceEvent(@event, evaluationEvent, HistoryEventTypes.DMN_DECISION_EVALUATE, rootDecisionInstance);

            // set the user id if there is an authenticated user and no process instance
            UserId = @event;

            DecisionDefinition decisionDefinition = (DecisionDefinition)evaluationEvent.Decision;
            string             tenantId           = decisionDefinition.TenantId;

            if (string.ReferenceEquals(tenantId, null))
            {
                tenantId = provideTenantId(decisionDefinition, @event);
            }
            @event.TenantId = tenantId;
            return(@event);
        }
Пример #9
0
        public virtual void execute(BatchJobConfiguration configuration, ExecutionEntity execution, CommandContext commandContext, string tenantId)
        {
            if (isDmnEnabled(commandContext))
            {
                string  byteArrayId            = configuration.ConfigurationByteArrayId;
                sbyte[] configurationByteArray = findByteArrayById(byteArrayId, commandContext).Bytes;

                SetRemovalTimeBatchConfiguration batchConfiguration = readConfiguration(configurationByteArray);

                foreach (string instanceId in batchConfiguration.Ids)
                {
                    HistoricDecisionInstanceEntity instance = findDecisionInstanceById(instanceId, commandContext);

                    if (instance != null)
                    {
                        if (batchConfiguration.Hierarchical)
                        {
                            string rootDecisionInstanceId = getRootDecisionInstance(instance);

                            HistoricDecisionInstanceEntity rootInstance = findDecisionInstanceById(rootDecisionInstanceId, commandContext);

                            DateTime removalTime = getOrCalculateRemovalTime(batchConfiguration, rootInstance, commandContext);

                            addRemovalTimeToHierarchy(rootDecisionInstanceId, removalTime, commandContext);
                        }
                        else
                        {
                            DateTime removalTime = getOrCalculateRemovalTime(batchConfiguration, instance, commandContext);

                            if (removalTime != instance.RemovalTime)
                            {
                                addRemovalTime(instanceId, removalTime, commandContext);
                            }
                        }
                    }
                }
            }
        }
Пример #10
0
        protected internal virtual DateTime calculateRemovalTime(HistoricDecisionInstanceEntity decisionInstance, CommandContext commandContext)
        {
            DecisionDefinition decisionDefinition = findDecisionDefinitionById(decisionInstance.DecisionDefinitionId, commandContext);

            return(commandContext.ProcessEngineConfiguration.HistoryRemovalTimeProvider.calculateRemovalTime(decisionInstance, decisionDefinition));
        }
Пример #11
0
 public HistoricDecisionInstanceEntity createHistoricDecisionInstance(DmnDecisionLogicEvaluationEvent evaluationEvent, HistoricDecisionInstanceEntity rootDecisionInstance)
 {
     return(outerInstance.createDecisionEvaluatedEvt(evaluationEvent, (ExecutionEntity)execution));
 }
Пример #12
0
 protected internal virtual DateTime calculateRemovalTime(HistoricDecisionInstanceEntity historicDecisionInstance, DecisionDefinition decisionDefinition)
 {
     return(Context.ProcessEngineConfiguration.HistoryRemovalTimeProvider.calculateRemovalTime(historicDecisionInstance, decisionDefinition));
 }
Пример #13
0
 protected internal virtual DelegateCaseExecution getCaseExecution(HistoricDecisionInstanceEntity @event)
 {
     return(Context.CommandContext.CaseExecutionManager.findCaseExecutionById(@event.CaseExecutionId));
 }
Пример #14
0
        protected internal virtual void initDecisionInstanceEventForDecisionLiteralExpression(HistoricDecisionInstanceEntity @event, DmnDecisionLiteralExpressionEvaluationEvent evaluationEvent)
        {
            // no inputs for expression
            @event.Inputs = System.Linq.Enumerable.Empty <HistoricDecisionInputInstance> ();

            HistoricDecisionOutputInstanceEntity outputInstance = new HistoricDecisionOutputInstanceEntity(@event.RootProcessInstanceId, @event.RemovalTime);

            outputInstance.VariableName = evaluationEvent.OutputName;
            outputInstance.setValue(evaluationEvent.OutputValue);

            @event.Outputs = Collections.singletonList <HistoricDecisionOutputInstance> (outputInstance);
        }
Пример #15
0
 protected internal virtual void initDecisionInstanceEvent(HistoricDecisionInstanceEntity @event, DmnDecisionLogicEvaluationEvent evaluationEvent, HistoryEventTypes eventType)
 {
     initDecisionInstanceEvent(@event, evaluationEvent, eventType, null);
 }
Пример #16
0
 protected internal virtual string getRootDecisionInstance(HistoricDecisionInstanceEntity instance)
 {
     return(string.ReferenceEquals(instance.RootDecisionInstanceId, null) ? instance.Id : instance.RootDecisionInstanceId);
 }
Пример #17
0
 protected internal virtual DateTime getOrCalculateRemovalTime(SetRemovalTimeBatchConfiguration batchConfiguration, HistoricDecisionInstanceEntity instance, CommandContext commandContext)
 {
     if (batchConfiguration.hasRemovalTime())
     {
         return(batchConfiguration.RemovalTime);
     }
     else if (hasBaseTime(commandContext))
     {
         return(calculateRemovalTime(instance, commandContext));
     }
     else
     {
         return(null);
     }
 }
Пример #18
0
        protected internal virtual string provideTenantId(DecisionDefinition decisionDefinition, HistoricDecisionInstanceEntity @event)
        {
            TenantIdProvider tenantIdProvider = Context.ProcessEngineConfiguration.TenantIdProvider;
            string           tenantId         = null;

            if (tenantIdProvider != null)
            {
                TenantIdProviderHistoricDecisionInstanceContext ctx = null;

                if (!string.ReferenceEquals(@event.ExecutionId, null))
                {
                    ctx = new TenantIdProviderHistoricDecisionInstanceContext(decisionDefinition, getExecution(@event));
                }
                else if (!string.ReferenceEquals(@event.CaseExecutionId, null))
                {
                    ctx = new TenantIdProviderHistoricDecisionInstanceContext(decisionDefinition, getCaseExecution(@event));
                }
                else
                {
                    ctx = new TenantIdProviderHistoricDecisionInstanceContext(decisionDefinition);
                }

                tenantId = tenantIdProvider.provideTenantIdForHistoricDecisionInstance(ctx);
            }

            return(tenantId);
        }