Las relaciones entre atributos GeneXus se establecen a través de sus nombres, por lo que es importante asignar igual nombre a aquellos atributos que corresponden a un mismo concepto y distinguir aquellos que son diferentes conceptualmente con nombres distintos.
Sin embargo, a veces resulta necesario dar diferentes nombres a atributos que conceptualmente son lo mismo. Para estos casos, GeneXus provee los Subtipos que permiten establecer que dos atributos con diferente nombre refieren a un mismo concepto.
Los casos típicos de uso de Subtipos son:
1- Cuando se quiere incluir varias instancias de un mismo atributo en una transacción (Múltiples instancias)
2- Especialización (Clientes y Proveedores como subtipos de Empresa)
3- Evitar controles de integridad referencial
La versión Olimar de GeneXus incluye nuevas características y varias mejoras en relación con el manejo de subtipos de las cuales se destacan por su importancia las siguientes:
1- Se puede definir subtipos anidados (subtipos de subtipos) obteniendo los valores inferidos.
En el siguiente ejemplo, se puede obtener el nombre del cliente en la Transacción "Clientes que Compraron" (CliCmpNom)
Transacción Personas
PerCod*
PerNom
Transacción Clientes
CliCod* subtipo de Clientes.PerCod
CliNom subtipo de Clientes.PerNom
CliDir
Transacción Clientes que Compraron
CliCmpCod* subtipo de CliCmp.CliCod
CliCmpNom subtipo de CliCmp.CliNom
CliCmpRuc
2- Se puede definir subtipos y supertipos en la misma tabla extendida (por ejemplo en la misma Transacción)
Ejemplo:
En la siguiente Transacción se ingresan los empleados y el gerente de cada uno, quien a su vez es también empleado de la empresa.
Transacción Empleado
EmpCod*
EmpNom
EmpGteCod subtipo de Gerente.EmpCod
EmpGteNom subtipo de Gerente.EmpNom