top of page

Datenreferenz dynamisch aktualisieren / Datareference dynamic refresh

9.0.x

Montag, 7. April 2025

Deutsch

Hintergrund/Anforderung

Beispielsituation

Definition der Datenreferenz

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.

Situation: Wenn der Anwender bei "Datentyp" einen anderen Typ auswählt , dann sollen in der zweiten Datenreferenz "Datentyp Interpretation" ausschließlich zum "Datentyp" passende Einträge zur Auswahl angeboten werden!
Situation: Wenn der Anwender bei "Datentyp" einen anderen Typ auswählt , dann sollen in der zweiten Datenreferenz "Datentyp Interpretation" ausschließlich zum "Datentyp" passende Einträge zur Auswahl angeboten werden!
Es stehen z.B. diese Datentypen für den Anwender zur Auswahl.
Es stehen z.B. diese Datentypen für den Anwender zur Auswahl.

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.

Passende Einträge/Vorschläge für den Datentyp "Datum ohne Zeit".
Passende Einträge/Vorschläge für den Datentyp "Datum ohne Zeit".

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.

Datenquelle der Datenreferenz ist eine SQL-View. Entscheidend ist das Feld "ForDataType" , welches anzeigt , für welchen Datentypen der Interpretationsvorschlag gilt.
Datenquelle der Datenreferenz ist eine SQL-View. Entscheidend ist das Feld "ForDataType" , welches anzeigt , für welchen Datentypen der Interpretationsvorschlag gilt.

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.

Ansicht der beiden Felder im Datensatz.
Ansicht der beiden Felder im Datensatz.

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".

Detail-Definition des "abhängigen" Feldes "TypeInterpretationInstruction". Gut zu sehen ist die Definition des zusätzlichen Filters für die Datenherkunft der Datenreferenz.
Detail-Definition des "abhängigen" Feldes "TypeInterpretationInstruction". Gut zu sehen ist die Definition des zusätzlichen Filters für die Datenherkunft der Datenreferenz.

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.


Reaktion auf "Validation After Change"-Ereignis des Feldes "Type" mit Makro-Code.
Reaktion auf "Validation After Change"-Ereignis des Feldes "Type" mit Makro-Code.
Die Datenreferenz des Feldes "TypeInterpretationInstruction" muss aktualisiert werden, wenn sich der Inhalt des Feldes "Type" geändert hat.
Die Datenreferenz des Feldes "TypeInterpretationInstruction" muss aktualisiert werden, wenn sich der Inhalt des Feldes "Type" geändert hat.

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.

Abhängige Felder sollten bei der Änderung des "Steuerfeldes" geleert werden , um ungültige Einträge zu verhindern!
Abhängige Felder sollten bei der Änderung des "Steuerfeldes" geleert werden , um ungültige Einträge zu verhindern!












bottom of page