IBM i es un sistema operativo robusto y seguro, reconocido por su arquitectura orientada a objetos que garantiza estabilidad y rendimiento excepcionales.
En el centro de la administración y operación de esta plataforma se encuentra el Control Language (CL), el principal lenguaje de comandos que actúa como interfaz entre usuarios, aplicaciones y el sistema operativo.
CL es utilizado por distintos perfiles:
- Programadores: para compilar código, gestionar objetos y automatizar procesos.
- Administradores de sistemas: para seguridad, mantenimiento y control de trabajos.
- Gestores de procesos: para orquestar flujos de trabajo y garantizar la ejecución de operaciones críticas.
Aunque cualquier usuario puede ejecutar comandos CL de forma interactiva, su verdadero poder aparece al agruparlos en programas CL, transformando secuencias manuales en procesos automatizados, reutilizables y robustos.
1. De los Comandos a los Programas: Creando el Primer Programa CL
Un programa CL convierte tareas repetitivas en un flujo automático.
Para escribir código fuente se pueden usar:
- SEU (Source Entry Utility): editor tradicional basado en terminal.
- RDi (Rational Developer for i): entorno moderno y gráfico, recomendado actualmente.
Estructura básica de un programa CL:
PGM /* Aquí van los comandos y la lógica */ ENDPGM
El código fuente se compila con:
CRTBNDCL PGM(MYLIB/MYPGM) SRCFILE(MYLIB/QCLSRC)
Comentarios en CL:
/* Este es un comentario completo */ MOVOBJ OBJA TOLIB(LIBY) /* Comentario en línea */
2. Bloques Fundamentales de un Programa CL
2.1. Variables: Almacenando Datos
Declaradas con DCL (Declare CL Variable):
- Nombre: comienza con
&. - TYPE: *CHAR, *DEC, *LGL, etc.
- LEN: longitud (ejemplo
LEN(5 2)= 999.99). - VALUE: valor inicial.
Si se omite LEN, el compilador asigna valores por defecto (*CHAR 32, *DEC 15 5).
Para modificar valores se usa CHGVAR (Change Variable).
2.2. Lógica y Control de Flujo
El comando principal es IF, con soporte para:
- ELSE – acción alternativa.
- DO/ENDDO – agrupar comandos o crear bucles.
- GOTO – saltos incondicionales a etiquetas.
Ejemplo:
IF COND(&A *EQ &B) THEN(CALL CUS210)
2.3. Manejo de Errores con MONMSG
MONMSG (Monitor Message) evita fallos inesperados:
CRTDTAARA DTAARA(QGPL/INVOICE) TYPE(*CHAR) LEN(10) MONMSG MSGID(CPF1023) EXEC(GOTO CMDLBL(DTAARA_EXISTS))
Se puede usar a nivel de comando o a nivel de programa.
2.4. Modularidad: Llamando a Otros Programas
Los programas se enlazan con CALL y parámetros (PARM).
Los parámetros son posicionales: deben coincidir en tipo y longitud en ambos programas para evitar corrupción de datos.
3. Funciones Avanzadas en CL
3.1. Funciones Incorporadas (BIFs)
Algunas de las más útiles:
| Función | Uso |
|---|---|
| %SST | Extraer subcadenas. |
| %TRIM | Eliminar espacios en blanco. |
| %CHAR | Convertir números/lógicos a texto. |
| %BIN | Interpretar cadena como entero binario. |
Ejemplo de concatenación:
DCL VAR(&MSG) TYPE(*CHAR) LEN(100) CHGVAR VAR(&MSG) VALUE('Cliente' *BCAT &CUSNUM *BCAT 'está vencido.')
3.2. Procesamiento Interactivo vs. Batch
- Interactivo: asociado a terminal del usuario.
- Batch: ejecuta en segundo plano.
Ejemplo de auto-someterse a batch:
DCL &JOBTYPE *CHAR 1 RTVJOBA TYPE(&JOBTYPE) IF (&JOBTYPE *EQ '1') THEN(DO) /* 1 = Interactivo */ SBMJOB CMD(CALL MI_PROGRAMA) RETURN ENDDO /* Aquí comienza la lógica principal batch */
4. CL en ILE: El Modelo Moderno
IBM i soporta OPM (Original Program Model) y ILE (Integrated Language Environment).
ILE ofrece modularidad, mejor gestión de recursos y colaboración entre lenguajes.
| Característica | CL OPM | CL ILE |
|---|---|---|
| Compilación | CRTCLPGM | CRTBNDCL / CRTCLMOD |
| Modularidad | Programa monolítico | Módulos *MODULE combinables con CRTPGM |
| Gestión de Recursos | A nivel de programa/trabajo | Introduce grupos de activación |
| TFRCTL | Permitido | No permitido (se recomienda CALL/RETURN) |
5. Conclusión: ¿Por Qué Aprender CL?
Dominar CL permite:
- Automatizar procesos complejos.
- Diseñar programas robustos con manejo de errores sólido.
- Administrar eficazmente IBM i (trabajos, objetos, seguridad).
- Conectar y orquestar distintos lenguajes dentro de la plataforma.
👉 CL no es solo un lenguaje de scripting: es el motor de automatización que otorga control total sobre IBM i.