/// <summary> /// Genera el contenido html /// </summary> /// <param name="reporte">Nombre del reporte</param> /// <param name="parametros">Parametros</param> /// <param name="format">Formato</param> /// <returns></returns> public static string Render(string reporte, string parametros, EnumRenderFormat format) { System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("es-ES"); System.Threading.Thread.CurrentThread.CurrentCulture = ci; DotLiquid.Template.RegisterFilter(typeof(Reports.LiquidFilters)); var obj_parametros = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, object> >(parametros); string texto = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~/Reports/" + reporte + ".html")); var xml = XDocument.Load(HttpContext.Current.Server.MapPath("~/Reports/" + reporte + ".data")); Dictionary <string, object> objeto = new Dictionary <string, object>(); if (xml != null) { XNamespace ns = xml.Root.GetDefaultNamespace(); var x = xml.Descendants().Where(q => q.Name.LocalName == "DataSets").FirstOrDefault(); string strconn = xml.Descendants().Where(q => q.Name.LocalName == "DataSource").FirstOrDefault().Value; x.Elements().ToList().ForEach((e) => { bool IsMultiRecords = e.Attribute("IsMultiRecords") != null ? e.Attribute("IsMultiRecords").Value == "1" : false; string Type = e.Attribute("type") == null ? "query" : e.Attribute("type").Value; string Name = e.Attribute("name").Value; string SQL = e.Element(e.GetDefaultNamespace() + "SQL").Value; System.Data.CommandType commandType = Type == "query" ? System.Data.CommandType.Text : System.Data.CommandType.StoredProcedure; using (var conn = DbFactory.Conn(strconn)) { conn.Open(); DynamicParameters parameters = new DynamicParameters(); e.Element(e.GetDefaultNamespace() + "Parameters").Elements().ToList().ForEach((a) => { string parameterName = a.Attribute("name").Value; object value = obj_parametros[parameterName]; System.Data.DbType dbType = GetType(a.Attribute("type") == null ? "string" : a.Attribute("type").Value); parameters.Add(parameterName, value, dbType); }); if (IsMultiRecords) //Si es tiene mas de una fila { List <object> datos = new List <object>(); conn.Query(sql: SQL, param: parameters, commandType: commandType).ToList().ForEach((f) => { datos.Add(DapperHelpers.ToExpandoObject(f)); }); objeto.Add(Name, datos); } else { var firstOrDefault = conn.Query(sql: SQL, param: parameters, commandType: commandType).FirstOrDefault(); objeto.Add(Name, firstOrDefault); } } }); } //variable globales que pueden ser usadas en el reporte objeto.Add("RenderFormat", format.ToString()); objeto.Add("Today", DateTime.Now); DotLiquid.Template template = DotLiquid.Template.Parse(texto); string html = template.Render(Hash.FromDictionary(objeto)); return(html); }