♥ 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. Marcado como spam |
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? @sereno tentei elaborar um pouco mais a pergunta. Obrigado. |
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); Marcado como spam | |
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(); }
Marcado como spam |