public void Update(NBrightInfo info) { // build list of xpath fields that need processing. var updatefields = new List <String>(); var fieldList = NBrightBuyUtils.GetAllFieldxPaths(info); foreach (var xpath in fieldList) { if (info.GetXmlProperty(xpath + "/@update") == "lang") { updatefields.Add(xpath); } } foreach (var f in updatefields) { if (f.EndsWith("/message")) { // special processing for editor, to place code in standard place. if (DataLangRecord.XMLDoc.SelectSingleNode("genxml/edt") == null) { DataLangRecord.AddSingleNode("edt", "", "genxml"); } if (info.GetXmlProperty("genxml/textbox/message") == "") { DataLangRecord.SetXmlProperty("genxml/edt/message", info.GetXmlPropertyRaw("genxml/edt/message")); } else { DataLangRecord.SetXmlProperty("genxml/edt/message", info.GetXmlPropertyRaw("genxml/textbox/message")); // ajax on ckeditor (Ajax diesn't work for telrik) } } else { DataLangRecord.RemoveXmlNode(f); var xpathDest = f.Split('/'); if (xpathDest.Count() >= 2) { DataLangRecord.AddXmlNode(info.XMLData, f, xpathDest[0] + "/" + xpathDest[1]); } } var datatype = info.GetXmlProperty(f + "/@datatype"); if (datatype == "date") { DataLangRecord.SetXmlProperty(f, info.GetXmlProperty(f), TypeCode.DateTime); } else if (datatype == "double") { DataLangRecord.SetXmlPropertyDouble(f, info.GetXmlProperty(f)); } else if (datatype == "html") { DataLangRecord.SetXmlProperty(f, info.GetXmlPropertyRaw(f)); } else { DataLangRecord.SetXmlProperty(f, info.GetXmlProperty(f).Trim()); } DataRecord.RemoveXmlNode(f); } updatefields = new List <String>(); fieldList = NBrightBuyUtils.GetAllFieldxPaths(info); foreach (var xpath in fieldList) { var id = xpath.Split('/').Last(); if (info.GetXmlProperty(xpath + "/@update") == "save") { updatefields.Add(xpath); } } foreach (var f in updatefields) { var datatype = info.GetXmlProperty(f + "/@datatype"); if (datatype == "date") { DataRecord.SetXmlProperty(f, info.GetXmlProperty(f), TypeCode.DateTime); } else if (datatype == "double") { DataRecord.SetXmlPropertyDouble(f, info.GetXmlProperty(f)); } else if (datatype == "html") { DataRecord.SetXmlProperty(f, info.GetXmlPropertyRaw(f)); } else { DataRecord.SetXmlProperty(f, info.GetXmlProperty(f)); } // if we have a image field then we need to create the imageurl field if (info.GetXmlProperty(f.Replace("textbox/", "hidden/hidinfo")) == "Img=True") { DataRecord.SetXmlProperty(f.Replace("textbox/", "hidden/") + "url", StoreSettings.Current.FolderImages + "/" + info.GetXmlProperty(f.Replace("textbox/", "hidden/hid"))); DataRecord.SetXmlProperty(f.Replace("textbox/", "hidden/") + "path", StoreSettings.Current.FolderImagesMapPath + "\\" + info.GetXmlProperty(f.Replace("textbox/", "hidden/hid"))); } if (f == "genxml/dropdownlist/ddlparentcatid") { var parentitemid = info.GetXmlProperty(f); if (!Utils.IsNumeric(parentitemid)) { parentitemid = "0"; } if (DataRecord.ParentItemId != Convert.ToInt32(parentitemid)) { _oldcatcascadeid = DataRecord.ParentItemId; _doCascadeIndex = true; DataRecord.ParentItemId = Convert.ToInt32(parentitemid); } } DataLangRecord.RemoveXmlNode(f); } }
private void CreateXchartOrderRevDataBind(object sender, EventArgs e) { var lc = (Literal) sender; var container = (IDataItemContainer) lc.NamingContainer; lc.Visible = visibleStatus.DefaultIfEmpty(true).First(); if (lc.Visible && container.DataItem != null) { var nbi1 = (NBrightInfo) container.DataItem; var strOut = ""; var nodList = nbi1.XMLDoc.SelectNodes("root/orderstats/*"); if (nodList != null) { foreach (XmlNode nod in nodList) { var nbi = new NBrightInfo(); nbi.XMLData = nod.OuterXml; strOut += "{'x': '" + nbi.GetXmlPropertyInt("item/createdyear") + "-" + nbi.GetXmlPropertyInt("item/createdmonth") + "',"; strOut += "'y': " + nbi.GetXmlPropertyRaw("item/appliedtotal").ToString() + "},"; } strOut = strOut.TrimEnd(','); } lc.Text = strOut; } }
public void Build(String xmlData, List<String> metaTags) { _criteria = ""; var obj = new NBrightInfo(); try { obj.XMLData = xmlData; } catch { //Just jump out without search. } // using a client side list of disabled token caused some issues with ajax. The new prefered method is to calc server side. var disabledtokens = GetDisabledTokens(obj); //Get only search tags var searchTags = new List<String>(); foreach (var mta in metaTags) { var orderId = GenXmlFunctions.GetGenXmlValue(mta, "tag/@id"); var active = GenXmlFunctions.GetGenXmlValue(mta, "tag/@active"); if (active != "False" && orderId.ToLower().StartsWith("search") && !disabledtokens.Contains(orderId + ";")) { searchTags.Add(mta); } } if (searchTags.Count > 0) { _criteria += ""; var lp = 0; foreach (var mt in searchTags) { lp += 1; var action = GenXmlFunctions.GetGenXmlValue(mt, "tag/@action"); var search = GenXmlFunctions.GetGenXmlValue(mt, "tag/@search"); var sqlfield = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlfield"); var sqlcol = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlcol"); var searchfrom = GenXmlFunctions.GetGenXmlValue(mt, "tag/@searchfrom"); var searchto = GenXmlFunctions.GetGenXmlValue(mt, "tag/@searchto"); var sqltype = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqltype"); var sqloperator = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqloperator"); var sqlinject = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlinject"); if (sqlfield == "") sqlfield = GenXmlFunctions.GetGenXmlValue(mt, "tag/@xpath"); //check is xpath of node ha been used. if (lp == 1) sqloperator = ""; // use the "and" sepcified above for the first criteria. // the < sign cannot be used in a XML attribute (it's illegal), so to do a xpath minimum value, we use a {LessThan} token. // Ummm!!!. http://msdn.microsoft.com/en-us/library/ms748250(v=vs.110).aspx if (sqlfield.Contains("{LessThan}")) sqlfield = sqlfield.Replace("{LessThan}", "<"); if (sqlfield.Contains("{GreaterThan}")) sqlfield = sqlfield.Replace("{GreaterThan}", ">"); // to keep it consistant if (sqltype == "") sqltype = "nvarchar(max)"; if (sqlcol == "") sqlcol = "XMLData"; var searchVal = obj.GetXmlProperty(search); if (searchVal == "") searchVal = GenXmlFunctions.GetGenXmlValue(mt, "tag/@static"); var searchValFrom = obj.GetXmlPropertyRaw(searchfrom); var searchValTo = obj.GetXmlPropertyRaw(searchto); if (sqltype.ToLower() == "datetime") { if (Utils.IsDate(searchValFrom)) searchValFrom = Convert.ToDateTime(searchValFrom).ToString("yyyy-MM-dd HH:mm:ss"); else searchValFrom = ""; if (Utils.IsDate(searchValTo)) { var searchToDate = Convert.ToDateTime(searchValTo); searchToDate = searchToDate.AddDays(1); var strippedToDate = searchToDate.Date; searchValTo = strippedToDate.ToString("yyyy-MM-dd HH:mm:ss"); } else searchValTo = ""; if (Utils.IsDate(searchVal)) searchVal = Convert.ToDateTime(searchVal).ToString("yyyy-MM-dd HH:mm:ss"); else searchVal = ""; } switch (action.ToLower()) { case "sqloperator": _criteria += " " + sqloperator + " "; break; case "sqlinject": _criteria += " " + sqlinject + " "; break; case "open": _criteria += sqloperator + " ( "; break; case "close": _criteria += " ) "; break; case "equal": _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterText(sqlfield, sqltype, searchVal, sqlcol); break; case "not": _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterText(sqlfield, sqltype, searchVal, sqlcol,"!="); break; case "like": if (searchVal == "") searchVal = "NORESULTSnbright"; // for "like", build the sql so we have valid value, but add a fake search so the result is nothing for no selection values _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterLikeText(sqlfield, sqltype, searchVal, sqlcol); break; case "range": if (searchValFrom != "") // don't include search if we have no value input. { // We always need to return a value, otherwise we get an error, so range select cannot be empty. (we'll default here to 9999999) if (searchValFrom == "") { if (sqltype.ToLower() == "datetime") searchValFrom = "1800-01-01"; else searchValFrom = "0"; } if (searchValTo == "") { if (sqltype.ToLower() == "datetime") searchValTo = "3000-12-30"; else searchValTo = "999999999"; } _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterRange(sqlfield, sqltype, searchValFrom, searchValTo, sqlcol); } else { _criteria += " 1 = 1 "; // add a dummy test, so we get a valid SQL structure. } break; case "cats": _criteria += " " + sqloperator + " "; var selectoperator = GenXmlFunctions.GetGenXmlValue(mt, "tag/@selectoperator"); _criteria += BuildCategorySearch(search, obj, selectoperator); break; case "cat": _criteria += " {criteriacatid} "; // add token for catergory search () break; } } } }
public void Build(String xmlData, List<String> metaTags) { _criteria = ""; var obj = new NBrightInfo(); try { obj.XMLData = xmlData; } catch { //Just jump out without search. } // using a client side list of disabled token caused some issues with ajax. The new prefered method is to calc server side. var disabledtokens = GetDisabledTokens(obj); //Get only search tags var searchTags = new List<String>(); foreach (var mta in metaTags) { var orderId = GenXmlFunctions.GetGenXmlValue(mta, "tag/@id"); var active = GenXmlFunctions.GetGenXmlValue(mta, "tag/@active"); if (active != "False" && orderId.ToLower().StartsWith("search") && !disabledtokens.Contains(orderId + ";")) { searchTags.Add(mta); } } if (searchTags.Count > 0) { _criteria += ""; var lp = 0; foreach (var mt in searchTags) { lp += 1; var action = GenXmlFunctions.GetGenXmlValue(mt, "tag/@action"); var search = GenXmlFunctions.GetGenXmlValue(mt, "tag/@search"); var sqlfield = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlfield"); var sqlcol = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlcol"); var searchfrom = GenXmlFunctions.GetGenXmlValue(mt, "tag/@searchfrom"); var searchto = GenXmlFunctions.GetGenXmlValue(mt, "tag/@searchto"); var sqltype = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqltype"); var sqloperator = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqloperator"); var sqlinject = GenXmlFunctions.GetGenXmlValue(mt, "tag/@sqlinject"); if (sqlfield == "") sqlfield = GenXmlFunctions.GetGenXmlValue(mt, "tag/@xpath"); //check is xpath of node ha been used. if (lp == 1) sqloperator = ""; // use the "and" sepcified above for the first criteria. // the < sign cannot be used in a XML attribute (it's illegal), so to do a xpath minimum value, we use a {LessThan} token. // Ummm!!!. http://msdn.microsoft.com/en-us/library/ms748250(v=vs.110).aspx if (sqlfield.Contains("{LessThan}")) sqlfield = sqlfield.Replace("{LessThan}", "<"); if (sqlfield.Contains("{GreaterThan}")) sqlfield = sqlfield.Replace("{GreaterThan}", ">"); // to keep it consistant if (sqltype == "") sqltype = "nvarchar(max)"; if (sqlcol == "") sqlcol = "XMLData"; var searchVal = obj.GetXmlProperty(search); if (searchVal == "") searchVal = GenXmlFunctions.GetGenXmlValue(mt, "tag/@static"); var searchValFrom = obj.GetXmlPropertyRaw(searchfrom); var searchValTo = obj.GetXmlPropertyRaw(searchto); if (sqltype.ToLower() == "datetime") { if (Utils.IsDate(searchValFrom)) searchValFrom = Convert.ToDateTime(searchValFrom).ToString("yyyy-MM-dd HH:mm:ss"); else searchValFrom = ""; if (Utils.IsDate(searchValTo)) { var searchToDate = Convert.ToDateTime(searchValTo); searchToDate = searchToDate.AddDays(1); var strippedToDate = searchToDate.Date; searchValTo = strippedToDate.ToString("yyyy-MM-dd HH:mm:ss"); } else searchValTo = ""; if (Utils.IsDate(searchVal)) searchVal = Convert.ToDateTime(searchVal).ToString("yyyy-MM-dd HH:mm:ss"); else searchVal = ""; } switch (action.ToLower()) { case "sqloperator": _criteria += " " + sqloperator + " "; break; case "sqlinject": _criteria += " " + sqlinject + " "; break; case "open": _criteria += sqloperator + " ( "; break; case "close": _criteria += " ) "; break; case "equal": _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterText(sqlfield, sqltype, searchVal, sqlcol); break; case "not": _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterText(sqlfield, sqltype, searchVal, sqlcol, "!="); break; case "like": if (searchVal == "") searchVal = "NORESULTSnbright"; // for "like", build the sql so we have valid value, but add a fake search so the result is nothing for no selection values _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterLikeText(sqlfield, sqltype, searchVal, sqlcol); break; case "range": if (searchValFrom != "") // don't include search if we have no value input. { // We always need to return a value, otherwise we get an error, so range select cannot be empty. (we'll default here to 9999999) if (searchValFrom == "") { if (sqltype.ToLower() == "datetime") searchValFrom = "1800-01-01"; else searchValFrom = "0"; } if (searchValTo == "") { if (sqltype.ToLower() == "datetime") searchValTo = "3000-12-30"; else searchValTo = "999999999"; } _criteria += " " + sqloperator + " " + GenXmlFunctions.GetSqlFilterRange(sqlfield, sqltype, searchValFrom, searchValTo, sqlcol); } else { _criteria += " 1 = 1 "; // add a dummy test, so we get a valid SQL structure. } break; case "cats": _criteria += " " + sqloperator + " "; var selectoperator = GenXmlFunctions.GetGenXmlValue(mt, "tag/@selectoperator"); _criteria += BuildCategorySearch(search, obj, selectoperator); break; case "cat": _criteria += " {criteriacatid} "; // add token for catergory search () break; } } } }