public CalculationProps(string name, string description, CalcParam[] args, CalcParam result, CalcHandler calcHandler) { Name = name; Description = description; Args = args; Result = result; Handler = calcHandler; }
public ExprVar(LexExpr lex, CalcParam calc) : base(lex, calc) { IsUse = lex.Type == "varuse"; CalcParam cp = calc; while (!cp.Vars.ContainsKey(lex.Code)) { cp = cp.Owner; } Code = lex.Code; }
//Запись скомпилированных выражений в таблицу private void SaveCompile(RecDao rec, bool isSubParam) { try { while (!rec.EOF) { CalcParam calc = !isSubParam ? CalcParamsId[rec.GetInt("CalcParamId")] : CalcParamsId[rec.GetInt("OwnerId")].MethodsId[rec.GetInt("CalcParamId")]; if (calc != null) { calc.SaveCompile(rec); } rec.MoveNext(); } } catch (Exception ex) { AddError("Ошибка сохранения параметров", ex); } }
//owner - владелец, caller - вызывающий public ParamArchive(CalcParam param, ParamArchive owner = null, ParamArchive caller = null, bool alreadyConcidered = false) { LastParam = param; if (owner == null && caller == null) { FirstParam = param; FullCode = param.FullCode; } else { if (caller != null) { FirstParam = caller.FirstParam; FullCode = caller.FullCode; } else { FirstParam = owner.FirstParam; FullCode = owner.FullCode + "." + param.Code; } } bool ac = false; var ct = param.CalcType; if (!alreadyConcidered && ct.ClassType == ClassType.Single && !param.SuperProcess.IsNone()) { ac = true; var tab = param.Tablik; if (!tab.ArchiveParams.ContainsKey(FullCode)) { tab.ArchiveParams.Add(FullCode, this); tab.ArchiveParamsCount++; if (tab.ArchiveParams.Count == 1) { tab.UsedProviders.Add("Archive"); } if (param.SuperProcess == SuperProcess.Moment) { tab.IsMoments = true; } if (param.SuperProcess.IsPeriodic()) { tab.IsPeriodic = true; } if (param.SuperProcess.IsAbsolute()) { tab.IsAbsolute = true; } } } //Параметры с владельцем значения var cp = ct.ParentParam; if (cp != null && cp.Inputs.Count > 0 && cp.CalcOn && cp.ErrMess == "" && cp != param) { new ParamArchive(cp, null, this, ac); } //Методы foreach (var met in param.Methods.Values) { if (met.CalcOn && met.ErrMess == "" && met.Inputs.Count == 0) { new ParamArchive(met, this); } } }
public ExprCalc(LexExpr lex, CalcParam calc) : base(lex, calc) { IsMet = Lex.Type == "met"; }
public ExprLexeme(Lexeme lexeme, CalcParam calcParam, bool isPrev = false) { ExprType = isPrev ? ExprType.Prev : ExprType.Calc; Lexeme = lexeme; CalcParam = calcParam; }