Zum Inhalt

Subtabellen

This tutorial is currently only available in German.

Realisierung interner Subtabellen

Um in einer Tabelle Informationen anzeigen zu können, müssen zuerst passende Spaltendefinitionen erstellt werden. Hierzu definieren wir in den Properties des Controls SubtableView subtable die gewünschten Spalten. Nach einem Klick auf den Button Edit Columns öffnet sich der Column-Editor, in dem man die gewünschten Spalten anlegen kann.

Wir wählen den Spaltentyp Text Column, da die Subtable zur Anzeige der Resultat-Tabelle einer Datenbankabfrage verwendet wird. Für alle anzuzeigenden Spalten, der dem Control zugeordneten Datenbankabfrage, muss mittels entsprechendem Eintrag im Feld datatype eine typgerechte Text Column (INTEGER, FLOAT, STRING, …) angelegt werden. Wir legen hier die Spalten TeileNr, Anzahl, Farbe und Preis mit den Datentypen String, Integer, Integer und String an. Die weiteren Eigenschaften Name ist hier (wieder) der (interne) Name des Controls und Caption dient zur Festlegung der Spaltenüberschrift im Formular.

Der FillMode für jede Spalte muss auf Database gesetzt werden, das Feld DatabaseQuery der Spalten muss jedoch leer bleiben (sonst wird für jede Zeile der Tabelle die Abfrage neu gestartet und jede Zeile zeigt dasselbe Ergebnis und zwar das erste Ergebnistupel an). Deswegen sollen wir auf der Spaltenebene einer Subtabelle keine neuen DB-Abfragen ausführen.

Hinweis

Die Aktualisierung des Inhalts der SubtableView wird mittels assoziierter Datenbankabfrage nur einmalig beim Start des Prozessschritts durchgeführt. Eine „Parametrisierung“ der Datenbankabfrage ist deshalb nur mittels Input-Parameter der Aktivität oder mittels Controls, die vorbelegte Werte aufweisen, möglich. Ein nochmaliges Reload der Subtable-View führt zu einem Fehlschlag der WebForm-Aktivität!

  • Properties der Spalte TeileNr
  • Properties der Spalte Anzahl
  • Properties der Spalte Farbe
  • Properties der Spalte Preis

Die Ergebnisspalten aus der Datenbankabfrage Bestimmen Auftragspositionen werden den Spalten in der Subtabelle zugewiesen. Lässt man in der Properties-Ansicht das Feld Databasecolumn der Spalte leer, dann wird die erste Ergebnisspalte darauf gemappt.

Wenn man Änderungen am Tabelleninhalt möglich machen will, dann kann man das mit readonly Attribut der Spalte erreichen. Durch Setzen des readonly Attributs auf true oder false auf Spaltenebene wird entschieden, ob diese Spaltenwerte änderbar sind.

Sollen aber neue Zeilen zur Tabelle zur Laufzeit hinzugefügt werden, dann muss die addremove Eigenschaft des Controls subtable auf true gesetzt werden. Durch Betätigung des "+" Buttons wird eine neue leere Zeile hinzugefügt (oder auch gleich einen ganzen Block leerer Zeilen in der angegebenen Anzahl (Number of new Rows)). Durch Betätigung des "-" Buttons neben einer Zeile wird diese gelöscht.

Zur Laufzeit sieht dann das Formular mit einer leeren Zeile wie folgt aus.

Realisierung von Output-Subtabellen

Angenommen, wir wollen in unserem Prozessschritt die Auftragspositionen nicht nur anzeigen, sondern auch die Möglichkeit schaffen, die Einträge bei Bedarf ändern zu können, bevor im nächsten Prozessschritt der Auftrag bearbeitet wird (siehe folgende Abbildung).

Hinweis

Nach der Einbindung einer Aktivität an einen Prozessschritt kann das Datenelement nicht mehr über Change Operations hinzugefügt werden. Dafür müssen Sie das Datenelement im Assistenten der Aktivität zuordnen. In unserem Beispiel tragen wir die Subtable Auftragstabelle als Output Parameter im Assistenten des Prozessschrittes Auftrag anzeigen ein.

Hierzu müssen wir eine Datenstruktur bereitstellen, welche ganz (oder in Auszügen) die angezeigte Subtabelle auf eine Datenstruktur abbildet, die bei Abschluss der Aktivität als (XML-Strukturierer) Ausgabeparameter vom Typ UDT:subtable zurückgegeben wird.

Zur Erzeugung unserer „Subtable-Datenstruktur“ wählen wir im Edit-Menü -> Subtables aus, worauf sich das „Subtables-Fenster“ öffnet und uns das Anlegen einer Subtable-Datenstruktur ermöglicht, welcher wir im Beispiel den Namen auftragspos_subtable gegeben haben.

Als nächstes legen wir für alle Spalten der Formular-Subtabelle, die wir mittels unserer Subtable Datenstruktur später nach außen geben wollen, ebenfalls Spalten an, und zwar entsprechend deren gewünschtem Ausgabedatentyp (STRING, INTEGER, FLOAT, …) in der XML-Struktur.

Wenn wir in unserem Beispiel in diesem Sinne alle Spalten „spiegeln“ möchten, könnten die Einträge wie in der folgenden Abbildung dargestellt aussehen. Die Spaltennamen in der Subtable-Datenstruktur müssen hierbei nicht identisch mit den Spaltennamen in der Formulartabelle sein. Diese Abbildung wird explizit festgelegt (siehe unten) und nicht etwa „by name“.

Nachdem wir die Subtable-Datenstruktur angelegt haben, verknüpfen wir sie mit der Formular-Tabelle, indem wir in den Daten-Properties der Formular-Tabelle im Feld Subtable die dort nunmehr zur Auswahl angebotene Subtable-Datenstruktur auswählen.

Anschließend öffnen wir in der SubtableView der Formular-Tabelle durch Anklicken des Buttons Edit Columns die Columns-Auflistung und ordnen dort nun jeder „gespiegelten“ Formularspalte die entsprechende Spalte der Subtable-Datenstruktur zu.

Die Verknüpfung unserer Subtable-Datenstruktur mit dem Subtable-Ausgabeparameter stellen wir dadurch her, dass wir entweder (in gewohnter Weise) die Process Data View öffnen und den Ausgabeparameter auf die Formular-Tabelle ziehen (mit der unsere Subtable-Datenstruktur ja intern verknüpft ist) oder in dem wir in der Properties-Ansicht im Feld Output-Parameter den Namen des Ausgabeparameters eintragen. Der Ausgabeparameter muss vom Typ UDT:subtable sein.

Die Verarbeitung des Inhalts dieses Ausgabe-Parameters in einem nachfolgenden Prozessschritt zeigen wir Ihnen anhand eines Beispiels im Abschnitt Auftragserfassung. Für den Umgang mit Parametern vom Typ USERDEFINED subtable siehe auch WebForm Designer.