Como imlementar SOAP en FWH

Post Reply
Vladimir Zorrilla
Posts: 225
Joined: Tue Feb 28, 2006 4:25 pm
Location: PERU

Como imlementar SOAP en FWH

Post by Vladimir Zorrilla »

Amigos

Necesito implemetar un cliente SOAP con FWH en VFP esta todo listo en
FWH como podria hacer

Alguien pueda darme una AYUDA

En este link esta lo que necesito hacer

http://www.aduanet.gob.pe/aduanas/opera ... rvices.htm

En VFP ya lo tienen listo

Web Services desde Visual Fox Pro

También se adiciona un programa que invoca a los Web Services desde un cliente hecho en Visual Fox Pro.

Este ejemplo lo pueden encontrar también en la siguiente ruta http://www.aduanet.gob.pe/js/app/WebSer ... FoxPro.zip junto con la librería FoxCrypto.fll. La libreria FoxCrypto.fll contiene la función que codifica y decodifica en base 64., el cual permite el trabajo tipo de datos bytes.

Prueba.prg

SET LIBRARY TO FoxCrypto.FLL

PROCEDURE psEnviArchivo

***********************

*envia archivo

PARAMETER pArc

tcInFile = IIF(EMPTY(pArc),"C:\desaprg\prueba\CDDEmbargoM4.htm", pArc)

lcInFile = FILETOSTR(tcInFile)

lcInFile64 = codifica(lcInFile)

***

doc = CreateObject("MSXML2.DOMDocument")

http = CreateObject("MSXML2.XMLHTTP")

http.Open("POST", "http://desweb1:8001/portafolio/portafolio", .F.)

http.SetRequestHeader("SOAPAction", "enviaArchivoWebService")

http.SetRequestHeader("Content-Type", "text/xml")

**carga el archivo

xml = fnArmaCadXml("A", "0091", "XXXX", "142", lcInFile64, "CDDEmbargoM5.htm")

doc.LoadXML(xml)

http.Send(doc.xml)

res = CreateObject("MSXML2.DOMDocument")

response = http.responseText

*?response

res.LoadXML(http.responseText)

txt = res.selectSingleNode("//NroEnvioGenerado") &&Return

IF nvl(txt.text,' ') = " " THEN

TXT="ERROR EN WS "

ENDIF

wait window txt.text NOWAIT

*? txt.text

release doc

release http

release res

release response

RETURN

FUNCTION decodifica

PARAMETER pCadena

LOCAL lcBinary, lnHandle, lnSize

lnHandle = Base64DecoderCreate()

IF lnHandle > 0

Base64DecoderPut(lnHandle, pCadena)

Base64DecoderClose(lnHandle)

lnSize = Base64DecoderMaxRetrievable(lnHandle)

lcBinary = Base64DecoderGet(lnHandle, lnSize)

Base64DecoderDestroy(lnHandle)

ELSE

WAIT WIND "ERROR al instanciar"

RETURN .F.

ENDIF

RETURN lcBinary



FUNCTION codifica

PARAMETER pCadena

LOCAL lcBase64, lcInFile, lnHandle, lnSize

lnHandle = Base64EncoderCreate( .T. )

IF lnHandle > 0

Base64EncoderPut(lnHandle, pCadena)

Base64EncoderClose(lnHandle)

lnSize = Base64EncoderMaxRetrievable(lnHandle)

lcBase64 = Base64EncoderGet(lnHandle, lnSize)

Base64EncoderDestroy(lnHandle)

ELSE

WAIT WIND "ERROR al instanciar"

RETURN .F.

ENDIF

RETURN lcBase64



FUNCTION fnArmaCadXml

*********************

PARAMETER pTOpe, pOpe, pClave, pAdu, pArch, pNomArch

strxml = [<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"] + CHR(13)

strxml = strxml + [ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"] + CHR(13)

strxml = strxml + [ xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"] + CHR(13)

strxml = strxml + [ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">] + CHR(13)

strxml = strxml + [ <env:Header>] + CHR(13)

strxml = strxml + [ </env:Header>] + CHR(13)

strxml = strxml + [ <env:Body>] + CHR(13)

strxml = strxml + [ <m:enviaArchivoWebService xmlns:m="http://www.bea.com/education/webservice ... /javaclass"] + CHR(13)

strxml = strxml + [ env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">] + CHR(13)

strxml = strxml + [ <toperador xsi:type="xsd:string">] + pTOpe + [</toperador>] + CHR(13)

strxml = strxml + [ <operador xsi:type="xsd:string">] + pOpe + [</operador>] + CHR(13)

strxml = strxml + [ <clave xsi:type="xsd:string">] + pClave + [</clave>] + CHR(13)

strxml = strxml + [ <aduana xsi:type="xsd:string">] + pAdu + [</aduana>] + CHR(13)

strxml = strxml + [ <archivoEnvioByte xsi:type="xsd:base64Binary">] + pArch + [</archivoEnvioByte>] + CHR(13)

strxml = strxml + [ <nombreArchivo xsi:type="xsd:string">] + pNomArch+ [</nombreArchivo>] + CHR(13)

strxml = strxml + [ </m:enviaArchivoWebService>] + CHR(13)

strxml = strxml + [ </env:Body>] + CHR(13)

strxml = strxml + [</


Gracias por la Ayuda

Vladimir Zorrilla
cps_net@hotmail.com
ME INTERESA FW Y XHB POR SER OPEN SOURCE
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Vladimir,

Lo vamos a revisar y te comentamos.
regards, saludos

Antonio Linares
www.fivetechsoft.com
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Estoy mirando que eso utiliza OLE, simplemente con xHarbour puedes hacer:

Code: Select all

Function psEnviArchivo(pArc)

***********************
*envia archivo

tcInFile = IIF(EMPTY(pArc),"C:\desaprg\prueba\CDDEmbargoM4.htm", pArc)

***

doc = TOleAuto():New("MSXML2.DOMDocument")
http = TOleAuto():New("MSXML2.XMLHTTP")

http:Open("POST", "http://desweb1:8001/portafolio/portafolio", .F.)
http:SetRequestHeader("SOAPAction", "enviaArchivoWebService")
http:SetRequestHeader("Content-Type", "text/xml")

**carga el archivo
xml := fnArmaCadXml("A", "0091", "XXXX", "142", lcInFile64, "CDDEmbargoM5.htm")

doc:LoadXML(xml)
http:Send(doc.xml)

res := TOleAuto():New("MSXML2.DOMDocument")

response = http:responseText

res:LoadXML(http:responseText)

txt = res:selectSingleNode("//NroEnvioGenerado") &&Return

IF nvl(txt.text,' ') = " " THEN

TXT="ERROR EN WS "

ENDIF

RETURN
Saludos
R.F.
Post Reply