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); } }
/// <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)); }