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 void InitializeNewTask(TaskInstance ti, Dictionary <string, object> inputData, ITaskExecutionContext ctx) { if (string.IsNullOrEmpty(ti.InstanceId) || string.IsNullOrEmpty(ti.TaskId) || string.IsNullOrEmpty(ti.ProcessDefinitionId) || string.IsNullOrEmpty(ti.ProcessInstanceId)) { throw new Exception("Task not inited properly"); } _pd.SetTaskInstanceInfo(ti, ctx); TaskDef td = _def.GetRequiredTask(ti.TaskId); if (td.Variables != null) { foreach (var vd in td.Variables) { if (vd.VariableDir == ProcessModel.Data.VariableDef.Dir.In || vd.VariableDir == ProcessModel.Data.VariableDef.Dir.InOut) { if (inputData.ContainsKey(vd.Name)) { ti.TaskData[vd.Name] = inputData[vd.Name]; } } if (!ti.TaskData.ContainsKey(vd.Name)) { var k = DslUtil.TaskVariableDefaultKey(td.Id, vd.Name); if (_pd._exprs.ContainsKey(k)) { ti.TaskData[vd.Name] = _pd._exprs[k](); } else if (!string.IsNullOrEmpty(vd.DefaultValueExpr)) { ti.TaskData[vd.Name] = vd.DefaultValueExpr; //TODO: add type conversion } else if (vd.IsRequired) { throw new NGinnBPM.ProcessModel.Exceptions.DataValidationException("Required variable missing: " + vd.Name).SetTaskId(ti.TaskId).SetProcessDef(ti.ProcessDefinitionId); } } } } //now initialize task parameters if (td.InputParameterBindings != null) { foreach (var bd in td.InputParameterBindings) { var pi = ti.GetType().GetProperty(bd.Target); if (pi == null) { throw new NGinnBPM.ProcessModel.Exceptions.TaskParameterInvalidException(bd.Target, "Property not found: " + bd.Target).SetTaskId(ti.TaskId); } string k = DslUtil.TaskParamInBindingKey(td.Id, bd.Target); if (bd.BindType == DataBindingType.Expr) { pi.SetValue(ti, _pd._exprs[k](), null); } else if (bd.BindType == DataBindingType.CopyVar) { pi.SetValue(ti, ti.TaskData.ContainsKey(bd.Source) ? ti.TaskData[bd.Source] : null, null); } else if (bd.BindType == DataBindingType.Literal) { pi.SetValue(ti, Convert.ChangeType(bd.Source, pi.PropertyType), null); } else { throw new Exception(); } } } string ks = DslUtil.TaskScriptKey(ti.TaskId, "BeforeEnable"); if (_pd._stmts.ContainsKey(ks)) { _pd._stmts[ks](); } }