Hace poco tuve necesidad de hacer uso de los web services, estuve investigando un poco en el foro y hay alguna informacion dispersa.
Les paso un ejemplo que me funciona y espero les sea util y puedan complementarlo con sus aportes.
Esta es la secuencia:
1. Ejecuto un web service que me devuelve un XML
Para el ejemplo uso este web service que me devuelve informacion de un RUC (Peru)
http://www.sunat.gob.pe/w/wapS01Alias?ruc=20102295961
2. Guardo el XML en un archivo texto, para esto uso una funcion que alguien compartió en otro topico
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=27290&p=151734&hilit=URLDownLoad#p151734
3. Extraigo la informacion que necesito de ese archivo.
Aqui esta el codigo.
- Code: Select all Expand view
Function BuscaInfoRUC(cRuc)
local r, i, s, cUrl := "http://www.sunat.gob.pe/w/wapS01Alias?ruc="+cRuc
local cF := "test.txt", nPos
local cN, cD, xL := ''
if empty(cRuc)
MsgStop("no ha ingresado RUC valido para consultar","Error")
else
URLDownLoad(cUrl, cF)
if file(cF)
r:=MemoRead(cF)
if at('El numero Ruc ingresado es invalido',r) > 0
Msgwait("El numero Ruc ingresado es invalido o no existe",,1)
else
Do while .t.
i:=At( CRLF, r )
If i=0
exit
Endif
s:=Left( r, i-1)
r:=Subs( r, i+2)
If (nP := at('Número Ruc.', s ) ) > 0
cN := substr(s, nP+16)
If (nP := at(trim(cRuc), cN ) ) > 0
cN := substr(cN, nP+14)
cN := strtran(cN,"<br/>","")
cN := strtran(cN,"</small>","")
endif
MsgInfo(cN) // muestro la informacion que me interesa
exit
Endif
Enddo
endif
endif
endif
return nil
function URLDownLoad(cUrl, cSaveAs)
hLib = LOADLIBRARY( "urlmon.dll")
if !URLDownloadToFile( 0, cUrl, cSaveAs, 0, 0 ) == 0
retu.f.
endif
FREELIBRARY( hLib )
retu.t.
DLL32 FUNCTION URLDownloadToFile(pCaller AS LONG,szURL AS STRING, szFileName AS STRING, dwReserved AS LONG, lpfnCB AS LONG);
AS LONG PASCAL;
FROM "URLDownloadToFileA";
LIB hlib
Espero les sea de utilidad
Si alguien tiene alguna mejor forma de hacerlo, que lo comparta.
Saludos
Ralph