Tener en cuenta que este método trabaja con las referencias de los elementos y no con su contenido. Esto implica que si por parámetro se recibe una variable con una lista de SDT y se carga una variable temporal con el contenido de un item, IndexOf devolverá 0 (vacío) pues esa referencia no esta dentro de la lista. Puede resultar útil únicamente al momento de cargar la lista.
Consideraciones
Definición de variables
Para cada SDT se define un tipo de datos y otro por cada uno de los Items de sus collections. Por ejemplo Si se define una colección de Ciudades, se define un tipo de datos Ciudades y otro Ciudades.Ciudad
Las variables cuyo tipo sea una SDT no pueden ser vectores o matrices.
Pasaje de Parámetros
No es posible referenciar variables de tipo SDT en:
parámetro de Objetos Web
parámetro de Objeto Main con Call protocol Command line
Si bien no se controla, no es posible definir en la rule parm un item de una SDT, por ejemplo: Parm(&sdt.item)
Disparo de Rules
Se deben instanciar los elementos de una variable SDT, para poder disparar rules que dependen de dicha variable. Para esto se debe cumplir al menos una de las siguientes condiciones:
asignar el elemento del SDT en el evento Start o en una regla
inicializar a la variable SDT:
- new en Evento Start o
- parámetro de Trn o
- parámetro en Call en el evento Start.
Asignación
La asignación de una variable de tipo Structure a otra del mismo tipo implica un incremento en la cantidad de referencias a la estructura. Hecha la asignación, una modificación a cualquier elemento de la estructura se verá reflejado en todas las variables que "apunten" a la estructura.
Por ejemplo en el código:
&Pais.PaisNom = ‘Uruguay’
…
&PaisAux = &Pais
…
&PaisAux.PaisNom = ‘Brasil’
&PaisNom = &Pais.PaisNom
La variable PaisNom tiene el valor ‘Brasil’, pues la dirección de la variable Pais y PaisAux es la misma luego de la asignación
Form
No es posible incluir un SDT en el form o printblock de un objeto, en ese caso ocurrirá un error de spec “spc0071: '%1 cannot be displayed or printed due to its data type (%2)”
Recorrida
Para recorrer una colección de elementos, es posible hacerlo con el comando for in array
For &pais in &paises
&paisCod = &pais.Codigo
&PaisNom = &pais.Nombre
Load
Endfor
O con el comando do while:
Do while &I<= &Paises.Count
&Pais =&Paises.Item(&I)
...
&I=&I+1
Enddo
Integridad
No es posible eliminar un SDT que esta siendo utilizado por otro objeto.
Si es posible modificar la estructura de un SDT y por ejemplo eliminar un elemento del mismo, aunque este siendo referenciado por otro objeto.
Especificación y generación
No es posible especificarse/generarse directamente un SDT. La especificación/generación es implícita cuando se especifica un objeto que lo utiliza si el SDT cambió desde la última vez que fue especificado o se realiza una generación forzada.
Las variables definidas como estructuras son ignorada si la especificación es para lenguajes que no las soportan (RPG, Cobol, etc.). Esto evitará errores de generación si las variables no son utilizadas (esta parte corre por cuenta del desarrollador).
Knowledge Manager
Si es posible exportar/consolidar un objeto SDT, al exportar un objeto que usa un SDT, se exportan automáticamente los SDT llamados.
Si se exporta un objeto que contiene variables que son estructuras a un modelo que no contiene la definición de dichas estructuras aparecerá, al especificar, el mensaje: spc0056, Internal error. Variable %1 definition is incorrect or not available. Data:%2.
En el diálogo de consolidación se agrega un nuevo valor “SDTs” a la opción “Do NOT overwrite”, esto permite sobrescribir o no las definiciones de los SDT de la knowledge Base consolidada.
Listados
Si es posible listar los objetos SDT desde List/Object, o ver el arbol de llamadas desde List/Browser
Webservices
Los Web Services normalmente retornan valores en estructuras de datos. Por ejemplo, retornan un "Cliente" que es una estructura que tiene "Codigo" y "Nombre" que a su vez es otra estructura que tiene "PrimerNombre", "SegundoNombre", etc.
Ahora es posible acceder a estos datos con variables de tipo "Cliente" y modificar/acceder a sus "miembros"
Al consumir un servicio, con el WSDL Inspector, en el caso de recibir datos complejos, este incluirá por lo tanto nuevas definiciones de SDT
Recursividad
No son soportadas las definiciones recursivas. El Data type de una elemento de una estructura no puede ser el mismo que se esta definiendo.