Tablas: @Structure, @Fields, @Indexes
Una tabla .warp describe un físico DDS: sus columnas y sus accesos por clave. Se referencia desde un Program/Screen vía @References/Tables.
1. Archivo mínimo
@Properties {
Type : "Table"
}
@Structure {
Name : "GRIDDEMO"
Description : "Clientes de ejemplo"
@Fields {
CodCli char(6) Description("Código de Cliente")
Nombre char(20) Description("Nombre")
Ciudad char(15) Description("Ciudad")
}
@Indexes {
PrimaryKey ( GRIDDEMOPK, [CodCli] )
Index ( GRIDDMNOM, [Nombre] )
}
}
@Fields: una líneaNombre tipo(...)por columna. Sólochar/number/date— ver Tipos de dato. Modificadores disponibles:Description(...),Default(...),AllowNull.@Indexes:PrimaryKey(obligatoria, sus campos no pueden serAllowNull),Unique,Index— cada uno comoKind(Nombre, [Campo, ...], "Descripción opcional").
2. Referenciarla desde un Program
@References {
Tables = ["../tables/TLGRIDDEMO.warp"]
}
La ruta es relativa al archivo que la referencia. Una vez referenciada, sus campos quedan disponibles como identificadores sueltos dentro de un For Each/New (ver abajo), y como field(NombreCampo) en @Variables para heredar su tipo.
3. Leer filas: For Each In
@Source {
For Each In GRIDDEMO Index GRIDDMNOM
Where CodCli = &VCodCli
&VNombre = Nombre
&VCiudad = Ciudad
When None
Message("Cliente no encontrado", Error)
EndFor
}
Index selecciona el acceso (por defecto el de acceso secuencial si se omite); Where filtra por igualdad; When None corre si no hubo ninguna fila.
4. Insertar filas: New
@Source {
New In GRIDDEMO
CodCli = &VCodCli
Nombre = &VNombre
Ciudad = &VCiudad
When Duplicate
Message("Ya existe ese código", Error)
EndNew
}
When Duplicate corre si el insert choca con una clave única existente.
5. Documentación extendida
Una tabla puede llevar además @Documentation (anidada dentro de @Structure, a diferencia de un Program donde va al nivel superior) con @Author, @Application, @Module, @Repository e @History (@Creation + @Change por cada entrada del changelog) — ver @Structure, @Fields, @Indexes para el detalle completo de cada sub-sección.
6. Ingeniería inversa desde un DDS existente
Si la tabla ya existe en el IBM i, no hace falta escribirla a mano: el comando WaRPGate: Reverse Engineer de la extensión de VSCode se conecta al IBM i, lee el DDS (y opcionalmente sus LF asociadas como @Indexes) y genera el .warp correspondiente.