SALV-Table-Popup als Suchhilfe

In diesem Artikel habe ich dir gezeigt, wie du die Klasse CL_SALV_TABLE als Popup und zur Auswahl von Daten nutzen kannst. Heute möchte ich dir zeigen, wie du diese Funktion in einer Suchhilfe mit Hilfe eines Suchhilfe-Exits nutzen kannst. In diesem Beispiel rufen wir, wie in dem verlinkten Artikel, eine Liste der Wochentage auf aus denen der Anwender einen auswählen kann.

Auswahl Wochentag

Der einzige Unterschied zum verlinkten Code ist, dass ich für die Schlüsselkomponente nun ein einstelliges Kennzeichen vom Typ WEEKDAY verwende.

Suchhilfe

In der Codezentrale kannst du dir ansehen, wie du einen Wert in einem Report über eine eigenprogrammierte F4-Suchhilfe übergeben kannst:

Das Verfahren nützt dir jedoch nichts, wenn du die F4-Hilfe ohne Programmierung in einem Dynprofeld nutzen möchtest. Hierfür musst du in der Transaktion SE11 eine separate Suchhilfe anlegen:

Suchhilfe mit Suchhilfe-Exit

Suchhilfe-Exit

Die Anlage der Suchhilfe ist in diesem Fall jedoch erst Schritt zwei. Im ersten Schritt musst du einen Funktionsbaustein anlegen, der die Werte anzeigt und mit der Suchhilfe kommuniziert.

Für den Suchhilfe-Exit benötigst du einen Funktionsbaustein mit einer definierten Schnittstelle. In der F1-Hilfe zum Suchhilfe-Exit erfährst du, dass du den Baustein F4IF_SHLP_EXIT_EXAMPLE als Vorlage verwenden kannst. Du musst eine neue Funktionsgruppe anlegen (Transaktion SE37: Springen • Funktionsgruppe • Funktionsgruppe anlegen) und den Vorlage-Baustein in diese Gruppe kopieren.

Vorlagebaustein kopieren

Am Ende des kopierten Funktionsbausteins setzt du das folgende Coding ein:

  IF callcontrol-step = 'DISP'.
    DATA(my_popup) = NEW main( ).

    my_popup->set_items(
      VALUE #(
        ( key = '1' value = 'Monday' )
        ( key = '2' value = 'Tuesday' )
        ( key = '3' value = 'Wednesday' )
        ( key = '4' value = 'Thursday' )
        ( key = '5' value = 'Friday' )
        ( key = '6' value = 'Saturday' )
        ( key = '7' value = 'Sunday' ) ) ).

    TRY.
        DATA(selected_entry) = my_popup->ask( 'Select day' ).
        append value #( string = conv #( selected_entry-key ) ) to record_tab.
        callcontrol-step = 'RETURN'.
      CATCH cancelled.
        callcontrol-step = 'EXIT'.
    ENDTRY.
  ENDIF.

In diesem Beispiel habe ich das Coding (Siehe CL_SALV_TABLE als Auswahl-Popup) als lokale Klasse im Funktionsbaustein verwendet. Sinnvoller wäre es jedoch, die Klasse MAIN als globale Klasse anzulegen (Transaktion SE24). In diesem Fall musst du bei der Instanziierung natürlich nicht MAIN verwenden, sondern den Namen der globalen Klasse.

Wichtig ist, dass bei Auswahl eines Eintrags die RECORD_TAB mit dem gewählten Eintrag angereichert wird und der CALLCONTROL-STEP auf “RETURN” gesetzt wird. Bricht der Benutzer den Dialog ab, dann muss CALLCONTROL-STEP auf “EXIT” gesetzt werden.

Den Funktionsbaustein und die Funktionsgruppe musst du selbstverständlich aktivieren.

Aktivierung Suchhilfe

Nachdem du den Suchhilfe-Exit Funktionsbaustein in die Suchhilfe eingetragen hast, musst du die Suchhilfe aktivieren und kannst sie testen:

Test der Suchhilfe

Suchhilfe einbinden

Du kannst diese Suchhilfe nun in einem Datenelement unter der Registerkarte “Weitere Eigenschaften” festlegen:

Suchhilfe im Datenelement definieren

Die Suchhilfe steht dir nun immer zur Verfügung, wenn du dieses Datenelement in einer Struktur verwendest.

Suchhilfe testen

Wenn du Suchhilfen mit Suchhilfe-Exits testest, dann achte darauf, dass du nach jeder Codeänderung im Suchhilfe-Exit-Funktionsbaustein die Transaktion SE11 neu aufrufst. Andernfalls ist das alte Coding noch geladen und du wirst die Änderungen nicht sehen!

Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)