protected internal virtual IExecutionEntity DeleteSignalEventSubscription(IExecutionEntity execution)
        {
            string eventName;

            if (signal != null)
            {
                eventName = signal.Name;
            }
            else
            {
                eventName = signalEventDefinition.SignalRef;
            }

            IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
            IList <IEventSubscriptionEntity> eventSubscriptions             = execution.EventSubscriptions;

            foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
            {
                if (eventSubscription.EventType == SignalEventSubscriptionEntityFields.EVENT_TYPE && eventSubscription.EventName.Equals(eventName))
                {
                    eventSubscriptionEntityManager.Delete(eventSubscription);
                }
            }
            return(execution);
        }
コード例 #2
0
ファイル: ScopeUtil.cs プロジェクト: zhangzihan/nactivity
        public static void CreateCopyOfSubProcessExecutionForCompensation(IExecutionEntity subProcessExecution)
        {
            IEventSubscriptionEntityManager            eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
            IList <ICompensateEventSubscriptionEntity> compensateEventSubscriptions   = eventSubscriptionEntityManager.FindCompensateEventSubscriptionsByExecutionId(subProcessExecution.Id);

            if (CollectionUtil.IsNotEmpty(compensateEventSubscriptions))
            {
                IExecutionEntity processInstanceExecutionEntity = subProcessExecution.ProcessInstance;

                IExecutionEntity eventScopeExecution = Context.CommandContext.ExecutionEntityManager.CreateChildExecution(processInstanceExecutionEntity);
                eventScopeExecution.IsActive           = false;
                eventScopeExecution.IsEventScope       = true;
                eventScopeExecution.CurrentFlowElement = subProcessExecution.CurrentFlowElement;

                // copy local variables to eventScopeExecution by value. This way,
                // the eventScopeExecution references a 'snapshot' of the local variables
                (new SubProcessVariableSnapshotter()).SetVariablesSnapshots(subProcessExecution, eventScopeExecution);

                // set event subscriptions to the event scope execution:
                foreach (ICompensateEventSubscriptionEntity eventSubscriptionEntity in compensateEventSubscriptions)
                {
                    eventSubscriptionEntityManager.Delete(eventSubscriptionEntity);

                    ICompensateEventSubscriptionEntity newSubscription = eventSubscriptionEntityManager.InsertCompensationEvent(eventScopeExecution, eventSubscriptionEntity.ActivityId);
                    newSubscription.Configuration = eventSubscriptionEntity.Configuration;
                    newSubscription.Created       = eventSubscriptionEntity.Created;
                }

                ICompensateEventSubscriptionEntity eventSubscription = eventSubscriptionEntityManager.InsertCompensationEvent(processInstanceExecutionEntity, eventScopeExecution.CurrentFlowElement.Id);
                eventSubscription.Configuration = eventScopeExecution.Id;
            }
        }
コード例 #3
0
        public override void Trigger(IExecutionEntity execution, string triggerName, object triggerData, bool throwError = true)
        {
            IExecutionEntity executionEntity = execution;
            BoundaryEvent    boundaryEvent   = (BoundaryEvent)execution.CurrentFlowElement;

            if (boundaryEvent.CancelActivity)
            {
                string eventName;
                if (signal != null)
                {
                    eventName = signal.Name;
                }
                else
                {
                    eventName = signalEventDefinition.SignalRef;
                }

                IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
                IList <IEventSubscriptionEntity> eventSubscriptions             = executionEntity.EventSubscriptions;
                foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
                {
                    if (eventSubscription.EventType == SignalEventSubscriptionEntityFields.EVENT_TYPE && eventSubscription.EventName.Equals(eventName))
                    {
                        eventSubscriptionEntityManager.Delete(eventSubscription);
                    }
                }
            }

            base.Trigger(executionEntity, triggerName, triggerData, throwError);
        }
コード例 #4
0
        protected internal virtual void RemoveObsoleteEventSubscriptionsImpl(IProcessDefinitionEntity processDefinition, string eventHandlerType)
        {
            // remove all subscriptions for the previous version
            IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
            IList <IEventSubscriptionEntity> subscriptionsToDelete          = eventSubscriptionEntityManager.FindEventSubscriptionsByTypeAndProcessDefinitionId(eventHandlerType, processDefinition.Id, processDefinition.TenantId);

            foreach (IEventSubscriptionEntity eventSubscriptionEntity in subscriptionsToDelete)
            {
                eventSubscriptionEntityManager.Delete(eventSubscriptionEntity);
            }
        }
