4D v17 incluye formularios dinámicos, introducidos inicialmente en 4D v16 R6, una manera poderosa y flexible de construir dinámicamente formularios totalmente adaptados a las necesidades de sus usuarios finales. Las posibilidades de los formularios dinámicos son enormes. En este post, veremos un ejemplo concreto de lo que puede hacer con estos nuevos formularios.
Lo primero es lo primero. En tu base de datos, necesitas un formulario de entrada/salida para todas tus tablas. Incluso mejor, ¿por qué no crear estos formularios dinámicamente a partir de una plantilla? Con la notación de objetos, es muy fácil manipularlos. Todo lo que tienes que hacer es definir una plantilla de entrada, una plantilla de salida y una plantilla de objeto. Luego, en tiempo de ejecución, puede generar sus formularios de acuerdo con la tabla y los campos seleccionados.
En el ejemplo siguiente, le proporcionamos dos plantillas de formulario de salida y dos de entrada, así como un ejemplo de código para añadir una tabla y campos.
Consejos: Utilizar formularios dinámicos
ejemplo de formulario de salida
Paso 1
Cree una plantilla de formulario de salida que contenga sólo botones y un cuadro de lista vacío. En este ejemplo, la plantilla se guarda en la carpeta «template » de la carpeta«resources » de la base de datos:
$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+"outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))
Paso 2
A continuación, por código, añadir el título del formulario, el nombre y la tabla de origen de la caja de la lista.
$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:="ListForm: "+arrTableName{arrTableName}
$oFormTemp .pages[objects.myListBox.table:=arrTableName{arrTableName}
Paso 3
A continuación, inserte una columna de cuadro de lista para cada campo seleccionado. A continuación, defina el nombre del objeto columna, la fuente de la columna y el nombre de la cabecera de la columna.
$oFormTemp.pages$oColumn[objects.myListBox.columns:=New collection()
C_LONGINT ($numItem)
$numItem :=0
For ($i;1;Size of array(arrFieldName))
If (arrFieldDisplay{$i}=True)
C_OBJECT(
$oColumn)
// Create a list box column
$oColumn:=OB Copy($oObjectTemplate.colListbox)
xml-ph-0035@deepl.inter
objectName :="col "+arrFieldName{$i}
$oColumn .dataSource:="["+arrTableName{arrTableName}+"]"+arrFieldName{$i}
$oColumn .header:=New object("text";arrFieldLabel{$i})
// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if
End for
Formulario de entrada
El mismo principio puede aplicarse al formulario de entrada. Basta con añadir un texto estático y un objeto de entrada para cada campo seleccionado.
Un ejemplo de código está disponible en la base de datos de ejemplos.
¡Feliz codificación!