Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Archivo de proyecto (.warproj / .warpcfg)

Ver también la guía: Proyecto.

.warproj — @Project

ClaveDescripción
NameNombre del proyecto.
DescriptionDescripción del proyecto.
VersionVersión del proyecto (string libre, p.ej. 1.0).
Default ProfileNombre del @Profile (definido en el .warpcfg, ver más abajo) que usan generate/build/reverse/license-status cuando el CLI no recibe --profile. Opcional si el .warpcfg sólo declara un @Profile.

@Generator (anidada en @Project)

ClaveDescripción
NameNombre del generador.
DescriptionDescripción del generador.
LanguageLenguaje de destino. Valores: RPGLE, RPG.

@Paths (anidada en @Generator)

ClaveDescripción
ConfigRuta al .warpcfg de este proyecto.
OutputCarpeta donde se escribe el DDS/RPG generado.

.warpcfg — @GeneratorConfig

ClaveDescripciónValores
Date FormatFormato de fecha nativo con el que se declara cada variable Date (p.ej. date(*dmy/) en vez de date a secas).ISO, USA, EUR, JIS, MDY, DMY, YMD, JUL
Date SeparatorCarácter separador de fecha (p.ej. / en date(*dmy/)). Un solo carácter.—
Time FormatFormato de hora nativo con el que se declara cada variable Time (p.ej. time(*hms:) en vez de time a secas), y default para IsTime/StringToTime/TimeToString cuando se omite su argumento format. Usa es 12 horas con sufijo AM/PM, sin segundos — estructuralmente distinto de los otros 4 (24 horas hh:mm:ss).Hms, Iso, Usa, Eur, Jis
Time SeparatorCarácter separador de hora (p.ej. : en time(*hms:), también usado por TIME()). Un solo carácter. No aplica a Usa (sin separador entre campos).—
Timestamp FormatDefault para IsTimestamp/StringToTimestamp/TimestampToString cuando se omite su argumento format. El tipo timestamp no admite un formato en su declaración, a diferencia de date/time. Se recomienda usar Iso por su mayor compatibilidad.Iso, Usa, Eur, Jis
Print ModeQué pasa con el spool QPRINT que escribe cada Print("Block"): con Screen el programa lo muestra (DSPSPLF) y lo borra al salir; Printer/File sólo lo dejan spooleado. Default Printer.Printer, File, Screen
CommitmentHabilita control de compromiso para todo el proyecto: los programas generados declaran sus tablas modificadas commit usropn y las abren tras un STRCMTCTL best-effort (las tablas deben estar journaled). Un Program puede sobreescribirlo con @Properties/Commitment. Default False.True, False
Commit on ExitSi los programas generados emiten un commit final antes de terminar. Sobreescribible por @Properties/Commit on Exit. Sólo efectivo si Commitment es True. Default False.True, False
DDS NamePatrón para nombrar el DDS del display file de cada Screen a partir de su nombre de objeto — p.ej. <ObjectName>D agrega una D. Default <ObjectName> (sin cambio). Sólo afecta el DSPF; el programa RPG driver generado mantiene el nombre de objeto tal cual. El resultado siempre se pasa a mayúsculas y trunca a 10 caracteres (límite de nombre de objeto OS/400) — las variantes que agregan D truncan a 9 primero para que la D nunca sea lo que se trunca.<ObjectName>, <ObjectName>D, D<ObjectName>, D<ObjectNameWithoutFirstChar>

Las claves de nivel superior (Date Format, Print Mode, Commitment, etc.), @Screen/@FunctionKeys y los formatos de fecha/hora/timestamp son únicos a nivel de proyecto: no se repiten por perfil.

@Profile (anidada en @GeneratorConfig)

