/// <summary> /// /// </summary> /// <param name="parentExecution"></param> /// <param name="subProcessInstance"></param> /// <param name="initialElement"></param> public virtual void RecordSubProcessInstanceStart(IExecutionEntity parentExecution, IExecutionEntity subProcessInstance, FlowElement initialElement) { if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.Create(subProcessInstance); // Fix for ACT-1728: startActivityId not initialized with subprocess instance if (historicProcessInstance.StartActivityId is null) { historicProcessInstance.StartActivityId = initialElement.Id; } HistoricProcessInstanceEntityManager.Insert(historicProcessInstance, false); // Fire event IActivitiEventDispatcher activitiEventDispatcher = EventDispatcher; if (activitiEventDispatcher != null && activitiEventDispatcher.Enabled) { activitiEventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_CREATED, historicProcessInstance)); } IHistoricActivityInstanceEntity activitiyInstance = FindActivityInstance(parentExecution, false, true); if (activitiyInstance != null) { activitiyInstance.CalledProcessInstanceId = subProcessInstance.ProcessInstanceId; } } }
/// <summary> /// /// </summary> /// <param name="processInstanceId"></param> /// <param name="processDefinitionId"></param> public virtual void RecordProcessDefinitionChange(string processInstanceId, string processDefinitionId) { if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.FindById <IHistoricProcessInstanceEntity>(new KeyValuePair <string, object>("id", processInstanceId)); if (historicProcessInstance != null) { historicProcessInstance.ProcessDefinitionId = processDefinitionId; } } }
public virtual void RecordProcessInstanceNameChange(string processInstanceId, string newName) { if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.FindById <IHistoricProcessInstanceEntity>(new KeyValuePair <string, object>("processInstanceId", processInstanceId)); if (historicProcessInstance != null) { historicProcessInstance.Name = newName; } } }
// DELETE METHODS public virtual void DeleteProcessInstancesByProcessDefinition(string processDefinitionId, string deleteReason, bool cascade) { IList <string> processInstanceIds = executionDataManager.FindProcessInstanceIdsByProcessDefinitionId(processDefinitionId); foreach (string processInstanceId in processInstanceIds) { DeleteProcessInstance(processInstanceId, deleteReason, cascade); } if (cascade) { HistoricProcessInstanceEntityManager.DeleteHistoricProcessInstanceByProcessDefinitionId(processDefinitionId); } }
/// <summary> /// /// </summary> /// <param name="processInstance"></param> /// <param name="startElement"></param> public virtual void RecordProcessInstanceStart(IExecutionEntity processInstance, FlowElement startElement) { if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.Create(processInstance); historicProcessInstance.StartActivityId = startElement.Id; // Insert historic process-instance HistoricProcessInstanceEntityManager.Insert(historicProcessInstance, false); // Fire event IActivitiEventDispatcher activitiEventDispatcher = EventDispatcher; if (activitiEventDispatcher != null && activitiEventDispatcher.Enabled) { activitiEventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_CREATED, historicProcessInstance)); } } }
/// <summary> /// /// </summary> /// <param name="processInstance"></param> public virtual void UpdateProcessBusinessKeyInHistory(IExecutionEntity processInstance) { if (HistoryEnabled) { //if (log.DebugEnabled) //{ // log.debug("updateProcessBusinessKeyInHistory : {}", processInstance.Id); //} if (processInstance != null) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.FindById <IHistoricProcessInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", processInstance.Id)); if (historicProcessInstance != null) { historicProcessInstance.BusinessKey = processInstance.ProcessInstanceBusinessKey; HistoricProcessInstanceEntityManager.Update(historicProcessInstance, false); } } } }
// Process related history /// <summary> /// /// </summary> /// <param name="processInstanceId"></param> /// <param name="deleteReason"></param> /// <param name="activityId"></param> public virtual void RecordProcessInstanceEnd(string processInstanceId, string deleteReason, string activityId) { if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) { IHistoricProcessInstanceEntity historicProcessInstance = HistoricProcessInstanceEntityManager.FindById <IHistoricProcessInstanceEntity>(new KeyValuePair <string, object>("processInstanceId", processInstanceId)); if (historicProcessInstance != null) { historicProcessInstance.markEnded(deleteReason); historicProcessInstance.EndActivityId = activityId; // Fire event IActivitiEventDispatcher activitiEventDispatcher = EventDispatcher; if (activitiEventDispatcher != null && activitiEventDispatcher.Enabled) { activitiEventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.HISTORIC_PROCESS_INSTANCE_ENDED, historicProcessInstance)); } } } }
protected internal virtual void DeleteProcessInstanceCascade(IExecutionEntity execution, string deleteReason, bool deleteHistory) { // fill default reason if none provided if (deleteReason is null) { deleteReason = DeleteReasonFields.PROCESS_INSTANCE_DELETED; } foreach (IExecutionEntity subExecutionEntity in execution.Executions) { if (subExecutionEntity.IsMultiInstanceRoot) { foreach (IExecutionEntity miExecutionEntity in subExecutionEntity.Executions) { if (miExecutionEntity.SubProcessInstance != null) { DeleteProcessInstanceCascade(miExecutionEntity.SubProcessInstance, deleteReason, deleteHistory); } } } else if (subExecutionEntity.SubProcessInstance != null) { DeleteProcessInstanceCascade(subExecutionEntity.SubProcessInstance, deleteReason, deleteHistory); } } TaskEntityManager.DeleteTasksByProcessInstanceId(execution.Id, deleteReason, deleteHistory); if (EventDispatcher.Enabled) { EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateCancelledEvent(execution.ProcessInstanceId, execution.ProcessInstanceId, null, deleteReason)); } // delete the execution BEFORE we delete the history, otherwise we will // produce orphan HistoricVariableInstance instances IExecutionEntity processInstanceExecutionEntity = execution.ProcessInstance; if (processInstanceExecutionEntity == null) { return; } IList <IExecutionEntity> childExecutions = CollectChildren(execution.ProcessInstance); for (int i = childExecutions.Count - 1; i >= 0; i--) { IExecutionEntity childExecutionEntity = childExecutions[i]; DeleteExecutionAndRelatedData(childExecutionEntity, deleteReason, false); } DeleteExecutionAndRelatedData(execution, deleteReason, false); if (deleteHistory) { HistoricProcessInstanceEntityManager.Delete(new KeyValuePair <string, object>("id", execution.Id)); } HistoryManager.RecordProcessInstanceEnd(processInstanceExecutionEntity.Id, deleteReason, null); processInstanceExecutionEntity.Deleted = true; }