Utilizar colecciones y listas dentro de los objetos de los formularios

Traducido automáticamente de Deepl

Las colecciones se utilizan cada vez más en la programación de 4D. A partir de 4D v19, puede utilizarlas para definir el contenido de algunos objetos de interfaz, incluso a través de la función Form. Esto es muy útil para la gestión genérica de interfaces.

También hemos añadido mejoras en el uso de las listas. ¡Veamos esto en detalle!

Usar colecciones y listas dentro de los objetos de los formularios

Mejoras en el uso de las listas

Se ha mejorado el uso de listas:
– Listas jerárquicas
– Controles de pestañas (primer caso de uso)

Las colecciones pueden utilizarse ahora como referencias con los siguientes objetos:
– Listas desplegables (también conocidas como «listas emergentes»)
– Cuadros combinados
– Controles de pestañas (segundo caso de uso)

Listas jerárquicas y controles de pestañas

Hemos mejorado el uso de las referencias a listas para los controles de pestañas y los objetos de formulario de listas jerárquicas. Ya era posible asociar la referencia de la lista directamente al objeto de formulario, pero ahora esta referencia puede ser recuperada desde un atributo del objeto. Así que ahora se puede escribir esto :

// create a new object
$o
:=New object
// añadir una lista a este objeto
$o .listRef:=New list
// then add items, icons, etc. to this list

// (…)
// luego llamar al diálogo usando este objeto (con la referencia a la lista incluida)
DIALOG ("myForm";$o)
// borrar la lista para evitar pérdidas de
memoria
CLEAR LIST ($o.listRef)

¡Listo!

Listas desplegables (pop-ups), cuadros combinados y controles de tabulación (¡de nuevo!)

La principal evolución se refiere a las colecciones. Los posibles valores de los siguientes objetos de formulario pueden basarse en una colección de valores escalares (normalmente alfanuméricos), más exactamente en un objeto que contiene a su vez una colección. ¿Por qué? Porque generalmente es necesario conocer el valor seleccionado por el usuario y/o seleccionar un valor por defecto (primera pestaña, tercer elemento del desplegable, etc.)

La variable del objeto contendrá, por tanto, los tres atributos siguientes :
values: colección de valores posibles
index: índice del elemento elegido (en los cuadros desplegables y pestañas)
currentValue: valor actual (utilizado para los cuadros combinados, donde el usuario puede seleccionar o introducir un valor)

ejemplo

Imagina que quieres llamar a un diálogo como el de abajo. Pero, antes de llamar al diálogo, quieres definir

  • El contenido del control de pestañas con «Alpha»; «Bravo»; «Charlie»
  • El título (y dar la oportunidad de introducir uno)
  • Las posibles opciones de «Estado»

blank

Cada uno de estos objetos de formulario tendrá el mismo tipo de variable o expresión asociada: Objeto

blank

// prepare a global object that will be sent to the dialog command
$o
$o:=New object

// prepare the tab control object
$o
.oTab:=New object
$o .oTab.values:=New collection("Alpha"; "Bravo"; "Charlie")
$o .oTab.index:=0 // seleccione la pestaña "Alpha"

// prepare the Title object
$o .oCombo:=New object
.oCombo.values:=New collection("Mr"; "Mz"; "Dr")
$o .oCombo.currentValue:=""

// prepare the Status object
// consejo : ¡cuando el índice = -1, el currentValue se utiliza como marcador de posición!
$o .oPop:=New object
$o .oPop.values:=New collection("Soltero"; "Casado"; "Viudo"; "Divorciado")
$o .oPop.currentValue:="Seleccionar estado..."
$o .oPop.index:=-1

$win :=Open form window("BLOG")
DIALOG ("BLOG"; $o)

Ejecuta este método y rellena el diálogo…

blankblank

Una vez validado el diálogo (se hace clic en OK), podrá saber qué título y estado se han seleccionado o introducido.

Aquí está el valor JSON resultante del objeto devuelto:

blank

Conclusión

Usar un único objeto para definir inmediatamente los valores mostrados y seleccionados es genial. Puedes utilizar las colecciones en muchos objetos a la vez y evitar el uso de arrays de proceso o interproceso. Por supuesto, también se alcanza el objetivo principal: esto hará que la programación genérica sea más fácil que nunca.

Como siempre, un IDH te guiará a través de esta característica, y la documentación también ha sido actualizada.

¡Disfruta y diviértete codificando!

Roland Lannuzel
- Propietario de Producto y Experto en 4D - Después de estudiar electrónica, Roland se dedicó a la informática industrial como desarrollador y consultor, construyendo soluciones para clientes con una variedad de bases de datos y tecnologías. A finales de los años 80 se enamoró de 4D y lo ha utilizado para escribir aplicaciones de negocio que incluyen sistemas de contabilidad, facturación y correo electrónico.Eventualmente se unió a la compañía en 1997, las valiosas contribuciones de Roland incluyen el diseño de especificaciones, herramientas de prueba, demos, así como la formación y hablar con la comunidad 4D en muchas conferencias. Continúa dando forma activamente al futuro de 4D definiendo nuevas características y herramientas de desarrollo de bases de datos.