Der S10 Listgenerator /s10/util kann Listen mit einer Master-Detail Struktur erzeugen. Als Beispiel hier eine Liste von Service-Aufträgen, die aus dem SAP-View VIAUFKST generiert ist:

Die Grundliste gibt pro Serviceauftrag eine Zeile aus (Auftragsnummer, Kurztext,...). Bei Klick auf eine Zeile wird die Detailinformation (Arbeitsplatz, ABC-Kennzeichen,...) ausgeklappt.

Die Definition der Liste und des Detailbereichs:

Wir wollen in dem ausgeklappten Bereich nun als weitere Information eine Tabelle der Auftragsvorgänge ausgeben, und zwar jeweils Vorgangsnummer und Kurztext:

 

Der S10 Generator bietet hierzu keine Option; wir bauen deshalb die zusätzliche Tabelle in das generierte Coding ein. Hierzu brauchen wir einen Teil in ABAP (Definiton der Vorgangstabelle, Einlesen der Daten) und einen Teil in HTML (Anzeige der Vorgangstabelle).

Das Vorgehen ist wie folgt:

1. Zeilenstruktur der Tabelle als lokale ABAP-Klasse definieren

Wir benötigen als Spalten die Vorgangsnummer und den Kurztext des Vorgangs. Die ABAP-Klasse können wir im ABAP Editor eingeben oder in /s10/util als S10 Klasse generieren lassen, was insbesondere bei zahlreichen Spalten Zeit spart. Als zugrundeliegende Datenbanktabelle verwenden wir den View VIAUFK_AFVC:

Bei der Generierung werden die Schlüsselfelder des Views automatisch ergänzt, in diesem Fall AUFPL und APLZL, die wir hier nicht benötigen; es schadet aber auch nichts, wenn wir sie in der Klasse drin lassen.

Der Name der Klasse ist beliebig; wir wählen "afvc_db":

class afvc_db definition inheriting from /s10/any.
  public section.

    data:
      vornr type viaufk_afvc-vornr
      ltxa1 type viaufk_afvc-ltxa1.

    constants:
      dbtablename type string value 'viaufk_afvc'
endclass.

 

2. In der ABAP-Klasse, die für die Detailausgabe zuständig ist, eine Tabelle mit der neuen Klasse als Zeilenstruktur anlegen

In unserem Fall heisst die Detailklasse "viaufk_detail". Wir ergänzen die "Public" Daten der Klasse um folgende Zeile, mit der wir die Vorgangstabelle "tabafvc" definieren:

    datatabafvc type table of ref to afvc_db.

 

3.  In der ABAP-Klasse, die für die Detailausgabe zuständig ist, eine build-Methode implementieren, welche die Tabellendaten einliest

In unserem Fall benötigen wir als Schlüssel nur die Auftragsnummer. Wir lesen die Daten über den View VIAUFK_AFVC:

    methods:
      build_tabafvc
        importing
          aufnr type viaufkst-aufnr
        exporting
          tabafvc type table.

 

class viaufk_detail implementation.
   method build_tabafvc.

     s10databaseselect(
        exporting
          condition = |aufnr = @aufnr|
      changing
         folder =tabafvc ).

  endmethod.
endclass.

Damit sind wir mit dem ABAP-Teil fertig. Das gesamte Coding ist so gehalten, dass wir zum Hinzufügen weiterer Spalten in der Vorgangstabelle nur die entsprechenden Felder in der Klasse afcv_db aufnehmen müssen.

 

Nun zum HTML-Teil:

4. In der HTML-Datei nach Ausgabe der Detailfelder die Ausgabe der Tabelle aufnehmen

Diese sieht in unserem Fall wie folgt aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10 
11
12
13
14
15
16
17
18
19
<div class="infoblock" style="height: auto; width: auto"
        data-s10title="Vorgangstabelle" name="tabafvc">

        <!-- column headers -->
        <div class="colheaders">
            <div class='colhead' style="width: 60px;">Vorgang</div>
            <div class='colhead' style="width: 400px;">Kurztext</div>
        </div>

        <!-- list rows -->
        <form class='table' name='myviaufk.tabafvc'>

            <div class="tablerow">
                <div class='outputcelldiv ' style="width: 60px;" name="vornr"></div>
                <div class='outputcelldiv ' style="width: 400px;" name="ltxa1"></div>
            </div>

        </form>
</div>

 

Erläuterungen:

Zeile 1: Die Klasse "Infoblock" wird verwendet für alle Teile des Detailbereichs, die separat über die Layoutdefinition steuerbar sind

Zeile 2: Mit "data-s10title=" geben Sie einen frei wählbaren Text an, der in der Layoutdefinition dem Benutzer angezeigt wird. Unter "name=" den Tabellennamen nennen.

Zeile 5 und folgende: Die Spaltenüberschriften. 

Zeile 11: Ein <form> Tag mit dem Namen der Tabelle. Da die Tabelle in dem Detailobjekt "myviaufk" liegt, ist der gesamte Name "myviaufk.tabafvc". Den Namen des Detailobjekts sehen Sie auch in den darüberliegenden Einzelfeldern in der HTML-Datei, z.B. <span class='output' name='myviaufk.tplnr'>

Zeile 14 und folgende: Spalten der Vorgangstabelle. Bei "width" die gleiche Breite angeben wie in den Überschriften.

5. Die Ausgabe der Tabelle in der Layoutdefinition einschalten

Die Layoutdefinition sieht in unserem Fall wie folgt aus:

 

Jetzt erscheint die Vorgangstabelle beim Ausklappen einer Zeile:

Falls die Vorgangstabelle in der Layoutdefinition nicht eingeschaltet ist,  ruft das S10 Framework  die build-Method der Vorgangstabelle tabafvc nicht auf, sodass keine unnötigen Datenbankzugriffe anfallen und keine Tabellendaten zum Browser gesendet werden.