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.

Monday, April 18, 2022

Grupos de Activación. Primera Entrega

                               

Este artículo es el primero de una serie dedicado a los Grupos de Activación. 

El tema es algo extenso cuando se explica en detalle y requiere tiempo para entender las implicaciones que puede tener a nivel práctico usar o no usar Grupos de activación.

Generalmente los desarrolladores en RPG no tenemos ni idea del impacto que tiene nuestro código en cuanto al nivel de performance: los tiempos de respuesta ni el consumo de recursos, de nuestros programas. El estudio de los grupos de activación y su funcionamiento nos ayuda a entender cómo podemos optimizar el uso de la memoria y de los recursos del equipo, para que los procesos se ejecuten de manera óptima.

Empecemos…

Un grupo de activación es un contenedor de recursos” dentro de un trabajo. El contenedor contiene un montón de activaciones, de ahí el término grupo de "activación". Una activación es una referencia a la asignación de almacenamiento y a las actividades de enlace de programas en tiempo de ejecución que realizan los sistemas operativos cuando se ejecuta un programa.  

Cuando compilamos un programa RPGILE por la opción 14 del strpdm, vemos una serie de parámetros entre los que se encuentra este:

Default activation group . .  Dftactgrp *YES              

Cuando este parámetro esta activado con *Yes, el programa RPG que se está compilando no puede utilizar procedures internos ni externos, programas de servicios ni directorios de enlace. El sistema entiende que se trata de un programa RPG tradicional.  El Grupo de activación por defecto es QILE.

Si queremos compilar un programa que admita enlaces, módulos, Procedimientos (procedures) y lo relacionado con ILE, entonces debemos colocar *NO. Lo más cómodo es colocar esta especificación en la Hoja ‘H’ para evitarnos el tener que acordarnos de colocarlo cada vez que debamos recompilar el programa.

En un RPG fon formato sería:  h DftActgrp(*no)

En un RPG Free format sería:  ctl-opt dftactgrp(*no);

Ambas declaraciones permiten al programa funcionar como un programa ILE

Cuando creamos un programa RPG que enlaza directorios y módulos con el comando CRTPGM

Podemos ver el siguiente parámetro:

Activation group . . . . . . . . ACTGRP         *ENTMOD     (módulo de entrada)

Esto significa que el grupo de activación que se tomará en cuenta para ejecutar el programa será el que sea establecido por el modulo “padre” o el “Entry Point” que inicia la ejecución de toda la serie de invocaciones a procedimientos (procedures) y programas de servicios y módulos de los códigos entre sí.

Si definimos que NO queremos un grupo de activación por defecto… ¿qué sucede?

 

Cuando colocamos *NO en la compilación por via Strpdm opción 14, al presionar enter, el sistema nos trae dos parametros por default

Default activation group . . . . DFTACTGRP    > *NO       

Activation group . . . . . . . . ….ACTGRP         *STGMDL   

Storage model  . . . . . . . . . ……STGMDL         *SNGLVL   

 

Para el parámetro Activation Group el valor *STGMDL indica que se va a seleccionar un modelo de memoria  pre-establecido  por el sistema.

Hay tres tipos de modelo de memoria. Estos tres tipos de modelos se especifican en el parámetro: Storage model y tiene tres valores posibles:

Monday, April 4, 2022

Cuando las ventanas son un estorbo. Como solucionarlo?

 Utilizamos ventanas en nuestro diseño de pantallas para facilitar el acceso a la información. Sin embargo, con mucha frecuencia sucede que la ventana que programamos, oculta información de la pantalla anterior, que es de utilidad para el usuario. En este caso, el usuario tendría que realizar estos pasos:

1.-Salir de la ventana

2.-Registrar o escribir el dato que necesita tener a mano.

3.-Ingresar nuevamente a la ventana.

Veamos el siguiente ejemplo.                                                                                                


Podemos apreciar que la ventana oculta el costo unitario del producto y la fábrica donde es utilizado. Esta información puede ser muy valiosa para tomar decisiones antes de continuar navegando en la aplicación.

El usuario puede escribir o memorizar información clave  rápidamente pero consume tiempo y esfuerzo y no contribuye a agilizar su trabajo.

Programar ventanas moviles quita tiempo, pero a la larga favorecemos la dinámica diaria del negocio y las tareas del usuario, quien al fin y al cabo, es el consumidor de nuestro desarrollo y nuestro principal evaluador.

Programar ventanas moviles requiere:

Monday, March 21, 2022

Definicion Inteligente de Indicadores de Pantalla.

 

Mejores Práctica para Rpg Ibm  en Pantalla Verde.
 

 
 
En esta oportunidad vamos a ver algo muy sencillo que facilita el mantenimiento y la compresnsión de un programa a los programadores que deban resolver alguna incidencia o falla que deba solucionarse. 


 
 
Supongamos que tenemos la siguiente pantalla:
 

        

Se distinguen seis botones al pie de página: Confirmar, Insertar, Modificar, Eliminar, Retornar, Salir.

Cada botón al ser presionado, debe ejecutar una función diferenciada y única dentro del programa. 

Tradicionalmente el programador debe:

1.- Abrir al código fuente de la pantalla y ver cual indicador corresponde a cual botón

2.- Abrir el código fuente del programa, ubicar donde se usa el indicador

3.- Corregir la lógica del programa en la sección donde las operaciones están fallando.

 Hay una manera de ahorrarnos el paso 1 y agilizar el paso 2.

En el archivo de pantalla las declaraciones permanecerán igual al estandard conocido.

 


En el código fuente del programa RPG está la diferencia.

 


Podemos ver en la hoja "F" la palabra clave INDDS que referencia una estructura de datos, asociada a los indicadores que a su vez estan relacionados con las teclas de función. 

La posición de inicio de cada campo dentro de la estructura de datos esta asociada con el número del indicador. Por ejemplo, INSERTAR que comienza en la posición  6, está relacionada al indicador 06.

Lo mismo aplica para el resto de los indicadores.  Seguidamente en lugar de preguntar con un IF:

IF *in01, *in03, *in06... etc estamos relacionando directamente la función que hace la tecla con el indicador y su significado.


Puedes descargar el código fuente en este enlace:

Codigo Fuente para descargar

             

     Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo o en el enlace de Linkedin que está encima de este mensaje.  El conocimiento es valioso, compártelo. 

    Autor: Ing. Liliana Suárez