APPEND TO LIST

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 11 (Modificado)


APPEND TO LIST (lista; textoElem; refElem{; sublista{; desplegada}})

ParámetroTipoDescripción
listaRefListaNúmero de referencia de lista
textoElemAlfaTexto del nuevo elemento de lista (max. 255 caracteres)
refElemEntero largoNúmero de referencia único del nuevo elemento
sublistaListRefSublista opcional para añadir al nuevo elemento
desplegadaBooleanoIndica si las sublistas opcionales serán desplegadas o
contraídas

Descripción

El comando APPEND TO LIST añade un nuevo elemento a la lista jerárquica cuyo número de referencia se pasa en lista.

El texto del elemento se pasa en textoElem. Puede pasar una expresión de tipo Alfa o Texto de máximo 2 000 000 caracteres.

El número de referencia único del elemento (del tipo Entero largo) se pasa en refElem. Aunque clasificamos este número de referencia como único, en realidad puede pasar el valor que quiera. Consulte la sección Gestión de listas jerárquicas para mayor información sobre el parámetro refElem.

Igualmente si quiere que un elemento tenga elementos hijos, pase un número de referencia de lista válido en el parámetro sublista. En este caso, también debe pasar el parámetro expandido. Pase True o False en este parámetro de manera que la sublista se muestre desplegada o contraída respectivamente.

La referencia de la lista que pasa en sublista debe hacer referencia a una lista existente. La lista existente podría tener un solo nivel o tener sublistas. Si no quiere añadir una lista hija al nuevo elemento, omita el parámetro o pase 0. Aunque ambos son opcionales, los parámetros sublista y desplegada deben pasarse de forma conjunta.

Consejos

Para insertar un nuevo elemento en una lista, utilice INSERT IN LIST. Para cambiar el texto de un elemento existente o modificar su lista hija al igual que su estado desplegado, utilice SET LIST ITEM.

Para cambiar la apariencia del nuevo elemento añadido utilice SET LIST ITEM PROPERTIES.

Ejemplo

Esta es una vista parcial de la estructura de una base:

Las tablas [Departamentos] y [Empleados] contienen los siguientes registros:

