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.

lunes, 25 de abril de 2022

Grupo de Activación. Segunda Entrega.

                             


Para quienes todavía no tienen claro qué es un "Grupo de Activación", lo explicaré con una analogía sencilla.

Cuando declaras una variable en un programa, el sistema reserva un espacio de memoria donde alojará los valores que sean asignados a esa variable durante el tiempo de ejecución del programa. El nombre de la variables es un nombre virtual, que nos permite a los desarrolladores manejar espacios de memoria en lenguajes de alto nivel.

 

Un Grupo de Activación se crea para “reservar” el espacio en memoria para programas que pueden ejecutarse de manera cooperativa, es decir que utilizan recursos comunes como archivos, directorios de enlaces, índices, módulos y otros, dentro de un mismo proceso. 

(Al final de este artículo, el enlace al artículo anterior para quienes deseen leerlo)

A partir de ahora trabajaremos con el grupo de activación Dftactgrp = *NO.

En forma análoga a los que hacemos al declarar variables, debemos:

1.-Elegir un nombre para el grupo de activación

2.-Definir el grupo de activación en algún lado...

En el ejemplo del cuadro a continuación coloqué el nombre: Master. Puede ser cualquier otro a gusto del programador.

 

¿Dónde Se Declaran Los Grupos de Activación?



Es muy importante nunca colocar QILE/QILETS como grupo de activación al crear programas de servicio (Crtsrvpgm) ni programas con modulos enlazados (Crtpgm). Los resultados pueden ser confusos o impredecibles.       

Con el comando DSPPGM podemos ver con cual grupo de activación se ha compilado un programa.         


¿Cuántos Tipos de Grupos de Activación Existen?

 

lunes, 18 de abril de 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:

lunes, 4 de abril de 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: