protected void variable_input_binding(Func <object> f, string codeString) { if (_curVar == null) { throw new Exception("input_binding only in variable def"); } string k = DslUtil.TaskVarInBindingKey(_curTask != null ? _curTask.Id : _currentCompositeTask.Id, _curVar.Name); var b = new DataBindingDef { BindType = DataBindingType.Expr, Source = codeString, Target = _curVar.Name }; _variableBinds[k] = f; if (_curTask != null) { _curTask.AddInputDataBinding(b); } else if (_currentCompositeTask != null) { _currentCompositeTask.AddInputDataBinding(b); } else { throw new Exception(); } }
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); }