Exemple #1
0
        // sequential multi instance /////////////////////////////////

        public static bool eventSubprocessComplete(ActivityExecution scopeExecution)
        {
            bool performLegacyBehavior = isLegacyBehaviorRequired(scopeExecution);

            if (performLegacyBehavior)
            {
                LOG.completeNonScopeEventSubprocess();
                scopeExecution.end(false);
            }

            return(performLegacyBehavior);
        }
Exemple #2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void execute(org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution) throws Exception
        public virtual void execute(ActivityExecution execution)
        {
            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            if (outgoingTransitions.Count == 0)
            {
                execution.end(true);
            }
            else
            {
                execution.leaveActivityViaTransition(outgoingTransitions[0]);
            }
        }
Exemple #3
0
        public virtual void complete(ActivityExecution execution)
        {
            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            if (outgoingTransitions.Count == 0)
            {
                execution.end(true);
            }
            else
            {
                execution.leaveActivityViaTransitions(outgoingTransitions, Collections.EMPTY_LIST);
            }
        }
Exemple #4
0
        /*
         * Incoming execution is transformed into an event scope,
         * new, non-concurrent execution leaves activity
         */
        public virtual void complete(ActivityExecution execution)
        {
            ActivityExecution outgoingExecution = execution.Parent.createExecution();

            outgoingExecution.Concurrent = false;
            outgoingExecution.Activity   = execution.Activity;

            // eventscope execution
            execution.Concurrent = false;
            execution.Active     = false;
            ((PvmExecutionImpl)execution).EventScope = true;

            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            if (outgoingTransitions.Count == 0)
            {
                outgoingExecution.end(true);
            }
            else
            {
                outgoingExecution.leaveActivityViaTransitions(outgoingTransitions, Collections.EMPTY_LIST);
            }
        }
Exemple #5
0
        /// <summary>
        /// Actual implementation of leaving an activity.
        /// </summary>
        /// <param name="execution">
        ///          The current execution context </param>
        /// <param name="checkConditions">
        ///          Whether or not to check conditions before determining whether or
        ///          not to take a transition. </param>
        protected internal virtual void performOutgoingBehavior(ActivityExecution execution, bool checkConditions, IList <ActivityExecution> reusableExecutions)
        {
            LOG.leavingActivity(execution.Activity.Id);

            string defaultSequenceFlow = (string)execution.Activity.getProperty("default");
            IList <PvmTransition> transitionsToTake = new List <PvmTransition>();

            IList <PvmTransition> outgoingTransitions = execution.Activity.OutgoingTransitions;

            foreach (PvmTransition outgoingTransition in outgoingTransitions)
            {
                if (string.ReferenceEquals(defaultSequenceFlow, null) || !outgoingTransition.Id.Equals(defaultSequenceFlow))
                {
                    Condition condition = (Condition)outgoingTransition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
                    if (condition == null || !checkConditions || condition.evaluate(execution))
                    {
                        transitionsToTake.Add(outgoingTransition);
                    }
                }
            }

            if (transitionsToTake.Count == 1)
            {
                execution.leaveActivityViaTransition(transitionsToTake[0]);
            }
            else if (transitionsToTake.Count >= 1)
            {
                if (reusableExecutions == null || reusableExecutions.Count == 0)
                {
                    execution.leaveActivityViaTransitions(transitionsToTake, Arrays.asList(execution));
                }
                else
                {
                    execution.leaveActivityViaTransitions(transitionsToTake, reusableExecutions);
                }
            }
            else
            {
                if (!string.ReferenceEquals(defaultSequenceFlow, null))
                {
                    PvmTransition defaultTransition = execution.Activity.findOutgoingTransition(defaultSequenceFlow);
                    if (defaultTransition != null)
                    {
                        execution.leaveActivityViaTransition(defaultTransition);
                    }
                    else
                    {
                        throw LOG.missingDefaultFlowException(execution.Activity.Id, defaultSequenceFlow);
                    }
                }
                else if (outgoingTransitions.Count > 0)
                {
                    throw LOG.missingConditionalFlowException(execution.Activity.Id);
                }
                else
                {
                    if (((ActivityImpl)execution.Activity).CompensationHandler && isAncestorCompensationThrowing(execution))
                    {
                        execution.endCompensation();
                    }
                    else
                    {
                        LOG.missingOutgoingSequenceFlow(execution.Activity.Id);
                        execution.end(true);
                    }
                }
            }
        }
Exemple #6
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public static void propagateError(String errorCode, String errorMessage, Exception origException, org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution) throws Exception
        public static void propagateError(string errorCode, string errorMessage, Exception origException, ActivityExecution execution)
        {
            ActivityExecutionHierarchyWalker walker = new ActivityExecutionHierarchyWalker(execution);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final ErrorDeclarationForProcessInstanceFinder errorDeclarationFinder = new ErrorDeclarationForProcessInstanceFinder(origException, errorCode, execution.getActivity());
            ErrorDeclarationForProcessInstanceFinder errorDeclarationFinder            = new ErrorDeclarationForProcessInstanceFinder(origException, errorCode, execution.Activity);
            ActivityExecutionMappingCollector        activityExecutionMappingCollector = new ActivityExecutionMappingCollector(execution);

            walker.addScopePreVisitor(errorDeclarationFinder);
            walker.addExecutionPreVisitor(activityExecutionMappingCollector);
            // map variables to super executions in the hierarchy of called process instances
            walker.addExecutionPreVisitor(new OutputVariablesPropagator());

            try
            {
                walker.walkUntil(new WalkConditionAnonymousInnerClass(errorDeclarationFinder));
            }
            catch (Exception e)
            {
                LOG.errorPropagationException(execution.ActivityInstanceId, e);

                // separate the exception handling to support a fail-safe error propagation
                throw new ErrorPropagationException(e.InnerException);
            }

            PvmActivity errorHandlingActivity = errorDeclarationFinder.ErrorHandlerActivity;

            // process the error
            if (errorHandlingActivity == null)
            {
                if (origException == null)
                {
                    if (Context.CommandContext.ProcessEngineConfiguration.EnableExceptionsAfterUnhandledBpmnError)
                    {
                        throw LOG.missingBoundaryCatchEventError(execution.Activity.Id, errorCode);
                    }
                    else
                    {
                        LOG.missingBoundaryCatchEvent(execution.Activity.Id, errorCode);
                        execution.end(true);
                    }
                }
                else
                {
                    // throw original exception
                    throw origException;
                }
            }
            else
            {
                ErrorEventDefinition errorDefinition        = errorDeclarationFinder.ErrorEventDefinition;
                PvmExecutionImpl     errorHandlingExecution = activityExecutionMappingCollector.getExecutionForScope(errorHandlingActivity.EventScope);

                if (!string.ReferenceEquals(errorDefinition.ErrorCodeVariable, null))
                {
                    errorHandlingExecution.setVariable(errorDefinition.ErrorCodeVariable, errorCode);
                }
                if (!string.ReferenceEquals(errorDefinition.ErrorMessageVariable, null))
                {
                    errorHandlingExecution.setVariable(errorDefinition.ErrorMessageVariable, errorMessage);
                }
                errorHandlingExecution.executeActivity(errorHandlingActivity);
            }
        }