@Parameters
Declara los parámetros de un Program o de un Screen (pantalla completa o Popup): una entrada modo:&Variable por línea. El tipo viene de la declaración correspondiente en @Variables/global o @Variables/local, no se repite acá.
| Modo | Descripción |
|---|---|
in | Parámetro de entrada: quien llama pasa un valor, este programa no puede devolverlo modificado. |
inout | Entrada/salida: quien llama pasa un valor, y este programa puede modificarlo de vuelta. |
out | Salida: este programa lo setea, quien llama sólo lo lee de vuelta. |
@Variables {
global {
Fecha date
Hora char(8)
}
}
@Parameters {
inout:&Fecha,
inout:&Hora
}
No aplica a tablas.
Un Screen declara @Parameters igual que un Program, con los mismos modos (in, inout, out). Los parámetros están disponibles desde Event Init, antes de mostrar la pantalla, y los out/inout vuelven a quien llamó al cerrar el Screen.
Ejemplo: un Popup que recibe un título, modifica una cantidad y devuelve la opción elegida (basado en example/screens/SPOPPRM.warp).
@Properties {
Type : Screen
Popup : True
Name : SPOPPRM
Path : Screens
}
@Variables {
Global {
Titulo char(30)
Cantidad number(5)
Seleccion char(1)
}
}
@Parameters {
in:&Titulo,
inout:&Cantidad,
out:&Seleccion
}
Otro Screen (o un Program) lo invoca con Call, pasando las variables en el mismo orden; el analyzer valida cantidad, tipo y modo:
@References {
Screens = [ "./SPOPPRM.warp" ]
}
@Source {
Event 'AbrirPopup' 4
Call(SPOPPRM, &t, &n, &s)
If &s = "S"
&Resultado = "Aceptado"
EndIf
EndEvent
}
Parámetros de tipo list
Un parámetro de @Parameters puede ser una list(char(n)) o una list(varchar(n)) (un arreglo de líneas de texto). Llega como un arreglo dim(9999) sin envoltura: en RPG, char(n) dim(9999), con const si el modo es in. Como la cantidad no viaja, el programa cuenta las líneas hasta la primera línea vacía (o hasta 9999) para fijar Count(). Con out, el parámetro parte de una lista vacía.
@Variables {
global {
Lineas list(char(80))
}
}
@Parameters {
in:&Lineas
}
Cualquier otra list (por ejemplo list(number) o list(struct(...))), o una matrix, da E00304: sólo se admiten list de char o varchar.
Para enviar una list a otro programa: Call("PGM", &lineas) o Call(Programa, &lineas) pasa el arreglo dim(9999) por referencia (con la firma real si el programa está en @References/Programs). La cantidad no se envía: el receptor lee hasta la primera línea vacía, por eso las operaciones de borrado de list limpian de verdad los elementos (ver Tipos de dato: List).
Nota: en una
Screen, un parámetro usado en@Layoutdebe tener más de 10 caracteres: con 10 o menos da el errorE00369, porque el campo DDS toma ese mismo nombre y no compila en IBM i.