Fórum
Ver pergunta

ListaClientes não traz os campos ‘Inactivo’ e ‘DataCriacao’   

67 visualizações
1
0

Boa Tarde,

Estou a criar uma extensão da WebApi e a gerar uma lista de clientes. Para tal uso o método:

ProductContext.MotorLE.Base.Clientes.ListaClientes(filtro)

No entanto, existem campos dos clientes que não vêm corretamente preenchidos na lista que é devolvida.

Estes apresentam valores default -> Inactivo: false e DataCriacao:1899-12-30T00:00:00.

Como alternativa tentei usar um outro método que encontrei:

ProductContext.MotorLE.Base.Clientes.LstClientes()

Mas para minha surpresa cada registo só devolve 4 colunas: Cliente, Fac_Mor, Pais e Nome.

Existe alguma outra maneira eficiente de obter uma lista de clientes com informação exata?

Obrigado,

Daniel.

Faça login para poder traduzir
Web API
Marcado como spam
Criado há 4 anos e 3 semanas danielteixeira
d
danielteixeira Iniciante
Comentários
@danielteixeira a sua questão tem falta de informação o que dificulta a analise por parte da comunudade, complemente a mesma para obter uma resposta valida. Já agora isto é uma extensão da webapi, certo?
4 anos e 3 semanas
sergiosereno
    @sereno tentei elaborar um pouco mais a pergunta. Obrigado.
    4 anos e 2 semanas
    danielteixeira
      2 respostas
      0
      Resposta privada

      Olá Daniel

      Tens duas opções mais amplas porque essas lista apenas disponibilizam valores pré-defenidos de fabrica. Se queres listas com outros dados tens de fazer a tua query.

      Recomendo a leitura da documentação https://v10api.primaverabss.com/html/api/base/ErpBS100.ErpBS.html?q=ConsultaAvancada#ErpBS100_ErpBS_Consulta_System_String_

      // Solução 1 - Mais fora da caixa a para tirar partido dos objetos nativos
      string connectionString = this.PSO.BaseDados.DaConnectionStringNET(this.PSO.BaseDados.DaNomeBDdaEmpresa(this.BSO.Contexto.CodEmp), "Default");
      
      string query = "SELECT Entidade, Data,DataVencimento, TipoDoc, NumDoc, Serie, TotalMerc, TotalIva, TotalDesc,TotalOutros FROM CabecDoc Order by Data asc";
      
      SqlConnection con = new SqlConnection(connectionString);
      SqlDataAdapter da = new SqlDataAdapter(query, con);
      SqlCommandBuilder cb = new SqlCommandBuilder(da);
      DataSet ds = new DataSet();
      
      da.Fill(ds);
      dataGridView1.DataSource = ds.Tables[0];
      
      // Solução 2 - O tradicional e mais recomendado
      StdBELista lista = BSO.ConsultaAvancada(query, 
      	StdBETipos.EnumLocalizacaoCursor.lcCliente, 
      	StdBETipos.EnumTipoCursor.tcForwardOnly, 
      	StdBETipos.EnumLockCursor.lkSoLeitura);
      Faça login para poder traduzir
      Marcado como spam
      Criado há 4 anos e 2 semanas sergiosereno
      sergiosereno Most Valuable Professional
        1
        Resposta privada

        @sereno Muito obrigado, a sua ajuda permitiu-me obter a solução que precisava. Optei pela opção 2 visto ser a mais recomendada.

        Aqui fica o código (C#) utilizado caso alguém tenha o mesmo problema:

        var clientes = ProductContext.MotorLE.ConsultaAvancada("Select * From Clientes", 
        							StdBETipos.EnumLocalizacaoCursor.lcCliente,
        						        StdBETipos.EnumTipoCursor.tcForwardOnly,
        							StdBETipos.EnumLockCursor.lkSoLeitura);
        
        				var clientesResult = new List<Cliente>();
        
        				while (!clientes.NoFim())
        				{
        					clientesResult.Add(new Cliente
        					{
        						Nome = clientes.DaValor<string>("Nome"),
        						CodCliente = clientes.DaValor<string>("Cliente"),
        						Morada = clientes.DaValor<string>("Fac_Mor"),
        						Morada2 = clientes.DaValor<string>("Fac_Mor2"),
        						CodigoPostal = clientes.DaValor<string>("Fac_Cp"),
        						NomeFiscal = clientes.DaValor<string>("Fac_Cp"),
        						Localidade = clientes.DaValor<string>("Fac_Local"),
        						NumContrib = clientes.DaValor<string>("NumContrib"),
        						Telefone = clientes.DaValor<string>("Fac_Tel"),
        						LocalidadeCodigoPostal = clientes.DaValor<string>("Fac_Cploc"),
        						EnderecoWeb = clientes.DaValor<string>("EnderecoWeb"),
        						Ativo = !clientes.DaValor<bool>("ClienteAnulado"),
        						DataCriacao = clientes.DaValor<DateTime>("DataCriacao").ToShortDateString(),
        						Pais = clientes.DaValor<string>("Pais")
        					});
        					clientes.Seguinte();
        				}

         

        Faça login para poder traduzir
        Marcado como spam
        Criado há 4 anos e 2 semanas danielteixeira
        d
        danielteixeira Iniciante