Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Friday, September 30, 2022

Better Performance with the command TFRCTL/Mejor Performance con el comando TFRCTL

 You can read this post in any language by clicking on this gadget  =======>

  (Puedes leer esta publicacion en cualquier idioma haciendo click en esta aplicación)


 El comando TFRCTL es utilizado en programas CLP y trabaja solamente en entorno OPM. No funciona en entorno ILE. 

TFRCTL es un comando poco conocido que puede ayudar a reducir el tiempo de respuesta en procesos que tienen una secuencia de llamadas entre varios CLP  y que no requieren un entorno ILE.

 Cuando se ejecuta un programa, el sistema destina un espacio de memoria. En este espacio se almacen la información necesaria para que  el código del programa sea ejecutado y ademas las direcciones necesarias para que el programa "hijo" pueda devolver el control al programa "padre" una vez finalizada la ejecución del programa "hijo". 

En el ejemplo a continuación, el programa CLPB transfiere el control al programa CLPC utilizando el comando TFRCTL

A continuación vamos a descifrar que significa todo esto.

El comando TFRCTL se construye de la siguiente manera: 

TFRCTL PGM(library-name/program-name) PARM(CL-variable)


La siguiente gráfica puede ser ampliada haciendo click sobre ella.



 

Se puede apreciar en la secuencia de llamadas que el programa CLPC no retorna a su  programa "padre" CLPB,  sino que regresa al programa "abuelo" CLPA.

Tuesday, August 23, 2022

Pointers (Apuntadores) en RPGLE ¿Que son y para que sirven?

                       

Un apuntador o "pointer" es una variable que contiene la direccion de almacenamiento en memoria de otra variable o de un procedure. En la siguiente imagen tenemos un ejemplo hipotético de almacenamiento en memoria.

 

 

 

Supongamos que tenemos una variable tipo char declarada de 70 posiciones.

 A esa variable la llamaremos: mitexto char(70)

mitexto, según la siguiente imagen, comienza en la dirección de memoria:0000

Aunque en nuestro código de programación podemos manipular la varible mitexto, en realidad no sabemos en cual dirección de memoria es almacenada la data que contiene y, a decir verdad, a nadie le interesa saberlo a menos que, conocer su dirección en memoria y manipularla tuviese alguna utilidad.


En Rpgle Free la variable apuntador se declara asi:
dcl-s Apuntador pointer;

En Rpg No free:  D    Apuntador  S      *  //el asterisco indica que es tipo apuntador

Una variable tipo pointer puede contener la dirección en memoria de una variable o de un procedure

Para declarar un apuntador que apunta a un procedure: 

RPGLE NO Free: se agrega en la declaracion de la variable tipo apuntador la palabra clave PROCPTR

RPGLE FREE: se agrega la palabra clave POINTER(*PROC) en lugar de pointer

Un  apuntador que es utilizado para "apuntar a la dirección" de  una variable,  una estructura de datos o a un arreglo se denomina "Basing Pointer". 

 Veamos algunos de los beneficios que aporta utilizar apuntadores:

Monday, August 15, 2022

JSON para desarrolladores en RPGLE IBM, Iseries/JSON for RPGLE Developers

                         


JSON son las siglas de Java Script Object Notation

 Se trata de un Standard internacional para dar formato al envío de la data entre dos plataforma o entre dos lenguajes de programación.

 A partir del 2015 se popularizó este formato superando con creces al formato estandard XML que hasta ese entonces reinaba sin competencia alguna.

Algunos expertos coincide en que JSON ocupa menos espacio y es mas sencillo de interpretar que XML.

JSON soporta los siguiente tipos de data:

  • Numerico
  • String
  • Arreglos (Array)
  • Objetos (Ds= Data Structure, en el caso de RPGLE IBM)
  • Boleanos = true/false
  • Nulos = null       

Para identificar las estructuras de data la sintaxis es la siguiente:

  •  Inicio y fin de data structure (DS): { }  Llave que abre y cierra respectivamente
  •  Inicio y fin de un arreglo : [ ]  Corchete que abre y cierra respectivamente

Para identificar los elementos simples dentro de las estructuras:

  •    "Nombre del elemento": valor del elemento
  •     Los elementos se separan con coma. (,)
El stream de envio siempre comienza con { y termina con }

Veamos el siguiente ejemplo:

Supongamos que queremos enviar en formato JSON los datos contenidos en la siguiente estructura de RPG. DS = Data Structure

 


 Pasos a seguir:

1.-Entender el significado de la estructura que vamos a enviar. En este caso, vamos a enviar el saldo final y el saldo promedio de la cuenta de un cliente de los ultimos tres meses del año 2022 y 2021. Primero el año 2022 y luego el año 2021.

2.-Interpretar la estructura correctamente. Muy Importante!!!

 Se trata de enviar una estructura que contiene 

  • Un elemento simple:  ClientId 
  • Un arreglo de dos elementos: DS_Account
       Los elementos del arreglo DS_Account son a su vez, DS.

3.-Colocar la sintaxis correspondiente.

     Enviar un objeto (DS) que tiene:

 {  "Ds_client": {

       A.- Un campo simple (Clientid)  "ClientId": "EX-8976531234" 

       B.- Un arreglo: DS-Account   [

          Cada elemento del arreglo es una DS: {

           B.1-Account_number.  "Account_number":89712345,

           B.2-Year. "Year":2022,

           B.3-Un arreglo Ds-balance de tres elementos. [

           Cada elemento del arreglo es a su vez una DS. {

                  La DS contiene dos elementos simples

                   B.3.1- Balance "Balance": 146.34,

                   B.3.2  Average  "Average": 125.78

         Fin de la DS del primer elemento del arreglo interno  },

          //Segundo elemento del arreglo interno

                   {
                       "Balance": 288.50,
                       "Average": 145.98  
                    },

          //Tercer elemento del arreglo interno

                   {
                           "Balance": 426.80,
                           "Average": 375.95
                   }  

                   ]  //cierra arreglo Ds-balance
               },     //cierra primer elemento del arreglo DS-Account

                .......

                .......

                .......

               Repetimos el proceso para el año 2021, que sería el segundo elemento 

               del arreglo Ds-Account

           A continuación generamos el formato completo de la DS en JSON: