Tabellen im LiveCycle Designer

Aus SAP-Wiki
Zur Navigation springenZur Suche springen


Eines der zentralen Elemente bei der Formularentwicklung ist die Darstellung von Tabellen, die abhängig von der Anzahl der Datensätze in einer internen Tabelle auf dem Formular ausgegeben werden.

Tabelle in der Adobe Forms-Schnittstelle

In der Schnittstelle vom Formular ZOM_ORDER wird u. a. eine Tabelle IT_ZOM_FORM_POS mitgeliefert, was auch am Symbol Tabellen4.jpg zu erkennen ist.

Der Importparameter IT_ZOM_FORM_POS (Positionsdaten für Formular) hat den Typ (hier Tabellentyp) ZOM_ORDER_DATA_FORM_POS_T.

Tabellen1.jpg

Der Tabellentyp ZOM_ORDER_DATA_FORM_POS_T typisiert auf den Zeilentyp (Struktur) ZOM_ORDER_DATA_FORM_POS.

Tabellen2.jpg

In der Struktur ZOM_ORDER_DATA_FORM_POS gibt es eine Reihe von Feldern. U. a. gibt es hier ein Feld DEL_LIFADR_TXT, was ebenfalls als Tabellentyp definiert ist. Hier liegt also eine tiefe Struktur vor.

Tabellen3.jpg

Tabelle im Kontext

Die Tabelle IT_ZOM_FORM_POS wird nun aus der Schnittstelle in den Kontext des Formulars ZOM_ORDER gezogen. Die Tabelle erkennt man am Namen IT_ZOM_FORM_POS und dem Tabellensymbol Tabellen4.jpg. Unter dem Tabellensymbol gibt es stets einen Knoten DATA.

Die Liste der Felder unter DATA wird sichtbar, wenn DATA aufgeklappt wird. Hier gibt es wiederum das Feld DEL_LIFADR_TXT, was das Tabellensymbol mit einem DATA-Knoten hat.

Tabellen6.jpg

Die Tabelle kann mit dem Feld "Status" von "Aktiv" auf "Inaktiv" geschaltet werden, wenn man die Tabelle nicht mehr im Formular benötigt. Diesen Schalter kann man auch gut zu Testzwecken nutzen, um temporär eine Tabelle zu deaktivieren. Eher selten wird man die Zeilenausgabe beschränken durch die Felder "Von Zeile" und "Bis Zeile". Die Zeilen werden entsprechend der Sortierung in der internen Tabelle ausgegeben.

Tabellen7.jpg

Tabellenausgabe im PDF

Im Formular soll nun eine Tabelle ausgegeben werden, wo bei Datensatz der internen Tabelle einmal fünf Felder nebeneinander in einer Zeile ausgegeben werden und noch weitere Felder, für die jeweils eine separate Zeile vorgesehen ist. Als weitere Anforderung besteht das Feld "Lieferung" wiederum auch aus einer Tabelle mit n Einträgen. Hier gibt es zwei Einträge "Textzeile1a" und "Textzeile1b". Da es hier bei Datensatz der Kopftabelle mehrere Zeilen gibt, wird auch jeweils die Kopfzeile mit "Einzelleistungs-Nr., "Bezeichnung" etc. wiederholt.

Tabellen8.jpg

Tabelle im Adobe LiveCycle Designer

Tabelle einfügen per Assistent

In der Tabellendefinition vom Formular ZOM_ORDNER gibt es nun in der Hierarchie das Teilformular TAB_LEISTUNGEN. Unter diesem Teilformular wurde ein Tabellenobjekt POS_NEU hinzugefügt über das Menü des Adobe LiveCycle Designer "Tabelle - Tabelle einfügen".

Tabellen11.jpg

Es werden 5 Spalten gewünscht und eine Kopfzeile, und keine Fußzeile.

Tabellen12.jpg

Kopfzeile und Positionszeile(n) einfügen

Unter dem Tabellensymbol Tabellen13.jpg POS_NEU gibt es das Kopfzeilensymbol Tabellen14.jpg POS_KOPF und das Positionssymbol Tabellen15.jpg POS_DAT.

