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
                }));
            }
        }
예제 #2
0
        /// <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
                }));
            }
        }