Saltar al contenido principal
Versión: Siguiente

FORM LOAD

FORM LOAD ( {aTabla ;} formulario {; dataForm}{; *} )

ParámetroTipoDescripción
aTableTableTabla del formulario a cargar (si se omite, carga un formulario proyecto)
formularioText, ObjectNombre del formulario proyecto a abrir para la impresión o Cadena vacía para cerrar el formulario proyecto actual
dataFormObjectDatos a asociar al formulario
*OperadorSi se pasa = el comando se aplica a la base local cuando se ejecuta desde un componente (parámetro ignorado fuera de este contexto)

Este comando no es hilo seguro, no puede ser utilizado en código apropiativo.

Descripción

El comando FORM LOAD se utiliza para cargar el formulario en memoria en el proceso actual junto con dataForm (opcional) con el fin de imprimir sus datos o analizar sus contenidos. Sólo puede haber un formulario actual por proceso.

En el parámetro formulario, puede pasar:

  • el nombre de un formulario, o
  • la ruta (en sintaxis POSIX) a un archivo .json válido que contiene una descripción del formulario a usar (ver Ruta de archivo del formulario), o
  • un objeto que contiene una descripción del formulario.

Cuando el comando se ejecuta desde un componente, carga los formularios del componente por defecto. Si se pasa el parámetro *, el método carga los formularios de la base local.

dataForm

Opcionalmente, puede pasar parámetros al formulario utilizando el objeto dataForm. Toda propiedad del objeto dataForm estará disponible desde el contexto del formulario a través del comando Form. Por ejemplo, si pasa un objeto que contiene {"version", "12"} en dataForm, podrá obtener o definir el valor de la propiedad "version" en el formulario llamando:

 $v:=Form.version //"12"
 Form.version:=13

El objeto dataForm está disponible en el evento formulario On Load.

dataForm le permite pasar parámetros de forma segura a sus formularios, sea cual sea el contexto de llamada. En particular, si el mismo formulario es llamado desde diferentes lugares en el mismo proceso, siempre podrá acceder a sus valores específicos simplemente llamando a Form.myProperty.

Nota: si no pasa el parámetro dataForm o si pasa un objeto indefinido, FORM LOAD crea automáticamente un nuevo objeto vacío vinculado al formulario, disponible a través del comando Form.

Impresión de datos

Para que este comando pueda ejecutarse, una tarea de impresión debe haberse abierto de antemano usando el comando OPEN PRINTING JOB. El comando OPEN PRINTING JOB hace un llamado implícito al comando FORM UNLOAD, por lo que en este contexto es necesario ejecutar FORM LOAD. Una vez cargado, el formulario se convierte en el formulario de impresión actual. Todos los comandos de gestión de objetos, y en particular, el comando Print object, trabajan con este formulario.

Si un formulario de impresión ya se ha cargado previamente (a través de una llamada anterior al comando FORM LOAD), se cierra y se sustituye por formulario. Puede abrir y cerrar varios formularios proyecto en la misma sesión de impresión. Cambiar de formulario de impresión vía el comando FORM LOAD no genera saltos de página. Es responsabilidad del desarrollador gestionar los saltos de página.

Sólo el evento formulario On Load se ejecuta durante la apertura del formulario, así como los métodos de los objetos del formulario. Se ignoran los otros eventos formulario. El evento de formulario On Unload se ejecuta al final de la impresión.

Para mantener la coherencia gráfica de los formularios, se recomienda aplicar la propiedad de apariencia "Impresión ", independientemente de la plataforma.

El formulario de impresión actual se cierra automáticamente cuando se llama el comando CLOSE PRINTING JOB.

Análisis del contenido del formulario

Esta posibilidad consiste en cargar un formulario fuera de pantalla para análisis. Para efectuar esta acción, basta con llamar a FORM LOAD fuera del contexto de un trabajo de impresión. En este caso, los eventos de formulario no se ejecutan.

FORM LOAD] se puede utilizar con los comandos FORM GET OBJECTS y OBJECT Get type para llevar a cabo cualquier tipo de procesamiento en el contenido del formulario. A continuación, es imperativo llamar al comando FORM UNLOAD para descargar el formulario de la memoria.

Tenga en cuenta que en todos los casos, el formulario en la pantalla permanece cargado (no se ve afectado por el comando FORM LOAD por lo que no es necesario volver a cargarlo después de llamar a FORM UNLOAD.

Recordatorio: en el contexto fuera de pantalla, no olvide llamar FORM UNLOAD para evitar todo riesgo de saturación de la memoria.

Ejemplo 1

Llamar un formulario proyecto en un trabajo de impresión:

 OPEN PRINTING JOB
 FORM LOAD("print_form")
  // ejecución de eventos y métodos objeto

Ejemplo 2

Llamar un formulario tabla en un trabajo de impresión:

 OPEN PRINTING JOB
 FORM LOAD([People];"print_form")
  // ejecución de eventos y métodos de objeto

Ejemplo 3

Análisis del contenido de un formulario para efectuar un procesamiento en las áreas de entrada de texto:

 FORM LOAD([People];"my_form")
  // selección del formulario sin ejecución de los eventos ni de los métodos
 FORM GET OBJECTS(arrObjNames;arrObjPtrs;arrPages;*)
 For($i;1;Size of array(arrObjNames))
    If(OBJECT Get type(*;arrObjNames{$i})=Object type text input)
  //… procesamiento
    End if
 End for
 FORM UNLOAD //no olvidar descargar el formulario

Ejemplo 4

El siguiente ejemplo devuelve el número de objetos de un formulario JSON:

 ARRAY TEXT(objectsArray;0) //ordena los elementos del formulario en arrays
 ARRAY POINTER(variablesArray;0)
 ARRAY INTEGER(pagesArray;0)
 
 FORM LOAD("/RESOURCES/OutputForm.json") //carga el formulario
 FORM GET OBJECTS(objectsArray;variablesArray;pagesArray;Form all pages+Form inherited)
 
 ALERT("The form contains "+String(size of array(objectsArray))+" objects") //devuelve el conteo de objetos

el resultado mostrado es:

Ejemplo 5

Desea imprimir un formulario que contiene un list box. Durante el evento on load, desea modificar el contenido del list box a modificar.

1. En el método de impresión, escribe:

 var $formData : Object

var $over Boolean
 var $full : Boolean
 
 OPEN PRINTING JOB
 $formData:=New object
 $formData.LBcollection:=New collection()
 ... //llena la colección de datos
 
 FORM LOAD("GlobalForm";$formData) //guarda la colección en $formData
 $over:=False
 Repeat
    $full:=Print object(*;"LB") // la datasource de este listbox "LB" es Form.LBcollection
    LISTBOX GET PRINT INFORMATION(*;"LB";lk printing is over;$over)
    If(Not($over))
       PAGE BREAK
    End if
 Until($over)
 FORM UNLOAD
 CLOSE PRINTING JOB


2. En el método formulario, puede escribir:

 var $o : Object
 Case of
    :(Form event code=On Load)
       For each($o;Form.LBcollection) //LBcollection está disponible
          $o.reference:=Uppercase($o.reference)
       End for each
 End case

Ver también

Current form name
FORM UNLOAD
LISTBOX GET OBJECTS
OBJECT Get type
Print object