Scripting Bedingter Seitenumbruch

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Es kann in einem Projekt die Anforderung kommen, dass bei einem Loop über eine Tabelle, bzw. über ein Teilformular ein Seitenumbruch erfolgen soll nach jedem Datensatz, auch wenn der Inhaltsbereich (MAIN) noch nicht komplett gefüllt ist.


Ausgangsstellung

Hier gibt es ein Teilformular "ObjektTab", über den eine Ausgabe von Objekten erfolgt. Jedes neue Objekt soll auf einer neuen Seite ausgegeben werden.

BedingterSeitenumbruch11.jpg

Standardverhalten Auffüllen Inhaltsbereich

Standardmäßig wird der Platz im Inhaltsbereich (traditionell MAIN-Bereich) einer Seite weiter genutzt, solange Platz ist. Diese Einstellung wird auf der Palette "Objekt" und dem Reiter "Paginierung" vorgenommen. Hier ist die Standardeinstellung

  • "Platzieren: Nach vorherigem" und
  • "Nach: Übergeordnet weiter füllen".

BedingterSeitenumbruch2.jpg


Nächster Inhaltsbereich

Der Lösung kommt man näher, wenn man "Nach: Nächster Inhaltsbereich" wählt. Dies bewirkt, dass nach jedem komplett abgearbeiten Teilformular "ObjektTab" eine neue Ausgabeseite erzeugt wird.

BedingterSeitenumbruch3.jpg

Angenommen die Tabelle unter "ObjektTab" hat 4 Datensätze, dann wird nach dem Datensatz ein neuer Inhaltsbereich geöffnet. Das passt für die ersten 3 Datensätze, allerdings nicht für den letzten Datensatz der Tabelle. Hier erhält man eine leere Ausgabeseite, die lediglich aus den Masterdaten besteht. Diese Vorgehensweise ist also keine Lösung.

Wenn man "Platzieren: Nächster Inhaltsbereich" wählt, dann verschiebt sich das Problem auf die erste Ausgabeseite. Dann hat man hier als erste Seite eine Seite, die lediglich aus den Masterdaten besteht.

Lösung 1: Bedingter Seitenumbruch

Daher muss man hier mit bedingten Seitenumbrüchen arbeiten. Dafür hat der Adobe LiveCycle Designer schon vorgedacht und stellt einen Assistenten bereit.

Zunächst setzt man die Markierung auf das Teilformular, über das geloopt wird.

BedingterSeitenumbruch5.jpg


Dann klickt man auf "bearbeiten".

BedingterSeitenumbruch4.jpg


Ein leeres Fenster öffnet sich. Mit dem "+" fügt man eine neue Bedingung hinzu.

BedingterSeitenumbruch6.jpg


JavaScript wird als Sprache ausgewählt.

BedingterSeitenumbruch7.jpg

Mit der Schaltfläche BedingterSeitenumbruch8.jpg öffnet sich ein Fenster, wo man eine Variable auswählen kann, auf die geprüft wird. In diesem Fall FLD05.

BedingterSeitenumbruch9.jpg

Als Folge soll dann ein Umbruch vor der Seite auf den nächsten Inhaltsbereich erfolgen.

BedingterSeitenumbruch10.jpg

Es wurde ein Coding erzeugt

if (this.resolveNode("ObjektTab[-1].FLD05") != null) { this.resolveNode("ObjektTab[-1].FLD05").rawValue != ObjektTab.FLD05.rawValue }

Hier ist allerdings noch ein Fehler im generierten Code, da der Assistent nicht beachtet, dass das Feld FLD05 nicht direkt unter dem Teilformular "ObjektTab" sich befindet, sondern ein weiteres Teilformular "Objekt", unter dem dann das Feld FLD05 gespeichert ist. Der Code muss also um das Teilformular "Objekt" ergänzt werden.

if (this.resolveNode("ObjektTab[-1].Objekt.FLD05") != null) { this.resolveNode("ObjektTab[-1].Objekt.FLD05").rawValue != ObjektTab.Objekt.FLD05.rawValue }

Dann funktioniert der Seitenumbruch wie gewünscht. Nicht vor dem ersten Datensatz (Bedingung: if (this.resolveNode("ObjektTab[-1].Objekt.FLD05") != null), aber vor jedem weiteren Datensatz.

Lösung 2: Bedingter Seitenumbruch

Eleganter ist es noch mit einem Script

this.instanceManager.count>this.instanceIndex+1

BedingterSeitenumbruch12.jpg

  • this.instanceManager.count = Anzahl der Datensätze in der Tabelle
  • this.instanceIndex = Aktueller Index der Schleife (Zählung beginnt bei 0)


Angenommen es gibt 3 Datensätze und die Tabelle wird durchlaufen

  1. this.instanceManager.count = 3, this.instanceIndex+1 = 1 ==> Neue Seite
  2. this.instanceManager.count = 3, this.instanceIndex+1 = 2 ==> Neue Seite
  3. this.instanceManager.count = 3, this.instanceIndex+1 = 3 ==> Keine neue Seite

Somit wird vermieden, dass beim letzten Datensatz der Tabelle eine schließende leere Seite erzeugt wird.

Web-Links

Literatur