Como Programar en Progress 4gl, Leer archivo csv generar reporte y enviarlo por correo
Hola buen día amigos:
lvc-email = "programacionparatodos@gamil.com".
vc-subject = "test".
IF SEARCH(lvc-ofile) <> ? THEN DO:
OS-COMMAND SILENT uuencode
VALUE(lvc-ofile) VALUE(lvc-ofile)
mailx -s value('"' + vc-subject + '" ' + TRIM(lvc-email)).
DISPLAY "reporte enviado".
END.
Esta semana me gustaría platicarles de un lenguaje que se llama Progress 4gl, es parte de los conocidos lenguajes de cuarta generación que son del año 1970 al 1980 que sobretodo están enfocados a lenguajes de bases de datos, he tenido la oportunidad de trabajar con Informix 4gl, Progress 4gl y un poco de ABAP que es también 4gl y es lenguaje en que se programa SAP.
La idea de este lenguaje es poder extraer de manera sencilla la información de bases de datos de negocios, por lo que su sintaxis es simple.
Las palabras reservadas, sintaxis y ejemplos del lenguaje lo pueden encontrar en https://www.progress.com/documentation,
Veamos un ejemplo:
Objetivo del programa:
Leer un archivo csv de entrada de datos de números de parte, extraer de la base de datos del ERP de QAD, la descripción y la cantidad total de inventario, enviar los datos a un archivo y enviar por correo el reporte.
En este programa les voy a dar un consejo, las palabras reservadas o que son propias de cada lenguaje escribanlo en mayúsculas para que en caso de revisar su código después sea mas rápido de leer.
Los comentarios, que es el código que no queremos que considere el programa va entre /*cmmts */
/*Definición de variables*/
DEF VAR i AS CHARACTER NO-UNDO.
DEF VAR vc-desc AS CHARACTER NO-UNDO.
DEF VAR vc-subject AS CHARACTER NO-UNDO.
DEF VAR lvc-email AS CHARACTER NO-UNDO.
DEF VAR vd-qty AS DECIMAL NO-UNDO.
DEF VAR lvc-ofile AS CHARACTER NO-UNDO INITIAL "/home/telqond/file_out.csv".
DEF VAR lvc-file AS CHARACTER NO-UNDO INITIAL "DepreFA.csv".
DEF STREAM s-excel.
/*area de librerias*/
{us/mf/mfdtitle.i}
/*inicio del programa*/
OUTPUT STREAM s-excel TO VALUE(lvc-ofile) PAGE-SIZE 0.
INPUT FROM VALUE(lvc-file).
REPEAT:
IMPORT DELIMITER "," i.
vc-desc = "".
/*buscar decripcion del item*/
FOR FIRST pt_mstr WHERE pt_domain = global_domain
AND pt_part = i NO-LOCK:
vc-desc = pt_desc1 + pt_desc2.
END.
/*buscar inventario*/
vd-qty = 0.
FOR EACH in_mstr WHERE in_domain = global_domain
AND in_part = i NO-LOCK:
vd-qty = vd-qty + + in_qty_oh + in_qty_nonet .
END.
PUT STREAM s-excel UNFORMATTED i ","
vc-desc ","
vd-qty ","
SKIP.
END. /*repeat*/
En este programa les voy a dar un consejo, las palabras reservadas o que son propias de cada lenguaje escribanlo en mayúsculas para que en caso de revisar su código después sea mas rápido de leer.
Primera parte definir variables
Los comentarios, que es el código que no queremos que considere el programa va entre /*cmmts */
/*Definición de variables*/
DEF VAR i AS CHARACTER NO-UNDO.
DEF VAR vc-desc AS CHARACTER NO-UNDO.
DEF VAR vc-subject AS CHARACTER NO-UNDO.
DEF VAR lvc-email AS CHARACTER NO-UNDO.
DEF VAR vd-qty AS DECIMAL NO-UNDO.
DEF VAR lvc-ofile AS CHARACTER NO-UNDO INITIAL "/home/telqond/file_out.csv".
DEF VAR lvc-file AS CHARACTER NO-UNDO INITIAL "DepreFA.csv".
DEF STREAM s-excel.
/*area de librerias*/
{us/mf/mfdtitle.i}
/*inicio del programa*/
OUTPUT STREAM s-excel TO VALUE(lvc-ofile) PAGE-SIZE 0.
INPUT FROM VALUE(lvc-file).
REPEAT:
IMPORT DELIMITER "," i.
vc-desc = "".
/*buscar decripcion del item*/
FOR FIRST pt_mstr WHERE pt_domain = global_domain
AND pt_part = i NO-LOCK:
vc-desc = pt_desc1 + pt_desc2.
END.
/*buscar inventario*/
vd-qty = 0.
FOR EACH in_mstr WHERE in_domain = global_domain
AND in_part = i NO-LOCK:
vd-qty = vd-qty + + in_qty_oh + in_qty_nonet .
END.
PUT STREAM s-excel UNFORMATTED i ","
vc-desc ","
vd-qty ","
SKIP.
END. /*repeat*/
INPUT CLOSE.
OUTPUT STREAM s-excel CLOSE.
OUTPUT STREAM s-excel CLOSE.
lvc-email = "programacionparatodos@gamil.com".
vc-subject = "test".
IF SEARCH(lvc-ofile) <> ? THEN DO:
OS-COMMAND SILENT uuencode
VALUE(lvc-ofile) VALUE(lvc-ofile)
mailx -s value('"' + vc-subject + '" ' + TRIM(lvc-email)).
DISPLAY "reporte enviado".
END.
Hay una instrucción que es muy poderosa y es el invocar comando del sistema operativo OS-COMMAND SILENT, donde le pasamos como entrada los comandos y parámetros en este caso el comando fue mailx, que nos permite enviar correos electrónicos y adjuntar archivos.
Este programa no tiene ninguna salida a pantalla, ni tiene una pantalla para ingresar datos, pero si se fuera necesario se adiciona y de igual forma podemos agregar en la lista de crontab su ejecución como una tarea programada.
Como pueden ver no es un programa muy largo , las palabras reservadas son parecidas hablar ingles, pueden llamar a comandos del sistema operativo, pueden hacer búsquedas de datos de manera ágil, el motor de la base de datos en bueno.
Les comparto una pagina que tiene más información acerca de las funciones de Progress
https://progress-4gl.programmingpedia.net/
Les comparto una pagina que tiene más información acerca de las funciones de Progress
https://progress-4gl.programmingpedia.net/
Espero les haya gustado este post y nos compartan, saludos y espero se animen a crear sus propios programas.
Otros ejemplos en este blog de Progress 4gl
Comentarios
Publicar un comentario