protected void multi_instance_split_expression(Func <object> dataSplitQuery, string code) { TaskDef tsk = _curTask != null ? _curTask : (TaskDef)_currentCompositeTask; string k = DslUtil.TaskMultiInstanceSplitKey(tsk.Id); tsk.MultiInstanceSplitExpression = string.IsNullOrEmpty(code) ? "# compiled code block" : code; _variableBinds[k] = dataSplitQuery; }
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._variableBinds[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(); }