コード例 #5
0
        protected internal virtual IExecutionEntity DeleteMessageEventSubScription(IExecutionEntity execution)
        {
            IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
            IList <IEventSubscriptionEntity> eventSubscriptions             = execution.EventSubscriptions;

            foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
            {
                if (eventSubscription.EventType == MessageEventSubscriptionEntityFields.EVENT_TYPE && eventSubscription.EventName.Equals(messageEventDefinition.MessageRef))
                {
                    eventSubscriptionEntityManager.Delete(eventSubscription);
                }
            }
            return(execution);
        }
コード例 #6
0
        public override void Trigger(IExecutionEntity execution, string triggerName, object triggerData, bool throwError = true)
        {
            BoundaryEvent boundaryEvent = (BoundaryEvent)execution.CurrentFlowElement;

            if (boundaryEvent.CancelActivity)
            {
                IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
                IList <IEventSubscriptionEntity> eventSubscriptions             = execution.EventSubscriptions;
                foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
                {
                    if (eventSubscription.EventType == CompensateEventSubscriptionEntityFields.EVENT_TYPE && eventSubscription.ActivityId.Equals(compensateEventDefinition.ActivityRef))
                    {
                        eventSubscriptionEntityManager.Delete(eventSubscription);
                    }
                }
            }

            base.Trigger(execution, triggerName, triggerData, throwError);
        }
        public override void Trigger(IExecutionEntity execution, string triggerName, object triggerData, bool throwError = true)
        {
            ICommandContext         commandContext         = Context.CommandContext;
            IExecutionEntityManager executionEntityManager = commandContext.ExecutionEntityManager;

            StartEvent startEvent = (StartEvent)execution.CurrentFlowElement;

            if (startEvent.Interrupting)
            {
                IList <IExecutionEntity> childExecutions = executionEntityManager.FindChildExecutionsByParentExecutionId(execution.ParentId);
                foreach (IExecutionEntity childExecution in childExecutions)
                {
                    if (!childExecution.Id.Equals(execution.Id))
                    {
                        executionEntityManager.DeleteExecutionAndRelatedData(childExecution, History.DeleteReasonFields.EVENT_SUBPROCESS_INTERRUPTING + "(" + startEvent.Id + ")", false);
                    }
                }
            }

            IEventSubscriptionEntityManager  eventSubscriptionEntityManager = Context.CommandContext.EventSubscriptionEntityManager;
            IList <IEventSubscriptionEntity> eventSubscriptions             = execution.EventSubscriptions;

            foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
            {
                if (eventSubscription.EventType == MessageEventSubscriptionEntityFields.EVENT_TYPE && eventSubscription.EventName.Equals(messageEventDefinition.MessageRef))
                {
                    eventSubscriptionEntityManager.Delete(eventSubscription);
                }
            }

            execution.CurrentFlowElement = (SubProcess)execution.CurrentFlowElement.ParentContainer;
            execution.IsScope            = true;

            IExecutionEntity outgoingFlowExecution = executionEntityManager.CreateChildExecution(execution);

            outgoingFlowExecution.CurrentFlowElement = startEvent;

            Leave(outgoingFlowExecution);
        }
