コード例 #1
0
        public void ExecuteChildTaskOutputDataBinding(CompositeTaskInstance ti, TaskDef childTask, Dictionary <string, object> childOutputData, ITaskExecutionContext ctx)
        {
            if (string.IsNullOrEmpty(ti.InstanceId) ||
                string.IsNullOrEmpty(ti.TaskId) ||
                string.IsNullOrEmpty(ti.ProcessDefinitionId) ||
                string.IsNullOrEmpty(ti.ProcessInstanceId))
            {
                throw new Exception("Task not inited properly");
            }
            _pd.SetTaskInstanceInfo(ti, ctx);
            _pd.SetOutputData(childOutputData);
            var ctd = childTask.Parent;

            if (childTask.AutoBindVariables && ctd.Variables != null)
            {
                foreach (var vd in ctd.Variables)
                {
                    if (childOutputData.ContainsKey(vd.Name))
                    {
                        ti.TaskData[vd.Name] = childOutputData[vd.Name];
                    }
                }
            }
            if (childTask.OutputDataBindings != null)
            {
                foreach (var bd in childTask.OutputDataBindings)
                {
                    switch (bd.BindType)
                    {
                    case DataBindingType.CopyVar:
                        ti.TaskData[bd.Target] = childOutputData[bd.Source];
                        break;

                    case DataBindingType.Literal:
                        ti.TaskData[bd.Target] = bd.Source;
                        break;

                    case DataBindingType.Expr:
                        string k = DslUtil.TaskVarOutBindingKey(childTask.Id, bd.Target);
                        if (!_pd._variableBinds.ContainsKey(k))
                        {
                            throw new Exception("!");
                        }
                        ti.TaskData[bd.Target] = _pd._variableBinds[k]();
                        break;
                    }
                }
            }
        }
コード例 #2
0
        protected void add_output_binding(string destinationVariable, Func <object> expression, string codeString)
        {
            var b = new DataBindingDef
            {
                BindType = DataBindingType.Expr,
                Source   = codeString,
                Target   = destinationVariable
            };
            var k = DslUtil.TaskVarOutBindingKey(_curTask != null ? _curTask.Id : _currentCompositeTask.Id, destinationVariable);

            _variableBinds[k] = expression;
            if (_curTask != null)
            {
                _curTask.AddOutputDataBinding(b);
            }
            else if (_currentCompositeTask != null)
            {
                _currentCompositeTask.AddOutputDataBinding(b);
            }
        }