Crear Archivo XML desde Progress 4gl

Bienvenidos a otra semana en nuestro blog de programación, les quiero compartir un ejemplo de como crear un archivo XML desde Progress 4gl, esto es necesario en casos de comunicación con otros sistemas.


Primero que es un archivo XML son siglas de Extensible Markup Language , es un lenguaje que maneja etiquetas para definir la estructura de un layout para comunicar información, almacenar información y que se definan las reglas o características de la información para siempre hablar en los mismos término.

Para poder leer un XML siempre tendremos su contrapartida que es un XSD que nos sirve para definir la longitud de los campos, el tipo de campo si es carácter, entero o decimal.

Por ejemplo en México que tenemos el tema de facturación/complementos de facturación y contabilidad electrónicos para integrar la información al SAT esta institución entrega la definición del XML, por ejemplo el documento se ve así como las siguientes imágenes



La explicación en diagrama



Ejemplo


El objetivo del XML es que sea fácil de leer y de programar, veamos un ejemplo de como generar un archivo XML desde Progress 4gl

Primero un XML es un archivo con texto así que en Progress como generar un CSV es decir se trata igual como un archivo plano, la diferencia es como ir tratando las etiquetas, les voy a enseñar parte de un programa para generar el XML de Cuentas para contabilidad Electrónica



     OUTPUT STREAM sat-cat TO VALUE(vc-file) PAGE-SIZE 0
       CONVERT SOURCE "ISO8859-1" TARGET "UTF-8".
       
       /* Headers */
       FOR FIRST tablesat_mstr WHERE tablesat_code = "001"  NO-LOCK:
             
           PUT STREAM sat-cat UNFORMATTED     
               "<?xml version=" + QUOTER("1.0") + " encoding=" + 
               QUOTER("UTF-8") + "?> "    
               SKIP.
           PUT STREAM sat-cat UNFORMATTED                
                "<catalogocuentas:Catalogo xsi:schemaLocation=" + 
                QUOTER(tablesat_loc) +
                " xmlns:xsi=" + QUOTER(sat_xsi)  +
                " Version=" + QUOTER(sat__qad1)  + 
                " RFC=" + QUOTER(vc-rfc)  + 
                " Mes=" + 
                QUOTER(FILL("0", 2 - LENGTH(STRING(periodo))) + 
                STRING(periodo)) + 
                " Anio= " + QUOTER(STRING(Anio)) + 
                " xmlns:catalogocuentas=" + QUOTER(sat_doc) + ">"    
                SKIP.
       END. /* FOR FIRST tablesat_mstr WHERE tablesat_code = "001"NO-LOCK: */

   
       /* Details XML  */
       FOR EACH  tablesat2_mstr WHERE tablesat2_rfc = vc-rfc:SCREEN-VALUE AND 
                                      tablesat2_active = true      NO-LOCK:
        
           vc_account = "".
           vc_account = REPLACE(tablesat2_desc, "&", "") .
           vc_account = REPLACE(vc_account, "%", "") .
              
           PUT STREAM sat-cat UNFORMATTED       
               "<catalogocuentas:Ctas CodAgrup="            + 
               QUOTER(sat2_cod_agrup)                + 
               " NumCta=" + QUOTER(CAPS(sat2_acct))    +
               " Desc="   + QUOTER(vc_account)              + 
               " Nivel="  + QUOTER(STRING(sat2_level)) + 
               " Natur="  + QUOTER(CAPS(sat2_origin))  + "/>"         
               SKIP.
                      
       END.  /* FOR EACH  sat2_mstr  NO-LOCK:  */
       
       PUT STREAM sat-cat UNFORMATTED        
            "</catalogocuentas:Catalogo>"
            SKIP.

      OUTPUT STREAM sat-cat CLOSE.


Ejecución del programa nos crea el siguiente archivo


Este es solo un ejemplo, pero puede funcionar para comunicar 2 sistemas diferentes, enviar información entre usuarios y un tip para leer el XML en modo tabla , pueden abrirlo en Excel, lo que hago es arrastrar el archivo XML a una ventana de Excel y me pregunta como quiero abrir el archivo, selecciono XML como tabla 


Espero les sea de utilidad y les recomiendo leer también el POST dentro de este mismo blog acerca de como leer XML con Python
https://www.programacionparatodos.com/2019/05/programapython.html

También si quieren ver más programas en Progress 4gl les comparto las ligas

Como utilizar ACCUM en Progress como SUM de SQL 

Como Hacer vectores dinámicos en Progress


Como Hacer funciones en Progress

https://www.programacionparatodos.com/2020/06/FuncionesenProgress4gl.html

No olvide compartirnos y seguirnos en este blog o en Facebook.

Comentarios

  1. Como importar un archivo XML en progress 4gl para leer su información???

    ResponderBorrar
  2. Hola para leerlo es un input file y lRetOK = hDSet:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation,
    lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode).
    Mira la ayuda de Progress
    https://docs.progress.com/bundle/openedge-abl-reference-117/page/READ-XML-method.html

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Ejemplo Macro en Word

Macro de Excel para abrir archivo csv

Como ejecutar SQL desde Tareas Programadas de Windows