Ejemplo n.º 1
0
        private object GetValue(ELContext context, IVariableScope variableScope)
        {
            string expstr = ExpressionString;

            if ((VariableScopeElResolver.EXECUTION_KEY.Equals(expstr) && variableScope is IExecutionEntity) || (VariableScopeElResolver.TASK_KEY.Equals(expstr) && variableScope is ITaskEntity))
            {
                context.IsPropertyResolved = true;
                return(variableScope);
            }
            else if (VariableScopeElResolver.EXECUTION_KEY.Equals(expstr) && variableScope is ITaskEntity entity)
            {
                context.IsPropertyResolved = true;
                return(entity.Execution);
            }
            else if (VariableScopeElResolver.LOGGED_IN_USER_KEY.Equals(expstr))
            {
                context.IsPropertyResolved = true;
                return(Authentication.AuthenticatedUser.Id);
            }

            IScriptingEnginesProvider scriptingEnginesProvider = ProcessEngineServiceProvider.Resolve <IScriptingEnginesProvider>();
            IScriptingEngines         scriptingEngines         = scriptingEnginesProvider.Create(language);

            var execution = variableScope is ITaskEntity te ? te.Execution : variableScope as IExecutionEntity;

            return(scriptingEngines.Evaluate(expstr, execution));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="execution"></param>
        public override void Execute(IExecutionEntity execution)
        {
            IScriptingEngines scriptingEngines = Context.ProcessEngineConfiguration.ScriptingEnginesProvider.Create(language);

            if (Context.ProcessEngineConfiguration.EnableProcessDefinitionInfoCache)
            {
                JToken taskElementProperties = Context.GetBpmnOverrideElementProperties(scriptTaskId, execution.ProcessDefinitionId);
                if (taskElementProperties != null && taskElementProperties[DynamicBpmnConstants.SCRIPT_TASK_SCRIPT] != null)
                {
                    string overrideScript = taskElementProperties[DynamicBpmnConstants.SCRIPT_TASK_SCRIPT].ToString();
                    if (!string.IsNullOrWhiteSpace(overrideScript) && !overrideScript.Equals(script))
                    {
                        script = overrideScript;
                    }
                }
            }

            bool noErrors = true;

            try
            {
                object result = scriptingEngines.Evaluate(script, execution);

                if (resultVariable is object)
                {
                    execution.SetVariable(resultVariable, result);
                }
            }
            catch (ActivitiException e)
            {
                logger.LogWarning("Exception while executing " + execution.CurrentFlowElement.Id + " : " + e.Message);

                noErrors = false;
                if (e is BpmnError error)
                {
                    ErrorPropagation.PropagateError(error, execution);
                }
                else
                {
                    throw e;
                }
            }
            if (noErrors)
            {
                Leave(execution);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sequenceFlowId"></param>
        /// <param name="execution"></param>
        /// <returns></returns>
        public virtual bool Evaluate(string sequenceFlowId, IExecutionEntity execution)
        {
            IScriptingEnginesProvider scriptingEnginesProvider = ProcessEngineServiceProvider.Resolve <IScriptingEnginesProvider>();
            IScriptingEngines         scriptingEngines         = scriptingEnginesProvider.Create(language);

            object result = scriptingEngines.Evaluate(expression, execution);

            if (result is null)
            {
                throw new ActivitiException("condition script returns null: " + expression);
            }
            if (!(result is bool))
            {
                throw new ActivitiException("condition script returns non-Boolean: " + result + " (" + result.GetType().FullName + ")");
            }
            return(Convert.ToBoolean(result));
        }