SAP ABAP CLASES CL GOS MANAGER
From SapWiki
REPORT ygos_toolbox_test .
TABLES sgosattr.
DATA go_gos TYPE REF TO cl_gos_manager.
DATA go_publication TYPE REF TO cl_gos_manager.
DATA gs_object TYPE borident.
DATA gs_bc_object TYPE sibflpor.
DATA gs_lporb TYPE sibflporb.
DATA gs_old TYPE sibflporb.
DATA ok_code LIKE sy-ucomm.
DATA gp_control_init.
DATA gp_republish TYPE c.
DATA gt_objects TYPE TABLE OF sibflporbt.
DATA go_container TYPE REF TO cl_gui_custom_container.
DATA go_manager TYPE REF TO cl_gos_manager.
DATA gp_service LIKE sgosattr-name.
DATA: gs_service_selection TYPE sgos_sels,
gt_service_selection TYPE tgos_sels.
DATA go_history TYPE REF TO cl_gos_object_history.
*-----------------------------------------------------------------------
CLASS lcl_commit_handler DEFINITION .
PUBLIC SECTION.
DATA: gp_commit_required.
METHODS: on_commit_required FOR EVENT commit_required OF cl_gos_service.
ENDCLASS. "lcl_commit_handler DEFINITION
DATA: go_handler TYPE REF TO lcl_commit_handler.
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE text-020.
*PARAMETERS: p_objtyp TYPE swotobjid-objtype MEMORY ID obj.
*PARAMETERS: p_objkey TYPE swotobjid-objkey.
PARAMETERS: p_objtyp TYPE sibflporb-typeid MEMORY ID obj.
PARAMETERS: p_objkey TYPE sibflporb-instid.
PARAMETERS: p_catid TYPE sibflporb-catid DEFAULT 'BC' MODIF ID m05.
PARAMETERS: p_bor TYPE c RADIOBUTTON GROUP rad0 DEFAULT 'X' USER-COMMAND bc,
p_bc TYPE c RADIOBUTTON GROUP rad0.
SELECTION-SCREEN END OF BLOCK bl01.
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE text-022.
PARAMETERS: p_old RADIOBUTTON GROUP rad1 USER-COMMAND toggle,
p_new RADIOBUTTON GROUP rad1 DEFAULT 'X',
p_none RADIOBUTTON GROUP rad1 .
SELECTION-SCREEN END OF BLOCK bl02.
SELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE text-024.
PARAMETERS: p_direct TYPE sgs_flag MODIF ID m01.
PARAMETERS: p_commit TYPE sgs_cmode MODIF ID m02.
PARAMETERS: p_rwmod TYPE sgs_rwmod DEFAULT 'E' MODIF ID m01.
SELECT-OPTIONS p_serv FOR sgosattr-name MODIF ID m02.
SELECTION-SCREEN END OF BLOCK bl03.
PARAMETERS: p_arch TYPE sgs_flag DEFAULT ' ' MODIF ID m01.
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_old = 'X'.
CASE screen-group1.
WHEN 'M01'.
screen-active = 0.
WHEN 'M02'.
screen-active = 0.
ENDCASE.
ELSEIF p_new = 'X'.
CASE screen-group1.
WHEN 'M01'.
screen-active = 1.
WHEN 'M02'.
screen-active = 1.
ENDCASE.
ELSEIF p_none = 'X'.
CASE screen-group1.
WHEN 'M01'.
screen-active = 0.
WHEN 'M02'.
screen-active = 1.
ENDCASE.
ENDIF.
IF p_bc = 'X' AND screen-group1 = 'M05'.
screen-active = 1.
ELSEIF p_bor = 'X' AND screen-group1 = 'M05'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
*-----------------------------------------------------------------------
START-OF-SELECTION.
gs_lporb-typeid = p_objtyp.
gs_lporb-instid = p_objkey.
gs_lporb-catid = p_catid.
PERFORM assign_object.
CREATE OBJECT go_handler.
SET HANDLER go_handler->on_commit_required FOR ALL INSTANCES.
REFRESH gt_service_selection.
LOOP AT p_serv.
CLEAR gs_service_selection.
MOVE-CORRESPONDING p_serv TO gs_service_selection.
APPEND gs_service_selection TO gt_service_selection.
ENDLOOP.
gp_republish = 'X'.
IF p_arch = 'X'.
PERFORM open_archive_for_read.
ENDIF.
IF p_none = 'X'.
CALL SCREEN 200.
ELSE.
CALL SCREEN 100.
ENDIF.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
DATA ls_object TYPE borident.
DATA lp_no_instance.
IF gp_republish = 'X'.
CLEAR gp_republish.
IF p_old = 'X'.
CALL FUNCTION 'SWU_OBJECT_PUBLISH'
EXPORTING
objtype = gs_object-objtype
objkey = gs_object-objkey
EXCEPTIONS
objtype_not_found = 1
OTHERS = 2.
ELSEIF p_new = 'X'.
** new publish
IF gs_object-objkey IS INITIAL AND gs_bc_object-instid IS INITIAL.
lp_no_instance = 'X'.
ENDIF.
CREATE OBJECT go_publication
EXPORTING
is_object = gs_object
is_bc_object = gs_bc_object
ip_no_instance = lp_no_instance
ip_no_commit = p_commit
ip_start_direct = p_direct
ip_mode = p_rwmod
it_service_selection = gt_service_selection.
ENDIF.
MOVE-CORRESPONDING gs_lporb TO gs_old.
ENDIF.
IF gs_lporb-instid IS INITIAL.
SET PF-STATUS 'ST101'.
ELSE.
SET PF-STATUS 'ST100'.
ENDIF.
SET TITLEBAR '001'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
DATA save_ok_code LIKE ok_code.
save_ok_code = ok_code.
CLEAR ok_code.
CASE save_ok_code.
WHEN 'UNPB'.
IF go_publication IS BOUND.
CALL METHOD go_publication->unpublish.
ELSE.
CALL FUNCTION 'SWU_OBJECT_RESTORE'
EXPORTING
objtype = gs_object-objtype
objkey = gs_object-objkey.
ENDIF.
WHEN 'SAVE'.
IF go_handler->gp_commit_required = 'X'.
COMMIT WORK.
ENDIF.
WHEN 'D200'.
CALL SCREEN 200.
WHEN 'BACK' .
ROLLBACK WORK.
LEAVE TO SCREEN 0.
WHEN 'CANC' OR 'STOP'.
ROLLBACK WORK.
LEAVE PROGRAM.
WHEN 'CHNG' OR 'ENTER'.
IF ( gs_lporb-typeid <> gs_old-typeid OR
gs_lporb-instid <> gs_old-instid ).
* CALL FUNCTION 'SWU_OBJECT_RESTORE'
* EXPORTING
* objtype = gs_old-objtype
* objkey = gs_old-objkey.
PERFORM assign_object.
ENDIF.
gp_republish = 'X'.
WHEN 'SKEY'.
gs_object-objkey = gs_lporb-instid .
gs_object-objtype = gs_lporb-typeid.
CALL METHOD go_publication->set_id_of_published_object
EXPORTING
is_object = gs_object
is_bc_object = gs_bc_object.
WHEN 'RWMOD'.
IF p_rwmod = 'E'.
CALL METHOD go_publication->set_rw_mode( 'D' ).
p_rwmod = 'D'.
ELSEIF p_rwmod = 'D'.
CALL METHOD go_publication->set_rw_mode( 'E' ).
p_rwmod = 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module CONTROL_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE control_0200 OUTPUT.
DATA go_toolbox_container TYPE REF TO cl_gui_custom_container.
DATA go_gos_toolbox TYPE REF TO cl_gos_manager.
IF NOT go_toolbox_container IS INITIAL.
go_toolbox_container->free( ).
ENDIF.
CREATE OBJECT go_toolbox_container
EXPORTING
container_name = 'TOOLBOX_CONTAINER'.
IF gs_lporb-instid IS INITIAL.
lp_no_instance = 'X'.
ENDIF.
CREATE OBJECT go_gos_toolbox
EXPORTING
ip_no_commit = p_commit
ip_no_instance = lp_no_instance
ip_mode = p_rwmod
it_service_selection = gt_service_selection
EXCEPTIONS
object_invalid = 1
callback_invalid = 2
OTHERS = 3
.
IF sy-subrc = 0.
CALL METHOD go_gos_toolbox->display_toolbox
EXPORTING
io_container = go_toolbox_container
is_object = gs_object
is_bc_object = gs_bc_object.
ENDIF.
ENDMODULE. " CONTROL_0200 OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
IF gs_lporb-instid IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = '001'.
screen-input = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
SET PF-STATUS 'ST200'.
ELSE.
LOOP AT SCREEN.
IF screen-group1 = '001'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
SET PF-STATUS 'ST200' EXCLUDING 'SKEY'.
ENDIF.
SET TITLEBAR '001'.
ENDMODULE. " STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
save_ok_code = ok_code.
CLEAR ok_code.
CASE save_ok_code.
WHEN 'SAVE'.
COMMIT WORK.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANC' OR 'STOP'.
ROLLBACK WORK.
LEAVE PROGRAM.
WHEN 'TOOLBOX'.
IF go_manager IS INITIAL.
CREATE OBJECT go_manager
EXPORTING
ip_no_commit = p_commit
ip_no_instance = lp_no_instance
ip_mode = p_rwmod
it_service_selection = gt_service_selection.
ENDIF.
CALL METHOD go_manager->display_toolbox
EXPORTING
ip_service = gp_service
is_object = gs_object
is_bc_object = gs_bc_object.
.
WHEN 'EXECUTE'.
IF go_manager IS INITIAL.
CREATE OBJECT go_manager
EXPORTING
ip_no_commit = p_commit
ip_no_instance = lp_no_instance
ip_mode = p_rwmod
it_service_selection = gt_service_selection.
ENDIF.
CALL METHOD go_manager->start_service_direct
EXPORTING
ip_service = gp_service
is_object = gs_object
is_bc_object = gs_bc_object
EXCEPTIONS
no_object = 1
object_invalid = 2
execution_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
COMMIT WORK AND WAIT. "!!!!!!!!!!!!!!!!
WHEN 'REMOVEGOS'.
CALL METHOD cl_gos_service_tools=>delete_linked_objects
EXPORTING
is_object = gs_object
is_bc_object = gs_bc_object.
WHEN 'SKEY'.
IF NOT go_gos_toolbox IS INITIAL.
CALL METHOD go_gos_toolbox->set_id_of_published_object
EXPORTING
is_bc_object = gs_bc_object
is_object = gs_object.
ENDIF.
WHEN 'RWMOD'.
IF p_rwmod = 'E'.
CALL METHOD go_gos_toolbox->set_rw_mode( 'D' ).
p_rwmod = 'D'.
ELSEIF p_rwmod = 'D'.
CALL METHOD go_gos_toolbox->set_rw_mode( 'E' ).
p_rwmod = 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*-----------------------------------------------------------------------
CLASS lcl_commit_handler IMPLEMENTATION.
METHOD on_commit_required.
gp_commit_required = 'X'.
ENDMETHOD. "lcl_commit_handler
ENDCLASS. "lcl_commit_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form open_archive_for_read
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM open_archive_for_read .
* data declaration
CONSTANTS: archive_object LIKE arch_obj-object VALUE 'SOBL'.
DATA: read_handle LIKE sy-tabix,
write_handle LIKE sy-tabix,
l_errmsg TYPE string,
lx_obl TYPE REF TO cx_obl,
commit_cnt LIKE sy-tabix,
object_cnt LIKE sy-tabix,
buffer TYPE arc_buffer,
buffer_ref TYPE REF TO data.
DATA: lt_links TYPE obl_t_link,
ls_lporb TYPE sibflporb.
TRY.
MOVE-CORRESPONDING gs_bc_object TO ls_lporb.
*ls_lporb-instid = gs_object-objkey.
*ls_lporb-typeid = gs_object-objtype.
*ls_lporb-catid = 'BO'.
* open a new archiving session to reload data
CALL FUNCTION 'ARCHIVE_OPEN_FOR_READ'
EXPORTING
* ARCHIVE_DOCUMENT = '000000'
* ARCHIVE_NAME = ' '
object = archive_object
* MAINTAIN_INDEX = ' '
IMPORTING
archive_handle = read_handle
* TABLES
* ARCHIVE_FILES =
* SELECTED_FILES =
EXCEPTIONS
file_already_open = 1
file_io_error = 2
internal_error = 3
no_files_available = 4
object_not_found = 5
open_error = 6
not_authorized = 7
OTHERS = 8
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'A' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* loop to get the next data object from the archive file(s)
DO.
CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT'
EXPORTING
archive_handle = read_handle
EXCEPTIONS
end_of_file = 1
file_io_error = 2
internal_error = 3
open_error = 4
wrong_access_to_archive = 5
OTHERS = 6.
CASE sy-subrc.
WHEN 0.
* do nothing
WHEN 1.
* reached end of file
EXIT.
WHEN OTHERS.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDCASE.
CALL FUNCTION 'SOBL_ARCHIVE_READ_LINKS'
EXPORTING
archive_handle = read_handle
is_object = ls_lporb
IMPORTING
et_links = lt_links.
IF NOT lt_links[] IS INITIAL.
EXIT.
ENDIF.
ENDDO. "object loop
** close the archiving session
* CALL FUNCTION 'ARCHIVE_CLOSE_FILE'
* EXPORTING
* archive_handle = read_handle
* EXCEPTIONS
* internal_error = 1
* wrong_access_to_archive = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* EXIT.
* ENDIF.
CATCH cx_obl INTO lx_obl.
MESSAGE l_errmsg TYPE 'I'.
ENDTRY.
ENDFORM. " open_archive_for_read
*&--------------------------------------------------------------------*
*& Form assign_object
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM assign_object.
IF p_bor = 'X'.
gs_bc_object-catid = gs_lporb-catid = 'BO'.
gs_object-objtype = gs_lporb-typeid.
gs_object-objkey = gs_lporb-instid.
ELSE.
gs_bc_object-catid = gs_lporb-catid.
gs_bc_object-typeid = gs_lporb-typeid.
gs_bc_object-instid = gs_lporb-instid .
ENDIF.
ENDFORM. "assign_object
*GUI Texts
*----------------------------------------------------------
* 001 --> Testreport f r generische Objektdienste
*Text elements
*----------------------------------------------------------
* 020 Objekt BOR para publicar
* 022 Cambiar a publicaci n
* 024 Par metro de publicaci n
*Selection texts
*----------------------------------------------------------
* P_ARCH Leer archivo
* P_BC Biblioteca clases
* P_BOR Business Object Repository
* P_CATID D Categor a de objeto
* P_COMMIT Commit en la aplicaci n
* P_DIRECT Iniciar caja herram.inmediat.
* P_NEW Publicaci n nueva (ABAP OO)
* P_NONE Ninguna publicaci n
* P_OBJKEY D Identificador de instancia
* P_OBJTYP D Tipo objeto
* P_OLD Public.anteriores mediante MF
* P_RWMOD D Modo L/E
* P_SERV Selecci n de los servicios