Webservices
Posted: Tue Mar 29, 2016 4:18 pm
Estimados,
Estoy trabajando con webservices y tengo la siguiente inquietud al momento de utilizar los metodos POST y GET.
El web service esta alojado en esta URL
http://ws.medicamentosrothlin.com.ar/?f=ws
Para probar el servicio y depurar consultas se puede usar esta pagina:
http://ws.medicamentosrothlin.com.ar/test
El servicio espera dos parámetros, uno GET, siempre es el mismo f=ws, de modo que hay que llamar a la url de esta manera http://ws.medicamentosrothlin.com.ar/?f=ws
y el otro parámetro es POST, mensaje. El mensaje se envía en formato xml de acuerdo a la siguiente especificación:
EJEMPLO DE MENSAJE DE LLAMADA InteraccionFarmacologica (se puede colocar en la pagina de pruebas)
<?xml version="1.0" encoding="utf-8"?>
<Interdrugs>
<Login>
<Cliente>COLFARMRN</Cliente>
<Terminal>SISTEMAS</Terminal>
<Codigo>RNFM00001</Codigo>
<Clave>ZZZZ</Clave>
</Login>
<Transaccion>
<!--Se establece la funcion InteraccionFarmacologica para consultar interacciones entre medicamentos-->
<Operacion>InteraccionFarmacologica</Operacion>
<!--Se indica la version de la funcion que se esta llamando-->
<Version>1.0.1</Version>
<!--Define el formato de salida-->
<Salida>xml</Salida>
</Transaccion>
<Mensaje>
<Parametros>
<Diccionario>AlfaBeta</Diccionario>
<NRO_REG>35142</NRO_REG><!--IBUPIRAC 600 MG-->
<NRO_REG>12907</NRO_REG><!--ENALAPRIL RICHET-->
</Parametros>
</Mensaje>
</Interdrugs>
EJEMPLO XML de respuesta
<?xml version="1.0" encoding="utf-8"?>
<Interdrugs>
<Login>
<Cliente>COLFARMRN</Cliente>
<Terminal>SISTEMAS</Terminal>
<Codigo>RNFM00001</Codigo>
<Clave>ZZZZ</Clave>
<Ok>1</Ok>
</Login>
<Transaccion>
<!--Se establece la funcion InteraccionFarmacologica para consultar interacciones entre medicamentos-->
<Operacion>InteraccionFarmacologica</Operacion>
<!--Se indica la version de la funcion que se esta llamando-->
<Version>1.0.1</Version>
<!--Define el formato de salida-->
<Salida>xml</Salida>
</Transaccion>
<Mensaje>
<Parametros>
<Diccionario>AlfaBeta</Diccionario>
<NRO_REG>35142</NRO_REG><!--IBUPIRAC 600 MG-->
<NRO_REG>12907</NRO_REG><!--ENALAPRIL RICHET-->
</Parametros>
</Mensaje>
<Log/>
<MensajeRespuesta>
<Transaccion>
<!--Se indica la fecha y la hora en la que se proceso la consulta-->
<FechaHora>04/03/16 01:03:53</FechaHora>
<!--Se informa un identificador de la consulta para un posible seguimiento de errores-->
<Id>2645</Id>
</Transaccion>
<!-- En caso de generarse algun error en la consulta el mismo es devuelto de la siguiente manera:
<Errores>
<Error>
<Codigo>1001</Codigo>
<Descripcion>Mensaje xml mal formado. Opening and ending tag mismatch: Parametrosf line 18 and Parametros
</Descripcion>
</Error>
</Errores>
-->
<!--Respuesta de la funcion llamada (los elementos de salida pueden variar de acuerdo a la consulta,
eso se ira indicando a medida que las funciones se implementen)-->
<InteraccionFarmacologica>
<Observaciones>Interacciones encontradas: 1</Observaciones>
<Item>
<Nombre>Interaccion</Nombre>
<Valor>1</Valor>
<Droga1>IBUPROFENO</Droga1>
<Droga2>ENALAPRIL</Droga2>
<Medicamento1>IBUPIRAC 600 MG</Medicamento1>
<Medicamento2>ENALAPRIL RICHET</Medicamento2>
<Descripcion>
Los AINE pueden disminuir el efecto antihipertensivo y natriurético de los IECA,
el mecanismo puede implicar la atenuación de la efectividad de los agentes antihipertensivos
secundario a la interferencia con la producción de prostaglandinas vasodilatadoras y natriuréticas
que son estimuladas por los agentes antihipertensivos. Si bien no se conocen interacciones
farmacocinéticas significativas entre los AINE y los inhibidores de la ECA, la combinación
de los AINE y los inhibidores de la ECA pueden producir efectos secundarios tales como
bradicardia marcada debido a hiperpotasemia. Se debe monitorear la eficacia antihipertensiva
en especial en la insuficiencia renal, en pacientes ancianos, en pacientes deshidratados.
Cuando el uso concomitante es necesario, monitorear la eficacia antihipertensiva de los IECA
y la función renal periódicamente para detectar signos de insuficiencia renal.
</Descripcion>
</Item>
</InteraccionFarmacologica>
</MensajeRespuesta>
</Interdrugs>
/////////////////////////////////////////////////////////////////////////////////////////////////////
ESTE ES UN EJEMPLO DE MI FUNCION CONSULTAR() QUE NO OBTIENE LOS VALORES DE RESULTADO COMO EN EL EJEMPLO
/////////////////////////////////////////////////////////////////////////////////////////////////////
//.......................
FUNCTION Consultar()
//......................
local odoc,ohttp,cUrl,cXml
//..crea objeto XML
TRY
oHttp:=createobject( 'Microsoft.XMLHTTP')
CATCH
try
oHttp:=createobject( 'Microsoft.XMLHTTP')
catch
Alert('Error en la creacion del objeto Microsoft.XMLHTTP : ' + Ole2TxtError())
return .F.
end
END
//.. Creo Objeto XML
TRY
oDoc := CreateObject( 'MSXML2.DOMDocument' )
CATCH
try
oDoc := CreateObject( 'MSXML2.DOMDocument' )
catch
Alert('Error en la creacion del objeto MSXML2.DOMDocument : ' + Ole2TxtError())
return .F.
end
END
cUrl:="http://ws.medicamentosrothlin.com.ar/?f=ws"
cXml:=''
cXml+='<?xml version="1.0" encoding="utf-8"?>' + CRLF
cXml+='<Interdrugs>' + CRLF
cXml+='<Login>' + CRLF
cXml+=' <Cliente>COLFARMRN</Cliente>' + CRLF
cXml+=' <Terminal>SISTEMAS</Terminal>' + CRLF
cXml+=' <Codigo>RNFM00001</Codigo>' + CRLF
cXml+=' <Clave>ZZZZ</Clave>' + CRLF
cXml+='</Login>' + CRLF
cXml+=' <Transaccion>' + CRLF
cXml+=' <Operacion>InteraccionFarmacologica</Operacion>' + CRLF
cXml+=' <Version>1.0.1</Version>' + CRLF
cXml+=' <Salida>xml</Salida>' + CRLF
cXml+=' </Transaccion>' + CRLF
cXml+=' <Mensaje>' + CRLF
cXml+=' <Parametros>' + CRLF
cXml+=' <Diccionario>AlfaBeta</Diccionario>' + CRLF
cXml+=' <NRO_REG>35142</NRO_REG>' + CRLF
cXml+=' <NRO_REG>12907</NRO_REG>' + CRLF
cXml+=' </Parametros>' + CRLF
cXml+=' </Mensaje>' + CRLF
cXml+='</Interdrugs>' + CRLF
PREGUNTA : Como debería hacer para que GET y POST funcionen correctamente y obtener una respuesta del webservice como la del ejemplo...??
///......................
oHttp:Open( 'POST' , cUrl , .F. )
oDoc:LoadXML( cXml ) //carga el documento a xml
oHttp:send(oDoc:xml) // envio xml
cRespuesta:= oHttp:responseText
? cRespuesta
//.....................
retu .t.
Muchas gracias,
Saludos Mariano
Estoy trabajando con webservices y tengo la siguiente inquietud al momento de utilizar los metodos POST y GET.
El web service esta alojado en esta URL
http://ws.medicamentosrothlin.com.ar/?f=ws
Para probar el servicio y depurar consultas se puede usar esta pagina:
http://ws.medicamentosrothlin.com.ar/test
El servicio espera dos parámetros, uno GET, siempre es el mismo f=ws, de modo que hay que llamar a la url de esta manera http://ws.medicamentosrothlin.com.ar/?f=ws
y el otro parámetro es POST, mensaje. El mensaje se envía en formato xml de acuerdo a la siguiente especificación:
EJEMPLO DE MENSAJE DE LLAMADA InteraccionFarmacologica (se puede colocar en la pagina de pruebas)
<?xml version="1.0" encoding="utf-8"?>
<Interdrugs>
<Login>
<Cliente>COLFARMRN</Cliente>
<Terminal>SISTEMAS</Terminal>
<Codigo>RNFM00001</Codigo>
<Clave>ZZZZ</Clave>
</Login>
<Transaccion>
<!--Se establece la funcion InteraccionFarmacologica para consultar interacciones entre medicamentos-->
<Operacion>InteraccionFarmacologica</Operacion>
<!--Se indica la version de la funcion que se esta llamando-->
<Version>1.0.1</Version>
<!--Define el formato de salida-->
<Salida>xml</Salida>
</Transaccion>
<Mensaje>
<Parametros>
<Diccionario>AlfaBeta</Diccionario>
<NRO_REG>35142</NRO_REG><!--IBUPIRAC 600 MG-->
<NRO_REG>12907</NRO_REG><!--ENALAPRIL RICHET-->
</Parametros>
</Mensaje>
</Interdrugs>
EJEMPLO XML de respuesta
<?xml version="1.0" encoding="utf-8"?>
<Interdrugs>
<Login>
<Cliente>COLFARMRN</Cliente>
<Terminal>SISTEMAS</Terminal>
<Codigo>RNFM00001</Codigo>
<Clave>ZZZZ</Clave>
<Ok>1</Ok>
</Login>
<Transaccion>
<!--Se establece la funcion InteraccionFarmacologica para consultar interacciones entre medicamentos-->
<Operacion>InteraccionFarmacologica</Operacion>
<!--Se indica la version de la funcion que se esta llamando-->
<Version>1.0.1</Version>
<!--Define el formato de salida-->
<Salida>xml</Salida>
</Transaccion>
<Mensaje>
<Parametros>
<Diccionario>AlfaBeta</Diccionario>
<NRO_REG>35142</NRO_REG><!--IBUPIRAC 600 MG-->
<NRO_REG>12907</NRO_REG><!--ENALAPRIL RICHET-->
</Parametros>
</Mensaje>
<Log/>
<MensajeRespuesta>
<Transaccion>
<!--Se indica la fecha y la hora en la que se proceso la consulta-->
<FechaHora>04/03/16 01:03:53</FechaHora>
<!--Se informa un identificador de la consulta para un posible seguimiento de errores-->
<Id>2645</Id>
</Transaccion>
<!-- En caso de generarse algun error en la consulta el mismo es devuelto de la siguiente manera:
<Errores>
<Error>
<Codigo>1001</Codigo>
<Descripcion>Mensaje xml mal formado. Opening and ending tag mismatch: Parametrosf line 18 and Parametros
</Descripcion>
</Error>
</Errores>
-->
<!--Respuesta de la funcion llamada (los elementos de salida pueden variar de acuerdo a la consulta,
eso se ira indicando a medida que las funciones se implementen)-->
<InteraccionFarmacologica>
<Observaciones>Interacciones encontradas: 1</Observaciones>
<Item>
<Nombre>Interaccion</Nombre>
<Valor>1</Valor>
<Droga1>IBUPROFENO</Droga1>
<Droga2>ENALAPRIL</Droga2>
<Medicamento1>IBUPIRAC 600 MG</Medicamento1>
<Medicamento2>ENALAPRIL RICHET</Medicamento2>
<Descripcion>
Los AINE pueden disminuir el efecto antihipertensivo y natriurético de los IECA,
el mecanismo puede implicar la atenuación de la efectividad de los agentes antihipertensivos
secundario a la interferencia con la producción de prostaglandinas vasodilatadoras y natriuréticas
que son estimuladas por los agentes antihipertensivos. Si bien no se conocen interacciones
farmacocinéticas significativas entre los AINE y los inhibidores de la ECA, la combinación
de los AINE y los inhibidores de la ECA pueden producir efectos secundarios tales como
bradicardia marcada debido a hiperpotasemia. Se debe monitorear la eficacia antihipertensiva
en especial en la insuficiencia renal, en pacientes ancianos, en pacientes deshidratados.
Cuando el uso concomitante es necesario, monitorear la eficacia antihipertensiva de los IECA
y la función renal periódicamente para detectar signos de insuficiencia renal.
</Descripcion>
</Item>
</InteraccionFarmacologica>
</MensajeRespuesta>
</Interdrugs>
/////////////////////////////////////////////////////////////////////////////////////////////////////
ESTE ES UN EJEMPLO DE MI FUNCION CONSULTAR() QUE NO OBTIENE LOS VALORES DE RESULTADO COMO EN EL EJEMPLO
/////////////////////////////////////////////////////////////////////////////////////////////////////
//.......................
FUNCTION Consultar()
//......................
local odoc,ohttp,cUrl,cXml
//..crea objeto XML
TRY
oHttp:=createobject( 'Microsoft.XMLHTTP')
CATCH
try
oHttp:=createobject( 'Microsoft.XMLHTTP')
catch
Alert('Error en la creacion del objeto Microsoft.XMLHTTP : ' + Ole2TxtError())
return .F.
end
END
//.. Creo Objeto XML
TRY
oDoc := CreateObject( 'MSXML2.DOMDocument' )
CATCH
try
oDoc := CreateObject( 'MSXML2.DOMDocument' )
catch
Alert('Error en la creacion del objeto MSXML2.DOMDocument : ' + Ole2TxtError())
return .F.
end
END
cUrl:="http://ws.medicamentosrothlin.com.ar/?f=ws"
cXml:=''
cXml+='<?xml version="1.0" encoding="utf-8"?>' + CRLF
cXml+='<Interdrugs>' + CRLF
cXml+='<Login>' + CRLF
cXml+=' <Cliente>COLFARMRN</Cliente>' + CRLF
cXml+=' <Terminal>SISTEMAS</Terminal>' + CRLF
cXml+=' <Codigo>RNFM00001</Codigo>' + CRLF
cXml+=' <Clave>ZZZZ</Clave>' + CRLF
cXml+='</Login>' + CRLF
cXml+=' <Transaccion>' + CRLF
cXml+=' <Operacion>InteraccionFarmacologica</Operacion>' + CRLF
cXml+=' <Version>1.0.1</Version>' + CRLF
cXml+=' <Salida>xml</Salida>' + CRLF
cXml+=' </Transaccion>' + CRLF
cXml+=' <Mensaje>' + CRLF
cXml+=' <Parametros>' + CRLF
cXml+=' <Diccionario>AlfaBeta</Diccionario>' + CRLF
cXml+=' <NRO_REG>35142</NRO_REG>' + CRLF
cXml+=' <NRO_REG>12907</NRO_REG>' + CRLF
cXml+=' </Parametros>' + CRLF
cXml+=' </Mensaje>' + CRLF
cXml+='</Interdrugs>' + CRLF
PREGUNTA : Como debería hacer para que GET y POST funcionen correctamente y obtener una respuesta del webservice como la del ejemplo...??
///......................
oHttp:Open( 'POST' , cUrl , .F. )
oDoc:LoadXML( cXml ) //carga el documento a xml
oHttp:send(oDoc:xml) // envio xml
cRespuesta:= oHttp:responseText
? cRespuesta
//.....................
retu .t.
Muchas gracias,
Saludos Mariano