/// <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); }
private static ICSSoft.STORMNET.FunctionalLanguage.Function FromXMLElements(System.Xml.XmlElement elem, ICSSoft.STORMNET.FunctionalLanguage.FunctionalLanguageDef lang, ICSSoft.STORMNET.FunctionalLanguage.VariableDef[] vars) { string funcname = elem.GetAttribute("Name"); object[] parameters = new object[elem.ChildNodes.Count]; for (int i = 0; i < elem.ChildNodes.Count; i++) { System.Xml.XmlElement subel = (System.Xml.XmlElement)elem.ChildNodes[i]; switch (subel.Name) { case "Function": parameters[i] = FromXMLElements(subel, lang, vars); break; case "Variable": string varName = subel.GetAttribute("Value"); foreach (ICSSoft.STORMNET.FunctionalLanguage.VariableDef vd in vars) { if (vd.StringedView == varName) { parameters[i] = vd; break; } } break; case "Value": { string typename = subel.GetAttribute("ConstType"); parameters[i] = null; foreach (ICSSoft.STORMNET.FunctionalLanguage.ObjectType ot in lang.Types) { if (ot.StringedView == typename) { try { parameters[i] = Convert.ChangeType(subel.GetAttribute("Value"), ot.NetCompatibilityType); break; } catch { } } } if (parameters[i] == null) { parameters[i] = subel.GetAttribute("Value"); } break; } } ; } if (funcname == null || funcname == string.Empty) { return(null); } else { return(lang.GetFunction(funcname, parameters)); } }