Fallback-Wert / Binding

Ein Binding ist die Verbindung von Datenquelle und Konsument. Die Datenquelle wird in der Binding-Notation angegeben (s. Syntax von Binding-Strings). Bindings können an verschiedenen Stellen in Intrexx definiert werden. Sie werden davon abhängig auch an verschiedenen Stellen im XML eingetragen. Bindings können wie folgt eingesetzt werden:

Binding als Vorgabe definieren (z.B. bei Eingabefeldern)

Bei Eingabefeldern kann im Eigenschaftendialog auf dem Reiter "Binding" ein Datenfeld-Binding bei neuen Datensätzen als Vorgabe definiert werden.

Legen Sie hier den gewünschten Kontrolltyp und den Anzeigewert fest.

Vorgabe bei neuen Datensätzen / Bei bestehenden Datensätzen

Vorgabewerte werden verwendet, wenn das Binding bei neuen oder bestehenden Datensätzen keinen Wert liefert. Klicken Sie auf "Vorgabewert bearbeiten", um einen neuen Vorgabewert zu definieren.

Wählen Sie hier das gewünschte Binding aus und klicken Sie "OK".

"Vorgabewert übernehmen" übernimmt den jeweils definierten Vorgabewert.

Hier das entsprechende XML, das Sie mit aktivierten Expertenoptionen über das markierte Eingabefeld mit der Taste F4 erreichen:

<textcontrol guid="5758A9C9EC60A724AC85B3CAE8F2EA28B23EFE45" name="textcontrol30057DD4" inputlength="255" label="false" readonly="false" rect="100,45,250,20" required="false" source="container['7338AC8FD8B5B5C39DBB2AD2F456529DD84A233A'].dataField['D6F55F095F2E5A5570EAB98A8773B0E2F193FBA1']">
    <property>
        <title de="Titel" en="Title"/>
    </property>
    <defaultvalue record="new" source="container['7338AC8FD8B5B5C39DBB2AD2F456529DD84A233A'].dataField['8860BBDFB02E3E9E43940D63A4A64A0AACAEF2DC']" sourceType="binding"/>
</textcontrol>

Datenfeld

Container

Wählen Sie hier den gewünschten Container aus, in dem das Datenfeld enthalten ist, dessen Wert als Fallback-Wert verwendet werden soll.

Datenfeld

Wählen Sie hier das gewünschte Datenfeld aus.

Datenfeld einer Elterndatengruppe auswählen

Öffnet einen Dialog, in dem ein Datenfeld ggf. aus einer übergeordneten Datengruppe ausgewählt werden kann.

Session / Request / Verarbeitungskontext

Tragen Sie hier jeweils den Namen des Requestparameters, der Sessionvariable bzw. der Variable aus dem Verabeitungskontext ein.

Statischer Wert

Tragen Sie hier einen statischen Wert ein. Dabei kann eine beliebige Zeichenfolge verwendet werden, solange sie zum verlangten Datentyp passt. Wenn z.B. ein Integerwert verlangt wird, kann "123" übergeben werden, nicht aber "ABC".

Bei Kontrollkästchen kann hier als statischer Wert die Einstellung "Ausgewählt" aktiviert bzw. deaktiviert werden, je nachdem, ob das Kontrollkästchen beim Laden der Seite im Browser bereits ausgewählt sein soll oder nicht.

Beim Element "Mehrfachauswahl 2.0" ist es auch möglich, hier mehrere - dann mit einer Doppelpipe getrennte - statische Werte vorzugeben.

Velocity

Hier kann Velocity-Skript eingetragen werden, das den Fallback-Wert liefert. Velocity kann bei Seiten-Parametern nur rudimentär eingesetzt werden. Objekte wie $DC, $drRecord stehen an dieser Stelle nicht zur Verfügung, if/else-Konstrukte können verwendet werden.

Neue GUID

Mit dieser Option wird automatische eine GUID erzeugt, die als Fallback-Wert verwendet wird.

Sprache

Bei der Sprache kann zwischen "Standardsprache des Portals" und "Kontextabhängige Sprache" gewählt werden. Die kontextabhängige Sprache ergibt sich über die Kette

  1. rq_lang/cookie_lang
  2. Standardsprache des eingeloggten Benutzers
  3. Standardsprache des Portals

Aktueller Benutzer

Hier kann ein Datenfeld aus dem Modul "Benutzer" ausgewählt werden.

Systemdatengruppe

Applikation

Wählen Sie hier die Applikation aus, die die gewünschte Systemdatengruppe enthält.

Datenfeld

Wählen Sie hier das Datenfeld aus.

Parameter

Wählen Sie hier den gewünschten Parameter aus, dessen Fallbackwerte verwendet werden sollen. Zur Auswahl stehen alle Parameter der aktuellen Seite.

Parameter (Application API)

Im API-Umfeld können API-Parameter für den Vergleich ausgewählt werden. Eine Anleitung dazu finden Sie hier.

Datum & Zeit

Ist ein Datenfeld mit Kontrolltyp "Datum & Zeit", "Datum" oder "Zeit" als Anzeigewert ausgewählt, so kann hier das Datum angepasst werden. Alle Informationen zu den Einstellungen finden Sie hier.

Automatische Erhöhung

Ist ein Datenfeld mit Kontrolltyp "Ganzzahl" ausgewählt, so kann mit dieser Option ein Zähler eingerichtet werden. Bei der Anlage eines neuen Datensatzes wird dann der zuletzt erfasste Wert automatisch um 1 erhöht. Dieser neue Wert wird als Vorgabe verwendet.

Baum

Diese Option steht nur für Sprünge im Element "Baum Ansicht" zur Verfügung.

Wert des aktuellen Baumknotens

Als Wert können der Primärschlüssel, die Knoten-ID, Eltern-Knoten-ID oder der Titel für den aktuellen Baumknoten ausgewählt werden. Der Wert "Knoten-ID" ist ein kommaseparierter Wert, zusammengesetzt aus dem Schlüssel, dem übergeordneten Schlüssel und der Sortierung. Der Wert "Eltern-Knoten-ID" entspricht dem übergeordneten Schlüssel. Der Wert "Titel" ist der Titel des aktuellen Knotens.

Termin

Diese Option ist nur bei Kalender-Plugins wählbar. Hier sind alle Daten wählbar, die in den Plugin-Eigenschaften auf dem Reiter "Allgemein" definiert sind.

Ressource

Diese Option ist nur bei Kalender-Plugins wählbar, wenn auf dem Reiter "Optionen" die Einstellung "Ressourcendarstellung ermöglichen" gesetzt ist. Zur Auswahl stehen die Datenfelder, die auf dem Reiter "Optionen" als Titelfeld, Sortierfeld, Gruppierungsfeld oder Bild ausgewählt sind.

Ressource

Wählen Sie hier das gewünschte Ressourcen-Datenfeld aus.

Aktuelle Datengruppe

Diese Option ist nur wählbar, wenn kein ReadContainer unterstützt wird, wie z.B. in Prozessen.

Datenfeld

Wählen Sie hier das gewünschte Datenfeld aus.

Weitere

Unter der Option "Weitere" finden sie eine Auswahlliste für Bindingtypen, denen Sie Werte zuweisen können.

Daten pro Benutzer mit "appUserProfile" persistent speichern

Alle weiteren Informationen dazu finden Sie hier.

Bindings

Syntax von Binding-Strings

bindingType
bindingType['guid|name']
bindingType["guid|name"]
bindingType.guid
bindingType.name
bindingType['guid|name'].guid
bindingType["guid|name"].name
bindingType['guid|name'].subtype['guid|name']
bindingType["guid|name"].subtype["guid|name"]
bindingType["guid|name"].subtype["guid|name"].name
...

Nicht alle Bindings sind in jedem Kontext verfügbar.

compatibility.primaryKey
compatibility.primaryKey['name']
compatibility.foreignKey
compatibility.foreignKey['name']
compatibility.primaryOrForeignKey
compatibility.primaryOrForeignKey['name']

container

Liefert den Wert eines Read- oder WriteContainers. Dieses Binding kann mit der Option "Datenfeld" definiert werden. Es kann auch als Wert für die Option "Weitere" mit der folgenden Syntax eingetragen werden:

container['GUID|NAME'].dataField['GUID|NAME']
container['GUID|NAME'].member['GUID|NAME']
container['GUID|NAME'].recordOwner (The value of record owner field)
container['GUID|NAME'].userId (The value of userid field)
container['GUID|NAME'].key (The value of the single primary key)
container['GUID|NAME'].primaryKey (The value of the single primary key)
container['GUID|NAME'].key['GUID|NAME'] (The value of the primary key with the GUID or name)
container['GUID|NAME'].primaryKey['GUID|NAME'] (The value of the primary key with the GUID or name)
container['GUID|NAME'].foreignKey['GUID|NAME'] (The value of the foreign key with the GUID or name)
container['GUID|NAME'].foreignKey (The value of the single foreign key)
container['GUID|NAME'].combinedKey (The value of the single primary key or a formated Key string like "LID= 1, LANG= de")
container['GUID|NAME'].combinedPrimaryKey (The value of the single primary key or a formated Key string like "LID= 1, LANG= de")
container['GUID|NAME'].combinedForeignKey (The value of the single foreign key or a formated Key string like "LID= 1, LANG= de")

control

Liefert den Wert einer Kontrolle. Dieses Binding kann als Wert der Option "Weitere" mit der folgenden Syntax eingetragen werden:

control['GUID']
control['NAME']
control.guid['CONTROLGUID']
control.name['CONTROLNAME']
control.sysIdent['SYSIDENT']

currentDate

Liefert das aktuelle Datum ohne Uhrzeit.

currentDate
currentDate['Y,M,D']
currentDate[+1,2,-3] Adjust current date: Year +1, month = 2, day -3
Y=(|[+-]?\d+)
M=(|[+-]?\d+)
D=(|[+-]?\d+)

Rules definition: See p_adjust in de.uplanet.util.CalendarUtil.modifyCalendar(T, String p_adjust, boolean)

currentDatetime

Liefert das aktuelle Datum mit Uhrzeit.

currentDatetime
currentDatetime.%TIMEZONE%
currentDatetime['Y,M,D,H,m,S']
currentDatetime[+1,2,-3,2, +2, 0] Adjust current date: Year +1, month = 2, day -3, hour=3,min+2,sec=0
Y=(|[+-]?\d+)
M=(|[+-]?\d+)
D=(|[+-]?\d+)
H=(|[+-]?\d+)
m=(|[+-]?\d+)
S=(|[+-]?\d+)
currentDatetime['Y,M,D,H,m,S'].%TIMEZONE%

Rules definition: See p_adjust in de.uplanet.util.CalendarUtil.modifyCalendar(T, String p_adjust, boolean)

%TIMEZONE% muss dabei eine gültige Zeitzonen-ID (wie z.B. UTC) sein.

currentTime

Liefert die aktuelle Uhrzeit.

currentTime
currentTime['H,m,S']
currentTime[+1,2,-3] Adjust current date: Hour +1, minute = 2, second -3
H=(|[+-]?\d+)
m=(|[+-]?\d+)
S=(|[+-]?\d+)

Rules definition: See p_adjust in de.uplanet.util.CalendarUtil.modifyCalendar(T, String p_adjust, boolean)

currentUser

Liefert den aktuellen Benutzer.

currentUser[FIELDGUID|NAME]

Ersetzen Sie "NAME" mit dem Bean name.

recId

Liefert einen Wert von "alten" rq_RecId oder qs_RecId-Argumenten mit dem Format: "LID= 1; LANG= de". Dieses Binding wird aus Kompatibilitätsgründen verwendet und sollte nicht selbst geschrieben werden.

recId['LID'](gets the LID value out of the rec id string )
recId['LANG'](gets the LANG value out of the rec id string )

request

Dieses Binding kann mit der Option "Request" definiert werden. Es kann auch als Wert für die Option "Weitere" mit der folgenden Syntax eingetragen werden:

request['name']

sharedState

Dieses Binding kann mit der Option "Verarbeitungskontext" definiert werden. Es kann auch als Wert für die Option "Weitere" mit der folgenden Syntax eingetragen werden:

sharedState['name']

session

Dieses Binding kann mit der Option "Session" definiert werden. Es kann auch als Wert für die Option "Weitere" mit der folgenden Syntax eingetragen werden:

session['variable name']

staticText

Liefert statischen Text.

staticText['TEXT'] => TEXT will be returned

systemDataGroup

Liefert den Wert eines Datenfeldes aus einer Systemdatengruppe aus der aktuellen oder einer bestimmten Applikation.

systemDataGroup['APP_GUID'].dataField['FIELD_GUID']

target.argument, parameter

Liefert einen Parameterwert. target.argument[''] kann mit der Option "Parameter" definiert werden. Wird ein Binding selbst mit der Option "Weitere" erstellt, wird in der Regel eher "parameter['']" verwendet, da diese Schreibweise intuitiver ist und das Schlüsselwort "parameter" auch im Velocity- und Groovyumfeld verwendet wird.

parameter['NAME']
target.argument['NAME']

uniqueId

Erzeugt eine Zufallszahl.

uniqueId

uniqueGuid

Erzeugt eine GUID.

uniqueGuid

velocity

Liefert den Velocity-Text des Bindings. Es wird dabei versucht, den Text zu interpretieren. Dieses Binding kann als Wert der Option "Velocity" mit der folgenden Syntax eingetragen werden:

velocity['TEXT'] => The interpreted velocity TEXT will be returned

defaultLanguage

Liefert die Portal-Standardsprache (entspricht $defaultLanguagein Velocity).

contextLanguage

Liefert die aktuelle Portalsprache (entspricht "$lang" in Velocity)

appUserProfile

appUserProfile['key']

Liefert einen Wert aus dem UserProfile. Weitere Informationen dazu finden Sie hier.

Wert auflösen

Zeitpunkt zum Auflösen des Wertes

Falls möglich, kann hier der Zeitpunkt zum Auflösen des Wertes beim Laden der aktuellen Seite oder beim Laden der Zielseite konfiguriert werden.

Bindingtyp "appUserProfile"

Mit diesem Bindingtyp können Daten pro Benutzer gespeichert werden.Sie können Informationen für den jeweils aktuellen Benutzer in einem beliebigen Wert speichern und jederzeit abrufen, z. B. als Vorgabewert in Eingabefeldern.

"AppUserProfile" kann ähnlich verwendet werden wie eine Systemdatengruppe - eben nur benutzerabhängig. Man kann auf diese Art z.B. benutzerabhängig Ansichten steuern. Prinzipiell funktioniert die Verwendung wie ein SharedState bzw. eine Sessionvariable, nur dass die Daten persistent zur Verfügung stehen.

Abgrenzung

Mit dem Bindingtyp „appUserProfile“ erweitern sich die Möglichkeiten, beliebige Informationen individuell zu einem Benutzer zu speichern und zu verarbeiten.

Methode Benutzerabhängig Verfügbarkeit
SharedState / Verarbeitungskontext Nein Wert steht zur Verfügung, bis ein neuer Wert gesetzt wird.
Sessionvariable Ja Wert steht innerhalb einer Session zur Verfügung.
Requestwert / Parameter Nein Wert steht für eine Aktion zur Verfügung.
Systemdatengruppe Nein Wert steht innerhalb einer Applikation dauerhaft zur Verfügung.
appUserProfile Ja Wert steht zur Verfügung, bis der Benutzer einen neuen Wert setzt.

Umsetzung „No code"

Wird der Wert auf Eingabeseiten definiert und gespeichert, kann das Binding ohne Programmierung verwendet werden.

Definiert werden kann das Binding auf Eingabeseiten beim Erstellen eines WriteContainers. Dort steht die benutzerdefinierte Klasse "AppUserProfile" zur Verfügung.

Die Kontrolle, die den Werte definiert, wird in diesen WriteContainer aufgenommen. In den Eigenschaften des Bindings wird das Ziel definiert.

Anschließend kann der Wert im Default einer Kontrolle hinterlegt werden. Dazu kann unter „Weitere“ der Bindingtyp „appUserProfile“ gewählt und der definierte Wert hinterlegt werden.

Umsetzung „Low Code"

Steht zur Definition kein Writecontainer zur Verfügung, in dem der Bindingtyp „appUserProfile“ definiert werden kann, kann dieser auch per Velocity und Groovy gesetzt werden. Alle Informationen zur Verwendung in Groovy- oder Velocity-Skript finden Sie hier:

Groovy

Velocity

Weitere Informationen

Parameter - eine Übersicht
Parameter, Fallback- und semantische Werte erstellen