Kopfzeile

Tabellen16.jpg

Unter der Kopfzeile POS_KOPF gibt es hier fünf Felder GV_LEISTUNGSNR, GV_BEZEICHNUNG etc. Sie haben in diesem Fall den Typ Tabellen18.jpg, da in diesem Fall der Text über die Schnittstelle sprachabhängig geliefert wird. Sehr häufig wird der Typ Tabellen19.jpg verwendet und der Beschreibungstext direkt in die Formularvorlage geschrieben.

Positionszeilen

Meist gibt es in einer Tabelle nur eine Positionszeile. Die Datenbindung des DATA-Knotens wird dann auch an den Positionsknoten gebunden.

Gibt es in einer Tabelle mehrere Positionszeilen, dann ist es leider NICHT MÖGLICH an jede Positionszeile den DATA-Knoten zu hängen. Versucht man das, wird nur die erste Positionszeile ausgegeben.

Da in diesem Fall jedoch pro Datensatz der internen Tabelle weitere Felder in separaten Zeilen ausgegeben werden sollen und gibt es fünf weitere Positionszeilen (POS_LEISTUNGSBESCHR, POS_LIEFERTERMIN, ..). Dann kann der DATA-Knoten an den Tabellennamen/Wurzelknoten der Tabelle (hier „POS_NEU“) gebunden werden. In so einem Fall würde jedoch die Kopfzeile und die Fußzeile auch für jeden DATA-Datensatz ausgegeben werden. Das ist meist nicht erwünscht.

Tabellen9.jpg


Tabellen22.jpg

Es ist in so einer Konstellation möglich genau eine Positionszeile zu nutzen, an der der DATA-Knoten gebunden ist, und in dieser einen Positionszeile fügt man dann alle Itemfelder ein, die mittels Teilformularen strukturiert werden.

Angepasste Positionszeilen einfügen

Bei den weiteren Positionszeilen POS_LEISTUNGSBESCHR, POS_LIEFERTERMIN, POS_KOSTENSTELLE und POS_KONTONUMMER gibt es jeweils ein Feld pro Zeile.

Tabellen24.jpg

Wenn man eine Positionszeile in der Hierarchie kopiert, hatte er natürlich zunächst auch jeweils fünf Felder für die eingefügte Positionszeile. Man kann dann auch nicht einfach vier Felder löschen. Das lässt der Adobe LiveCycle Designer nicht zu. Man kann jedoch die fünf Felder markieren und über das Kontextmenü "Zellen zusammenführen" wählen. Dann werden die Felder auf ein Feld zusammengefasst.

Tabellen23.jpg

Untertabelle hinzufügen vom Typ "Tabelle"

In der Positionszeile POS_LIEFERUNG befindet sich nun auch eine Tabelle DELIVERY.

Hier gibt es eine Kopfzeile und eine Positionszeile.

Tabellen25.jpg

In diesem Fall hat diese Tabelle auch nur eine Spalte TDLINE. Sie kann wie die übergeordnete Tabelle POS_NEU eingefügt werden. In der Positionszeile "Zeile1" gibt es nun eine Tabelle mit fünf Einträgen "Herr", "Max Lieferung", etc. Nach dieser Untertabelle wird die nächste Positionszeile POS_KOSTELLE dargestellt.

Tabellen26.jpg

Untertabelle hinzufügen vom Typ "Teilformular"

Hat man eine geschachtelte Tabellenhierarchie mit Oberteile und abhängiger Untertabelle kann die Untertabelle auch als Teilformular hinzufügt werden.

Tabellen35.JPG

Tabellen27.JPG

Hier gibt es eine Obertabelle, wo der Loop in der Positionszeile "ZEILE" erfolgt mit der Bindung "$.HAUPTDATEN.HU_ANZHU.DATA[*]". Hier werden Spalten wie "ANZHU" und "VEBEZ" dargestellt. Das Feld "STAWN" ist jedoch eine Untertabelle der Obertabelle ZEILE.

Tabellen28.JPG

Man muss jedoch aufpassen, wenn die Untertabelle eine Spalte der Obertabelle ist, dass das Teilformular, auf dass die Datenbindung auf die Untertabelle erfolgt, unter einem Teilformular hängt, was nicht gebunden ist. Sonst werden die Datensätze der Untertabelle nicht innerhalb der Spalte dargestellt. Das Teilformular "TAB_STAWN_spalte" ist nicht gebunden.

Tabellen29.JPG

Tabellen30.JPG

Die eigentliche Untertabelle hängt am Teilformular "TAB_STAWN". Hier ist die Bindung/der Loop über "$.STAWN.DATA[*]".

Tabellen31.JPG

Tabellen32.JPG

Hier ist nun das Feld "STAWN" enthalten.

Tabellen33.JPG

Tabellen34.JPG

Nun wird das Feld "STAWN" mit mehreren Einträgen pro Zeile dargestellt.

Tabellen36.JPG

Hinweis zur Vorsicht

  • In einem Formular in einem Projekt wurde eine zweistufige Tabellenhierarchie realisiert. Auf oberster Ebene eine Tabelle als Tabellenobjekt und auf der Positionszeile der (Ober-)Tabelle gab es für zwei Spalten jeweils eine Untertabelle. Die eine Untertabelle wurde durch einen normalen Tabellenknoten realisiert, die andere Untertabelle durch ein Teilformular mit Tabellenbindung. Auf der Obertabelle und den Untertabellen gab es sehr viele Datensätze. Dies sah für 12 DIN-A4 alles korrekt aus. Die Untertabellen wurden jeweils innerhalb des MAIN-Bereichs korrekt umgebrochen. Ab Seite 13 wurde die Untertabelle, die als Teilformular realisiert war, jedoch bis zum letzten Millimeter auf der betreffenden DIN-A4-Seite dargestellt und der Rest wurde abgeschnitten. Jede weitere Seite hatte den gleichen Fehler. Dies sah nach einem heftigen Adobe Forms-Bug aus, welcher einen OSS-Hinweis erfordern würde.
  • Als das Teilformular mit Tabellenbindung auf einen klassischen Tabellenknoten umgestellt wurde, verschwand jedoch der Fehler.
  • Im Zweifel sollte daher ein klassischer Tabellenknoten verwendet werden und zumindest nicht auf einer Untertabellenebene Tabellenknoten und Teilformulare mit Tabellenbindung vermischt werden.

Untertabelle hinzufügen vom Typ "Tabelle" (Schulungsbeispiel "FP_TEST_NESTED_TABLE")

Im SAP-Schulungsformular "FP_TEST_NESTED_TABLE" sieht man auch gut den korrekten Aufbau zur Nutzung von mehreren hierarchischen Tabellen.

In diesem Fall im Flugdatenmodell eine Tabelle mit CONNECTIONS (Flugverbindungen) und eine untergeordnete Tabelle mit BOOKINGS (Buchungen der Flugverbindungen).

SFPTabelle1.JPG


SFPTabelle2.JPG


SFPTabelle3.JPG


SFPTabelle4.JPG


SFPTabelle5.JPG


SFPTabelle6.JPG


Die Ausgabe (Programm = FP_TEST_NESTED_TABLE) ist nicht schön, aber man sieht die Verschachtelung der Flugverbindungen und der Buchungen.

SFPTabelle7.JPG

Tabelle mit Kopfzeile, Itemzeilen und Fußzeile

Tabellentyp2.JPG

Diese Tabelle hat eine Kopfzeile, Itemzeilen und eine Fußzeile.

Tabellentyp1.JPG


Die Tabelle referenziert auf die Tabelle im Kontext.

Tabellentyp3.JPG


Während die Kopfzeile der Tabelle keine Bindung hat, da hier nur Überschrifttexte sind, bindet die Itemzeile auf den DATA-Knoten der Tabelle.

Tabellentyp4.JPG


Die einzelnen Felder unter dem DATA-Knoten müssen so also nur noch den Feldnamen binden, wie hier $.VOTXT.

