Mit Scripting Objekte ausblenden und einblenden
Oft gibt es die Anforderung, dass eine gesamte Seite/Inhaltsbereich oder alle Objekte unter einem Teilformular unter einer bestimmten Bedingung ausgeblendet werden sollen. Diese Anforderung lässt sich mit JavaScript, bzw. FormCalc realisieren. In diesem Fall wird JavaScript verwendet.
Hier sollen alle Objekte unter dem Teilformular ORT_DATUM ausgeblendet werden, wenn im Feld DATE kein Inhalt ist. Neben zwei Variablen gibt es noch einen Text mit einem Komma, der zunächst auch erscheint, wenn die anderen beiden Variablen leer sind. Das ist unschön und soll verhindert werden.
Siehe Scripting Abfrage auf gefüllte Variable (null).
Vorbereiten Teilformular und Feld
Bedingung im Kontext auf Initialwert
In SAP ist der Defaultwert bei Zahlenfeldern 0 und bei CHAR-Feldern Spaces. Wenn im Scripting lediglich auf NULL abgefragt wird, wird eine Bedingung in den Kontext hinzugefügt, wo auf das eigene nicht initiale Feld (hier ein anderes Beispiel) abgefragt wird.
Abfrage auf Initialwert oder NULL
Um den Initialwert bei einer Zahl abzufragen kann abgefragt werden.
JavaScript
this.RABATT.rawValue == null || this.RABATT.rawValue == 0
Bei einem Zeichenwert
this.RABATT.rawValue == null || this.RABATT.rawValue == ""
FormCalc
$.RABATT.rawValue == null | $.RABATT.rawValue == 0
Bei einem Zeichenwert
$.RABATT.rawValue == null | $.RABATT.rawValue == ""
Teilformular
Im Teilformular muss eingestellt sein, dass beim Nichtvorhandensein von Objekten unter dem Teilformular, auch nichts ausgegeben wird.
Der "Min-Zähler" steht defaultmäßig auf 1. Hier muss der Haken rausgenommen werden.
Ausblenden ausgehend vom Teilformular
Hier klickt man zunächst auf das Teilformular und wählt dann unter "Anzeigen" den Eintrag "*initialize", damit beim Anzeigen des Formulars sofort die untergeordneten Objekte angezeigt, bzw. ausgeblendet werden.
Wenn das Feld DATE keinen Inhalt hat.
if (DATE.rawValue == null) //Vergleichsoperator ist ==
Dann werden alle Objekte unter dem Teilformular ausgeblendet, bzw. das gesamte Teilformular. Je nach Anforderung wird mit "hidden" oder "invisible" gearbeitet.
this.presence = "hidden"; //Java-Script; "hidden" blendet Objekt aus (ohne White Space)
oder
$.presence = "hidden" //Form-Calc
oder
this.presence = "invisible" //Java-Script; "invisible" blendet Objekt aus (verbleibt White Space)
oder
$.presence = "invisible" //Form-Calc
Also Coding bei Java-Script
if (DATE.rawValue == null) { this.presence = "hidden"; } else { this.presence = "visible"; }
oder Coding bei Form-Calc
if (DATE == null) then $.presence = "hidden" else $.presence = "visible" endif
Ausblenden ausgehend vom Feld im Teilformular
Wird das Ausblenden von einem Feld innerhalb eines Teilformulars gemacht, ist dies auch problemlos möglich. Mit "this.parent.presence" wird die Anzeige vom Teilformular gesteuert, in dem sich ein Feld befindet.
this.parent.presence = "hidden"; //Java-Script
oder
$.parent.presence = "hidden" //Form-Calc
Eine Anwendung wäre z. B., wenn man in einem Feld wäre, wo Wiederholungsdruck angezeigt wird. Das entsprechende Teilformular soll nur angezeigt werden, wenn das Feld REPEAT gefüllt ist.
JavaScript
if (this.rawValue == null || this.rawValue == "") { this.parent.presence = "hidden"; }
FormCalc
if ($ == null | $ == "") then $.parent.presence = "hidden" endif
Seite/Inhaltsbereich ausblenden
Grundlagen
Umfassender als Inhalte unter einem Teilformular auszublenden macht es manchmal Sinn auch eine ganze Seite/Inhaltsbereich auszublenden. Erstellt z. B. eine Versicherungsagentur einen Fragebogen, könnte man Anfangsfragen stellen, so wie "Haben Sie Kinder", und wenn dann über eine Checkbox oder Radiobutton verneint wird, dann werden ganze Seiten ausgeblendet, die sich auf die Beantwortung der Kinderfragen beziehen. So kann man den Fragebogen möglichst schlank halten, den ein Kunde zu beantworten hat.
Exakt so wie das Teilformular ausblendet wird, wird auch die Seite ausgeblendet. Da die Eingangsfragen meist jedoch auf einem anderem Inhaltsbereich abgefragt werden, muss der auszublendende Inhaltsbereich der Kinder mit angegeben werden.
PageKinder.presence = "hidden"; //JavaScript
bzw.
PageKinder.presence = "hidden" //FormCalc
Beispiel AGB anzeigen, bzw. AGB ausblenden
In einem Projekt sollte die AGB-Seite nur bei bestimmten Verkaufsorganisationen gezeigt werden.
- Im Druckprogramm wird die Variable "PRINT_AGB" mit einem 'X' gefüllt bei passenden Verkaufsorganisationen.
- Im Scripting wird mit JavaScript die Variable "PRINT_AGB" vom Kontext abgefragt, und wenn es nicht gefüllt ist, wird die Seite "AGB" ausgeblendet, in der sich der Scriptingcode befindet.
- In einem anderen Projekt wurde das Ausblenden/Einblender der AGBs in Abhängkeit von der Nachrichtenart sehr ähnlich realisiert.
- Das Textobjekt AGB im Kontext wird in Abhängigkeit voin der Nachrichtenart im Druckprogramm mit einem Textbausteinnamen gefüllt, (bzw. dem Inhalt des Textbgausteins gefüllt bzw. nicht gefüllt.
- Ausgehend vom Textfeld des AGBs im Inhaltsbereich wird das vom Textfeld AGB ausgehend das übergeordnete Element („parent“, Inhaltsbereich AGB) ausgeblendet („hidden“), wenn das Textobjekt AGB im Kontext nicht gefüllt ist. Der Inhaltsbereich AGB ist eingebettet in den MAIN-Bereich von der Masterseite AGB. Wenn der Inhaltsbereich AGB ausblendet („hidden“) wird, wird automatisch auch die Masterseite AGB nicht ausgegeben. Hier darf auf der Masterseite AGB auch nicht „Seite begrenzen: Mininum = 1“ gewählt sein.
if ($ == Null | $ == "") then $.parent.presence = "hidden" endif
Objekte einblenden
In Bezug auf den Fragebogen ist es auch denkbar mit einer schlanken Version anzufangen und in Abhängigkeit von Checkboxen oder Radiobuttons Objekte einzublenden.
Der Befehl "visible" kann sowohl verwendet werden, wenn Objekte mit "hidden" ausgeblendet wurden oder mit "invisible".
objektname.presence = "visible"; //Java-Script
oder
objektname.presence = "visible" //Form-Calc
Web-Links
Literatur
- Adobe LiveCycle® Designer ES2 und SAP Interactive Forms: Scripting für Nicht-Programmierer, S. 133f., von Ulrich Bähr