En esta oportunidad vamos a mostrar como realizar comandos CL en programa en RPG Free.
En los programas desarrollados en RPG III es realmente tortuoso incorporar un comando CL dentro de un programa RPG. Se ejecuta una llamada aun programa llamado: 'QCMDEXEC.' suministrado por la plataforma del equipo. Con comandos simples como eliminar o reorganizar un archivo ejecutar este programa era relativamente sencillo de implementar. Sin embargo, cuando se trataba de enviar parámetros y de monitorear el resultado de ejecutar el comando, el tema se complicaba mucho mas. La mayoría de los programadores preferimos invocar un programa CLP que ejecutara el comando y quitarnos ese dolor de cabeza de encima.
Con el avance de RPG podemos desarrollar un código estandard para control u monitoreo de errores y ejecución de comandos.
En el siguiente ejemplo:
1.-Se declara un procedure externo 'QCMDEXEC'
2.-Se declara la variable donde se va a almacenar el comando
3.-Se declara la estructura de datos de estatus del programa en forma estratégica
4.-Se construye el comando con parámetros
5.-Se monitorean los errores de ejecución.
-------------------------------------------------------------
d*Declaración del procedure
d@runsyscmd pr extpgm('QCMDEXC')
d cmd 200a options(*varsize) const
d cmdlen 15p 5 const
d*Variable donde se almacenará el comando a ejecutar
d clpstm s 180a
d*Párametros que se enviaran en el comando
d Cliente s 10a
d Pedido s 10a
* Program status data structure
d sds
dPgmName 1 10
dCoderr 40 46 --> Código de error CPFXXXX
dtxterr 91 170 --> Capturar el texto del error
dEstacion 244 253
dusuario 254 263
djobdate 270 275 0
dFechajob 270 275 0
ddiajob 270 271 0
dmesjob 272 273 0
danojob 274 275 0
dhorajob 282 287 0
monitor; //monitorear el error
clpstm = //construcción del comando
'SBMJOB CMD(CALL PGM(Facturar) parm(' +
Cliente + ' ' + Pedido + '))' +
' Job(' + 'FA' + %trim(%subst(Pedido:1:8)) + ')';
@runsyscmd(clpstm : %size(clpstm)); //ejecuta el comando
on-error;
// Graba_Errores;
Errcod = coderr;
Errmsj = txterr;
nomusu = usuario;
nomjob = 'FA'+ %Trim(%subst(Pedido:1:8));
dispos = estacion;
hora = horajob;
fecha = fechajob;
write en archivo de errores
msj_sfl = 'Errores en el comando, revise Log';
endmon;
-------------------------------------------------------------
En este código sometemos un programa llamado FACTURAR que se encargará de generar la factura para el cliente almacenado en la variable CLIENTE según el pedido guardado en la variable PEDIDO
En forma sencilla se puede ejecutar cualquier comando en CLP con o sin parámetros sin que represente una diferencia significativa en el desarrollo del código. También podemos monitorear el resultado de la ejecución y grabarlo en algún archivo, grabando ademas el nombre del job fallido de manera de identificar el pedido que no pudo ser facturado. Con este procedimiento podemos hacer seguimiento o auditoria del proceso.
En este enlace puedes descarga el código fuente que ves en este artículo. Haz click aquí:
Descarga Código Fuente del Programa
Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez