Please enable JavaScript to view this site.

Invantive Estate

Het volgende eenvoudige voorbeeld laat zien hoe op basis van een gegevensmodel en relaties een bedrijfslaag gerealiseerd wordt:

Het bedrijfsobject acme_gebruiker_rollen_v is opgebouwd uit drie elementen (bijvoorbeeld vastgelegd met het scherm Views):

Element 1: acme_gebruiker_rollen, alias grl.

Element 2: acme_rollen, alias rol, relatie: rol.id=grl.rol_id.

Element 3: acme_gebruikers, alias gbr, relatie: gbr.id=grl.gbr_id.

Op basis van deze specificatie wordt door Invantive Producer een databaseview geproduceerd vergelijkbaar met de volgende view:

create or replace force view acme_gebruiker_rollen_v

as

/*

* Generated by it_install, version:

* $Header: http://svn.invantive.com/repos/p104/trunk/help/nl/manual/Topics/ip-voorbeeld-bedrijfslaag.xml 19891 2012-10-09 13:23:03Z gle3 $

*/

select grl.id                    grl_id

,      grl.orig_system_reference  grl_orig_system_reference

,      grl.datum_intrf_geladen    grl_datum_intrf_geladen

,      grl.datum_intrf_bijgewerkt grl_datum_intrf_bijgewerkt

,      rol.id                     rol_id

,      rol.code                   rol_code

,      rol.omschrijving           rol_omschrijving

,      rol.alle_prjctn_zien_vlag  rol_alle_prjctn_zien_vlag

,      ...

,      gbr.wachtwoord             gbr_wachtwoord

,      gbr.orig_system_reference  gbr_orig_system_reference

,      gbr.datum_intrf_geladen    gbr_datum_intrf_geladen

from   acme_gebruiker_rollen          grl

join   acme_rollen                    rol

on     rol.id = grl.rol_id

join   acme_gebruikers                gbr

on     gbr.id = grl.gbr_id

Deze view kan eenvoudig gebruikt worden om gegevens in het genormaliseerde gegevensmodel te presenteren als een bedrijfsobject. Het is niet meer nodig dat gebruikers van deze view zelf telkens opnieuw relaties gaan leggen: alle informatie is al beschikbaar als velden in het bedrijfsobject, ook al is de informatie afkomstig uit meerdere tabellen.

Bovendien bevat het resultaat een aantal zogenaamde instead-of triggers. Deze zorgen er voor dat wijzigingen of toevoegingen van gegevens in de view leiden tot de juiste acties op de onderliggende tabellen:

 

create or replace trigger acme_gebruiker_rollen_ord

instead of delete on acme_gebruiker_rollen_v

for each row

...

begin

 --

 -- Populate the old and new records...

 -- Check the Access Control list for this transaction...

 -- Fill-in default values...

 -- Call the before-delete user hook if available...

 -- Delete from base table...

 --

 delete

 from   acme_gebruiker_rollen grl

 where  1=1

 and    grl.id = l_old.grl_id

 ; ...

 --

 -- Call the after-delete user hook if available.

 --

 if acme#gebruiker_rollen.has_after_delete

 then

   acme#gebruiker_rollen.after_delete(l_old, l_new);

 end if;

exception...

end;