Un .warpcfg declara uno o más perfiles de despliegue (típicamente Dev, UAT, Prod, aunque el nombre es libre) dentro de @GeneratorConfig. Cada @Profile "Nombre" agrupa su propia @Connection, @Deployment y @License — así un mismo proyecto puede apuntar a servidores/bibliotecas/licencias distintos según el ambiente, sin tener que mantener varios .warpcfg.

@GeneratorConfig {
    @Profile "Dev" {
        @Connection { ... }
        @Deployment { ... }
    }
    @Profile "Prod" {
        @Connection { ... }
        @Deployment { ... }
        @License { ... }
    }
}

Es obligatorio declarar al menos un @Profile: @Connection/@Deployment/@License sueltos directamente dentro de @GeneratorConfig (sin envolverlos en @Profile) ya no son válidos (error E00290). Un @GeneratorConfig sin ningún @Profile da error E00291.

Cómo se elige el perfil activo para generate/build/reverse/license-status (la acción validate ignora los perfiles):

  1. El flag --profile <Nombre> del CLI, sin distinguir mayúsculas.
  2. Si se omite, Default Profile de @Project (sección .warproj — @Project más arriba).
  3. Si tampoco hay Default Profile pero el .warpcfg sólo declara un @Profile, se usa ese.
  4. Si nada de lo anterior aplica y hay varios perfiles declarados, el compilador falla con error E00293, listando los perfiles disponibles.

Pedir un perfil que no existe (--profile o Default Profile) falla con error E00292, también con la lista de perfiles disponibles.

@Screen (anidada en @GeneratorConfig)

ClaveDescripción
RowsCantidad de filas de pantalla. Numérico, default 24.
ColumnsCantidad de columnas de pantalla. Numérico, default 80.

@FunctionKeys (anidada en @Screen)

Una entrada F<n> : "Etiqueta" por línea (n de 1 a 24, p.ej. F3 : "Salir"). Se ata a un evento propio con Event 'Nombre' <n> ... EndEvent en el @Source de un Screen.

@Connection (anidada en @Profile)

Cómo llegar al IBM i:

ClaveDescripciónValores
HostHostname o IP del IBM i. Requerida.—
UserPerfil de usuario para conectar. Requerida.—
Auth MethodCómo autenticar. Requerida. password lee la contraseña de la variable de entorno WARPGATE_PASSWORD; interactive, al correr desde la extensión de VSCode, la pide con un cuadro de diálogo en cada Build & Deploy (corriendo el binario directo por consola, se comporta igual que password).key, password, interactive
Key FileRuta al archivo de clave privada. Requerida sólo si Auth Method: key.—
ProtocolProtocolo de transporte. Requerida. ftp no puede combinarse con Auth Method: key.ssh, sftp, ftp
PortPuerto TCP. Numérico, default 22.—
TimeoutTimeout de conexión en segundos. Numérico (-128 a 127), default 30.—

ssh/sftp/ftp usan clientes nativos: no hace falta tener instalado ningún cliente ssh/scp/sftp/ftp en la máquina donde corre el compilador.

Ejemplos por protocolo y método de autenticación

SSH o SFTP con llave (ssh/sftp son equivalentes: el cliente nativo usa el mismo transporte para ambos):

@Connection {
    Host        : MIHOST
    User        : MIUSUARIO
    Auth Method : key
    Key File    : ~/.ssh/id_ed25519_ibmi
    Protocol    : ssh
    Port        : 22
    Timeout     : 30
}

SSH o SFTP con contraseña — la contraseña no se escribe en el .warpcfg; se lee de la variable de entorno WARPGATE_PASSWORD, que debe existir antes de abrir VSCode (o la terminal desde la que se corra el compilador):

@Connection {
    Host        : MIHOST
    User        : MIUSUARIO
    Auth Method : password
    Protocol    : sftp
    Port        : 22
    Timeout     : 30
}

FTP con contraseña — FTP no tiene concepto de autenticación por llave (Auth Method: key con Protocol: ftp es un error de validación), así que sólo admite password/interactive, ambos leídos de la misma variable WARPGATE_PASSWORD:

