Mit dem S10-Framework können Sie Benutzerdialoge in globalen ABAP Klassen implementieren und dadurch anwendungsübergreifend verwenden. Die ABAP Klasse enthält also nicht nur die Verarbeitung von Daten, sondern auch die zugehörige Benutzeroberfläche.

Zur Integration der Dialogteile anderer Klassen in Ihre Anwendung gibt es zwei Möglichkeiten:

Hier besprechen wir die erste Möglichkeit. Sie ist unproblematischer als das Einbetten über iFrames, da die beiden Oberflächen dann unabhängig bleiben. Zur iFrames-Lösung finden Sie alle Details und ein Beispiel in der Anleitung Inline Frames.

1. Einblenden von Dialogen der Klassenbibliothek

Für unser Beispiel nehmen wir eine Drucktaste "Servicemeldungen anzeigen" in eine Seite mit Kundeninformationen auf (hier aus der Demoanwendung "CIS"):

Das HTML-Coding dazu:

<div class="subtitle">
   Service
</div>
<div style="padding: 10px 10px 0px 10px">
  <button type="button" class="button" 
       onclick="S10Apply('list_notifications')">
                Servicemeldungen anzeigen
  </button>
</div>

In der ABAP Methode "list_notifications" legen wir ein Objekt der Klasse /s10/customer an, welche die Meldungsliste implementiert, und rufen die Liste als normale ABAP Methode auf:

  method list_notifications.

* create customer object
    data:  mycustomer  type ref to /s10/customer.
    create object mycustomer.
    
* display notification list
    mycustomer->list_notifications( kunnr ).

  endmethod.

Mehr ist nicht zu tun; der Benutzer erhält bei Klick auf "Servicemeldungen anzeigen" die gewünschte Liste. Dort sind Interaktionen (Filtern der Daten, Zeilenselektion) möglich, die unabhängig von unserer eigenen Anwendung in der Klasse /s10/customer implementiert sind:

Mit dem "Zurück" Button geht es wieder in unsere Anwendung zurück.

 

2. Implementierung des Dialogs in der ABAP Klassenbibliothek

Zunächst entwickelt man einen Dialogteil meist lokal, das heißt in einem separaten ABAP-Programm und mit lokalen HTML-Dateien. Die S10 Generierungstools sind dabei für den raschen Einstieg nützlich; in unserem Fall etwa die Generierung einer Liste der Servicemeldungen aus der Tabelle VIQMEL:

Anschliessend transportieren wir die benötigten HTML-Views in das SAP MIME Repository, und das ABAP Programm in geeigneter Form in die SE24 ABAP Klassenbibliothek.

Für unser Beispiel wählen wir als Klassenname "/s10/customer", wobei statt /s10/ der von Ihnen genutzte Namensraum einzusetzen wäre. Im SAP MIME Repository werden die HTML-Datein dann unter /sap/bc/bsp/s10/public/customer abgelegt, mit s10 wiederum durch Ihren Namensraum ersetzt.

Wir benötigen nur eine einzige HTML-Datei, "customer.notifications.html":

Nun der ABAP-Teil. Als erstes müssen wir die bisher lokal definierten Klassen unter geeigneten Namen in der Klassenbibliothek ablegen.

In der lokal entwickelten Anwendung sehen die Klassen wie folgt aus, hier am Beispiel "viqmel_detail":

class viqmel_detail definition inheriting from /s10/any.

public section.

data:
   qmnum type viqmel-qmnum,  
   equnr type viqmel-equnr, 
   serialnr type viqmel-serialnr,
   qmdab type viqmel-qmdab.

* database table name
    constants:
      dbtablename type string value 'VIQMEL'. 

endclass.

class viqmel_detail implementation.

endclass.

ABAP-Klassenbibliothek:

Tipp: Zum Übertragen der lokalen Klasse in die Klassenbibliothek ist die "quelltextbasierte" Sicht in SE24 praktisch, da wir dort einfach die Klassendefinition hineinkopieren können:

 

Anschliessend nehmen wir die in der HTML-Oberfläche benötigten Attribute in der Klasse /s10/customer auf:

 

Den Typ der Tabelle "tabviqmel" können wir dabei nicht direkt eingeben, aber in der quelltextbasierten Sicht:

 

Jetzt fehlen noch die benötigten Methoden, die wir am einfachsten ebenfalls direkt im Quelltext übertragen:

Die Methoden erscheinen dann nach Generierung der Klasse in der Methodenübersicht:

 

3. Fazit