public override void Delete(KeyValuePair <string, object> id)
        {
            string historicProcessInstanceId = id.Value?.ToString();

            if (HistoryManager.HistoryEnabled)
            {
                if (historicProcessInstanceId == null)
                {
                    return;
                }

                IHistoricProcessInstanceEntity historicProcessInstance = FindById <IHistoricProcessInstanceEntity>(new KeyValuePair <string, object>("id", historicProcessInstanceId));

                HistoricDetailEntityManager.DeleteHistoricDetailsByProcessInstanceId(historicProcessInstanceId);
                HistoricVariableInstanceEntityManager.DeleteHistoricVariableInstanceByProcessInstanceId(historicProcessInstanceId);
                HistoricActivityInstanceEntityManager.DeleteHistoricActivityInstancesByProcessInstanceId(historicProcessInstanceId);
                HistoricTaskInstanceEntityManager.DeleteHistoricTaskInstancesByProcessInstanceId(historicProcessInstanceId);
                HistoricIdentityLinkEntityManager.DeleteHistoricIdentityLinksByProcInstance(historicProcessInstanceId);
                CommentEntityManager.DeleteCommentsByProcessInstanceId(historicProcessInstanceId);

                Delete(historicProcessInstance, false);

                // Also delete any sub-processes that may be active (ACT-821)

                IList <IHistoricProcessInstanceEntity> selectList = historicProcessInstanceDataManager.FindHistoricProcessInstancesBySuperProcessInstanceId(historicProcessInstanceId);
                foreach (IHistoricProcessInstanceEntity child in selectList)
                {
                    Delete(new KeyValuePair <string, object>("id", child.Id)); // NEEDS to be by id, to come again through this method!
                }
            }
        }
示例#2
0
        // Task related history

        /// <summary>
        ///
        /// </summary>
        /// <param name="task"></param>
        /// <param name="execution"></param>
        public virtual void RecordTaskCreated(ITaskEntity task, IExecutionEntity execution)
        {
            if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
            {
                IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.Create(task, execution);
                HistoricTaskInstanceEntityManager.Insert(historicTaskInstance, false);
            }

            RecordTaskId(task);
        }
示例#3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="processDefinitionId"></param>
 public virtual void RecordTaskProcessDefinitionChange(string taskId, string processDefinitionId)
 {
     if (IsHistoryLevelAtLeast(HistoryLevel.ACTIVITY))
     {
         IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", taskId));
         if (historicTaskInstance != null)
         {
             historicTaskInstance.ProcessDefinitionId = processDefinitionId;
         }
     }
 }
示例#4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="taskDefinitionKey"></param>
 public virtual void RecordTaskDefinitionKeyChange(string taskId, string taskDefinitionKey)
 {
     if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
     {
         IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", taskId));
         if (historicTaskInstance != null)
         {
             historicTaskInstance.TaskDefinitionKey = taskDefinitionKey;
         }
     }
 }
示例#5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="dueDate"></param>
 public virtual void RecordTaskDueDateChange(string taskId, DateTime dueDate)
 {
     if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
     {
         IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", taskId));
         if (historicTaskInstance != null)
         {
             historicTaskInstance.DueDate = dueDate;
         }
     }
 }
示例#6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="deleteReason"></param>
 public virtual void RecordTaskEnd(string taskId, string deleteReason)
 {
     if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
     {
         IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", taskId));
         if (historicTaskInstance != null)
         {
             historicTaskInstance.markEnded(deleteReason);
         }
     }
 }
示例#7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="task"></param>

        public virtual void RecordTaskClaim(ITaskEntity task)
        {
            if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
            {
                IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", task.Id));
                if (historicTaskInstance != null)
                {
                    historicTaskInstance.ClaimTime = task.ClaimTime;
                }
            }
        }
示例#8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="taskId"></param>
 /// <param name="assignee"></param>
 /// <param name="assigneeUser"></param>
 public virtual void RecordTaskAssigneeChange(string taskId, string assignee, string assigneeUser)
 {
     if (IsHistoryLevelAtLeast(HistoryLevel.AUDIT))
     {
         IHistoricTaskInstanceEntity historicTaskInstance = HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", taskId));
         if (historicTaskInstance != null)
         {
             historicTaskInstance.Assignee     = assignee;
             historicTaskInstance.AssigneeUser = assigneeUser;
         }
     }
 }
示例#9
0
        public virtual void DeleteTask(string taskId, string deleteReason, bool cascade)
        {
            ITaskEntity task = FindById <ITaskEntity>(taskId);

            if (task != null)
            {
                if (task.ExecutionId is object)
                {
                    throw new ActivitiException("The task cannot be deleted because is part of a running process");
                }

                DeleteTask(task, deleteReason, cascade, false);
            }
            else if (cascade)
            {
                HistoricTaskInstanceEntityManager.Delete(new KeyValuePair <string, object>("id", taskId));
            }
        }
示例#10
0
        public virtual void DeleteTask(ITaskEntity task, string deleteReason, bool cascade, bool cancel)
        {
            if (!task.Deleted)
            {
                ProcessEngineConfiguration.ListenerNotificationHelper.ExecuteTaskListeners(task, BaseTaskListenerFields.EVENTNAME_DELETE);
                task.Deleted = true;

                string taskId = task.Id;

                IList <ITask> subTasks = FindTasksByParentTaskId(taskId);
                foreach (ITask subTask in subTasks)
                {
                    DeleteTask((ITaskEntity)subTask, deleteReason, cascade, cancel);
                }

                IdentityLinkEntityManager.DeleteIdentityLinksByTaskId(taskId);
                VariableInstanceEntityManager.DeleteVariableInstanceByTask(task);

                if (cascade)
                {
                    HistoricTaskInstanceEntityManager.Delete(new KeyValuePair <string, object>("id", taskId));
                }
                else
                {
                    HistoryManager.RecordTaskEnd(taskId, deleteReason);
                }

                Delete(task, false);

                if (EventDispatcher.Enabled)
                {
                    if (cancel && !task.Canceled)
                    {
                        task.Canceled = true;
                        EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateActivityCancelledEvent(task.Execution?.ActivityId, task.Name, task.ExecutionId, task.ProcessInstanceId, task.ProcessDefinitionId, "userTask", deleteReason));
                    }

                    EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.ENTITY_DELETED, task));
                }
            }
        }