Exemple #1
0
        public virtual object Execute(ICommandContext commandContext)
        {
            if (ReferenceEquals(executionId, null))
            {
                throw new ActivitiIllegalArgumentException("executionId is null");
            }
            if (ReferenceEquals(variableName, null))
            {
                throw new ActivitiIllegalArgumentException("variableName is null");
            }

            IExecutionEntity execution = commandContext.ExecutionEntityManager.FindById <IExecutionEntity>(executionId);

            if (execution == null)
            {
                throw new ActivitiObjectNotFoundException("execution " + executionId + " doesn't exist", typeof(IExecution));
            }

            object value;

            if (isLocal)
            {
                value = execution.GetVariableLocal(variableName, false);
            }
            else
            {
                value = execution.GetVariable(variableName, false);
            }

            return(value);
        }
        protected internal virtual int?GetLocalLoopVariable(IExecutionEntity execution, string variableName)
        {
            object value = execution.GetVariableLocal(variableName);

            if (!(value is int?))
            {
                return(null);
            }

            return((int?)value);
        }
        protected internal virtual int?GetLoopVariable(IExecutionEntity execution, string variableName)
        {
            object           value  = execution.GetVariableLocal(variableName);
            IExecutionEntity parent = execution.Parent;

            while (value == null && parent != null)
            {
                value  = parent.GetVariableLocal(variableName);
                parent = parent.Parent;
            }
            return((int?)value);
        }
        private T GetVariable <T>(IExecutionEntity execution, string variableName)
        {
            object           value  = execution.GetVariableLocal(variableName);
            IExecutionEntity parent = execution.Parent;

            while (value == null && parent != null)
            {
                value  = parent.GetVariableLocal(variableName);
                parent = parent.Parent;
            }
            return((T)value);
        }
        /// <summary>
        /// 循环获取流程实例变量
        /// </summary>
        /// <typeparam name="T">返回类型</typeparam>
        /// <param name="execution">流程实例</param>
        /// <param name="variableName">变量名</param>
        /// <returns></returns>
        internal static T GetLoopVariable <T>(this IExecutionEntity execution, string variableName)
        {
            object           value  = execution.GetVariableLocal(variableName);
            IExecutionEntity parent = execution.Parent;

            while (value == null && parent != null)
            {
                value  = parent.GetLoopVariable <T>(variableName);
                parent = parent.Parent;
            }

            return(value == null ? default : JToken.FromObject(value).ToObject <T>());
        }
Exemple #6
0
        public void Notify(IExecutionEntity execution)
        {
            IExecutionEntity miRoot = execution.Parent;

            if (miRoot.IsMultiInstanceRoot &&
                execution.CurrentFlowElement is CallActivity callActivity)
            {
                int nrOfExecInstances = ((int?)miRoot.GetVariableLocal(NUMBER_OF_EXECUTION_INSTANCES)).GetValueOrDefault(0);

                miRoot.SetVariableLocal(NUMBER_OF_EXECUTION_INSTANCES, nrOfExecInstances + 1);

                string collectionVarName = callActivity.LoopCharacteristics.GetCollectionVarName();

                string[] businessKeys = miRoot.GetVariable <JArray>(collectionVarName).ToObject <string[]>();

                execution.BusinessKey = businessKeys[nrOfExecInstances];
            }
        }