Ejemplo n.º 1
0
        public async Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            HttpResponseMessage response;

            try
            {
                QueryMetadata query = createQuery(_table, _settings);

                Paging paging = new PositionBasedPaging()
                {
                    StartingPosition       = _settings.startPos,
                    NumberOfRecordsToFetch = _settings.fetch
                };

                using (var client = ClientFactory.CreateClient <QueryServiceClient>())
                {
                    ExecuteQueryRequest  queryRequest  = new ExecuteQueryRequest(query, paging);
                    ExecuteQueryResponse queryResponse = await client.ExecuteQueryAsync(queryRequest);

                    response = createQueryResponse(_request, queryResponse.ExecuteQueryResult);
                }
            }
            catch (Exception ex)
            {
                response = _request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message);
            }

            return(response);
        }
Ejemplo n.º 2
0
        public async Task <List <TClass> > PreExecutarQuery <TClass>(string where = "", string inner = "", int idIntegracaoTipo = 0, int idIntegracaoEntidade = 0, string httpVerbo = "") where TClass : class, new()
        {
            Type          typeClass  = typeof(TClass);
            List <TClass> resultList = new List <TClass>();

            TabelaIntegracaoAttribute classAttr = (TabelaIntegracaoAttribute)typeClass.GetCustomAttributes(typeof(TabelaIntegracaoAttribute), false).FirstOrDefault();

            if (classAttr == null)
            {
                return(resultList);
            }

            var listColumns = new List <ColunasConsulta>();

            PropertyInfo[] properties = typeClass.GetProperties();
            foreach (var propertyInfo in properties)
            {
                TabelaIntegracaoAttribute queryProperty = (TabelaIntegracaoAttribute)propertyInfo.GetCustomAttributes(typeof(TabelaIntegracaoAttribute), false).FirstOrDefault();

                if (queryProperty == null)
                {
                    continue;
                }

                listColumns.Add(new ColunasConsulta(queryProperty.DisplayName, propertyInfo.Name));
            }

            var sqlColunas = string.Join(",", listColumns.Select(s => s.Coluna).ToArray());

            var sql = string.Format("SELECT {0} FROM {1} {2} {3}", sqlColunas, classAttr.DisplayName, inner, where);

            string resultado = await Instance.ExecuteQuery(sql, idIntegracaoTipo, idIntegracaoEntidade, httpVerbo);

            if (resultado == null)
            {
                return(resultList);
            }

            ExecuteQueryResponse resultObj = null;

            try
            {
                resultObj = JsonConvert.DeserializeObject <ExecuteQueryResponse>(resultado);
            }
            catch (Exception e)
            {
                var erro = DeserializarXML <IntegracaoErroResposta>(resultado);

                byte[] erroData      = Convert.FromBase64String(erro.Mensagem);
                string decodedString = Encoding.UTF8.GetString(erroData);

                throw new BusinessException(string.Format("Ocorreu um erro na consulta da tabela {0}. Mensagem de Erro {1}", classAttr.DisplayName, decodedString));
            }

            resultList = new List <TClass>();
            foreach (var row in resultObj.responseBody.rows)
            {
                var newClass = new TClass();
                for (var i = 0; i <= listColumns.Count() - 1; i++)
                {
                    PropertyInfo propertySet = typeClass.GetProperty(listColumns[i].Nome);
                    propertySet.SetValue(newClass, row[i], null);
                }

                resultList.Add(newClass);
            }

            return(resultList);
        }