Business Layer |
The business layer consists of a series of ‘business views’ on the storage layer. Every view is based on a main table. Such a company view has as a name the name of the main table plus ‘_v’. The views are constructed in such way that all the tables' columns which are directly or indirectly linked to the main table through referential relations are included. Loading the data into the storage layer always happens via the business views. Triggers on the business views will check the data on consistency using the existing data. An example is an order which can only be linked to a cost category belonging to a master roll up of the type ‘costs’. On top of that these triggers assure that the audit tables are filled correctly, as well as fields as ‘id’, ‘date_created’ and the like.
An example of a business view is:
select odt.id odt_id
, odt.datum_verlening odt_datum_verlening
, odt.toelichting odt_toelichting
, odt.bedrag_verlening odt_bedrag_verlening
, odt.volgnummer odt_volgnummer
, kps.id kps_id
, kps.bedrag_budget kps_bedrag_budget
, kps.overschot_compenseren_vlag kps_overschot_compenseren_vlag
, kps.bedrag_deelbudget_som kps_bedrag_deelbudget_som
, kbg.id kbg_id
, kbg.omschrijving kbg_omschrijving
, kbg.code kbg_code
, kvg.id kvg_id
, kvg.code kvg_code
, kvg.omschrijving kvg_omschrijving
, khg.id khg_id
, khg.code khg_code
, khg.omschrijving khg_omschrijving
, khg.kosten_opbrengst_ind khg_kosten_opbrengst_ind
, pjt.id pjt_id
, pjt.code pjt_code
, pjt.naam pjt_naam
, pjt.gemeente pjt_gemeente
, pjt.datum_expose pjt_datum_expose
, pjt.overschot_comp_ind pjt_overschot_comp_ind
, pjt.projectvorm_ind pjt_projectvorm_ind
, pgp.id pgp_id
, pgp.code pgp_code
, pgp.omschrijving pgp_omschrijving
, gbr_por.id gbr_por_id
, gbr_por.naam gbr_por_naam
, gbr_por.aanmeld_code gbr_por_aanmeld_code
, gbr_por.initialen gbr_por_initialen
, gbr_amr.id gbr_amr_id
, gbr_amr.naam gbr_amr_naam
, gbr_amr.aanmeld_code gbr_amr_aanmeld_code
, gbr_amr.initialen gbr_amr_initialen
, lvr.id lvr_id
, lvr.naam lvr_naam
, lvr.nummer lvr_nummer
, mat.id mat_id
, pae.id pae_id
, gbr_drr.id gbr_drr_id
, gbr_drr.naam gbr_drr_naam
, gbr_drr.aanmeld_code gbr_drr_aanmeld_code
, gbr_drr.initialen gbr_drr_initialen
, vsd.id vsd_id
, vsd.vnr_bedrag_geconsumeerd vsd_vnr_bedrag_geconsumeerd
, vsd.frl_volgnummer vsd_frl_volgnummer
, cig.consolideren_vlag cig_consolideren_vlag
, cig.id cig_id
, cig.datum_rapportage cig_datum_rapportage
, dsk.ref_tabel dsk_ref_tabel
, dsk.ref_sleutel dsk_ref_sleutel
, dsk.aantal_documenten dsk_aantal_documenten
, dsk.som_bestand_omvang_c dsk_som_bestand_omvang_c
, dsk.eerste_document dsk_eerste_document
, dsk.eerste_document_url dsk_eerste_document_url
, dsk.eerste_document_param1 dsk_eerste_document_param1
, dsk.meerdere_aanwezig dsk_meerdere_aanwezig
, dsk.laatste_document dsk_laatste_document
, dsk.laatste_document_url dsk_laatste_document_url
, dsk.laatste_document_param1 dsk_laatste_document_param1
, hpt.id hpt_id
, hpt.code hpt_code
, hpt.naam hpt_naam
, hpt.gemeente hpt_gemeente
, hpt.datum_expose hpt_datum_expose
, hpt.overschot_comp_ind hpt_overschot_comp_ind
, hpt.projectvorm_ind hpt_projectvorm_ind
, case
when vnr_bedrag_open_opdrachten <> 0
then 'Y'
else ‘N’
end odt_open_vlag
, coalesce(dsk.label, bubs#vertalingen.translate_keys('{res:bubs_none_click_here_to_add}')) dsk_label_nn
, coalesce(hpt.code, pjt.code) pjt_code_con
, odt.orig_system_reference odt_orig_system_reference
, odt.datum_intrf_geladen odt_datum_intrf_geladen
, odt.datum_intrf_bijgewerkt odt_datum_intrf_bijgewerkt
, odt.datum_aangemaakt odt_datum_aangemaakt
, odt.aangemaakt_door odt_aangemaakt_door
, odt.aangemaakt_in odt_aangemaakt_in
, odt.datum_bijgewerkt odt_datum_bijgewerkt
, odt.bijgewerkt_door odt_bijgewerkt_door
, odt.bijgewerkt_in odt_bijgewerkt_in
, odt.transactie_aangemaakt odt_transactie_aangemaakt
, odt.transactie_bijgewerkt odt_transactie_bijgewerkt
, odt.kolom_soort odt_kolom_soort
, odt.kolom1 odt_kolom1
, odt.kolom2 odt_kolom2
, odt.kolom3 odt_kolom3
, odt.kolom4 odt_kolom4
, odt.kolom5 odt_kolom5
, odt.kolom6 odt_kolom6
, odt.kolom7 odt_kolom7
, odt.kolom8 odt_kolom8
, odt.kolom9 odt_kolom9
, odt.kolom10 odt_kolom10
, odt.orig_system_group odt_orig_system_group
from bubs_opdrachten odt
join bubs_kostenplaatsen kps
on kps.id = odt.kps_id
join bubs_kps_beschrijvingen kbg
on kbg.id = kps.kbg_id
join bubs_kps_verdichtingen kvg
on kvg.id = kbg.kvg_id
join bubs_kps_hfdverdichtingen khg
on khg.id = kvg.khg_id
join bubs_projecten pjt
on pjt.id = kps.pjt_id
join bubs_product_groepen pgp
on pgp.id = pjt.pgp_id
join bubs_gebruikers gbr_por
on gbr_por.id = pjt.gbr_id_projectontwikkelaar
join bubs_gebruikers gbr_amr
on gbr_amr.id = pjt.gbr_id_administrateur
join bubs_leveranciers lvr
on lvr.id = odt.lvr_id
join bubs_mijn_rechten_r mat
on mat.id = mat.id
left
outer
join bubs_project_autorisaties pae
on pae.pjt_id = pjt.id
and pae.gbr_id = mat.gbr_user_id
join bubs_gebruikers gbr_drr
on gbr_drr.id = pjt.gbr_id_directeur
left
outer
join bubs_volgnummer_standen vsd
on vsd.kps_id = kps.id
and vsd.frl_volgnummer = odt.volgnummer
join bubs_cig_1_r cig
on cig.id = cig.id
and pjt.gemeente = coalesce(cig.gemeente, pjt.gemeente)
and pjt.pss_id = coalesce(cig.pss_id, pjt.pss_id)
and pjt.juridische_eenheid = coalesce(cig.juridische_eenheid, pjt.juridische_eenheid)
and pjt.rapportage_groep = coalesce(cig.rapportage_groep , pjt.rapportage_groep)
and pjt.afgesloten_vlag = coalesce(cig.pjt_afgesloten_vlag, pjt.afgesloten_vlag)
and gbr_por.id = coalesce(cig.gbr_id_po , gbr_por.id)
and gbr_drr.id = coalesce(cig.gbr_id_drr , gbr_drr.id)
and pjt.id = coalesce(cig.pjt_id , pjt.id)
and pgp.id = coalesce(cig.pgp_id , pgp.id)
left
outer
join bubs_dct_statistieken_r dsk
on dsk.ref_sleutel = odt.id
and dsk.ref_tabel='ODT'
left
outer
join bubs_projecten hpt
on hpt.id = pjt.hpt_id
where 1=1
and ( pae.id is not null or mat.rol_alle_pjt_zien_vlag='Y' )
In order to load or change data you first need to log on to the business layer. This comes on top of the possible logging on to the database. To login you use:
begin
bubs_session.set_session_info
( 'xxsap#in_ftr' /* Module. Invullen indien bekend. */
, 'interface' /* Actie. Invullen indien bekend. */
, 'system' /* Aanmeldcode van de gebruiker. */
, 'various' /* Momentele query. Invullen indien bekend. */
, sys_Filter('userenv', 'ip_address') /* IP adres. Invullen indien bekend. */
, sys_Filter('userenv', 'host') /* Hostnaam. Invullen indien bekend. */
, 'n/a' /* URL gekoppeld aan verwerking. Invullen indien bekend. */
, to_char(sysdate,'yyyymmddhh24miss') /* Sessie ID. Invullen indien bekend. */
);
end;
/
Next, with full use of transactions you can load and change data of which you have the rights to do so (for example, when you log on as another user you will see different projects).
Next to the business views there are also report views. Report views are data deducted from the already present data in order to simplify filling out the reports. Report views are easily recognized by their name which always ends with ‘_r’. Moreover, if necessary, own reports can be based on this. The link with the built in reports is then guaranteed. The level 1 reports uses, for example, the report view bubs_fpt_n1_r:
select /*+ all_rows */ pjt_id
, pjt_code
, coalesce(to_char(bedrag_budget_resultaat / red_deler , red_weergave_masker), ' ') bedrag_budget_resultaat
, coalesce(to_char(bedrag_verwachting_resultaat / red_deler , red_weergave_masker), ' ') bedrag_verwachting_resultaat
, coalesce(to_char(saldo_resultaat / red_deler , red_weergave_masker), ' ') saldo_resultaat
, case
when saldo_resultaat < 0 then 'N'
else 'Y'
end
saldo_resultaat_ok_vlag
, coalesce(to_char(bedrag_budget_investering / red_deler , red_weergave_masker), ' ') bedrag_budget_investering
, coalesce(to_char(bedrag_verwachting_investering/ red_deler , red_weergave_masker), ' ') bedrag_verwachting_investering
, coalesce(to_char(saldo_investering / red_deler , red_weergave_masker), ' ') saldo_investering
, /* Het teken is omgedraaid. Een hogere kostenpost dan gebudgetteerd is fout nieuws, een lagere kostenpost is beter. */
case
when saldo_investering > 0 then 'N'
else 'Y'
end
saldo_investering_ok_vlag
, coalesce(to_char(bedrag_budget_desinv / red_deler , red_weergave_masker), ' ') bedrag_budget_desinv
, coalesce(to_char(bedrag_verwachting_desinv / red_deler , red_weergave_masker), ' ') bedrag_verwachting_desinv
, coalesce(to_char(saldo_desinv / red_deler , red_weergave_masker), ' ') saldo_desinv
, case
when saldo_desinv < 0 then 'N'
else 'Y'
end
saldo_desinv_ok_vlag
, coalesce(to_char(bedrag_budget_inv_og / red_deler , red_weergave_masker), ' ') bedrag_budget_inv_og
, coalesce(to_char(bedrag_verwachting_inv_og / red_deler , red_weergave_masker), ' ') bedrag_verwachting_inv_og
, coalesce(to_char(saldo_inv_og / red_deler , red_weergave_masker), ' ') saldo_inv_og
, case
when saldo_inv_og < 0 then 'N'
else 'Y'
end
saldo_inv_og_ok_vlag
, coalesce(to_char(bedrag_budget_fee / red_deler , red_weergave_masker), ' ') bedrag_budget_fee
, coalesce(to_char(bedrag_verwachting_fee / red_deler , red_weergave_masker), ' ') bedrag_verwachting_fee
, coalesce(to_char(saldo_fee / red_deler , red_weergave_masker), ' ') saldo_fee
, case
when saldo_fee < 0 then 'N'
else 'Y'
end
saldo_fee_ok_vlag
, coalesce(to_char(bedrag_budget_rente / red_deler , red_weergave_masker), ' ') bedrag_budget_rente
, coalesce(to_char(bedrag_verwachting_rente / red_deler , red_weergave_masker), ' ') bedrag_verwachting_rente
, coalesce(to_char(saldo_rente / red_deler , red_weergave_masker), ' ') saldo_rente
, coalesce(to_char(bedrag_genomen_resultaat / red_deler , red_weergave_masker), ' ') bedrag_genomen_resultaat
, coalesce(to_char(bedrag_te_nemen_resultaat / red_deler , red_weergave_masker), ' ') bedrag_te_nemen_resultaat
, case
when saldo_rente < 0 then 'N'
else 'Y'
end
saldo_rente_ok_vlag
, coalesce(to_char(marge_resultaat_pct , '99990D00'), ' ') marge_resultaat_pct
, coalesce(to_char(marge_verwachting_pct , '99990D00'), ' ') marge_verwachting_pct
, coalesce(toelichting, ' ') toelichting
, coalesce(hpt_code, ' ') hpt_code
, coalesce(hpt_naam, ' ') hpt_naam
, coalesce(pjt_projectvorm_ind, ' ') pjt_projectvorm_ind
from bubs_project_status_pjt_r