Tabellentyp5.JPG


In der Fußzeile, die hier etwas unglücklich ZEILE1[1] benannt ist, bindet auf ein Feld im Kontext außerhalb der Tabelle.

Tabellentyp6.JPG

Tabellentyp7.JPG

Kopfzeile in aufeinander folgenden Seiten

Aus optischen Gründen ist es bei einer Tabelle oft erwünscht, dass sich die Überschriftenzeile auf jeder Ausgabeseite wiederholt. So lassen sich die DATA-Spalten auf den Folgeseiten besser zuordnen.

Hier soll die Überschriftenzeile "Ueberschriften" auf jeder Ausgabeseite wiederholt werden.

TabellenueberschriftWiederholen1.JPG


Die Überschriftzeile ist vom Typ "Kopfzeile".

TabellenueberschriftWiederholen3.JPG


Auf dem Reiter "Paginierung" sind die Checkboxen bei "Kopfzeile in erste Seite einschließen" und bei "Kopfzeile in aufeinanderfolgenden Seiten" gesetzt.

TabellenueberschriftWiederholen2.JPG


Soll die Kopfzeile auf jeder Ausgabeseite wiederholt werden, muss auch "Zeile für jedes Datenelement wiederholen" gesetzt sein, sonst würde die Kopfzeile nur 1 x ausgegeben werden.

Wiederholen6.JPG


Wenn die Tabellenzeile keine Kopfzeile ist, wie hier bei der DATA-Tabellenzeile, sind auch die Felder für die Darstellung der Kopfzeile inaktiv.

TabellenueberschriftWiederholen4.JPG


TabellenueberschriftWiederholen5.JPG

Tabellensätze ausgeben mit Bedingung

Sehr nützlich kann es sein, Positionen einer Tabelle nur unter bestimmten Bedingungen auszugeben, bzw. entsprechend von Ausprägungen von Werten in einer Zeile unterschiedliche Formate auszugeben.

Hier gibt es eine Seite DATA_TABELLE, in der auf einen Tabelle im Kontext bindet.

LVCTabellenloopWhere1.jpg

LVCTabellenloopWhere3.jpg

LVCTabellenloopWhere9.jpg

Im Teilformularsatz IFS_DATA_TABELLE gibt es 3 Teilformulare DATA_TYP_FETT, DATA_TYP_STD und DATA_TYP_FUSS. Sie werden jeweils entsprechend der Ausprägung des Wertes ZEILENLAYOUT mit '01', '02' oder '03" ausgegeben.

LVCTabellenloopWhere2.jpg

Die Teilformulare binden

$.DATA.[ZEILENLAYOUT == "01"]

oder

$.DATA.[ZEILENLAYOUT == "02"]

oder

$.DATA.[ZEILENLAYOUT == "03"]

LVCTabellenloopWhere5.jpg

LVCTabellenloopWhere4.jpg

LVCTabellenloopWhere6.jpg

Unter den 3 Teilformularen DATA_TYP_FETT, DATA_TYP_STD und DATA_TYP_FUSS werden jeweils die Felder/Spalten SPALTE01, SPALTE02, etc. ausgegeben. Das Feld ZEILENLAYOUT wird nicht ausgegeben, da nur für die Logik der Unterscheidung von Header, verschiedenen Items und Fuß diente.

LVCTabellenloopWhere10.jpg

LVCTabellenloopWhere7.jpg

In diesem Beispiel wurde die Headerzeile der Tabellenausgabe auch innerhalb der Items/DATA mitgegeben. Das ist etwas schlechter Stil, da man dann nicht mehr die Tabelle über mehrere Seiten ausgeben kann, wo jeweils die Headerzeile pro Seite wiederholt wird. Manchmal kann man jedoch sicher sein keine Tabellenausgabe über mehrere Seiten zu haben oder es nicht erwünscht, dass sich die Headerzeile auf jeder Seite wiederholt.

LVCTabellenloopWhere13.JPG

LVCTabellenloopWhere14.JPG

