Exemplo n.º 1
0
        protected void input_bindings_code(Func <SC.IDictionary> fun, string codeStr)
        {
            TaskDef tsk = _curTask != null ? _curTask : (TaskDef)_currentCompositeTask;
            string  k   = DslUtil.TaskInputDataBindingKey(tsk.Id);

            _variableBinds[k] = fun;
        }
Exemplo n.º 2
0
        public Dictionary <string, object> PrepareChildTaskInputData(CompositeTaskInstance cti, TaskDef childTask, ITaskExecutionContext ctx)
        {
            _pd.SetTaskInstanceInfo(cti, ctx);

            string k1 = DslUtil.TaskInputDataBindingKey(childTask.Id);

            if (_pd._variableBinds.ContainsKey(k1))
            {
                //get full data record
                SC.IDictionary dic = (SC.IDictionary)_pd._variableBinds[k1]();
                return(ToTaskData(dic));
            }

            Dictionary <string, object> ret = new Dictionary <string, object>();

            if (childTask.Variables != null)
            {
                if (childTask.AutoBindVariables)
                {
                    foreach (var vd in childTask.Variables)
                    {
                        if (vd.VariableDir == ProcessModel.Data.VariableDef.Dir.In ||
                            vd.VariableDir == ProcessModel.Data.VariableDef.Dir.InOut)
                        {
                            //TODO add type conversion/control
                            if (cti.TaskData.ContainsKey(vd.Name))
                            {
                                ret[vd.Name] = cti.TaskData[vd.Name];
                            }
                        }
                    }
                }
                if (childTask.InputDataBindings != null)
                {
                    foreach (var bd in childTask.InputDataBindings)
                    {
                        if (bd.BindType == DataBindingType.CopyVar)
                        {
                            ret[bd.Target] = cti.TaskData[bd.Source];
                        }
                        else if (bd.BindType == DataBindingType.Literal)
                        {
                            ret[bd.Target] = bd.Source;
                        }
                        else if (bd.BindType == DataBindingType.Expr)
                        {
                            string k = DslUtil.TaskVarInBindingKey(childTask.Id, bd.Target);
                            if (!_pd._variableBinds.ContainsKey(k))
                            {
                                throw new Exception("Fail: missing delegate: " + k);
                            }
                            ret[bd.Target] = _pd._variableBinds[k]();
                        }
                    }
                }
            }
            return(ret);
        }