OFFICIUM INSERVIO
Your reliable partner for your business software...
Datenreferenz dynamisch aktualisieren / Datareference dynamic refresh
9.0.x
Montag, 7. April 2025
Datenreferenz eines abhängigen Feldes filtern und aktualisieren
Deutsch
Hintergrund/Anforderung
In der Praxis kommt es sehr häufig vor, dass man Datenreferenzen für eine Feldauswahl einsetzt.
Allerdings kann es durchaus vorkommen, dass sich die Daten , die dann in der Auswahlliste angezeigt werden , dynamisch zur Laufzeit ändern sollen , z.B. bei einer Abhängigkeit von einem anderen Auswahlfeld oder Eingabefeld in demselben UX/UI-Element.
Beispielsituation
Im Folgenden soll in Abhängigkeit eines vom Anwender in der UX/UI ausgewählten Datentyps in einem nachfolgenden Feld ausschließlich solche Einträge zur Auswahl angeboten werden, die zu dem vom Anwender ausgewählten Datentyp passen.


Angenommen , der Anwender wählt als Datentyp "Datum ohne Zeit" aus , dann soll in der Datenreferenz für das Feld "Datentyp Interpretation" ausschließlich die Auswahl folgender passender Muster-Einträge möglich sein.

Definition der Datenreferenz
Die Datenreferenz des untergeordneten Feldes , welches aktualisiert werden soll, ist an eine einfache SQL-Sicht gebunden , die alle möglichen Vorschläge für eine Datentyp-Interpretation liefert.

Die SQL-View ist in diesem Fall eine simple SQL UNION ALL-View.
CREATE VIEW [dbo].[qrySAGBookingInterfaceTextImpUxOptionsFieldIns] AS
-- TRANSFER interface: Pre-import of text based data: Special options for field type interpretations
-- UX/UI-relevant for Sage AppDesigner data reference: dtrPreImpTxtBdDataOptionsFieldInterprInstr
-- 1 = Text , 2 = Integer , 4 = Decimal value , 5 = Date , 6 = Date with time , 7 = Boolean (yes/no)
-- 4:
SELECT N'de-DE' AS [Id] , N'Deutsches Format' AS [Description] , 4 AS [ForDataType]
UNION ALL
SELECT N'en-US' AS [Id] , N'Englisches Format (USA)' AS [Description] , 4 AS [ForDataType]
UNION ALL
SELECT N'en-GB' AS [Id] , N'Deutsches Format (GB)' AS
[Description] , 4 AS [ForDataType]
-- 5:
UNION ALL
SELECT N'$DayMonthInCurrentBusinessYear$' AS [Id] , N'Nur Tag und Monat vorhanden - Geschäftjahr automatisch ergänzen' AS [Description] , 5 AS [ForDataType]
UNION ALL
SELECT N'$DayMonthWithYearFromLookUpField(recordIndex,fieldIndex)$' AS [Id] , N'Datum aus einem Feld einer Datenquelle (i.d.R. Kopfsatz)' AS [Description] , 5 AS [ForDataType]
UNION ALL
SELECT N'ddMMyy' AS [Id] , N'Datum , z.B. 311299 für den 2099-12-31' AS [Description] , 5 AS [ForDataType]
UNION ALL
SELECT N'ddMMyyyy' AS [Id] , N'Datum , z.B. 31122099 für den 2099-12-31' AS [Description] , 5 AS [ForDataType]
UNION ALL
SELECT N'yyyyMMdd' AS [Id] , N'Datum , z.B. 20991231 für den 2099-12-31' AS [Description] , 5 AS [ForDataType]
-- 6
UNION ALL
SELECT N'yyyyMMddHHmmssfff' AS [Id] , N'Datum und Uhrzeit, z.B. 20991231065650700 für 2099-12-31 06:56:50 und 700ms' AS [Description] , 6 AS [ForDataType]Anmerkung: Im vorliegenden Anwendungsfall ist eine Übersetzung der Auswahlwerte in andere Sprachen nicht notwendig.
Falls Übersetzungen in andere Sprachen notwendig sind , müssen alternative Wege gewählt werden , die das Sage AppDesigner Metadaten-Modell anbietet.
Das Feld "ForDataType" bestimmt , für welchen Datentyp der Datensatz überhaupt geeignet ist.
Datenreferenz eines abhängigen Feldes filtern und aktualisieren
Um nun zu erreichen , dass beim Wechsel des Datenfeldes "Datentyp" die Datenreferenzen des abhängigen Feldes korrekt gefiltert und aktualisiert werden , geht man wie folgt vor.
Beide Felder sind ganz einfach in einem Datensatz als Felder aufgeführt und haben ganz normal einen Verweis auf die jeweilige Datenreferenz.

Das Feld "TypeInterpretationInstruction" ist das "untergeordnete" Feld , dessen Datenreferenz-Inhalte aktualisiert werden müssen , sobald der Anwender den "Datentyp" im Feld "Type" wechselt.
Das Feld "TypeInterpretationInstruction" benötigt daher zwingend die Übergabe eines ergänzenden Selektionskriteriums im Feld "Data Reference Filter".

Im Feld "Data Reference Filter" wird der SQL-Herkunft der Datenreferenz "dtrPreImpTxtBdDataOptionsFieldInterprInstr" , die dort mit dem SQL-Alias "P" definiert ist , für das Feld "ForDataType" eine Filteranweisung auf das Feld [Type] des aktuellen Datensatzes übergeben.
Dadurch wird sichergestellt , dass die Datenreferenz prinzipiell ausschließlich solche Datensätze zur Auswahl anbietet , deren Feldinhalt bei "ForDataType" zu dem vom Anwender ausgewählten Datentyp im Feld "Type" passend ist.
Abschließend stellt sich natürlich die Frage , wie auf eine direkte Änderung im Feld "Datentyp" (Feld "Type" im Datensatz) reagiert werden kann.
Dies ist mit einem Makro-Code im Validierungsereignis "Validation After Change" wie folgt möglich , der mittels Funktion "RefreshDataReference" die Datenreferenz des Feldes "TypeInterpretationInstruction" aktualisiert.


Man sieht sehr gut , dass die Funktion "RefreshDataReference" im Makro-Code benutzt wird , um für das Feld "TypeInterpretationInstruction" die Aktualisierung der Datenreferenz-Inhalte zu erzwingen.
👆🏻Tipp: Es empfiehlt sich außerdem , den aktuellen Inhalt des abhängigen Feldes mit dem Makro-Befehl "SetFieldEmpty" zurückzusetzen , damit keine invaliden Einträge erhalten bleiben.