In vielen Fällen wird es aber besser sein eine Tabelle über das Datenelement TABELLE auszugeben, wo man explizit eine Headerzeile definieren kann und dann beim Überlauf/Seitenumbruch auch angeben kann, dass diese Headerzeile erneut ausgegeben werden soll.

Tabellen21.jpg

Tabellenhöhe dynamisch

Die Tabellenhöhe ist für die Tabelle und deren Tabellenzeilen immer dynamisch. Das lässt sich nicht deaktivieren.

Tabellenhoehe1.JPG


Tabellenhoehe2.JPG


Tabellenhoehe4.JPG


Tabellenhoehe3.JPG


Bei den Zellen in den Tabellenzeilen hängt es davon ab welcher Datentyp die Objekte in den Zellen haben.

Bei einem Feld vom Typ "Text" ist die dynamische Höhe deaktiv, weil während der Laufzeit sich der Text auch nicht ändern kann.

Tabellenhoehe5.JPG


Tabellenhoehe6.JPG


Bei Feldern mit variablem Inhalt wie "Textfeld", "Numerisches Feld", "Dezimalfeld", "Datums-/Uhrzeitfeld" etc. lässt sich die Checkbox bei der Höhe "Passend erweitern" setzen.

Wenn bei der Ausgabe von Feldern mit dynamischem Inhalt zwar die Checkbox "Mehrere Zeilen zulassen" gesetzt ist, aber nicht bei der Höhe "Passend erweitern", dann kommt es manchmal dazu, dass der Text eines Feldes abgeschnitten wird. Hier muss dann die Checkbox bei der Höhe "Passend erweitern" gesetzt werden.

Tabellenhoehe7.JPG


Tabellenhoehe8.JPG

Anzahl Datensätze Tabelle im Formular ausgeben

$record.SEITE_RS.IT_ABLESUNG_03.DATA[*].GV_LINES_03

Gruppenstufen

Mit Gruppenstufen kann eine flache Tabelle hierarchisch ausgegeben werden.

Zum Beispiel bei der Tabelle der Flugverbindungen der Fluggesellschaften SFLIGHT würde eine Fluggesellschaft immer wieder ausgegeben werden, um alle Einzelverbindungen aufzuführen. Besser lesbar kann es sein, wenn man nur einmal die Fluggesellschaft ausgibt und dann in der nächsten Spalte die Flugverbindung.

Gruppenstufen1.JPG

Die Gruppenstufe fügt man über die Schaltfläche Gruppenstufen2.JPG hinzu. Die anderen Felder werden ganz normal unter dem GROUP-DATA-Knoten ausgegeben.

Die interne Tabelle muss bereits vor der Ausgabe nach den Gruppenstufenfeldern sortiert sein.

In diesem Beispiel wird die Tabelle nach GERAET gruppiert.

Gruppenstufen3.JPG

Siehe zu Gruppenstufen auch die SAP-Hilfe und SAP Interactive Forms by Adobe, 2. Auflage, von Jürgen Hauser, u. a., S. 169-173.

Tabellen verbrauchen sich bei Nutzung

Adobe Forms Tabelle zusammenhalten (Titel, Überschriftenzeile, Data)

Tabellenabschnitt

Siehe https://help.adobe.com/de_DE/livecycle/11.0/DesignerHelp/WS92d06802c76abadb-5ec05741129b8b006dd-7fa0.2.html.

  • Mit einem Tabellenabschnitt lassen sich Zeilen einer Tabelle zu einer Einheit zusammenfassen.
  • Die Zeilen lassen sich markieren mit gehaltener STRG+Taste, um mehrere Zeilen zu markieren und dann mit rechter Maustaste "Als Abschnitt gruppieren".

Teilformular zur Tabellenausgabe

  • Ein Teilformular kann in vielen Fällen auch sinnvoll für einfache Tabellenausgabe verwendet werden.
  • Komplexe Tabellen sollten jedoch mit dem UI-Tabelle "Tabelle" ausgegeben werden. Hier wird z. B. die Anlage einer Überschriftenzeile und Fußzeile vereinfacht.

Web-Links

Literatur