예제 #1
0
 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);
     }
 }
예제 #2
0
        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();
        }