BSP-Elemente wiederverwenden

Die Aufgabe

Wie in Kapitel 11 des BSP-Praxisbuchs dargestellt, ist es einfach und empfehlenswert, wiederverwendbaren Präsentierungscode in ein BSP-Element auszulagern. Dies ist besonders dann ein gutes Vorgehen, wenn Sie ein breit ausgefächertes Projekt haben, mit einem Webauftritt, der Applikationen aus verschiedensten Bereichen unter einem Dach vereinigen soll. Beispielsweise sollen graphische Elemente - Drucktasten, Tabellen, Hyperlinks etc. - übergreifend ein einheitliches Aussehen haben und zugleich gut an ABAP-Daten zu binden sein.

Immer gut: Re-Use

Trotz der Einfachheit, eigene BSP-Elemente zu erstellen, gibt es doch gute Gründe, sich erst einmal umzuschauen: Was haben andere gemacht, welche Features bieten bestehende Bibliotheken? Könnten sich die Auftraggeber mit dem visuellen Design von Extensions wie HTMLB oder der aus dem Retail Store extrahierten Bibliothek Z anfreunden? Wenn ja, gilt natürlich hier wie überall, dass bestehender Code wiederverwendet sollte: Versuchen Sie den Seitenaufbau zuerst mit den bestehenden BSP-Extensions.

Was tun, wenn es nicht passt

Wenn es nicht geht, so ist eine Analyse gefragt. Wenn das Layout nicht gefällt, kann man es eventuell mithilfe von CSS-Eigenschaften so anpassen, dass es den Anforderungen genügt. Ist auch das nicht möglich, so muss man auf irgendeine Art die Codestrecken verändern, die letztlich den HTML-Code in den Ausgabestrom stellen (meistens in Methoden enthalten, die render( ) oder ähnlich heissen). Dafür stehen Ihnen verschiedene - auch verschieden elegante Wege zur Verfügung:

Komposition

Referenzieren der Logik mit Komposition. Definieren Sie eine eigene Extension zum Beispiel ZVW, und darin eigene Elemente, z.B. input. Um das <z:input> Element der Extension Z in ZVW verwenden zu können, erzeugen Sie in do_at_beginning() eine Instanz der Elementbehandlerklasse von <z:input> - das ist die Klasse zcl_bsp_z_input. Das machen Sie am besten mit der dafür vorgesehenen factory() Methode. Die erzeugte Instanz merken Sie sich in einer globalen privaten Variablen go_z_input und übergeben ihr noch den Seitenkontext (die Variable m_page_context). Danach delegieren Sie Aufrufe Ihres Elements einfach an go_z_input - Sie können die Aufrufe jedoch noch modifizieren, wo Sie eigene Logik oder Präsentierung benötigen.

Dieses Verfahren ist mit Vererbung kombinierbar. Sie können in obigem Beispiel von der bestehenden Elementbehandlerklasse zcl_bsp_z_input eine eigene Klasse ableiten und Methoden redefinieren, deren Verhalten Sie zu ändern wünschen. Diese abgeleitete Klasse kann zwar selbst nicht direkt als Behandlerklasse eines BSP-Elements auftreten. Sie kann jedoch mittels Komposition in einer solchen eingesetzt werden. Wenn Sie so vorgehen, können Sie das Verhalten des bestehenden Elements auf der Ebene einzelner Methoden abändern (zumindest den öffentlichen oder geschützten). Das macht den Code in der Ausführung effizienter, als etwa zunächst das referenzierte Element auszuführen und danach dessen Ausgabe zu modifizieren.

Exits

Verwenden Sie Exits (falls solche angeboten werden). Das <z:table> Element nimmt als Attribut eine Instanz eines Render-Exits entgegen (Objekt einer Klasse, die das Interface zif_render_exit implementiert). In einer solchen Hilfsklasse können Sie die Logik für jede einzelne Tabellenzelle übersteuern, überschreiben oder modifizieren.
Dieser Ansatz lässt sich mit dem zuvor beschriebenen Kompositionsansatz verbinden. Sie können ja in Ihrer eigenen Elementbehandlerklasse das Interface zif_render_exit implementieren und diese bei Erzeugung der <z:table>-Behandlerinstanz als Exit angeben. Sie könnten das bestehende Element modifizieren - nicht besonders empfehlenswert, da Sie damit die Originallösung zerstören, die vielleicht in anderen Entwicklungen perfekt passt.

Neue Tags

Lassen Sie sich von dem bestehenden Element "inspirieren"! Das läuft leider auf das unschöne Kopieren hinaus und ist damit das gerade Gegenteil von ReUse. Wenn Sie meinen, es geht nicht anders, dann beschränken Sie sich wenigstens auf den Teil, den Sie verwenden wollen, und löschen Sie die nicht verwendeten Code-Teile, Attribute etc. nach dem Kopieren heraus, um die Klasse übersichtlich zu halten. Es soll dem Code auch noch in einem Jahr der Zweck des BSP-Elements ablesbar sein. Das geht nur, wenn überflüssige Inhalte gelöscht werden.

Zurück