Ver la Versión Completa : [Sintaxis] HttpRequest en RM
Fito
22 de marzo de 2022, 14:34
Hola Amigos:
Estoy usando HTTPRequest en powercobol, está andando bien. Pero tengo un colega que tiene que hacer algo similar, pero el trabaja con RMCOBOL.
Cómo se puede instanciar el objeto en RM para utilizarlo?
Saludos
Fito...
JCantero
23 de marzo de 2022, 00:29
Cómo se puede instanciar el objeto en RM para utilizarlo?
Te refieres a llamar a un servicio web desde RM/COBOL ?
Fito
23 de marzo de 2022, 15:37
Yesssssss
JCantero
23 de marzo de 2022, 17:24
Manual en microfocus https://community.microfocus.com/cfs-file/__key/telligent-evolution-components-attachments/00-282-01-00-00-51-74-12/rmnet.pdf
Yo utilizo llamadas a servicios web desde RM/Cobol.
Debe utilizar una versión avanzada. Yo utilizo la 12+.
No recuerdo desde que versión contiene esta caracteristica pero no creo que la tengan la anterior a la 11.
Para comenzar, en la carpeta donde está instalado el runtime y el SDK de desarrollo hay un manual ( si es version 11 cambiar 12 por 11, etc)
C:\Program Files (x86)\Liant\RMCOBOLv12\RMNet\rmnet.pdf
y una DLL
C:\Program Files (x86)\Liant\RMCOBOLv12\RMNet\rmnet.dll
y una carpeta de ejemplos de uso
C:\Program Files (x86)\Liant\RMCOBOLv12\RMNet\samples
Si no se tiene esa carpeta C:\Program Files (x86)\Liant\RMCOBOLv12\RMNet lo normal es que la version que se tenga instalada no disponga de esta caracteristica.
Y en linux, yo tambien lo tengo funcionando, esta todo en la carpeta /usr/rmcobol/RMNet (aqui el objeto que contiene esta caracteristica es librmnet.so)
Cuando se lanza el programa hay que hacerlo con el .DLL o con .so si es linux
Hago una pequeña introducción de lo que hay que hacer para comenzar: ( despues ya vamos hablando )
IDENTIFICATION DIVISION.
environment division.
....................................mas cosas
working-storage section.
copy "lixmlall.cpy".
01 request-payload usage pointer.
01 response-payload usage pointer.
01 request-payloadx pic x(6000).
01 response-payloadx PIC X(2000).
01 response-status pic 9(3) value zero.
01 response-len pic s9(4).
01 Desired-SOAP-Action pic x(150).
01 Post-Address pic x(100).
78 Content-Type value "text/xml; charset=utf-8".
--------------------------------mas cosas
PROCEDURE DIVISION.
.................................mas cosas
XML INITIALIZE.
call "NetInit"
giving
response-status.
set request-payload to address of request-payloadx
set response-payload to address of response-payloadx
.................................mas cosas
XML GET TEXT
request-payload
nombre-xml.
.................................mas cosas
if not XML-OK go to z.
if not es-unix then
move 1 to j
perform varying i from 1 by 1 until
desired-soap-action(i:) = ' '
if desired-soap-action(i:1) = '/' then
move i to j
end-if
end-perform
display 'Servicio web :' line 24 position 1 erase eol
display desired-soap-action(j:50) line 24 position 16
display '*** espere ***' line 24 position 65
end-if
.................................mas cosas
call "HttpPost"
using
Post-Address
Content-Type
request-payload
response-payload
Desired-SOAP-Action
giving
response-status.
.................................mas cosas
XML PUT TEXT
response-payload
nombre-xml1.
.................................mas cosas
call "NetCleanup".
.................................mas cosas
Kuk
23 de marzo de 2022, 17:35
@JCantero, qué flipada macho :flipa: ni EXEC ni leches, una sintaxis totalmente fuera de las reglas de Cobol, vamos... Pero lo importante es que se puede hacer.
Deduzco que no se puede usar OCX en RM ¿? (claramente no he utilizado nunca RM)
JCantero
23 de marzo de 2022, 17:39
Ejemplo tipico de temperatura que aporta rmcobol ( no se si funcionará en la actualidad )
identification division.
program-id. TempConv.
data division.
working-storage section.
01 Fahrenheit-To-Celsius.
02 Fahrenheit pic x(3) value zeros.
88 is-quit value spaces.
01 Fahrenheit-To-Celsius-Response.
02 Fahrenheit-To-Celsius-Result pic X(20).
01 request-payload usage pointer.
01 response-payload usage pointer.
01 response-status pic 9(3) value zero.
01 response-len pic s9(4).
01 a-single-char pic x.
copy "lixmlall.cpy".
78 Desired-SOAP-Action value 'SOAPAction' & x"00" &
'"http://tempuri.org/FahrenheitToCelsius"' & x"00".
78 Post-Address value
"http://www.w3schools.com/webservices/tempconvert.asmx".
78 Content-Type value "text/xml; charset=utf-8".
linkage section.
01 http-response pic x.
procedure division.
main.
XML INITIALIZE.
a.
display "Fahrenheit To Celsius Service Sample"
line 3 position 10 erase.
display "Fahrenheit:", line 5, position 3
"Spaces to quit", line 5, position 25
perform
with test after
until (Fahrenheit(1:1) is numeric or
Fahrenheit(1:1) = "-") and
Fahrenheit(2:) is numeric
accept Fahrenheit, line 5, position 16,
prompt, update, tab,
control "upper"
if is-quit
go to z
end-if
end-perform.
XML EXPORT FILE
Fahrenheit-To-Celsius
"TempFahrenheitRequest.xml"
"Fahrenheit-To-Celsius"
"TempConvertRequestF2C.xsl".
if not XML-OK go to z.
XML EXPORT TEXT
Fahrenheit-To-Celsius
request-payload
"Fahrenheit-To-Celsius"
"TempConvertRequestF2C.xsl".
if not XML-OK go to z.
call "NetInit"
giving
response-status.
call "HttpPost"
using
Post-Address
Content-Type
request-payload
response-payload
Desired-SOAP-Action
giving
response-status.
set address of http-response to response-payload.
display "Response: ", response-status.
if not response-status = 0
call "NetGetError" giving response-payload
set address of http-response to response-payload
display "Error! ", response-status
display "Error message: ", http-response(1:)
call "NetFree" using response-payload
go to z
end-if.
XML FREE TEXT
request-payload.
if response-payload = NULL
display "Error: NULL pointer returned", line 10, blink
accept a-single-char prompt
go to z
end-if.
XML PUT TEXT
response-payload
"TempFahrenheitResponse.xml".
if not XML-OK go to z.
XML IMPORT TEXT
Fahrenheit-To-Celsius-Response
response-payload
"Fahrenheit-To-Celsius-Response"
"TempConvertResponseF2C.xsl".
if not XML-OK go to z.
call "NetFree"
using
response-payload.
call "NetCleanup".
display " Celsius: ", line 10 position 5
Fahrenheit-To-Celsius-Result position 0.
accept a-single-char prompt tab.
go to a.
z.
copy "lixmltrm.cpy".
display "finished.", line 20 position 5.
accept a-single-char prompt tab.
stop run.
copy "lixmldsp.cpy".
---------- Post añadido el 23 de marzo de 2022 a las 17:45 ----------
@Kuk, pues yo no he utilizado ni OCX ni nada que no fuera alguna .DLL ( o .so ) conodida.
Solo utilizo SQL y llamadas a SW.
RM tiene muchas historias, pero valen pasta, y lo gracioso es que cuando estaban disponibles ya las habia yo implementado en cobol, C, java o ensamblador.
O sea que siempre han llegado tarde y mal ( muy complicado y caro utilizar las herramientas )
Claro y ahora RM/cobol esta en via muerta. Me llaman de microfocus para tocarme las p...........
---------- Post añadido el 23 de marzo de 2022 a las 17:46 ----------
:astro:
---------- Post añadido el 23 de marzo de 2022 a las 17:52 ----------
Los distribuidores de RM/cobol que tengo servicio de mantenimiento con ellos, se portan muy bien y ayudan en lo que saben.
Me están aconsejando cambiar de camino, pero son muchas cosas funcionando, MUY BIEN, que cualquiera empieza a picar de nuevo.
Fito
23 de marzo de 2022, 20:23
Gracias @JCantero,
Le voy a pasar esto para que lo haga.
Saludos
Fito...
Kuk
23 de marzo de 2022, 23:08
que cualquiera empieza a picar de nuevo.
No necesitarás picar cosas porque se puede seleccionar el dialecto RM en Micro Focus: RM DIALECT setting (https://www.microfocus.com/documentation/visual-cobol/VC40/EclWin/GUID-FFB75D4D-7D3D-4AC7-98F0-D47BA5A0F71E.html)
Te podría echar una mano, conozco bastante este entorno.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.