Generic Object Services
Hier demonstrieren wir Ihnen, wie Sie den Knopf “Generische Objektdienste”, der in einigen Standardtransaktionen verwendet wird, um Notizen oder den Workflow zu bearbeiten, in Ihre eigenen Programme einbauen können.
In diesem Beispiel beziehen sich die generischen Objektdienste auf das Eingabefeld “Materialnummer” im Programm. Das ist in diesem Sinne natürlich nicht “generisch”, verdeutlicht aber die Vorgehensweise.
Sie können die Objektdienste einfach in jedem Programm einbinden, indem Sie das Coding als Include in Ihre eigenen Programme einbinden. Achten Sie jedoch darauf, dass die Objekte zum Zeitpunkt “INITIALIZATION” erzeugt werden. Das bedeutet, dass Sie das Coding hierfür eventuell in einen anderen Include packen sollten, um in Ihren Programmen auch weiterhin den Zeitpunkt “INITIALIZATION” verwenden können.
Vielen Dank an Haubi für das Coding!!
Weiterführende Informationen stehen hier:
http://help.sap.com/printdocu/
core/Print46c/de/data/pdf/BCSRVOBS/BCSRVOBS.pdf
Coding
REPORT Z_GOS_CONTAINTER.
*&———————————————————————*
*& Report Z_GOS_CONTAINTER *
*& *
*&———————————————————————*
PARAMETERS: p_matnr TYPE matnr.
*———————————————————————*
* CLASS lcl_event_receiver DEFINITION
*———————————————————————*
* Handler fuer Events der Toolbar
*———————————————————————*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
DATA
* Toolbar
: x_tb TYPE REF TO cl_gui_toolbar
* Kontextmenü
, x_ctmenu TYPE REF TO cl_ctmenu.
METHODS
* Konstruktor
: constructor
IMPORTING
ix_cont TYPE REF TO cl_gui_gos_container
* Handling des Dropdown-Menüs zum einzigen Button
, eh_dropdown_clicked
FOR EVENT dropdown_clicked OF cl_gui_toolbar
IMPORTING
fcode
posx
posy
* Handler für Funktionscodes zum Kontextmenü
, eh_function_selected
FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING
fcode.
ENDCLASS. “lcl_event_receiver DEFINITION
*———————————————————————*
* CLASS lcl_event_receiver IMPLEMENTATION
*———————————————————————*
* Handler fuer Events der Toolbar
*———————————————————————*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD constructor.
DATA
* Feld für Icon-ID
: l_id TYPE icon_d
* Tabelle der zu behandelnden Events der Toolbar
, lt_events TYPE cntl_simple_events
, ls_events TYPE cntl_simple_event.
* Toolbar erstellen
CREATE OBJECT x_tb
EXPORTING
parent = ix_cont
EXCEPTIONS
cntl_install_error = 1
cntl_error = 2
cntb_wrong_version = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a001(00) WITH ‘Control-Fehler, SY-SUBRC=’ sy-subrc.
ENDIF.
* Icon holen
SELECT SINGLE id
FROM icon
INTO l_id
WHERE name EQ ‘ICON_ANNOTATION’.
* Dropdown-Button zur Toolbar hinzufügen
CALL METHOD x_tb->add_button
EXPORTING
fcode = ‘DROPDOWN’
icon = l_id
butn_type = 2
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a001(00) WITH ‘Control-Fehler, SY-SUBRC=’ sy-subrc.
ENDIF.
* Tabelle der zu behandelnden Events füllen
MOVE: x_tb->m_id_dropdown_clicked TO ls_events-eventid.
APPEND ls_events TO lt_events.
* FUNCTION_SELECTED als Applikationsevent (damit PAI ausgeführt wird)
MOVE: x_tb->m_id_function_selected TO ls_events-eventid
, ‘X’ TO ls_events-appl_event.
APPEND ls_events TO lt_events.
* Events registrieren
CALL METHOD x_tb->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a001(00) WITH ‘Control-Fehler, SY-SUBRC=’ sy-subrc.
ENDIF.
* Behandler setzen
SET HANDLER me->eh_dropdown_clicked FOR me->x_tb.
SET HANDLER me->eh_function_selected FOR me->x_tb.
ENDMETHOD. “constructor
METHOD eh_dropdown_clicked.
CASE fcode.
WHEN ‘DROPDOWN’.
* Dropdown-Button geklickt
*
* Kontextmenü anlegen, sofern noch nicht geschehen
IF x_ctmenu IS INITIAL.
CREATE OBJECT x_ctmenu.
ENDIF.
* Kontextmenü leeren
CALL METHOD x_ctmenu->clear.
* Neues Menü aufbauen
CALL METHOD x_ctmenu->add_function
EXPORTING
fcode = ‘CTMM03’
text = ‘Materialstamm’.
CALL METHOD x_ctmenu->add_function
EXPORTING
fcode = ‘CTCS03’
text = ‘Stückliste’.
CALL METHOD x_ctmenu->add_separator.
CALL METHOD x_ctmenu->add_function
EXPORTING
fcode = ‘CTEXIT’
text = ‘Verlassen’.
* Handler zum Kontextmenü an Toolbar übergeben. Die Funktions-
* codes werden dann über FUNCTION_SELECTED gehandelt.
CALL METHOD x_tb->track_context_menu
EXPORTING
context_menu = x_ctmenu
posx = posx
posy = posy.
ENDCASE.
ENDMETHOD. “eh_dropdown_clicked
METHOD eh_function_selected.
CASE fcode.
WHEN ‘CTMM03’.
* Aufruf der Materialstammanzeige
SET PARAMETER ID ‘MAT’ FIELD p_matnr.
CALL TRANSACTION ‘MM03’.
WHEN ‘CTCS03’.
* Aufruf der Stücklistenanzeige
SET PARAMETER ID ‘MAT’ FIELD p_matnr.
CALL TRANSACTION ‘CS03’.
WHEN ‘CTEXIT’.
* Verlassen des Programms
LEAVE PROGRAM.
ENDCASE.
ENDMETHOD. “eh_FUNCTION_SELECTED
ENDCLASS. “lcl_event_erceiver IMPLEMENTATION
DATA
* Referenz auf den GOS-Container
: gx_gos TYPE REF TO cl_gui_gos_container
* Referenz auf den lokalen Eventhandler
, gx_er TYPE REF TO lcl_event_receiver.
INITIALIZATION.
CREATE OBJECT gx_gos
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE a001(00) WITH ‘Control-Fehler, SY-SUBRC=’ sy-subrc.
ENDIF.
CREATE OBJECT gx_er
EXPORTING ix_cont = gx_gos.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024