Professional Documents
Culture Documents
359
360
El editor de tipos de datos estructurados es sumamente similar al editor de transacciones y ofrece las mismas teclas de acceso rpido. Para cada tem de un tipo de datos estructurado, se debe especificar: La propiedad Name, con el nombre que identifica al tem. La propiedad Data type, en la cual se debe seleccionar un tipo de dato simple, o un dominio, o un tipo de datos estructurado que ya se haya definido. La propiedad Collection, para indicar si el tem tiene o no mltiples instancias (en breve veremos ejemplos que permitirn comprender su uso en detalle). En particular los tems que definen un nuevo nivel, se anteceden con el cono , no se les habilita la propiedad Data Type y se produce la indentacin correspondiente para los tems correspondientes a dicho nivel. Una funcionalidad interesante a tener en cuenta, es que adems de definir tem a tem en un tipo de datos estructurado, tambin est la posibilidad de definir rpidamente en la estructura de un tipo de datos estructurado, la misma definicin de cierta transaccin. Para realizar esto, una vez creado un nuevo tipo de datos estructurado y al estar editando el mismo, se debe pulsar el botn derecho del mouse sobre su raz, y seleccionar la opcin Copy structure from :
361
362
Como se est cargando una variable escalar y no una lista o coleccin, no hay necesidad de solicitar espacio de memoria, ya que el espacio de memoria est creado para la variable como para ser utilizada una vez.
Dado que en este ejemplo se est cargando una variable escalar y no una lista o coleccin, no hay necesidad de solicitar espacio de memoria, ya que el espacio de memoria est creado para la variable como para ser utilizada una vez; as que simplemente se deben asignar los valores que corresponda a los tems de la variable. Para cargar una coleccin, en cambio, s habr que solicitar espacio de memoria para la variable para cada instancia a ser agregada en la lista; luego de solicitado el espacio de memoria, habr que asignar los valores que corresponda a los tems de la variable, y por ltimo agregarla a la lista o coleccin, como veremos.
363
364
Esto permite que podamos definir variables del tipo de datos estructurado Customers, y a su vez variables del tipo de datos Customers.CustomersItem
Por ejemplo, de haber configurado para el tem CompanyAddress la propiedad collection con valor True, habramos indicado que se trata de una coleccin o lista (de largo variable) de Addresses de empresa, y no de una sola. Anlogamente, dado que lo que hemos implementado es que el tem: Customers (es decir, la raz del tipo de datos estructurado) tenga valor True en la propiedad collection, lo que hemos definido es que se trata de una coleccin de Customers y no de un Customer solo. Es importante notar que al configurar la propiedad collection de un tem con valor True, automticamente se define para la propiedad Item name de ese tem un nombre por defecto (en este caso: CustomersItem). Esto permite que podamos definir variables del tipo de datos estructurado Customers, y a su vez variables del tipo de datos Customers.CustomersItem. Es sencillo de comprender que definir una variable del tipo Customers significar que estaremos definiendo una coleccin o lista de Customers, mientras que definir una variable del tipo Customers.CustomersItem, significar que estaremos definiendo un solo Customer (o un tem de la coleccin de Customers, que veremos enseguida cmo hacer para agregarlo a la coleccin).
365
366
Como ya hemos mencionado, para una variable hay creado espacio de memoria como para ser utilizada una vez. Si se necesita crear otra instancia para la variable, habr que solicitar espacio de memoria para la misma, para lo cual contamos con el operador new.
367
En cada iteracin estaramos sobreescribiendo el mismo espacio de memoria... y agregando a la lista siempre punteros al mismo espacio de memoria.
368
Por lo tanto, es necesario ir solicitando un nuevo espacio de memoria para cada referencia a ser agregada en la lista
369
Se definen 2 variables
370
Endfor
En este caso la variable &customersitem es del tipo de datos ListaCustomers.ListaCustomersItem, el cual contiene un nico tem que es: OneCustomer; y dado que el tem OneCustomer es del tipo de datos Customer, este contiene los tems Id, Name, Country, City, etc. De modo que si bien el ejemplo #3 implementa exactamente lo mismo que el ejemplo #2, como en este ltimo hemos optado por otra alternativa de definicin de tipos de datos estructurados, la sintaxis en este caso queda un poquito ms extensa.
371
New Es un operador que retorna una nueva instancia inicializada, o sea una nueva referencia o puntero al tipo de datos que se especifica. Sintaxis: &VbleDeTipoDeDatosEstructurado = new TipoDeDatosEstructurado()
Add Es un mtodo para aplicar a variable de tipo coleccin. Agrega un tem a una coleccin, en la posicin relativa especificada. Sintaxis: &VbleDeTipoColeccion.Add(&VbleItem [, Position])
Nota: Si se omite Position o se especifica 0, se agrega el Item al final de la coleccin. Position comienza en 1.
Item Es un mtodo para aplicar a variable de tipo coleccin. Sintaxis: &VbleDeTipoColeccion.Item(Position) Retorna una referencia al elemento que se encuentra en la coleccin en la posicin relativa Position. En caso de especificar posicin mayor a la ltima, el programa cancela. No es vlido asignar un valor con esta propiedad, por lo tanto no es correcto el cdigo &VbleDeTipoColeccion.item(&i) = Att. Para cambiar un valor se debe remover (mtodo remove) y agregar (mtodo add).
372
Remove Es un mtodo para aplicar a variable de tipo coleccin. Elimina el elemento que se encuentre en la coleccin en la posicin relativa que se especifique, y corre un lugar todas las posiciones. Sintaxis: &VbleDeTipoColeccion.Remove(Position)
Clear Es un mtodo para aplicar a variable de tipo coleccin. Elimina todos los elementos de la coleccin. Sintaxis: &VbleDeTipoColeccion.Clear()
Sort Es un mtodo que permite ordenar los elementos de una coleccin. El campo por el cual se quiere ordenar debe ir entre comillas. Sintaxis: &VbleDeTipoColeccion.Sort(NombreCampoPorElCualOrdenar") Es posible ordenar en forma descendente, poniendo dentro de las comillas al nombre del campo entre corchetes rectos. Es posible ordenar por ms de un campo, poniendo dentro de las comillas los nombres de los campos separados por coma.
Count Es una propiedad de variable de tipo coleccin. Retorna la cantidad de elementos de la coleccin. Es read only.
373
374
Es posible insertar en el form de Transacciones, Web y Work Panels variables de tipo de datos estructurados. Tambin es posible hacerlo en print blocks de reportes, siempre y cuando no sean collection. Desplegar una collection en un form se puede hacer de forma muy sencilla: solamente es necesario insertar la variable en el form, y quedar asociada a un grid que ser cargado automticamente, sin necesidad de cdigo alguno.
375
Hay que repetir este paso para c/atributo del 1er nivel que se desee mostrar en el form Notar que es una sola variable definida (NO una variable por c/atributo)
376
Como hemos visto, hay 2 posibilidades para insertar una variable de tipo SDT con sus respectivos atributos en un form / layout: mediante el shortcut : cada &variable.atributo uno a uno
mediante insert/variable: mltiple seleccin de atributos de variable de tipo SDT Si utilizando la opcin insert/variable se selecciona algn (o algunos) atributo(s) correspondientes a una collection, dicho(s) atributo(s) se agregarn automticamente en un grid (y en las Grid Properties del grid, se podr observar que automticamente se habr asignado en el combo Collection, el nombre del nivel al cual pertenecen los atributos). Si en cambio se utiliza el shortcut para ir agregando atributos del primer nivel del SDT en el form, y se utiliza el shortcut para agregar un grid en el form con el fin de mostrar una collection, el analista tendr que seleccionar explcitamente en el combo Collection de las Grid Properties, el nivel del SDT, para luego poder seleccionar cules atributos de dicho nivel desea incluir en el grid. En tiempo de ejecucin, la carga del grid se realizar en forma completamente automtica, con el contenido de la collection. Esto podr verse en el listado de navegacin:
Nota: Un detalle a tener en cuenta es que independientemente de la forma en que se seleccionen los atributos de una collection para ser mostrados en un grid, los mismos estarn en columnas visibles del grid, y los restantes atributos del nivel (los no seleccionados) se agregarn hidden.
377
EndEvent
Si por ejemplo en el work panel visto (Invoice) deseamos agregar un botn con un evento asociado y mostrar un mensaje para la lnea del grid seleccionada, con informacin de ese tem de la coleccin, contamos a partir de la versin 9.0 con la propiedad CurrentItem.
378