示例#1
0
        /// <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;
                }
            }
        }
示例#2
0
 /// <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;
         }
     }
 }
示例#3
0
        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;
                }
            }
        }
示例#4
0
        // 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);
            }
        }
示例#5
0
        /// <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));
                }
            }
        }
示例#6
0
 /// <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);
             }
         }
     }
 }
示例#7
0
        // 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));
                    }
                }
            }
        }
示例#8
0
        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;
        }