17/17 Herencia de tablas

La herencia de tablas hace referencia a la forma de tratar las tablas como a clases; las tablas derivadas nos permitirán heredar los campos y métodos de la tabla principal.

¿Cuándo debemos utilizar herencia de tablas?

De la misma manera que en las clases cuando existe un grupo de tablas, donde la base de las cuales es igual para todas y hacen referencia al mismo objeto, pero con atributos distintos.

Por ejemplo:
Si tenemos que guardar datos de vehículos podríamos crearnos una tabla para los coches, otra para los camiones, tractores...etc; al fin y al cabo todos estos objetos derivan del mismo objecto, un vehículo, podríamos crear una tabla llamada vehículo la cual tendría los campos y métodos comunes entre estos objectos y luego una tabla derivada para cada tipo de vehículo.

Si nos fijamos todos los objetos de tipo vehículo comparten algunos atributos pero otros son propios de cada vehículo.



¿Como representaremos esta estructura en Ax.?

Para empezar nos crearemos la tabla Vehículo y le indicaremos en sus propiedades que soporta herencia.


Lo primero que notaréis es que Ax se nos queja de que le falta asignar un valor a la propiedad instanceRelationType y ésta debe ser un campo de tipo Int64.
Este campo se encargará de apuntar a la tabla derivada(Será el tableId de la tabla derivada) únicamente debemos crearlo; el sistema ya se encargará de gestionarlo.

La propiedad Abstract la dejaremos con el valor No. En caso de querer que las tablas se comporten igual que las clases abstractas le indicaríamos el valor Yes, en caso de crear un método en la tabla principal, este sería obligatorio implementarlo en cada una de las derivadas al igual que sucede con las clases abstract.



El siguiente paso será crearnos los campos del objeto.


Ya tenemos la tabla principal, ahora nos crearemos las derivadas.

En las tablas derivadas deberemos asignar en las propiedades de éstas, las propiedades que vemos en la imagen.





Si abrimos una de las tablas derivadas, veremos como se han agregado los campos de la tabla principal, esto es debido a que el SQL hace un cross join con las tablas: principal y derivada.


Nos creamos un job para rellenar la tabla



Si nos fijamos en las tablas veremos como se relacionan entre sí.

Cuando abrimos las tablas veremos en la tabla principal que los recIds son los de las tablas derivadas.


y el campo InstanceRelationType hace referencia al campo TableId de cada tabla.



Si agregamos la tabla vehículos a un formulario veremos como automáticamente se agregan los datasources derivados.


Lo único que nos faltaría para finalizar el formulario es controlar que campos se deben mostrar dependiendo del campo InstanceRelationType.

Comentarios

Publicar un comentario