예제 #1
0
        public void Execute(IActivityExecution execution)
        {
            var more = execution.Activity.FindOutgoingTransition("more");
            var done = execution.Activity.FindOutgoingTransition("done");

            var value = (int?)execution.GetVariable(_variableName);

            if (value == null)
            {
                execution.SetVariable(_variableName, _from);
                execution.LeaveActivityViaTransition(more);
            }
            else
            {
                value = value + 1;

                if (value < _to)
                {
                    execution.SetVariable(_variableName, value);
                    execution.LeaveActivityViaTransition(more);
                }
                else
                {
                    execution.LeaveActivityViaTransition(done);
                }
            }
        }
예제 #2
0
        public override void Execute(IActivityExecution execution)
        {
            Log.LogDebug("WaitStateUndoService执行Execute:", $"execution:{execution.GetType().Name} _counterName is null?:{(_counterName == null).ToString()}");
            string variableName = (string)_counterName.GetValue(execution);
            object variable     = execution.GetVariable(variableName);

            if (variable == null)
            {
                execution.SetVariable(variableName, (int?)1);
            }
            else
            {
                execution.SetVariable(variableName, ((int?)variable) + 1);
            }
            Log.LogDebug("WaitStateUndoService执行Execute完毕:", $"variable is null?:{(variable==null).ToString()}");
        }
예제 #3
0
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: protected void handle(org.Camunda.bpm.engine.impl.pvm.delegate.ActivityExecution execution, String action) throws Exception
        protected internal virtual void handle(IActivityExecution execution, string action)
        {
            execution.SetVariable(action, true);
            string type = (string)execution.GetVariable("type");

            if ("error".Equals(type, StringComparison.CurrentCultureIgnoreCase))
            {
                throw new BpmnError("MyError");
            }
            else if ("exception".Equals(type, StringComparison.CurrentCultureIgnoreCase))
            {
                throw new MyBusinessException("MyException");
            }
            else if ("leave".Equals(type, StringComparison.CurrentCultureIgnoreCase))
            {
                execution.SetVariable("type", null);
                Leave(execution);
            }
        }
 protected void PerformExecution(IActivityExecution execution, MethodInfo method, object obj)
 {
     ExecuteWithErrorPropagation(execution, () =>
     {
         var args = new List <object>();
         foreach (var fieldDeclaration in _fieldDeclarations)
         {
             var v = ((IExpression)fieldDeclaration.Value).GetValue(execution);
             args.Add(v);
         }
         var parameters = method.GetParameters();
         if (parameters.Length > args.Count)
         {
             var j = args.Count;
             for (int i = 0; i < parameters.Length - j; i++)
             {
                 if (parameters[j + i]
                     .HasDefaultValue)
                 {
                     args.Add(parameters[j + i].DefaultValue);
                 }
             }
         }
         object value = null;
         var tr       = Context.CommandContext.CurrentTransaction;
         var oldTr    = System.Transactions.Transaction.Current;
         try
         {
             if (tr != null)
             {
                 Log.LogInfo("切换环境事务 Id:", tr.TransactionInformation.LocalIdentifier);
                 System.Transactions.Transaction.Current = tr;
             }
             value = method.Invoke(obj, args.ToArray());
         }
         catch (System.Exception ex)
         {
             Log.LogInfo("外部代码异常:", ex.Message);
             throw new ClassMethodDelegateException(string.Format("外部代码异常:{0}", ex.Message), ex);
         }
         finally
         {
             if (tr != null)
             {
                 System.Transactions.Transaction.Current = oldTr;
                 Log.LogInfo("还原环境事务 ", oldTr == null?"null":oldTr.TransactionInformation.LocalIdentifier);
             }
         }
         if (!ReferenceEquals(_resultVariable, null))
         {
             execution.SetVariable(_resultVariable, value);
         }
         Leave(execution);
     });
 }
예제 #5
0
 protected override void PerformExecution(IActivityExecution execution)
 {
     ExecuteWithErrorPropagation(execution, () =>
     {
         // getValue() can have side - effects, that's why we have to call it independently from the result variable
         var value = _expression.GetValue(execution);
         if (!ReferenceEquals(_resultVariable, null))
         {
             execution.SetVariable(_resultVariable, value);
         }
         Leave(execution);
     });
 }
 protected override void PerformExecution(IActivityExecution execution)
 {
     ExecuteWithErrorPropagation(execution, () =>
     {
         var invocation = new ScriptInvocation(script, execution);
         Context.ProcessEngineConfiguration.DelegateInterceptor.HandleInvocation(invocation);
         var result = invocation.InvocationResult;
         if (result != null && !ReferenceEquals(ResultVariable, null))
         {
             execution.SetVariable(ResultVariable, result);
         }
         Leave(execution);
     });
 }
        protected internal virtual void executeEscalationHandler(EscalationEventDefinition escalationEventDefinition,
                                                                 ActivityExecutionMappingCollector activityExecutionMappingCollector)
        {
            var escalationHandler = escalationEventDefinition.EscalationHandler;
            var escalationScope   = GetScopeForEscalation(escalationEventDefinition);
            IActivityExecution escalationExecution =
                activityExecutionMappingCollector.GetExecutionForScope(escalationScope);

            if (!ReferenceEquals(escalationEventDefinition.EscalationCodeVariable, null))
            {
                escalationExecution.SetVariable(escalationEventDefinition.EscalationCodeVariable,
                                                Escalation.EscalationCode);
            }

            escalationExecution.ExecuteActivity(escalationHandler);
        }