Home Forum Allgemeines Allgemeines zu Nuclos Alternative zu Subforms Aw: Alternative zu Subforms

#5734
caf
Verwalter

Zur Anschauung ein kleines Praxisbeispiel aus einem laufenden Projekt.

Anforderung

In einer Kurs-Management-System einer Sprachschule gibt es zwei Entitäten, in der zeitliche Buchungen separat gepflegt werden: Allgemeine Termine (Meetings, etc.) werden in der Entität Termin gespeichert, Kurstermine in der Entität Kurstermin. Die zeitlichen Buchungen der Lehrer (Entität Trainer) sollen in der Lehrer-Maske in einem Unterformular zusammengefasst visualisiert werden.

Lösung

Die virtuelle Entität Termin-2-Trainer fasst die Termine alle Trainer zusammen. Basis dafür ist die Datenbank-View v_ve_termin2trainer:

CREATE OR REPLACE VIEW v_ve_termin2trainer AS

SELECT
termin.intid, -- ACHTUNG: intid, datcreated, strcreated,
termin.datcreated, -- datchanged, strchanged und intversion
termin.strcreated, -- sind interne Pflichtspalten --
termin.datchanged, -- in diesem Fall werden sie einfach von der
termin.strchanged, -- Quell-Entität übernommen.
termin.intversion, -- Wichtig ist auch, dass die intid in der
-- Sicht eindeutig ist.

trainer.intid AS intid_strtrainer, -- Referenz auf Trainer, zur Anzeige und Verlinkung in UF
termin.intid AS intid_strtermin, -- Referenz auf Termin, zur Anzeige und Verlinkung in UF
NULL::unknown AS intid_strkurs, -- Fake-Referenz auf Kurs, der nicht in Termin referenziert wird
NULL::numeric AS intid_strkunde, -- Fake-Referenz auf Kunde, der nicht in Termin referenziert wird

termin.datdatumvon, -- Dauer des Termins, ablesbar aus den Spalten:
termin.struhrzeitvon, -- datdatumvon, struhrzeitvon, datdatumbis, struhrzeitbis.
termin.datdatumbis, --
termin.struhrzeitbis, --

termin.strnotiz -- Notiz-Feld aus Termin
FROM
t_eo_termin termin
UNION
SELECT
kurstermin.intid, -- Interne Pflichtspalten, s.o.
kurstermin.datcreated, --
kurstermin.strcreated, --
kurstermin.datchanged, --
kurstermin.strchanged, --
kurstermin.intversion, --

trainer.intid AS intid_strtrainer, -- Referenz auf Trainer, zur Anzeige und Verlinkung in UF
NULL::unknown AS intid_strtermin, -- Fake-Referenz auf Termin, da Kurstermin weder eigenes Layout noch ID besitzt
kurs.intid AS intid_strkurs, -- Referenz auf Kurs, zur Anzeige und Verlinkung in UF
NULL::unknown AS intid_strkunde, -- Fake-Referenz auf Kunde, der nicht in Kurstermin referenziert wird

kurstermin.datdatum AS datdatumvon, -- Dauer des Kurstermins, ablesbar aus den Spalten:
kurstermin.struhrzeitvon, -- datdatum, struhrzeitvon, struhrzeitbis.
kurstermin.datdatum AS datdatumbis, --
kurstermin.struhrzeitbis, --

kurstermin.strnotiz -- Notiz-Feld aus Kurstermin
FROM
t_eo_kurstermin kurstermin;

Anmerkungen

  • Wichtig für die interne Verarbeitung ist, dass die Systemspalten intid, datcreated, strcreated, datchanged, strchanged und intversion existieren.
  • Ebenfalls wichtig ist, dass die intid innerhalb der View eindeutig vergeben ist.
  • Referenzen, wie hier auf Trainer, Termin, Kurs und Kunde, müssen über den Entitäten-Wizard noch nachträglich definiert werden; so wie es für gewöhnliche Entitäten üblich ist.
  • Sind die Referenzen definiert, werden sie wie üblich in den Unterformularen angezeigt und es lässt sich über das Kontextmenü auch in die verlinkten Masken springen.