コード例 #8
0
        public virtual void DeleteDataForExecution(IExecutionEntity executionEntity, string deleteReason, bool cancel)
        {
            // To start, deactivate the current incoming execution
            executionEntity.Ended    = true;
            executionEntity.IsActive = false;

            bool enableExecutionRelationshipCounts = IsExecutionRelatedEntityCountEnabled(executionEntity);

            if (executionEntity.Id.Equals(executionEntity.ProcessInstanceId) && (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).IdentityLinkCount > 0)))
            {
                IIdentityLinkEntityManager        identityLinkEntityManager = IdentityLinkEntityManager;
                ICollection <IIdentityLinkEntity> identityLinks             = identityLinkEntityManager.FindIdentityLinksByProcessInstanceId(executionEntity.ProcessInstanceId);
                foreach (IIdentityLinkEntity identityLink in identityLinks)
                {
                    identityLinkEntityManager.Delete(identityLink);
                }
            }

            // Get variables related to execution and delete them
            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).VariableCount > 0))
            {
                ICollection <IVariableInstance> executionVariables = executionEntity.VariableInstancesLocal.Values;
                foreach (IVariableInstance variableInstance in executionVariables)
                {
                    if (variableInstance is IVariableInstanceEntity variableInstanceEntity)
                    {
                        IVariableInstanceEntityManager variableInstanceEntityManager = VariableInstanceEntityManager;
                        variableInstanceEntityManager.Delete(variableInstanceEntity);
                        if (variableInstanceEntity.ByteArrayRef != null && variableInstanceEntity.ByteArrayRef.Id is object)
                        {
                            ByteArrayEntityManager.DeleteByteArrayById(variableInstanceEntity.ByteArrayRef.Id);
                        }
                    }
                }
            }

            // Delete current user tasks
            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).TaskCount > 0))
            {
                ITaskEntityManager        taskEntityManager = TaskEntityManager;
                ICollection <ITaskEntity> tasksForExecution = taskEntityManager.FindTasksByExecutionId(executionEntity.Id);
                foreach (ITaskEntity taskEntity in tasksForExecution)
                {
                    taskEntityManager.DeleteTask(taskEntity, deleteReason, false, cancel);
                }
            }

            // Delete jobs

            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).TimerJobCount > 0))
            {
                ITimerJobEntityManager        timerJobEntityManager = TimerJobEntityManager;
                ICollection <ITimerJobEntity> timerJobsForExecution = timerJobEntityManager.FindJobsByExecutionId(executionEntity.Id);
                foreach (ITimerJobEntity job in timerJobsForExecution)
                {
                    timerJobEntityManager.Delete(job);
                    if (EventDispatcher.Enabled)
                    {
                        EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.JOB_CANCELED, job));
                    }
                }
            }

            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).JobCount > 0))
            {
                IJobEntityManager        jobEntityManager = JobEntityManager;
                ICollection <IJobEntity> jobsForExecution = jobEntityManager.FindJobsByExecutionId(executionEntity.Id);
                foreach (IJobEntity job in jobsForExecution)
                {
                    JobEntityManager.Delete(job);
                    if (EventDispatcher.Enabled)
                    {
                        EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.JOB_CANCELED, job));
                    }
                }
            }

            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).SuspendedJobCount > 0))
            {
                ISuspendedJobEntityManager        suspendedJobEntityManager = SuspendedJobEntityManager;
                ICollection <ISuspendedJobEntity> suspendedJobsForExecution = suspendedJobEntityManager.FindJobsByExecutionId(executionEntity.Id);
                foreach (ISuspendedJobEntity job in suspendedJobsForExecution)
                {
                    suspendedJobEntityManager.Delete(job);
                    if (EventDispatcher.Enabled)
                    {
                        EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.JOB_CANCELED, job));
                    }
                }
            }

            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).DeadLetterJobCount > 0))
            {
                IDeadLetterJobEntityManager        deadLetterJobEntityManager = DeadLetterJobEntityManager;
                ICollection <IDeadLetterJobEntity> deadLetterJobsForExecution = deadLetterJobEntityManager.FindJobsByExecutionId(executionEntity.Id);
                foreach (IDeadLetterJobEntity job in deadLetterJobsForExecution)
                {
                    deadLetterJobEntityManager.Delete(job);
                    if (EventDispatcher.Enabled)
                    {
                        EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.JOB_CANCELED, job));
                    }
                }
            }

            // Delete event subscriptions
            if (!enableExecutionRelationshipCounts || (enableExecutionRelationshipCounts && ((ICountingExecutionEntity)executionEntity).EventSubscriptionCount > 0))
            {
                IEventSubscriptionEntityManager  eventSubscriptionEntityManager = EventSubscriptionEntityManager;
                IList <IEventSubscriptionEntity> eventSubscriptions             = eventSubscriptionEntityManager.FindEventSubscriptionsByExecution(executionEntity.Id);
                foreach (IEventSubscriptionEntity eventSubscription in eventSubscriptions)
                {
                    eventSubscriptionEntityManager.Delete(eventSubscription);
                }
            }
        }