Ayuda sobre productos BOLD:

Tipos enum con tablas secundarias

Página:
< Volver

ATENCIÓN: El siguiente contenido es de uso avanzado y su utilización puede ocasionar daños irreparables en la configuración del sistema

El tipo de dato enumerado basado en tabla permite definir de forma flexible valores simples de tipo selección asociados a atributos personalizables de los objetos del sistema. Por ejemplo: un listado de poblaciones, uno de paises, uno de estudios, etc…asociando dicha lista a un atributo extendido de un objeto como una ficha de una persona empleada o contrato.

El maestro de tablas secundarias está disponible desde el menú principal: Administración –> Tablas secundarias. Nota: para cambiar de una tabla a otra es necesario cerrar la ventana anterior con la “X”. Para refrescar los valores dentro de la misma tabla se puede usar el botón de refrescar habitual.

Es necesario modificar los archivos de personalización de la aplicación (querycustom.xml). Más adelante se indican los pasos necesarios.

El campo EnumTypeID, ha de rellenarse con el nombre de la tabla secundaria que estamos rellenando, el campo name será el literal que aparecerá en el enum. Se debe preparar una plantilla con al menos las siguientes columnas:

EnumTypeID
Name
Description

El valor de la columna EnumTypeID se debe corresponder siempre con lo que se haya especificado en la sección EnumDefs de la configuración. el siguiente excel muestra varios ejemplos:

Personalización en querycustom

1) Determinar el nombre que identificará el nuevo tipo de datos. Ejemplo: TEnumEstudios

2) En la sección <PredefinedQueries>, añadir la consulta SQL que proporcionará acceso a la lista de nuevos campos. Los valores enumerados se almacenan todos en una tabla del sistema (WPENUMDB_TB). Esta tabla también es extensible.

    <Query Type="EnumQueries" Name="TEnumEstudios" ShowName="Maestro de estudios" Description="">
      <MSSQL>
    <![CDATA[     
          select ID, NOMBRE, DESCRIPCION
          from WPENUMDB_TB FRM
          where EnumTypeID='TEnumEstudios'
          and FRM.ACTIVO<>2 and ((@pID <> 0 and FRM.id = @pID) or (@pID = 0))
]]>         
      </MSSQL>
    </Query>

donde:

EnumTypeID: es el identificador seleccionado anteriormente.

Notar que la query está clasificada como de tipo “EnumQueries”. La definición de la lista de valores disponibles mediante una consulta permite que ésta dependa de otras variables en caso necesario….TBD. Por el momento, los campos de la select deben ser identificadores válidos (sin acentos, etc…), tampoco es posible utilizar una sección <Metadata>.

3) Añadir en la sección de definción estándard de los enums <EnumDefs>, el nuevo enumerado de la siguiente forma:

 <EnumDefs>		
  <TEnumEstudios Query="TEnumEstudios" />
  ...
 </EnumDefs>

Donde TEnumEstudios es el identificador seleccionado para la consulta SQL anterior.

4) Añadir el nuevo atributo a la clase principal seleccionada. Por ejemplo: aquí añadimos a la clase que contiene los atributos extendidos de la persona empleada un nuevo atributo “Estudios”:

<DynamicClass Name="WorkerDyn" ShowName="Propiedades de sistema" Description="Propiedades dinámicas de la clase empleado" AllowOverride="true">
  <Attribute Type="enum" EnumType="TEnumEstudios" Name="Estudios" ShowName="Estudios" Default="" />
  ...
</DynamicClass>

Nota importante: para importar datos tener en cuenta que aunque el atributo es de tipo enum, la columna en XML o en Excel debería utilizar la clave Estudios_Ref como si se tratara de una referencia a otro objeto del sistema.

Características avanzadas

La gestión del tipo enumerado basado en base de datos (EnumDB) se comporta de forma similar a la clase principal interna de Formularios genéricos. Como tal es posible asociar una extensión de la clase a un tipo de enumerado de la siguiente forma:

<LinkDynamicClass>
  <AppendPropAux ToSystemClassID="EnumDB" UseDynamicClass="EnumProvinciaDyn" FormType="TEnumProvincia" ReferencedClass="" ReferencedObject=""/>
</LinkDynamicClass>

<DynamicClass Name="EnumProvinciaDyn" ShowName="Datos adicionales" Description="Datos adicionales de la provincia">
  <Attribute Type="enum" EnumType="TEnumAutonomia"  Name="Autonomia" ShowName="Autonomia" Description="Autonomia a la que pertenece" Default=""/>
  <Attribute Type="string" Name="Observaciones" ShowName="Observaciones" Description="" Default=""/>
</DynamicClass>

En la configuración anterior, se ha ampliado la definición de la clase enumerado TEnumProvincia con los atributos Autonomia y Observaciones. Estos atributos únicamente aparecerán al editar la lista de provincias y podrán ser accedidos de la forma habitual desde cualquier expresión.

Atención: para acceder en las expresiones a los atributos extendidos de la clase enumerada será necesario utilizar la función Object, como en el ejemplo siguiente (suponiendo que el atributo UP2 se corresponda con una clase enumerada extendida):

Object(SystemProps.UP2.ID, "EnumDB").CustomProps.GFH037.Name
Was this article helpful?
0 out Of 5 Stars
5 Estrellas 0%
4 Estrellas 0%
3 Estrellas 0%
2 Estrellas 0%
1 Estrellas 0%
5
How can we improve this article?
How Can We Improve This Article?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Contenido