4D v16 R5 trae una importante mejora al comando DIALOG. Esta mejora consiste en la posibilidad de pasar un nuevo parámetro «formData» de tipo objeto. Ha sido estupendo saber que esta nueva adición ha sido bien recibida por los desarrolladores de 4D.
Con 4D v20, se actualizan otros dos comandos, Print form y FORM LOAD. El beneficio será igual de grande. El contenido del objeto pasado en el parámetro será directamente explotable en los formularios impresos o cargados en memoria.
código de ejemplo
Imprimir formulario
El comando Print form es ampliamente utilizado por los desarrolladores 4D gracias a sus recientes mejoras.
El comando PRINT FORM ahora puede pasar un parámetro opcional de tipo objeto accesible a través de la función Form en el formulario invocado. Ya sea directamente utilizando la función Form como expresiones para los objetos del formulario (Form.firstname / Form.lastname / etc.) pero también cuando se ejecuta el evento on printing detail.
$formData:=New object()
$formData.lastname:="Smith"
$formData.firstname:="john"
$formData.request:="I need more COFFEE"
$h:=Print form("Print_obj"; $formData; Form detail)
Donde el formulario «Print_obj» se ve así:
FORM LOAD
Siguiendo el mismo principio, el comando FORM LOAD ahora puede recibir un objeto como parámetro. Si se pasa (opcional), entonces el contenido de este objeto puede ser explotado de diferentes maneras y modificado durante la ejecución del evento on load (sólo gestionado por el evento y sólo dentro de una secuencia OPEN PRINTING JOB / CLOSE PRINTING JOB).
OPEN PRINTING JOB
$formData.LBcollection:=New collection()
$formData.LBcollection.push(New object("reference"; "alpha"; "quantity"; 3; "total"; 120.99))
$formData.LBcollection.push(New object("reference"; "bravo"; "quantity"; 2; "total"; 599.99))
FORM LOAD("GlobalForm"; $formData) // $formData NEW !!!
$over:=False
Repeat
$full:=Print object(*; "LB") // the datasource of this "LB" listbox is Form.LBcollection
LISTBOX GET PRINT INFORMATION(*; "LB"; lk printing is over; $over)
If (Not($over))
PAGE BREAK
End if
Until ($over)
CLOSE PRINTING JOB
…donde el «GlobalForm» contiene un listbox «LB» usando Form.LBcollection como fuente de datos.
Conclusión
Esta nueva posibilidad de programación le ahorrará tiempo y aligerará su código.
Como siempre, no dude en compartir sus comentarios en los foros 4D. ¡Esperamos sus comentarios!