private System.Xml.XmlElement ToXMLElement(System.Xml.XmlDocument doc, ICSSoft.STORMNET.FunctionalLanguage.Function funct) { System.Xml.XmlElement el = doc.CreateElement("Function"); if (funct != null) { el.SetAttribute("Name", funct.FunctionDef.StringedView); for (int i = 0; i < funct.Parameters.Count; i++) { if (funct.Parameters[i] is ICSSoft.STORMNET.FunctionalLanguage.Function) { el.AppendChild(ToXMLElement(doc, funct.Parameters[i] as ICSSoft.STORMNET.FunctionalLanguage.Function)); } else if (funct.Parameters[i] is ICSSoft.STORMNET.FunctionalLanguage.VariableDef) { System.Xml.XmlElement varel = doc.CreateElement("Variable"); varel.SetAttribute("Value", (funct.Parameters[i] as ICSSoft.STORMNET.FunctionalLanguage.VariableDef).StringedView); el.AppendChild(varel); } else { System.Xml.XmlElement valel = doc.CreateElement("Value"); int parindex = (i >= funct.FunctionDef.Parameters.Count) ? funct.FunctionDef.Parameters.Count - 1 : i; valel.SetAttribute("ConstType", funct.FunctionDef.Parameters[parindex].Type.StringedView); valel.SetAttribute("Value", funct.Parameters[i].ToString()); el.AppendChild(valel); } } } return(el); }
/// <summary> /// Разбор /// </summary> /// <param name="value"></param> /// <param name="v"></param> /// <returns></returns> static public FunctionForControls Parse(string value, ICSSoft.STORMNET.View v) { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml(value); ICSSoft.STORMNET.FunctionalLanguage.FunctionalLanguageDef lang = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef; ICSSoft.STORMNET.FunctionalLanguage.VariableDef[] vars; ArrayList arvars = new ArrayList(); arvars.Add(new ICSSoft.STORMNET.FunctionalLanguage.VariableDef((lang as ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef).GuidType, "STORMMainObjectKey")); foreach (ICSSoft.STORMNET.PropertyInView piv in v.Properties) { System.Type propType = ICSSoft.STORMNET.Information.GetPropertyType(v.DefineClassType, piv.Name); try { ICSSoft.STORMNET.FunctionalLanguage.ObjectType t = lang.GetObjectTypeForNetType(propType); if (t != null) { arvars.Add(new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(t, piv.Name, piv.Caption)); } } catch { } } vars = (ICSSoft.STORMNET.FunctionalLanguage.VariableDef[])arvars.ToArray(typeof(ICSSoft.STORMNET.FunctionalLanguage.VariableDef)); ICSSoft.STORMNET.FunctionalLanguage.Function fnc = FromXMLElements((System.Xml.XmlElement)doc.FirstChild, lang, vars); FunctionForControls res = null; if (fnc == null) { res = new FunctionForControls(v, fnc); } else { res = new FunctionForControls(v, fnc.FunctionDef, fnc.Parameters.ToArray()); } try { res.Name = ((System.Xml.XmlElement)doc.FirstChild).GetAttribute("___Name"); } catch { } return(res); }
/// <summary> /// !!! Сделано public для обратной совместимости, использовать аккуратно. /// Берутся значения из глобальной переменной edobj и впариваются в функцию вместо параметров /// TODO: переписать эту функцию так, чтобы глобальная переменная не применялась и сделать её публичной /// </summary> /// <param name="func"></param> /// <returns></returns> public Function ConvertFunction(Function func) { if (func == null) { return(null); } FunctionalLanguage.Function res = new ICSSoft.STORMNET.FunctionalLanguage.Function(func.FunctionDef); ArrayList pars = new ArrayList(); pars.AddRange(func.Parameters); for (int i = 0; i < pars.Count; i++) { if (pars[i] is FunctionalLanguage.Function) { FunctionalLanguage.Function cur_func = pars[i] as FunctionalLanguage.Function; pars[i] = ConvertFunction(cur_func); } else if (pars[i] is ParameterDef) { object val = ICSSoft.STORMNET.Information.GetPropValueByName(edobj, (pars[i] as ParameterDef).ParamName); if (val is DetailArray) { DetailArray dar = val as DetailArray; DataObject[] objs = dar.GetAllObjects(); foreach (DataObject obj in objs) { if (obj.GetStatus(false) == ObjectStatus.Deleted) { dar.Remove(obj); } else { object ops = ICSSoft.STORMNET.Information.GetPropValueByName(obj, (pars[i] as ParameterDef).ParamName); if (ops == null) { dar.Remove(obj); } } } object[] pp = new object[dar.Count]; for (int j = 0; j < pp.Length; j++) { pp[j] = ICSSoft.STORMNET.Information.GetPropValueByName(dar.ItemByIndex(j), (pars[i] as ParameterDef).ParamName); } if (func.FunctionDef.Parameters[func.FunctionDef.Parameters.Count - 1].MultiValueSupport) { pars.RemoveAt(i); pars.InsertRange(i, pp); } else if (pp.Length > 0) { pars[i] = pp[0]; } else { pars[i] = null; } i--; } else { pars[i] = ICSSoft.STORMNET.Information.GetPropValueByName(edobj, (pars[i] as ParameterDef).ParamName); } } else if (func.FunctionDef.StringedView == "SQL" && ICSSoft.STORMNET.Business.DataServiceProvider.DataService is ICSSoft.STORMNET.Business.SQLDataService) { ICSSoft.STORMNET.Business.SQLDataService ds = (ICSSoft.STORMNET.Business.SQLDataService)ICSSoft.STORMNET.Business.DataServiceProvider.DataService; string sSQl = pars[i].ToString(); int j; while ((j = sSQl.IndexOf("@")) != -1) { int k = j + 1; while (k < sSQl.Length && (char.IsLetterOrDigit(sSQl[k]) || sSQl[k] == '_')) { k++; } string sParamName = sSQl.Substring(j, k - j); sSQl = sSQl.Remove(j, k - j); string sParamValue = string.Empty; foreach (ParameterDef p in Parameters) { if ("@" + p.ParamName == sParamName) { sParamValue = ds.ConvertSimpleValueToQueryValueString(ICSSoft.STORMNET.Information.GetPropValueByName(edobj, p.ParamName)); break; } } sSQl = sSQl.Insert(j, sParamValue); } pars[i] = sSQl; } } res.Parameters.AddRange(pars); return(res); }
public СостояниеВелосипедаL() : base(СостояниеВелосипеда.Views.СостояниеВелосипедаL) { EditPage = СостояниеВелосипедаE.FormPath; fncActual = FunctionBuilder.BuildEquals <СостояниеВелосипеда>(x => x.Актуально, true); showActual = false; }
/// <summary> /// конструктор /// </summary> /// <param name="view"></param> /// <param name="def"></param> /// <param name="parameters"></param> public FunctionForControls(ICSSoft.STORMNET.View view, ICSSoft.STORMNET.FunctionalLanguage.FunctionDef def, params object[] parameters) { function = new ICSSoft.STORMNET.FunctionalLanguage.Function(def, parameters); this.View = view; }
/// <summary> /// конструктор /// </summary> /// <param name="def"></param> /// <param name="View"></param> /// <param name="type"></param> /// <param name="parameters"></param> public FunctionForControls(ICSSoft.STORMNET.FunctionalLanguage.FunctionDef def, string View, Type type, params object[] parameters) { this.View = Information.GetView(View, type); function = new ICSSoft.STORMNET.FunctionalLanguage.Function(def, parameters); }
/// <summary> /// конструктор /// </summary> /// <param name="View"></param> /// <param name="type"></param> /// <param name="func"></param> public FunctionForControls(string View, Type type, ICSSoft.STORMNET.FunctionalLanguage.Function func) { this.View = Information.GetView(View, type); function = func; }
/// <summary> /// конструктор /// </summary> /// <param name="view"></param> /// <param name="func"></param> public FunctionForControls(ICSSoft.STORMNET.View view, ICSSoft.STORMNET.FunctionalLanguage.Function func) { this.View = view; this.function = func; }