protected void GenerateBaseTaskScripts(TaskDef td) { if (td.Variables != null) { foreach (var vd in td.Variables.Where(x => !string.IsNullOrEmpty(x.DefaultValueExpr))) { GenExpression(DslUtil.TaskVariableDefaultKey(td.Id, vd.Name), vd.DefaultValueExpr); } } if (td.InputDataBindings != null) { foreach (var bnd in td.InputDataBindings.Where(x => x.BindType == DataBindingType.Expr)) { GenExpression(DslUtil.TaskVarInBindingKey(td.Id, bnd.Target), bnd.Source); } } if (td.OutputDataBindings != null) { foreach (var bnd in td.OutputDataBindings.Where(x => x.BindType == DataBindingType.Expr)) { GenExpression(DslUtil.TaskVarOutBindingKey(td.Id, bnd.Target), bnd.Source); } } if (td.InputParameterBindings != null) { foreach (var bnd in td.InputParameterBindings.Where(x => x.BindType == DataBindingType.Expr)) { GenExpression(DslUtil.TaskParamInBindingKey(td.Id, bnd.Target), bnd.Source); } } if (td.OutputParameterBindings != null) { foreach (var bnd in td.OutputParameterBindings.Where(x => x.BindType == DataBindingType.Expr)) { GenExpression(DslUtil.TaskParamOutBindingKey(td.Id, bnd.Target), bnd.Source); } } if (td.IsMultiInstance) { GenExpression(DslUtil.TaskMultiInstanceSplitKey(td.Id), td.MultiInstanceSplitExpression); } if (!string.IsNullOrEmpty(td.BeforeEnableScript)) { GenStatement(DslUtil.TaskScriptKey(td.Id, "BeforeEnable"), td.BeforeEnableScript); } if (!string.IsNullOrEmpty(td.AfterCompleteScript)) { GenStatement(DslUtil.TaskScriptKey(td.Id, "AfterComplete"), td.AfterCompleteScript); } if (!string.IsNullOrEmpty(td.AfterEnableScript)) { GenStatement(DslUtil.TaskScriptKey(td.Id, "AfterEnable"), td.AfterEnableScript); } }
public IEnumerable <Dictionary <string, object> > PrepareMultiInstanceTaskInputData(CompositeTaskInstance cti, TaskDef childTask, ITaskExecutionContext ctx) { if (!childTask.IsMultiInstance) { throw new Exception(); } var k = DslUtil.TaskMultiInstanceSplitKey(childTask.Id); Func <object> fun = _pd._exprs[k]; if (fun == null) { throw new Exception(); } _pd.SetTaskInstanceInfo(cti, ctx); SC.IEnumerable enu; var val = fun(); enu = val is SC.IEnumerable ? (SC.IEnumerable)val : new object[] { val }; List <Dictionary <string, object> > ret = new List <Dictionary <string, object> >(); foreach (object item in enu) { if (item is Dictionary <string, object> ) { ret.Add((Dictionary <string, object>)item); } else if (item is SC.IDictionary) { ret.Add(ToTaskData((SC.IDictionary)item)); } else { throw new Exception(); } } return(ret); /* * ITaskScript scr = Context.ScriptManager.GetTaskScript(this.ParentProcess, taskId); * Task tsk = MyTask.RequireTask(taskId); * scr.TaskContext = Context; * Dictionary<string, object> srcData = new Dictionary<string, object>(TaskData); * scr.SourceData = srcData; * object obj = scr.EvalMultiInstanceSplitQuery(); * IEnumerable enu; * if (obj is IEnumerable) * enu = (IEnumerable)obj; * else * { * ArrayList al = new ArrayList(); * al.Add(obj); * enu = al; * } * List<Dictionary<string, object>> lst = new List<Dictionary<string, object>>(); * * foreach (object v in enu) * { * srcData[tsk.MultiInstanceItemAlias] = v; * lst.Add(ExecuteInputDataBindings(scr, tsk)); * } * return lst; */ throw new NotImplementedException(); }