Usted quiere mostrar una lista jerárquica, llamada hlList, que muestre los departamentos, y para cada departamento, un lista hija que muestre los empleados que trabajan en ese departamento. El método de objeto de hlList es:

      ` Método de objeto de lista jerárquica hlList

   Case of 
  
      : (Form event=On Load)
         C_LONGINT(hlList;$hSubList;$vlDepartament;$vlEmpleado)
            ` Crear una nueva lista jerárquica vacía
         hlList:=New list
            ` Seleccionar todos los registros de la tabla [Departamentos]
         ALL RECORDS([Departamentos])
            ` Para cada departamento
         For ($vlDepartament;1;Records in selection([Departamentos]))
               ` Seleccionar los empleados de ese departamento
            RELATE MANY([Departamentos]Nombre)
               ` ¿Cuántos hay?
            $vlNbEmpleados:=Records in selection([Empleados])
               ` ¿Hay por lo menos un empleado en este departamento?
            If ($vlNbEmpleados>0)
                  ` Crear una lista hija para el elemento Departamento 
               $hSubList:=New list
                  ` Para cada Empleado
               For ($vlEmpleado;1;Records in selection([Empleados]))
                     ` Añadir el elemento Empleado a la sublista   
                     ` Notar que el número de registro del registro [Empleados]
                     ` se pasa como número de referencia del elemento
                  APPEND TO LIST($hSubList;[Empleados]Apellido+", "+
                              [Empleados]Nombre;Record number([Empleados]))
                     ` Ir al registro [Empleados] siguiente
                  NEXT RECORD([Empleados])
               End for 
            Else 
                  ` No Empleados, no lista hija para el elemento Departamento     
               $hSubList:=0
            End if 
               ` Añadir el elemento Departamento a la lista principal
               ` Note que el número del registro [Departamentos] 
               ` se pasa como número de referencia del elemento. El bit #31
               ` del número de referencia del elemento es forzado a uno de manera que podamos
               ` distinguir entre los elementos Departamentos y Empleados. Ver nota sobre por qué
               ` podemos utilizar este bit como información suplementaria sobre el elemento.
            APPEND TO LIST(hlList;[Departamentos]Nombre;
                           0x80000000 | Record number([Departamentos]);$hSublist;$hSubList # 0)
               ` Asignar el elemento Departamento en negrita para enfatizar la jerarquía de la lista
            SET LIST ITEM PROPERTIES(hlList;0;False;Bold;0)
               ` Ir al siguiente Departamento 
            NEXT RECORD([Departamentos])
         End for 
            ` Ordenar toda la lista en orden ascendente    
         SORT LIST(hlList;>)
            ` Mostrar la lista utilizando el estilo Windows
            ` y forzar la altura de línea mínima a 14 Pts
         SET LIST PROPERTIES(hlList;ala Windows;Windows node;14)
    
      : (Form event=On Unload)
            ` La lista ya no es necesaria; ¡No olvide borrarla!
         CLEAR LIST(hlList;*)
    
      : (Form event=On Double Clicked)
            ` Hay un doble clic
            ` Obtener la posición del elemento seleccionado
         $vlItemPos:=Selected list items(hlList)
            ` Verificar la posición
         If ($vlItemPos # 0)
               ` Obtener la información del elemento de la lista     
            GET LIST ITEM(hlList;$vlItemPos;$vlItemRef;$vsItemText;$vlItemSubList;$vbItemSubExpanded)
               ` ¿Este elemento es elemento de un Departamento?
            If ($vlItemRef ?? 31)
                  ` Si es así, es un doble clic en un elemento Departamento       
               ALERT("Usted hizo doble clic en el elemento Departamento "+Char(34)+$vsItemText+Char(34)+".")
            Else 
                  ` Si no, es un doble clic en un elemento Empleado  
                  ` Utilizando el número de referencia del elemento padre encontrar el registro [Departamentos]
               GOTO RECORD([Departamentos];List item parent(hlList;$vlItemRef)?-31)
                  ` Informar donde trabaja el Empleado y a quién le reporta
               ALERT("Usted hizo doble clic en el elemento Empleado "+Char(34)+$vsItemText+Char(34)+
                        " que trabaja en el Departamento "+Char(34)+[Departamentos]Nombre+Char(34)+
                        " cuyo gerente es "+Char(34)+[Departamentos]Gerente+Char(34)+".")
            End if 
         End if 
    
   End case 

      ` Nota: 4D puede almacenar hasta 1 000 millones de registros por tabla. El número de registro 
      ` tiene 24 bits. En nuestro ejemplo, utilizamos el bit #31 del byte superior no utilizado para 
      ` diferenciar los elementos de Empleados y Departamentos.

En este ejemplo, sólo hay una razón para establecer una diferencia entre los elementos [Departamentos] y [Empleados]:

1. Almacenamos números de registros en los números de referencia de los elementos; por lo tanto, probablemente terminaremos con elementos [Departamentos] cuyo número de referencia de elemento son los mismos que los de los elementos [Empleados].

2. Utilizamos el comando List parent item para recuperar el padre del elemento seleccionado. Si hacemos clic en un elemento [Empleados] cuyo número de registro asociado es 10, y si existe también un elemento [Departamentos] que tiene el número 10, el elemento [Departamentos] será encontrado primero por List parent item cuando esta función analice la lista para ubicar el elemento con el número de referencia del elemento que pasamos. El comando devolverá el padre del elemento [Departamentos] y no el padre del elemento [Empleados].

Por lo tanto, hemos hecho que los números de referencia de los elementos sean únicos, no porque queramos número únicos, si no por que necesitamos diferenciar los elementos de [Departamentos] y [Empleados].

Cuando el formulario se ejecuta, la lista se verá de esta forma:

Nota: Este ejemplo es útil para propósitos de interfaz de usuario si usted manipula con un número limitado de registros. Recuerde que las listas se conservan en memoria—no construya interfaces de usuario con listas jerárquicas que contengan millones de elementos.

Ver también

INSERT LIST ITEM, SET LIST ITEM, SET LIST ITEM PROPERTIES.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente