Tipps & Tricks - Dynamische Eingabeseiten mit Requestwert steuern

Dieser Beitrag zeigt, wie man eine Eingabeseite mit Requestwerten dynamisch gestalten kann. Kenntnisse im Expert-Modus sind dabei von Vorteil. Die Beispielapplikation können Sie hier herunterladen. Entpacken Sie die Downloaddatei. Anschließend können Sie die enthaltene Datei "tipps-tricks-dynamische-eingabeseiten-mit-requestwert-steuern.lax" wie gewohnt importieren. Aktivieren Sie die Experten-Optionen, damit alle Dialoge, die in diesem Beispiel genannt werden, erreichbar sind.



Hier sehen Sie die Eingabeseite der Beispiel-Applikation. Das Feld "Ort" ist ein Pflichtfeld. Die Überschrift dieser Seite soll dynamisch erzeugt werden.



Auf der Seite "Übersicht" sind die Schaltflächen "Interner Termin" und "Externer Termin" so konfiguriert, dass Sie die Terminart "intern" bzw. "extern" per Request an die Eingabeseite weitergeben, wenn ein neuer Termin mit Klick auf eine dieser Schaltflächen angelegt wird. Dieses Verhalten wird mit dem Expertattribut "rq_custType" gesteuert.



Bei der Schaltfläche "Interner Termin" hat rq_custType den Wert "intern", bei der Schaltfläche "Externer Termin" den Wert "extern". Der Name für das Attribut ist frei wählbar - das Präfix "rq_" sorgt dabei dafür, dass das Attribut als Requestwert interpretiert und entsprechend an die aufgerufene Seite weitergegeben wird.



Für das automatische Eintragen der Terminart auf der Eingabeseite wird das Expertattribut "customdefault" verwendet. Mit dem folgenden Wert wird der Requestwert ausgelesen:
$Request.get('rq_custType')


Der Ort soll nur dann auf der Eingabeseite angezeigt werden, wenn es sich um einen externen Termin handelt. Dieses Verhalten wird mit einer Gruppierung, die bedingt angezeigt wird, bewirkt. Im Eigenschaftendialog der Gruppierung ist auf dem Reiter Optionen die bedingte Anzeige aktiviert. Hier ist das folgende Skript hinterlegt:
#if($Request.get('rq_custType') == 'intern')
	#set($show_simplegroupAC182D08 = false)
#elseif($Request.get('rq_custType') == 'extern')
	#set($show_simplegroupAC182D08 = true)
#end
Falls der Name Ihrer Gruppierung abweicht, muss er im Skript angepasst werden. Das Skript bewirkt, dass die Gruppierung, die das Feld "Ort" enthält, nicht angezeigt wird, wenn der Requestwert den Wert "intern" hat. Mit dem Wert "extern" wird die Gruppierung eingeblendet.



Wird die Eingabeseite im Browser über das Applikationsmenü "Eingabeseite" aufgerufen, werden keine Requestwerte übermittelt. Weil die Terminart somit nicht automatisch gefüllt werden kann, sollen alle Elemente bis auf die Überschrift auf der Eingabeseite ausgeblendet werden. Dazu werden die Elemente gruppiert und das folgende Skript in der bedingten Anzeige der Gruppierung hinterlegt:
#if($Request.get('rq_custType') || $DC.getRecId() != -1)
	#set($show_simplegroup9BA104CE = true)
#else
	#set($show_simplegroup9BA104CE = false)
#end
Mit der Datensatz-Id -1 wird hier gesteuert, dass die Gruppierung eingeblendet wird, wenn ein bestehender Datensatz aufgerufen wird - z.B. über die Ansichtstabelle auf der Seite "Übersicht". Bei neuen oder noch nicht gespeicherten Datensätzen hat die Datensatz-Id den Wert -1. Die dynamische Anzeige der Seitenüberschrift wird mit dem Element Statischer Text, das auf dem Reiter Optionen die Einstellung "Programmierung, nur Standardsprache" hat, bewirkt.



Hier ist das folgende Skript eingetragen:
## Seitenüberschrift per VTL bestimmen
#if($Request.get('rq_custType') == 'intern')
	Interner Termin
#elseif($Request.get('rq_custType') == 'extern')
	Externer Termin
#elseif($DC.getRecId() != -1)
	Termin überarbeiten
#else
	Sie haben diese Seite über einen unzulässigen Link aufgerufen
#end
Damit zeigt sich der Seitentitel wie folgt: Damit der Ort bei bestehenden Datensätzen bearbeitet werden kann, kann das Skript in der bedingten Anzeige der Gruppierung um das Feld "Ort" und dessen Titel auf der Eingabeseite wie folgt angepasst werden:
#if($Request.get('rq_custType') == 'intern')
	#set($show_simplegroupAC182D08 = false)
#elseif($Request.get('rq_custType') == 'extern' || $DC.getValueHolder('textcontrol4A4C39CA').getValue() == 'extern')
	#set($show_simplegroupAC182D08 = true)
#end
Im Skript wird dann der Wert im Feld "Terminart" geprüft und die Gruppierung entsprechend behandelt. Achten Sie darauf, dass Sie auch hier evtl. wieder den Namen der Gruppierung oder des Feldes "Terminart" anpassen müssen.