Dynamische Vorschlagssuche
Seit SAP Release 7.40 gibt es in der F4-Suchhilfe die erweiterte Option “Vorschlagssuche auf Eingabefeldern”. Im englischen wird es auch type-ahead oder proposal search genannt. Sie zeigt dem Anwender sofort nach Eingabe eines Zeichens in das Eingabefeld mögliche Treffer an. Je nach Datenbank kann in der Suchhilfe auch die Spaltenübergreifende Volltextsuche (fuzzy search) aktiviert werden.
Die Vorschlagssuche wird in den gängigsten SAP-Transaktionen verwendet.
Einstellung im SAPGUI
Man kann die Vorschlagssuche in den SAPGUI-Optionen abschalten, denn die Verwendung ist manchmal problematisch. So wird die Ergebnismenge zu langsam eingeblendet oder das eingegebene Wort kommt als auch die Suche kommen durcheinander, wenn man das Wort zu schnell editiert.
Folgende Einstellung im SAPGUI steuert die Verwendung der Vorschlagssuche:
Eigene Vorschlagsliste
In der Regel basieren die Einträge auf der der Suchhilfe zu Grunde liegenden Selektionsmethode. Ich zeige dir eine Methode, wie du die Vorschlagssuche für eine dynamisch zusammengestellte Liste. In meinem Beispiel habe ich die 30 größten deutschen Städte sowie deren Bundesländer ermittelt. Aus diesen Städten soll sich der Anwender eine Stadt auswählen:
Was musst du tun, um die dynamische Vorschlagssuche zu realisieren? du benötigst im Grunde nur einen Suchhilfe-Exit, der die folgenden Dinge tut:
- Ermittlung der gültigen Werte
- Einschränkung der Werte
- Zurückstellen der in Frage kommenden Werte in die Trefferliste
Die Frage ist natürlich, wie kommen die in Frage kommenden Werte in die Suchhilfe? Der mir einfachste Weg ist der Austausch über das SAP-Memory. Die Daten werden vom Programm per EXPORT TO MEMORY in den Speicher geschrieben und von der Suchhilfe mit IMPORT FROM MEMORY wieder ausgelesen.
Suchhilfe-Exit
Ein Suchhilfe-Exit greift bei den verschiedenen Aktionen der Suchhilfe-Verarbeitung ein. Lege eine neue Funktionsgruppe an und kopiere den Baustein F4IF_SHLP_EXIT_EXAMPLE auf einen Namen deiner Wahl. Ich habe den Baustein Z_SHLP_EXIT_DYNAMIC genannt.
Bei der Ausführung der F4-Wertsuchhilfe werden mehrere Verarbeitungsschritte durchlaufen. Der Funktionsbaustein wird bei jedem dieser Schritte aufgerufen. Was im jeweiligen Schritt getan werden muss, muss über den Eingabeparameter CALLCONTROL-STEP gesteuert werden.
Der Verarbeitungsschritt, der wohl am häufigsten verwendet wird, ist “SELECT”. Auch wir nutzen diesen Schritt, um die Werteliste zu ermitteln und zur Verfügung zu stellen.
Funktionsbaustein Z_SHLP_EXIT_DYNAMIC
Im folgenden Coding importiere ich die Werteliste, die vom Programm per SAP-Memory übergeben wurden. Danach lese ich den Wert, den der Anwender bereits eingegeben hat und prüfe damit die einzelnen Einträge. Die Werte, die nicht passen, lösche ich aus der Tabelle.
Die am Ende verbleibenden Werte werden Spaltenweise mit dem Funktionsbaustein F4UT_PARAMETER_RESULTS_PUT an die Ergebnistabelle übertragen.
FUNCTION Z_SHLP_EXIT_DYNAMIC .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" REFERENCE(SHLP) TYPE SHLP_DESCR
*" REFERENCE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
TYPES: BEGIN OF ts_value,
line TYPE text40,
text TYPE text40,
END OF ts_value.
DATA values TYPE STANDARD TABLE OF ts_value WITH EMPTY KEY.
IF callcontrol-step = 'SELECT'.
IMPORT values TO values FROM MEMORY ID 'Trcktrsr'.
DATA(selval) = to_upper( shlp-interface[ shlpfield = 'VALUE' ]-value ).
LOOP AT values ASSIGNING FIELD-SYMBOL(<val>).
DATA(val) = to_upper( <val>-line ).
IF NOT val CP selval.
DELETE values INDEX sy-tabix.
ENDIF.
ENDLOOP.
CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'
EXPORTING
parameter = 'VALUE'
fieldname = 'LINE' " Name of the source field in SOURCE_TAB
TABLES
shlp_tab = shlp_tab " Table of Elementary Search Helps
record_tab = record_tab " Hit list
source_tab = values
CHANGING
shlp = shlp " Single (Current) Search Help
callcontrol = callcontrol " Control of the F4 process
EXCEPTIONS
parameter_unknown = 1 " No suitable parameter of the search help
OTHERS = 2.
IF sy-subrc > 0.
RETURN.
ELSE.
CALL FUNCTION 'F4UT_PARAMETER_RESULTS_PUT'
EXPORTING
parameter = 'TEXT'
fieldname = 'TEXT' " Name of the source field in SOURCE_TAB
TABLES
shlp_tab = shlp_tab " Table of Elementary Search Helps
record_tab = record_tab " Hit list
source_tab = values
CHANGING
shlp = shlp " Single (Current) Search Help
callcontrol = callcontrol " Control of the F4 process
EXCEPTIONS
parameter_unknown = 1 " No suitable parameter of the search help
OTHERS = 2.
IF sy-subrc > 0.
RETURN.
ENDIF.
callcontrol-step = 'DISPLAY'.
ENDIF.
ENDIF.
ENDFUNCTION.
Definition der Suchhilfe
Nun musst du noch die Suchhilfe definieren, in der du die Parameter der Suchhilfe definierst und die Datenbeschaffung über den Suchhilfe-Exit steuerst.
Den Suchhilfe-Exit legst du in Transaktion SE11 an. Aktiviere die Option Vorschlagssuche auf Eingabefeldern. Trage den Namen des Funktionsbausteins in das Feld Suchhilfe-Exit ein und definiere die Parameter:
Verwendung im Programm
Sobald du die Suchhilfe angelegt hast, kannst du sie im Programm verwenden, indem du diese zur Verwendung im Feld angibst:
PARAMETERS p_val TYPE text40 MATCHCODE OBJECT zdynfuzz.
Bei Initialisierung ermitteln wir die möglichen Werte und schreiben sie ins SAP-Memory. Das war auch schon alles.
REPORT.
PARAMETERS p_val TYPE text40 MATCHCODE OBJECT zdynfuzz.
INITIALIZATION.
TYPES: BEGIN OF ts_value,
line TYPE text40,
text type text40,
END OF ts_value.
DATA gt_values TYPE STANDARD TABLE OF ts_value WITH EMPTY KEY.
gt_values = VALUE #(
( line = 'Berlin' text = 'Berlin' )
( line = 'Hamburg' text = 'Hamburg' )
( line = 'München' text = 'Bayern' )
( line = 'Köln' text = 'Nordrhein-Westfalen' )
( line = 'Frankfurt am Main' text = 'Hessen' )
( line = 'Stuttgart' text = 'Baden-Württemberg' )
( line = 'Düsseldorf' text = 'Nordrhein-Westfalen' )
( line = 'Leipzig' text = 'Sachsen' )
( line = 'Dortmund' text = 'Nordrhein-Westfalen' )
( line = 'Essen' text = 'Nordrhein-Westfalen' )
( line = 'Bremen' text = 'Bremen' )
( line = 'Dresden' text = 'Sachsen' )
( line = 'Hannover' text = 'Niedersachsen' )
( line = 'Nürnberg' text = 'Bayern' )
( line = 'Duisburg' text = 'Nordrhein-Westfalen' )
( line = 'Bochum' text = 'Nordrhein-Westfalen' )
( line = 'Wuppertal' text = 'Nordrhein-Westfalen' )
( line = 'Bielefeld' text = 'Nordrhein-Westfalen' )
( line = 'Bonn' text = 'Nordrhein-Westfalen' )
( line = 'Münster' text = 'Nordrhein-Westfalen' )
( line = 'Karlsruhe' text = 'Baden-Württemberg' )
( line = 'Mannheim' text = 'Baden-Württemberg' )
( line = 'Augsburg' text = 'Bayern' )
( line = 'Wiesbaden' text = 'Hessen' )
( line = 'Mönchengladbach' text = 'Nordrhein-Westfalen' )
( line = 'Gelsenkirchen' text = 'Nordrhein-Westfalen' )
( line = 'Braunschweig' text = 'Niedersachsen' )
( line = 'Aachen' text = 'Nordrhein-Westfalen' )
( line = 'Kiel' text = 'Schleswig-Holstein' )
( line = 'Chemnitz' text = 'Sachsen' ) ).
EXPORT values FROM gt_values TO MEMORY ID 'Trcktrsr'.
Ergebnis
Nun bekommt der Anwender alle Werte direkt angezeigt, die zur bereits getätigten Eingabe passen:
Die Einträge können mit den Pfeiltasten direkt ausgewählt werden.
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024