SET TALK OFF
SET SAFETY off
lcUser="test"
lcClave="xyz"
WAIT WINDOW "Aguarde un momento, conectandose al SERVIDOR ONLINE RECUPERANDO RESUMEN" nowait
LOCAL loConsultasControllerPort AS "XML Web Service"
* LOCAL loConsultasControllerPort AS "MSSOAP.SoapClient30"
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
LOCAL loException, lcErrorMsg, loWSHandler
TRY
loWSHandler = NEWOBJECT("WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx")
* Call your XML Web service here. ex: leResult = loConsultasControllerPort.SomeMethod()
leResult = loConsultasControllerPort.actionGetComprasPendientes(lcUser, lcClave)
If Val(Left(leResult,4))>0 && exitoso el BLOQUEO
lcLargo=LEN(leResult)
lcveces=lcLargo/65
lcCaracter1="|"
lcCaracter2="&"
lcConteo=1
STORE "" TO code1,code2,code3,code4,code5,code6,Code7,lcCampo
WAIT WINDOW "Recuperando Datos " nowait
* susp
FOR x=1 TO lcLargo
* WAIT WINDOW "Proceso numero "+STR(x) TIMEOUT 1
lcTexto=SUBSTR(leResult,x,1)
IF lcTexto#lcCaracter2 AND lcTexto#lcCaracter1 && si es & no lo suma a la variable
lcCampo=lcCampo+lcTexto
ENDIF
IF lcTexto=lcCaracter2 && Fin de Campo
DO Case
CASE lcConteo=1 && codigoOrde
code1=lcCampo
lcConteo=2
m.CodigoOrde=code1
CASE lcConteo=2 && NumeroOrde
code2=lcCampo
lcConteo=3
m.NumeroOrde=Code2
CASE lcConteo=3 &&Total
code3=lcCampo
lcConteo=4
m.Total=VAL(Code3)
CASE lcConteo=4 && SubTotal
code4=lcCampo
lcConteo=5
m.Subtotal=VAL(code4)
CASE lcConteo=5 && Estado
code5=lcCampo
lcConteo=6
m.Estado=Code5
CASE lcConteo=6 && Impuesto
code6=lcCampo
lcConteo=7
m.Descuento=VAL(code6)
CASE lcConteo=7 && Fecha
code7=lcCampo
lcConteo=8
m.Fecha=code7
EndCase
lcCampo=""
ENDIF
IF lcConteo=8 OR lcTexto=lcCaracter1
m.Fecha=lcCampo
WAIT WINDOW "Extrayendo datos RESUMEN FASE 2" NOWAIT
INSERT INTO DaTos FROM Memvar
SELECT Datos
SCATTER MEMVAR blank
ENDIF
IF lcTexto=lcCaracter1 && Fin de linea
STORE "" TO code1,code2,code3,code4,code5,code6,Code7,lcCampo
lcConteo=1
* Exit
ENDIF
ENDFOR
SELECT datos
GO top
Endif
CATCH TO loException
lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
DO CASE
CASE VARTYPE(loConsultasControllerPort)#"O"
* Handle SOAP error connecting to web service
CASE !EMPTY(loConsultasControllerPort.FaultCode)
* Handle SOAP error calling method
lcErrorMsg=lcErrorMsg+CHR(13)+loConsultasControllerPort.Detail
OTHERWISE
* Handle other error
ENDCASE
* Use for debugging purposes
MESSAGEBOX(lcErrorMsg,0,"SPC_SEGUNDA_FASE_RESUMEN",1500)
FINALLY
ENDTRY
Esa rutina de arriba utilizo con un Web Services de un cliente, el SOAP me da a mi la seguridad de que funciona y me manda los datos. Con Fox utilizo esto y los datos que me manda los voy recuperando caracter a caracter, hasta tener el campo del dato. Cuando termina de "desmembrar" lo recuperado lo grabo en mi tabla y listo.
Espero te sirva
Saludos