Funktionsbaustein POPUP GET VALUES
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Der Funktionsbaustein POPUP_GET_VALUES ist sehr komfortabel, um eine kompakte Dialog-Abfrage auf dem Bildschirm auszugeben, um vom User ein oder mehr Felder abzufragen.
Sehr praktisch an diesem Funktionsbaustein ist, dass die Länge des Abfragefeldes passend generiert wird, eine Typprüfung stattfindet, wenn das richtige Feld als Parameter gefüllt wird und es erscheint eine Wertehilfe, wenn das entsprechende Feld im referenzierenden Tabellenfeld ebenfalls eine Wertehilfe besitzt.
Noch mächtiger und ausführlich dokumentiert ist der Funktionsbaustein POPUP_GET_VALUES_USER_HELP.
Einfacher Screen
Hier soll eine Abfrage des Kundenauftrags erfolgen.
Vorlage Coding
DATA: lt_fields TYPE STANDARD TABLE OF sval, lv_returncode TYPE c, lv_vbeln type vbak-vbeln. * Inputfeld Kundenauftrag (Beispiel) lt_fields = value #( base lt_fields ( tabname = 'VBAK' fieldname = 'VBELN' field_obl = abap_true ) ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING * NO_VALUE_CHECK = ' ' popup_title = 'Abfrage' start_column = '5' start_row = '5' IMPORTING returncode = lv_returncode "space/'A'=Abbruch TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE i531(0u) WITH 'Problem mit Fuba POPUP_GET_VALUES'. ENDIF. IF lv_returncode = 'A'. RETURN. ENDIF. lv_vbeln = lt_fields[ 1 ]-value.
Eingabebereitschaft Felder ändern (FIELD_ATTR)
- Wenn man Felder im Popup-Screen anzeigt, werden sie in aller Regel eingabebereit sein. Das ist die Defaulteinstellung. Aber manchmal möchte man Felder nur anzeigen, aber sie sollen nicht eingabebereit sein. Oder man will Felder eingabebereit haben, aber sie sollen eine Formatierung haben, um sie semantisch hervorzugeben.
- Hier im Beispiel werden 2 Felder nur zur Anzeige auf den Bildschirm gebracht und 2 weitere mit einer besonderen Formatierung.
- FIELD_ATTR = '02' bewirkt, dass ein Feld ein reines Anzeigefeld ist
- FIELD_ATTR = '01' bedeutet, dass ein Feld blau (intensiv) formatiert ausgegeben wird.
- Bleibt FIELD_ATTR leer, ist das Feld normal eingabefähig, wie hier die Felder ab "TranspMittelart"
lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'ERDAT' value = sy-datum field_attr = '02' ) ). "Nur Anzeige lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'ERNAM' value = sy-uname field_attr = '02' ) ). "Nur Anzeige lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'BOLNR' field_attr = '01' ) ). "Blaue Formatierung lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'TRAID' field_attr = '01' ) ). "Blaue Formatierung lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'TRATY' ) ). lt_fields = VALUE #( BASE lt_fields ( tabname = gc_zmm_inbship fieldname = 'COMMENTS' ) ). ...
Beispiel mit Lieferungsabfrage und DO-ENDDO-Schleife
- Manches mal macht es Sinn Abfragen abzuprüfen, wenn sich der User z. B. vertippt hat und dann wiederholt das Popup anzuzeigen für die Abfrage, damit der User dann nicht alle Eingaben verliert, die der User bis dahin ausgefüllt hat.
- Hier wird eine Liefernummer abgefragt, geprüft und dann das Popup in einer DO-ENDO-Schleife angezeigt, bis die Lieferung existiert oder der User abbricht.
METHOD GET_DELIVERY_FROM_POPUP. DATA: lt_fields TYPE STANDARD TABLE OF sval, lv_returncode TYPE c. lt_fields = value #( base lt_fields ( tabname = 'LIKP' fieldname = 'VBELN' field_obl = 'X' ) ). DO. CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Delivery Selection' start_column = '5' start_row = '5' IMPORTING returncode = lv_returncode "space/'A'=Abbruch TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE i531(0u) WITH 'Problem with Fuba POPUP_GET_VALUES'. ENDIF. IF lv_returncode = 'A'. return. ENDIF. READ TABLE lt_fields INTO ls_fields INDEX 1. ev_vbeln_lf = ls_fields-value. * Lese Lieferung und von erster Position Werk/Site und Lagerort SELECT likp~vbeln, lips~werks, lips~lgort INTO (@ev_vbeln_lf, @ev_werks, @ev_lgort) FROM likp inner join lips on lips~vbeln = likp~vbeln up to 1 rows WHERE likp~vbeln = @ev_vbeln_lf order by lips~posnr. endselect. IF sy-subrc = 0. return. else. message i146(IS) with ev_vbeln_lf. "Lieferung & existiert nicht ENDIF. ENDDO. ENDMETHOD.
Literatur
- Function Modules in ABAP: A Quick Reference Guide, von Tanmaya Gupta, S. 569 (EN)
- Common SAP R/3 Functions Manual, von William Lawlor, S. 262 (EN)