Mit Scripting Objekte ausblenden und einblenden

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

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.

TeilformularAusbl2.jpg

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.

TeilformularAusbl1.jpg

Ausblenden ausgehend vom Teilformular

Scripting1.jpg


Scripting2.jpg


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.

Scripting3.jpg


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.

ScriptAusblenden2.JPG


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

ScriptAusblenden1.JPG


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

AGB1.jpg

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