Cómo crear un formulario dinámico a partir de una tabla en 3 pasos

Traducido automáticamente de Deepl

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}

Output Form Template

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.interobjectName :="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

Output Form With Column

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!

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.