public virtual void ProcessTemplate() { if (_xslt == null) { ProjectExceptionArgs args = new ProjectExceptionArgs("XSL Not Set, ProcessTemplate aborted", "WebTemplater", "ProcessTemplate", null, SeverityLevel.Critical, LogLevel.Event); throw new ProjectException(args); } //initialize xslt global param vars string doc_folder = httpC.Request.Path; //strip application name doc_folder = doc_folder.Substring(0, doc_folder.LastIndexOf("/") + 1); //Current Page - DOC_ACTION _args.AddParam("DOC_ACTION", "", httpC.Request.Path); //Current Folder - DOC_FOLDER _args.AddParam("DOC_FOLDER", "", doc_folder); using (_writer = new StringWriter()) { //_xslt.Transform(_xml.CreateNavigator(),_args, _writer); _xslt.xslTransformer(_xml.CreateNavigator(), _args); _xslt.XMLObjectSource = _xml; _writer.Write(_xslt.ResultText); } }
private void _SetParameter(string ParamName, string ParamValue) { try { if (_querynode == null) { throw new Exception("Query not set, call SetQuery first"); } string xpath = String.Format("parameters/parameter[@name='{0}']", ParamName); XmlNode node = _querynode.SelectSingleNode(xpath); if (node == null) { throw new Exception("Parameter not found: " + ParamName); } if (ParamValue != null) { node.InnerText = ParamValue; } } catch (Exception unhandled) { ProjectExceptionArgs args = new ProjectExceptionArgs ("SetParameter fails for ParamName: " + ParamName, "mso.Utility.XObject", "_SetParameter", null, SeverityLevel.Critical, LogLevel.Event); throw new ProjectException(args, unhandled); } }
/************************************************************ * PRIVATE METHODS AND FUNCTIONS ************************************************************/ #region Private Methods and Functions private void _Transform() { try { //validate before we get started if (classXSLObjectSource == "") { ProjectExceptionArgs args = new ProjectExceptionArgs("Stylesheet Not Se", "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } else if (!File.Exists(classXSLObjectSource)) { string errmsg = string.Format("Could not find stylesheet: {0}", classXSLObjectSource); ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "_Transform", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } //check for XML Source //load up empty if non existent if (classXMLObjectSource == null) { classXMLObjectSource = new XmlDocument(); classXMLObjectSource.LoadXml(@"<?xml version='1.0'?><ROOT/>"); } //create a navigator object XPathNavigator xn; xn = classXMLObjectSource.CreateNavigator(); //run the transformation xslTransformer(xn, clsXSLArgs); } catch (IOException e) { string errmsg = "FileIO Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } catch (XmlException e) { string errmsg = "XmlException Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } catch (HttpException e) { string errmsg = "HttpResponse Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } }
public virtual void ProcessTemplate() { if (XSLSource == "") { ProjectExceptionArgs args = new ProjectExceptionArgs("XSLSource Not Set, ProcessTemplate aborted", "WebTemplater", "ProcessTemplate", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } //initialize xslt global param vars SetupXSLTDocument(); T.XMLObjectSource = clsTemplaterXMLObj; T.Transform(); }
/// <summary> /// Sets the query in the SqlProjectDocument /// </summary> /// <param name="QueryName"></param> public void SetQuery(string QueryName) { try { string xpath = String.Format("queries/query[@name='{0}']", QueryName); _querynode = _xmldocument.SelectSingleNode(xpath); if (_querynode == null) { throw new Exception("Invalid Query: " + QueryName); } // Build DB Paramter Fields _fields = new DBParameterFields(); xpath = "parameters/parameter[@lookup][@lookup_value][not(@inout='out')]"; XmlNodeList nodeparms = _querynode.SelectNodes(xpath); foreach (XmlNode node in nodeparms) { _fields.Add(new DBParameterField(node.Attributes["name"].Value, node.Attributes["lookup_value"].Value)); } // paging - limit xpath = "paging/limit"; var node2 = _querynode.SelectSingleNode(xpath); if (node2 != null) { int limit = -1; int.TryParse(node2.InnerText, out limit); _query.Limit = limit; } } catch (Exception unhandled) { ProjectExceptionArgs args = new ProjectExceptionArgs("Unhandled Exception Occured", "mso.Utility.XObject", "SetQuery", null, SeverityLevel.Critical, LogLevel.Event); throw new ProjectException(args, unhandled); } }
public virtual void ProcessTemplate() { if (XSLSource == "") { ProjectExceptionArgs args = new ProjectExceptionArgs("XSLSource Not Set, ProcessTemplate aborted", "WebTemplater", "ProcessTemplate", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } //initialize xslt global param vars SetupXSLTDocument(); T.XMLObjectSource = clsTemplaterXMLObj; T.Transform(); }
public XMLParserException(ProjectExceptionArgs Args, Exception inner) : base(Args, inner) { }
public XMLParserException(ProjectExceptionArgs Args) : base(Args) { }
public void Query(XmlNode Query) { string timingToken = "Anonymous Query"; if (Timing != null) { if (Query.Attributes["name"] != null) { var queryname = Query.Attributes["name"].Value; timingToken = String.Format("ProjectFlxDB.DB.DatabaseQuery {0}", queryname); } Timing.Start(timingToken); } XmlElement elm = null; string _commandtext = null; string xpath = null; if (_database.State != ConnectionState.Open) { _database.Open(); } InitializeCommand(); // command timeout if (Query.Attributes["script-timeout"] != null) { _command.CommandTimeout = int.Parse(Query.Attributes["script-timeout"].Value); } _querynode = Query; try { // command type xpath = "command/type"; elm = (XmlElement)Query.SelectSingleNode(xpath); switch (elm.InnerText) { case "StoredProcedure": _command.Parameters.Clear(); _command.CommandType = CommandType.StoredProcedure; break; case "Select": case "SQL": _command.CommandType = CommandType.Text; break; } // command text switch (_command.CommandType) { case (CommandType.Text): xpath = "command/text"; elm = (XmlElement)Query.SelectSingleNode(xpath); _commandtext = Regex.Replace(elm.InnerText, @"^[ \t]+", "", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); _commandtext = Regex.Replace(_commandtext, @"(\r\n)", " ", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); break; default: xpath = "command/name"; elm = (XmlElement)Query.SelectSingleNode(xpath); _commandtext = elm.InnerText; _command.Parameters.Clear(); break; } // command parameters - in only xpath = "parameters/parameter[not(@inout='out')]"; XmlNodeList nodes = Query.SelectNodes(xpath); foreach (XmlNode node in nodes) { // validate input if (validInput(node)) { if (_command.CommandType == CommandType.Text) { string replaceparam = "[" + node.Attributes["name"].Value + "]"; _commandtext = _commandtext.Replace(replaceparam, node.InnerText); } else { elm = (XmlElement)node; if (!elm.IsEmpty) { int size = 0; if (!String.IsNullOrEmpty(elm.GetAttribute("size"))) { size = Convert.ToInt32(elm.GetAttribute("size")); } AddParameter(elm.GetAttribute("name"), elm.InnerText, elm.GetAttribute("type"), elm.GetAttribute("inout"), size); } } } } // did all input values validate? if (!_isValid) { throw new ProjectException("Invalid Formatting Exception", _handler); } // command parameters - output only (are required) xpath = "parameters/parameter[@inout='out']"; nodes = Query.SelectNodes(xpath); foreach (XmlNode node in nodes) { if (_command.CommandType == CommandType.Text) { string replaceparam = "[" + node.Attributes["name"].Value + "]"; _commandtext.Replace(replaceparam, node.InnerText); } else { elm = (XmlElement)node; int size = 0; if (!String.IsNullOrEmpty(elm.GetAttribute("size"))) { size = Convert.ToInt32(elm.GetAttribute("size")); } AddParameter(elm.GetAttribute("name"), elm.InnerText, elm.GetAttribute("type"), elm.GetAttribute("inout"), size); } } _command.CommandText = _commandtext; // prepare result xml document XmlNode importnode; XmlNode newElm; _xmresult = new XmlDocument(); _xmresult.LoadXml("<results><schema/></results>"); _xmresult.DocumentElement.SetAttribute("name", Query.Attributes["name"].Value); if (!String.IsNullOrEmpty(_sqlProjName)) { _xmresult.DocumentElement.SetAttribute("ProjectSqlFile", _sqlProjName); } importnode = _xmresult.ImportNode(Query, true); _xmresult.SelectSingleNode("results/schema").AppendChild(importnode); // execute query int scalar = 0; int rows = 0; xpath = "command/action"; elm = (XmlElement)Query.SelectSingleNode(xpath); switch (elm.InnerText) { case ("Scalar"): var obj = _command.ExecuteScalar(); int.TryParse(obj == null ? "0" : obj.ToString(), out scalar); _scalar = scalar; if (scalar > 0) { rows = 1; } _rowsaffected = rows; // set result in xml elm = (XmlElement)_xmresult.SelectSingleNode("results"); newElm = _xmresult.CreateElement("result"); newElm.InnerText = Convert.ToString(_rowsaffected); elm.AppendChild(newElm); break; case ("Result"): var cachekey = cacheKeyHelper(_xmresult); var cachedBuilder = GetCache(cachekey); if (cachedBuilder != null && _cachingEnabled) { pushToTree(cachedBuilder); } else { SqlDataReader dr = null; try { // TODO: move open DB here (or similar) to avoid open db when cache results dr = _command.ExecuteReader(); BuildResults(dr); } finally { if (dr != null) { dr.Close(); } } } break; case ("NonQuery"): default: rows = _command.ExecuteNonQuery(); _rowsaffected = rows; // set result in xml elm = (XmlElement)_xmresult.SelectSingleNode("results"); newElm = _xmresult.CreateElement("result"); newElm.InnerText = Convert.ToString(_rowsaffected); elm.AppendChild(newElm); break; } // set output parameter results on result xml document xpath = "results/schema/query/parameters/parameter[@inout='out' or @inout='inout']"; nodes = _xmresult.SelectNodes(xpath); foreach (XmlNode node in nodes) { node.InnerText = _command.Parameters[node.Attributes["name"].InnerText].Value.ToString(); } } catch (SqlException handledSql) { if (handledSql.Message.Contains(" duplicate key ")) { if (QuiteUniqueConstraints == false) { throw handledSql; } } else { throw handledSql; } } catch (Exception unhandled) { ProjectExceptionArgs args = new ProjectExceptionArgs("Sorry, we handled an exception. The problem has been sent to MSO Admin", "mso.Utility.DB.DatabaseQuery", "Query " + _commandtext, null, SeverityLevel.Critical, LogLevel.Event); throw new ProjectException(args, unhandled); } finally { if (Timing != null) { Timing.Stop(timingToken); } } }
private bool validInput(XmlNode node) { bool result = true; bool required = false; XmlElement m = (XmlElement)node; // exceptions - no regular expression check if (m.GetAttribute("validation") == "") { return(true); } // for each validation scenario in validations (space delimited list string[] aValid = m.GetAttribute("validation").Split(' '); List <string> validations = new List <string>(aValid); string srequired = validations.Find(delegate(String s) { return(s == "required"); }); bool isrequired = Convert.ToBoolean(String.IsNullOrEmpty(srequired) ? false : srequired.Equals("true") || srequired.Equals("True")); foreach (string validation in validations) { if (validation.StartsWith("regx:")) { if (!m.IsEmpty || !string.IsNullOrEmpty(m.InnerText)) { //load validation xml obj library if (_xmRegX == null) { throw new Exception("RegX input validation fails, RegX library not loaded"); } // TODO: pass back friendly title for item if (!validInputTestRegX(m.InnerText, validation.Split(':')[1])) { if (!isrequired && m.InnerText.Length == 0) { result = true; } else { result = false; ProjectExceptionArgs args = new ProjectExceptionArgs(String.Format("Invalid Format for item: {0}", String.IsNullOrEmpty(m.GetAttribute("title")) ? m.GetAttribute("name") : m.GetAttribute("title")), SeverityLevel.Format); _handler.Add(args); } } } } else { switch (validation) { case "required": // expecting a value for innertext required = true; if (m.IsEmpty) { result = false; ProjectExceptionArgs args = new ProjectExceptionArgs(String.Format("A value is required: {0}", String.IsNullOrEmpty(m.GetAttribute("title")) ? m.GetAttribute("name") : m.GetAttribute("title")), SeverityLevel.Format); _handler.Add(args); } break; } } } // test the object type for consistency with object value if (required && result) { switch (m.GetAttribute("type")) { case "int": if (!(validInputTestNumber(m.InnerText))) { result = false; ProjectExceptionArgs args = new ProjectExceptionArgs(String.Format("Format Exception, expecting a valid number for: {0}", String.IsNullOrEmpty(m.GetAttribute("title")) ? m.GetAttribute("name") : m.GetAttribute("title")), SeverityLevel.Format); _handler.Add(args); } break; case "text": case "varchar": if (!(validInputTestCharacters(m.InnerText, m.GetAttribute("size")))) { result = false; ProjectExceptionArgs args = new ProjectExceptionArgs(String.Format("Format Exception, too many characters for: {0}, expecting: {1}", String.IsNullOrEmpty(m.GetAttribute("title")) ? m.GetAttribute("name") : m.GetAttribute("title"), m.GetAttribute("size")), SeverityLevel.Format); _handler.Add(args); } break; case "date": // expecting a value that can parse as a date if (!(validInputTestDate(m.InnerText))) { result = false; ProjectExceptionArgs args = new ProjectExceptionArgs(String.Format("Format Exception, expecting a valid date for: {0}", String.IsNullOrEmpty(m.GetAttribute("title")) ? m.GetAttribute("name") : m.GetAttribute("title"), m.GetAttribute("size")), SeverityLevel.Format); _handler.Add(args); } break; } } return(result); }
private void BuildResults(SqlDataReader dr, int subqueryIndex = 0) { // paging switch (_pagingDirection) { case DatabaseQueryPagingDirection.Top: _currentPage = 1; break; case DatabaseQueryPagingDirection.Next: _currentPage++; break; case DatabaseQueryPagingDirection.Previous: _currentPage--; if (_currentPage < 1) { _currentPage = 1; } break; } int startread = (_currentPage * _pagingLimit) - _pagingLimit; int endread = startread + _pagingLimit; //build result node MemoryStream stream = new MemoryStream(); XmlTextWriter w = new XmlTextWriter(stream, Encoding.UTF8); XmlNodeList fieldNodes; // begin writing the xml result w.WriteStartElement("result"); try { //field values for results if (subqueryIndex > 0) { fieldNodes = _querynode.SelectNodes(String.Format(@"subquery[{0}]/fields/field", subqueryIndex)); } else { fieldNodes = _querynode.SelectNodes(@"fields/field"); } //add rows to result node int currentrow = 0; _resultPages = getNewResultPages(_querynode); int pagecount = 1; int inpagecount = 0; while (dr.Read()) { bool flginpage = false; if ((currentrow >= (startread) && currentrow < endread) || _pagingLimit == -1) { flginpage = true; } #region in page write results if (flginpage) { w.WriteStartElement("row"); // if we come accross Json fields, they are translated to Xml and added as child to row node // keep track of them and add them after all attributes have been processed List <string> innerXml = new List <string>(); //attributes (fields) if (fieldNodes.Count > 0) { foreach (XmlElement m in fieldNodes) { try { // validate json type if (m.GetAttribute("type") == "json" || m.GetAttribute("type") == "tryjson") { try { var val = dr[m.GetAttribute("name")].ToString(); string json = null; if (string.IsNullOrEmpty(val)) { json = "{}"; } else { var jsoObj = Newtonsoft.Json.Linq.JObject.Parse(val); json = val; } w.WriteAttributeString(m.GetAttribute("name").ToString(), json); } catch (IndexOutOfRangeException handled) { throw handled; } catch (Exception unhandled) { w.WriteAttributeString(m.GetAttribute("name").ToString(), "{\"error\":\"" + unhandled.Message + "\"}"); } } else { string val = dr[m.GetAttribute("name")].ToString(); if (!(m.HasAttribute("encode") || m.HasAttribute("regx"))) { val = dr[m.GetAttribute("name")].ToString().Trim(); } if (m.HasAttribute("encode")) { val = System.Web.HttpUtility.UrlEncode(dr[m.GetAttribute("encode")].ToString().TrimEnd()).Replace("+", "%20");; } if (m.HasAttribute("regx") && m.HasAttribute("replace") && m.HasAttribute("field")) { val = dr[m.GetAttribute("field")].ToString().Trim(); val = Regex.Replace(val, m.GetAttribute("regex").ToString(), m.GetAttribute("replace").ToString()); } w.WriteAttributeString(m.GetAttribute("name").ToString(), String.IsNullOrEmpty(val) ? "" : safeXmlCharacters(val.ToString().Trim())); } if (m.GetAttribute("type") == "json") { string xml = null; try { var details = dr[m.GetAttribute("name")].ToString(); // try to parse it string jsonDetails = String.Format("{{\"{0}\":{1}}}", m.GetAttribute("name"), details); xml = JsonConvert.DeserializeXmlNode(jsonDetails).OuterXml; if (xml.StartsWith("<?")) { xml = xml.Substring(xml.IndexOf("?>") + 2); } } catch (JsonReaderException) { } catch (JsonSerializationException) { } finally { if (xml != null) { innerXml.Add(xml); } } } } catch (IndexOutOfRangeException handled) { w.WriteAttributeString(m.GetAttribute("name").ToString(), "#field not found#"); } } } else { for (int i = 0; i < dr.FieldCount; i++) { w.WriteAttributeString(dr.GetName(i), dr[i].ToString().Trim()); } } // add inner xml foreach (String s in innerXml) { w.WriteRaw(s); } w.WriteEndElement(); } #endregion _rowsaffected = currentrow++; inpagecount++; if (inpagecount >= _pagingLimit) { _resultPages.Add(new ResultPaging(pagecount++, inpagecount)); inpagecount = 0; } } // get last result for _resultPage if (inpagecount > 0) { _resultPages.Add(new ResultPaging(pagecount++, inpagecount)); } _results = true; // reset a couple of paging items _currentPage = 1; _pagingDirection = DatabaseQueryPagingDirection.None; } catch (IndexOutOfRangeException ie) { string errmsg = string.Format("One or more invalid Field or Parameters for QueryName: {0}", _querynode.Attributes["name"].InnerText); ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "Database.cs", "BuildResults", null, SeverityLevel.Fatal, LogLevel.Event); throw new ProjectException(args, ie); } catch (SqlException se) { string errmsg = string.Format("ExecuteReader Error For QueryName: {0}", _querynode.Attributes["name"].InnerText); ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "Database.cs", "BuildResults", null, SeverityLevel.Fatal, LogLevel.Event); throw new ProjectException(args, se); } //end result node w.WriteEndElement(); w.Flush(); // include sub results (StoredProcedure returns more than one Result Set) while (dr.NextResult()) { subqueryIndex++; BuildResults(dr, subqueryIndex); } //add stream xml to return xml XmlDocument xmStreamObj = new XmlDocument(); stream.Seek(0, SeekOrigin.Begin); xmStreamObj.Load(stream); pushToTree(xmStreamObj, subqueryIndex); }
private void AddParameter(string name, object value, string valueType, string inout, int size) { _command.CommandType = CommandType.StoredProcedure; SqlParameter parameter = null; ProjectExceptionArgs args = null; switch (valueType) { case ("int"): parameter = _command.Parameters.Add(name, SqlDbType.Int); try { parameter.Value = Convert.ToInt32(value); } catch (FormatException) { args = new ProjectExceptionArgs( String.Format("Invalid parameter value for: {0} - expecting valid number", name), SeverityLevel.Format); _handler.Add(args); } break; case ("date"): parameter = _command.Parameters.Add(name, SqlDbType.DateTime); try { parameter.Value = Convert.ToDateTime(value); } catch (FormatException) { args = new ProjectExceptionArgs( String.Format("Invalid parameter value for: {0} - expecting a valid Date", name), SeverityLevel.Format); _handler.Add(args); } break; case ("varchar"): parameter = _command.Parameters.Add(name, SqlDbType.VarChar); try { parameter.Value = Convert.ToString(value); parameter.Size = (size <= 0) ? (-1) : size; } catch (FormatException) { args = new ProjectExceptionArgs( String.Format("Invalid parameter value for: {0} - expecting a valid String", name), SeverityLevel.Format); _handler.Add(args); } break; case ("text"): default: try { if (size <= 0) { parameter = _command.Parameters.Add(name, SqlDbType.VarChar); parameter.Size = -1; } else { parameter = _command.Parameters.Add(name, SqlDbType.Text); parameter.Size = (size <= 0) ? (-1) : size; } parameter.Value = Convert.ToString(value); } catch (InvalidCastException) { args = new ProjectExceptionArgs( String.Format("Invalid parameter value for: {0} - expecting a valid String", name), SeverityLevel.Format); _handler.Add(args); } break; } // parameter direction if (inout == "inout") { parameter.Direction = ParameterDirection.InputOutput; } if (inout == "out") { parameter.Direction = ParameterDirection.Output; } }
private void _Transform() { try { //validate before we get started if (classXSLObjectSource == "") { ProjectExceptionArgs args = new ProjectExceptionArgs("Stylesheet Not Se", "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } else if (!File.Exists(classXSLObjectSource)) { string errmsg = string.Format("Could not find stylesheet: {0}", classXSLObjectSource); ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "_Transform", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args); } //check for XML Source //load up empty if non existent if (classXMLObjectSource == null) { classXMLObjectSource = new XmlDocument(); classXMLObjectSource.LoadXml(@"<?xml version='1.0'?><ROOT/>"); } //create a navigator object XPathNavigator xn; xn = classXMLObjectSource.CreateNavigator(); //run the transformation xslTransformer(xn, clsXSLArgs); } catch (IOException e) { string errmsg = "FileIO Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } catch (XmlException e) { string errmsg = "XmlException Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } catch (HttpException e) { string errmsg = "HttpResponse Transformation Error"; ProjectExceptionArgs args = new ProjectExceptionArgs(errmsg, "xmlTransformer", "_Transform", null, SeverityLevel.Critical, LogLevel.Event); throw new XMLParserException(args, e); } }
public XMLParserException(ProjectExceptionArgs Args, Exception inner) : base(Args, inner) { }
public XMLParserException(ProjectExceptionArgs Args) : base(Args) { }