4D v14

Script del vídeo

Inicio

 
4D v14
Script del vídeo

Script del vídeo  


 

 

En este vídeo, vamos a aprender a crear y programar arrays así como también los objetos que podemos utilizar para que representarlos en las formularios.

Al igual que una variable simple, un array debe:

  • declararse
  • asignársele un valor
  • y luego utilizarlo.

Para ayudarnos a entender esto, vamos a crear un primer array en el formulario DETAIL de la tabla INTERVENTIONS.

Este array concierne a los objetos.
Debemos entonces:

  1. Crear el array en memoria
  2. Poner un objeto en el formulario que puede representar este array en memoria
  3. Verificar que el array contiene la información correcta
  4. Luego, cuando se selecciona un valor en el array, transferimos este valor al campo

Para simplificar las cosas, vamos a poner toda la programación en el objeto. Esto también nos permitirá revisar el concepto de evento.

  • Seleccionamos el objeto popup/lista desplegable
  • Luego, trazar a la derecha del campo OBJECT.
  • Lo llamamos PopObjects
  • Seleccionamos los eventos On Load y On Clicked
  • A continuación editamos el método.

 $evt:=Form event
 Case of
    :($evt=On Load//antes de la visualización del formulario
       ARRAY TEXT(PopObjects;5) //Definición del array (tipo, nombre y número de elementos)
 
  //Llenado de los elementos del array
       PopObjects{1}:="Training"
       PopObjects{2}:="Software"
       PopObjects{3}:="Hardware"
       PopObjects{4}:="System"
       PopObjects{5}:="System"
 
    :($evt=On Clicked//cuando el usuario selecciona un elemento en el array
       If(PopObjects#0) //si el usuario selecciona un elemento
          $ChosenElement:=PopObjects //se guarda el elemento seleccionado
          $ChosenValue:=PopObjects{$ChosenElement//guardamos el valor contenido en este elemento
          [Interventions]Object:=$ChosenValue  //asignamos el valor al campo
       End if
 End case

El método objeto se compone de un cierto número de elementos:

  • Inicialmente, la prueba del evento.
  • Si se trata de "On Load", creamos un array de 5 elementos, donde el primer elemento contendrá "Training" y así sucesivamente
  • Y cuando hacemos clic en el objeto, la transferencia se efectuará en el objeto.

Vamos a rastrear el funcionamiento de este método mediante la realización de una prueba inicial.

Vemos que cuando hacemos doble clic en una intervention, vamos a On load.

Vamos poder mostrar el array que contiene 5 elementos y a estos 5 elementos se les asignan valores poco a poco.
La intervención aparece.

Cuando elegimos un valor en el menú, vemos aquí el número de línea indicado en una variable, que es una variable que tiene el mismo nombre que el array, sino que es una variable de tipo entero largo.

Y aquí vemos los 5 elementos del array, los elementos de 1 a 5 y luego el elemento cero, al cual volveremos más adelante.

Cuando se ejecuta este método::

  • el evento en cuestión es "On Clicked".
  • comprobamos que un elemento ha sido seleccionado.
  • Si el elemento fue seleccionado, podemos:
  •      - Pasar por la variable intermedia (en este caso "ChosenElement")
  •      - Recuperar el valor elegido, si nos fijamos en ChosenElement, vemos que se trata de "Hardware"
  •      - Y transferimos este valor seleccionado al objeto.

Podemos sustituir estas 3 líneas por una sola como sigue:

 [Interventions]Object:=PopObjects{PopObjects}

¿Por qué?

Por que este valor es la variable entero largo que contenía 3 antes, por lo que indica el número de línea del array en cuestión (que tiene el mismo nombre).
Para cuestiones generales, con frecuencia encontrará este tipo de sintaxis:

 [Interventions]Object:=Self->{Self->}

que utiliza un puntero al objeto.

Dado que la programación se lleva a cabo en el objeto en sí mismo, Self se refiere al objeto y cuando escribimos Self->{Self->},

indicamos el array {en la línea elegida en el array} y transferimos el contenido directamente en el objeto.

Vamos a hacerle seguimiento para comprobar que se obtiene el mismo resultado.

  • Actualmente tenemos "System" en el objeto [intervention].
  • Si mostramos PopObjects{PopObjects} tenemos "System"
  • Si mostramos Self->{Self->} también tenemos "System"

Así que esta división nos ayuda a entender en detalle.
Esta es la forma más genérica y concisa de escribirlo.

Ahora vamos a crear un nuevo array donde podemos introducir una fecha con más o menos 10 días.

  • Duplico el objeto
  • le cambio el nombre
  • lo copio
  • y modifico su método.

Esta es un array fecha de 21 elementos: hoy + 10 días - 10 días

y vamos a escribir el código más conciso de esta manera.

Ahora, ¿Cómo llenar estos elementos? Vamos a hacer un bucle en el que asignamos un valor al array de la siguiente manera: (Current date + $i-11).

Por supuesto, el array tendrá el nombre correcto y ahora lo podemos probar:
y vemos aquí que cuando se elige un valor del array, se pasa junto a la fecha de intervención.

Ahora que ya sabe cómo programar arrays, puede representarlos en diferentes objetos 4D, tales como list boxes.

Un list box es un objeto compuesto por una o más columnas con un encabezado y una columna que es la que nos interesa, donde sólo tendremos que escribir el nombre del array que hemos administrado en memoria.

Si volvemos ahora a una intervención, el list box contiene los diferentes valores del array y vemos la sincronización directa entre la elección en el list box y la correspondiente en el array aquí.

Vamos a programar el list box de la misma manera para que cuando hagamos clic en él o cuando se haga una nueva selección en el mismo list box, el valor del objeto se modifique automáticamente.

En el list box seleccionamos los eventos On Clicked y On Selection Change.

Sólo tenemos que copiar la siguiente línea en el método objeto del list box:

 [Interventions]Object:=PopObjects{PopObjects}

Durante el uso, cuando se selecciona un valor en el list box con el ratón o con las flechas del teclado, los valores se transfieren de automáticamente.

Por supuesto, también es posible utilizar arrastrar y soltar, siempre y cuando las áreas se definan como arrastrables y soltables.

 
PROPIEDADES 

Producto: 4D
Tema: Arrays, pop-ups, list boxes

 
ARTICLE USAGE

Autoformación ( 4D v13)
Autoformación ( 4D v14)