@Connection {
    Host        : MIHOST
    User        : MIUSUARIO
    Auth Method : password
    Protocol    : ftp
    Port        : 21
    Timeout     : 30
}

Generar el archivo de Key File

Para Auth Method: key hace falta un par de llaves SSH: una privada (la que apunta Key File) y una pública, que debe quedar autorizada en el perfil de usuario del IBM i.

  1. Generar el par de llaves (en la máquina donde corre el compilador/VSCode, no en el IBM i):
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_ibmi -N ""
    
    Esto crea id_ed25519_ibmi (privada — la ruta que va en Key File) y id_ed25519_ibmi.pub (pública). -N "" deja la llave sin passphrase, requisito para Auth Method: key.
  2. Copiar el contenido de id_ed25519_ibmi.pub (una sola línea) al final del archivo .ssh/authorized_keys dentro del directorio home IFS del usuario del IBM i (p.ej. /home/MIUSUARIO/.ssh/authorized_keys) — crear el archivo y el directorio si no existen. El demonio SSH del IBM i (SSHD, del producto 5733-SC1) tiene que estar activo y configurado para aceptar autenticación por llave.
  3. Verificar que Key File en @Connection apunte a la ruta de la llave privada en la máquina local (no la .pub), y que Auth Method sea key.

@Deployment (anidada en @Profile)

Dónde/cómo desplegar y compilar en el IBM i:

ClaveDescripciónValores
CL SourceNombre del member de fuente CL generado (nombre de objeto OS/400, máx. 10 caracteres). Requerida.—
CleanupSi se elimina el fuente staged tras compilar exitosamente.true, false
Target ReleaseRelease de OS/400 destino de la compilación (p.ej. V7R4M0).—
OptimizationNivel de optimización del compilador.—
DebugSi se compila con la vista de debug habilitada.true, false
Temp PathDirectorio staging del IFS usado durante el deploy. Requerida.—
Data LibraryBiblioteca donde se crean los objetos físico/lógico de DDS compilados (nombre de objeto OS/400). Requerida.—
Objects LibraryBiblioteca que contiene los members de fuente DDS/CL (QDDSSRC/QCLSRC) y donde se crea el objeto programa CL compilado (nombre de objeto OS/400). Requerida.—
Source TablesMember de fuente que contiene el fuente DDS de físicos/lógicos (nombre de objeto OS/400). Requerida.—
Source ProgramsMember de fuente que contiene el RPGLE/CL generado (nombre de objeto OS/400).—
Compile LibraryLista separada por comas de bibliotecas agregadas a la lista de bibliotecas del job de compilación, en orden, en vez de sólo Data Library — para programas cuyas tablas viven en varias bibliotecas.—

@License (anidada en @Profile)

Bloque opcional con la configuración de licenciamiento, propio de cada perfil — así Dev/UAT/Prod pueden consumir licencias o servicios de licenciamiento distintos. Las claves no distinguen mayúsculas. Ver la guía Licenciamiento.

ClaveDescripciónValores
HostHost del servicio de licencias. Con Host el modo es organización y File se ignora; sin Host, el modo es individual.—
PortPuerto TCP del servicio. Por defecto 7443.1-65535
FingerprintHuella SHA-256 del certificado del servicio (acepta : y mayúsculas).64 hex
SPNNombre de servicio Kerberos. Por defecto warpgate-license/<host>.—
FileArchivo de licencia individual. Por defecto ~/.config/warpgate/license.json (%APPDATA%\warpgate\license.json en Windows).—
@License {
    Host        : "servidor01.dominio.local"
    Port        : 7443
    Fingerprint : "3f2a9c41d87b05e6a1c4f0937be2d5688a1f4c0d29e7b3a65c8d1f0e4b7a9c23"
}

Ejemplo completo

Ver Proyecto: .warproj y .warpcfg para un ejemplo completo con ambos archivos.