public IActionResult GetData([FromBody] TReportsDataRequest request) { Log.Information("***Executando método 'GetData'***"); Log.Information("-----Leitura dos parâmetros -----" + System.Environment.NewLine); Log.Information(JsonConvert.SerializeObject(request)); Log.Information(System.Environment.NewLine); Log.Information("-----Fim da leitura dos parâmetros -----" + System.Environment.NewLine); try { TReportsDataReponse response = new TReportsDataReponse(); response.Data = GetDataSql(GetSentenceSql(request.SentenceMember.SqlText, request.SentenceMember.SqlParameters), out IEnumerable <Column> columns); return(Ok(response)); } catch (Exception ex) { Log.Error(ex.Message); Response.StatusCode = 500; return(Accepted(new TReportsCustomError() { code = "500", detailedMessage = ex.StackTrace, message = ex.Message })); } }
/// <summary> /// Relatório de recorrencias /// </summary> /// <remarks> /// </remarks> /// Relatório de recorrencias /// <returns></returns> /// <response code="200">Relatório</response> protected async Task <IActionResult> GetData([FromBody] TReportsDataRequest request) { Log.Information("***Executando método 'GetData'***"); Log.Information("-----Leitura dos parâmetros -----" + System.Environment.NewLine); Log.Information(JsonConvert.SerializeObject(request)); Log.Information(System.Environment.NewLine); Log.Information("-----Fim da leitura dos parâmetros -----" + System.Environment.NewLine); try { string sql = request.SentenceMember.SqlText; if (sql.ToUpper().Contains("WHERE")) { sql = sql.Substring(sql.IndexOf("WHERE", StringComparison.InvariantCultureIgnoreCase) + 5); } else { sql = "1=1"; } if (request.SentenceMember.SqlParameters != null) { foreach (SqlParameter parameter in request.SentenceMember.SqlParameters) { string parAux = parameter.ParamType == "System.String" || parameter.ParamType == "System.DateTime" ? "'{0}'" : "{0}"; sql = sql.Replace($":{parameter.ParamName}", string.Format(parAux, parameter.ParamValue)); } } DataTable table = new DataTable(); if (request.SentenceMember.SqlText.ToUpper().Contains("FILIAL")) { table.ReadXml("Data\\Filial.xml"); } else { table.ReadXml("Data\\Empresa.xml"); } table.TableName = request.SentenceMember.EntityName; //Aqui aplicariamos o filtro, mas como é um exemplo usando datatable não foi possível por causa dos nomes das tabelas e join //table.DefaultView.RowFilter = sql; //DataTable result = table.DefaultView.ToTable(); if (request.ProviderParams?.FirstOrDefault(p => p.Name == "upper")?.Value == "true") { foreach (DataRow row in table.Rows) { foreach (DataColumn column in table.Columns) { row[column.ColumnName] = row[column.ColumnName].ToString().ToUpper(); } } } TReportsDataReponse response = new TReportsDataReponse(); bool isXmlFormat = request.ProviderParams?.FirstOrDefault(p => p.Name == "responseFormat")?.Value?.ToLower() == "xml"; if (isXmlFormat) { using (MemoryStream ms = new MemoryStream()) { table.WriteXml(ms); ms.Position = 0; using (StreamReader reader = new StreamReader(ms)) { response.Data = reader.ReadToEnd(); response.DataContentType = "application/xml"; } } } else { response.Data = JsonConvert.SerializeObject(table.ToDictionaryList(), Formatting.Indented); } return(Ok(response)); } catch (Exception ex) { Log.Error(ex.Message); Response.StatusCode = 500; return(Accepted(new TReportsCustomError() { code = "500", detailedMessage = ex.StackTrace, message = ex.Message })); } }