SAP ABAP CLASES CL GOS MANAGER

From SapWiki
Revision as of 22:07, 25 June 2026 by WikiSysop (talk | contribs) (→‎Ejemplo 1)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Ejemplo 1

DATA: lo_manager  TYPE REF TO cl_gos_manager,
     la_obj      TYPE borident.

MODULE status_2000 OUTPUT.
  clear lt_ex[].

  if f_mode = c_display.
    APPEND 'SAVE' to lt_ex.
  endif.

    if f_mode = c_insert.
    append 'CHANGE' to lt_ex.
  endif.

  SET PF-STATUS '2000' EXCLUDING lt_ex.

  IF f_mode = c_insert.
    SET TITLEBAR 'T02'.

    LOOP AT SCREEN.
      IF screen-group2 = 'U01'.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.

  ELSEIF f_mode = c_update.
    SET TITLEBAR 'T03'.
 else.
   SET TITLEBAR 'T04'.
  ENDIF.

  DATA l_obkey TYPE ausp-objek.

  IF f_mode = c_update or f_mode = c_display.

    CONCATENATE p9044-plvar
                p9044-otype
                p9044-objid
           INTO l_obkey.

* Set object Key
    la_obj-objtype = 'ZMULTA'.  "creado en trn. SWO1
    la_obj-objkey  = l_obkey.

    IF lo_manager IS INITIAL.
*    " Create CONTAINER object with reference to container name in the screen
*    CREATE OBJECT lr_container
*      EXPORTING
*        container_name = g_container.

      CREATE OBJECT lo_manager
      EXPORTING
        is_object    = la_obj
        ip_no_commit = space
*      io_container = lr_container
      EXCEPTIONS
        OTHERS       = 1.

    ENDIF.
  ENDIF.

  IF f_submit = c_false.  
    LOOP AT SCREEN.
      IF screen-name = 'P9044-ZHR_NXXXXXX'.
        screen-input = '1'.
*         screen-required = '1'.
         MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSE.
    LOOP AT SCREEN.
      IF screen-name = 'P9044-ZHR_NXXXXXX'.
        screen-input = '0'.
        screen-required = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

  if f_mode = c_display.

    SET TITLEBAR 'T04'.

    loop at SCREEN.
      if screen-group3 <> 'D01'.
      screen-input = 0.
      MODIFY SCREEN.
      endif.
    ENDLOOP.
  ENDIF.
ENDMODULE.                 " STATUS_2000  OUTPUT

FORM exit .
    DATA l_ok_code TYPE sy-ucomm.

    l_ok_code = ok_code.
    CLEAR ok_code.

    CASE l_ok_code.
*--------------------------------------------------------------------*
      WHEN 'BACK' OR 'LEAV' OR 'CANC'.
*--------------------------------------------------------------------*
        IF lo_manager IS BOUND.
          lo_manager->unpublish( ).
          FREE lo_manager.
        ENDIF.
...
...
...
ENDFORM.

Ejemplo 2

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