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); }
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; }
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; }
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; }
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; }
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> (); } }
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); }
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); }
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); } } } } } }
protected internal virtual DateTime calculateRemovalTime(HistoricDecisionInstanceEntity decisionInstance, CommandContext commandContext) { DecisionDefinition decisionDefinition = findDecisionDefinitionById(decisionInstance.DecisionDefinitionId, commandContext); return(commandContext.ProcessEngineConfiguration.HistoryRemovalTimeProvider.calculateRemovalTime(decisionInstance, decisionDefinition)); }
public HistoricDecisionInstanceEntity createHistoricDecisionInstance(DmnDecisionLogicEvaluationEvent evaluationEvent, HistoricDecisionInstanceEntity rootDecisionInstance) { return(outerInstance.createDecisionEvaluatedEvt(evaluationEvent, (ExecutionEntity)execution)); }
protected internal virtual DateTime calculateRemovalTime(HistoricDecisionInstanceEntity historicDecisionInstance, DecisionDefinition decisionDefinition) { return(Context.ProcessEngineConfiguration.HistoryRemovalTimeProvider.calculateRemovalTime(historicDecisionInstance, decisionDefinition)); }
protected internal virtual DelegateCaseExecution getCaseExecution(HistoricDecisionInstanceEntity @event) { return(Context.CommandContext.CaseExecutionManager.findCaseExecutionById(@event.CaseExecutionId)); }
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); }
protected internal virtual void initDecisionInstanceEvent(HistoricDecisionInstanceEntity @event, DmnDecisionLogicEvaluationEvent evaluationEvent, HistoryEventTypes eventType) { initDecisionInstanceEvent(@event, evaluationEvent, eventType, null); }
protected internal virtual string getRootDecisionInstance(HistoricDecisionInstanceEntity instance) { return(string.ReferenceEquals(instance.RootDecisionInstanceId, null) ? instance.Id : instance.RootDecisionInstanceId); }
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); } }
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); }