PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Uso de webservice banco central
Versão:
12.1.8
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário THYAGO_SC THYAGO_SC em 26/12/2018, 09:48 h
Local: SP  Registro: 19/12/2018  Postagens: 7
Gerei o WSDL e estou tentando consumir o método getValor webservice do banco central, que recebe como parâmetro o código da moeda a ser consultado e a data da cotação, no entanto o método retorna sempre 0.

Segue minha função

user function DolDiaAnt()          
     Local oWs := WSFachadaWSSGSService():NEW()
     Local iResultado
     
     oWs:getValor(1,"20/12/2018")
          
     iResultado := oWs:ngetValorReturn      
Return

Fiz o teste pelo SOAP UI e retorna o valor correto.

Tentei utilizar o método getUltimoValorXML, que retorna um XML e esse funcionou.


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário VRTN VRTN em 26/12/2018, 11:58 h
Local: MG  Registro: 09/11/2009  Postagens: 176
Em Adpvl, a passagem de parâmetros para o WebService normalmente não funciona assim:

oWs:getValor(1,"20/12/2018")

Provavelmente você terá algo parecido com isso:

// Atribuição
oWs:nCodigoMoeda := 1
oWs:cDataCotacao := "10/12/2018"

// Chamada do Método
oWs:getValor()

Dê uma olhada no client gerado para confirmar os nomes do parâmetros.


Everton Alves

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário THYAGO_SC THYAGO_SC em 26/12/2018, 13:00 h
Local: SP  Registro: 19/12/2018  Postagens: 7
Opa, obrigado pelo retorno.

Eu tentei do modo que você falou, mas o código continua retornando zero.

Esse é o método do webservice

WSMETHOD getValor WSSEND nin0,cin1 WSRECEIVE ngetValorReturn WSCLIENT WSFachadaWSSGSService
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

cSoap += ‘
cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL, .F.,.F.)
cSoap += WSSoapValue("in1", ::cin1, cin1 , "string", .T. , .T. , 0 , NIL, .F.,.F.)
cSoap += "
"

oXmlRet := SvcSoapCall(     Self,cSoap,;
     "",;
     "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
     "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")

::Init()
::ngetValorReturn    := WSAdvValue( oXmlRet,"_GETVALORRETURN","decimal",NIL,NIL,NIL,"N",NIL,NIL)

END WSMETHOD

oXmlRet := NIL
Return .T.

Eu fiz a atribuição da seguinte forma

oWs:nin0 := 1 //atribuindo a moeda
oWs:cin1 := "20/12/2018" //atribuindo a data
oWs:getValor() //chamando o método
MsgAlert(oWs:ngetValorReturn) //retorna 0


Eu fiz um teste com o método getUltimoValorXML, passando o parâmetro entre os parênteses a moeda e deu certo. Ele retorna um XML com a cotação.

oWs:getUltimoValorXML(1)//Funciona, retorna um xml com o valor da cotação

Uma observação: tanto passando o parâmetro entre os parênteses ou fazendo a atribuição como você sugeriu, os valores são passados para a função do webservice. Pude constatar isso debugando. Ele só não retorna valor algum na resposta.




Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário MANOEL.FS MANOEL.FS em 26/12/2018, 17:07 h
Local: SP  Registro: 01/05/2018  Postagens: 1
Boa Tarde THYAGO_SC,

Já tentou passar a data sem "" ?

Att.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário THYAGO_SC THYAGO_SC em 27/12/2018, 07:45 h
Local: SP  Registro: 19/12/2018  Postagens: 7
Olá MANOEL.FS.

Já tentei passar a data sem "", porém obtive o mesmo resultado.

Eu estou utilizando o WS gerado pelo TDS. Debugando o método getValor no WS observei que ele armazena o resultado da consulta ao webservice em um array variável chamado oXmlRet.

Em nenhum lugar dentro desse array ele traz o valor da cotação. Será que o problema não seria nesse método gerado automaticamente pelo TDS? É possível eu mesmo escrever esse método?

---------------------------------

WSMETHOD getValor WSSEND nin0,cin1 WSRECEIVE ngetValorReturn WSCLIENT WSFachadaWSSGSService
Local cSoap := "" , oXmlRet

BEGIN WSMETHOD

cSoap += ‘
cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL, .F.,.F.)
cSoap += WSSoapValue("in1", ::cin1, cin1 , "string", .T. , .T. , 0 , NIL, .F.,.F.)
cSoap += "
"

//Coloquei um breakpoint aqui e inspecionando o array oXmlRet,

oXmlRet := SvcSoapCall(     Self,cSoap,;
     "",;
     "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
     "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")



::Init()
::ngetValorReturn    := WSAdvValue( oXmlRet,"_GETVALORRETURN","decimal",NIL,NIL,NIL,"N",NIL,NIL)

END WSMETHOD

------------------------------

Já no método getUltimoValor, que recebe como parâmetro apenas a moeda, debugando inspecionando o oXmlReturn eu obtenho isso:

Type=Character
Value = "


     Taxa de câmbio - Livre - Dólar americano (venda) - diário
     1
     D
     u.m.c./US$
     
          26
          12
          2018
     

     3,9258

"

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal