Monday, 18 March 2019

Editable ALV with F4 Help on cell

Report: Z_R_ALV
REPORT z_r_alv.
CLASS gcl_event_handler DEFINITION DEFERRED.

"Data Declaration
INCLUDE z_r_alv_top.

"Class Declaration
INCLUDE z_r_alv_cl.

"Screen Module Declaration
INCLUDE z_r_alv_mod.

"Subroutines Declaraion
INCLUDE z_r_alv_sub.

START-OF-SELECTION.
  CALL SCREEN 1100.


Include: Z_R_ALV_TOP
*&---------------------------------------------------------------------*
*&  Include           Z_R_ALV_TOP
*&---------------------------------------------------------------------*

  TYPES: BEGIN OF gty_extract,
           call_req_id    TYPE  zzcall_req_id,
           object         TYPE  zzobjname,
           serviceid      TYPE  zzcall_sys_id,
           servicekey     TYPE  zzcall_sys_key,
           batch_size     TYPE  zzbsize,
           compression    TYPE  zzkdpcompress,
           mdata          TYPE  zzkdpchar1,
           format         TYPE  zzkdpformat,
           projections    TYPE  string,
           selections     TYPE  string,
           numb_of_lines  TYPE  zzkdpnolines,
           from_date      TYPE  zztimestamp,
           to_date        TYPE  zztimestamp,
           extract_mode   TYPE  zzkdpchar1,
           execution_mode TYPE  zzkdpchar1,
           response_mode  TYPE  zzkdpchar1,
           celltab        TYPE lvc_t_styl,
         END OF gty_extract,
         gtt_extract TYPE STANDARD TABLE OF gty_extract,
         gtt_t_f4    TYPE STANDARD TABLE OF lvc_s_f4.

  DATA: gt_extract          TYPE STANDARD TABLE OF gty_extract,
        go_container        TYPE scrfname VALUE 'CONT1',
        go_grid1            TYPE REF TO cl_gui_alv_grid,
        go_custom_container TYPE REF TO cl_gui_docking_container,
        gs_layout           TYPE lvc_s_layo,
        gv_max              TYPE i VALUE 100.
Include: Z_R_ALV_CL
*&---------------------------------------------------------------------*
*&  Include           Z_R_ALV_CL
*&---------------------------------------------------------------------*
*************************************************************************************************
*LOCAL CLASS DEFINITION
*************************************************************************************************
*Class definition to handle the ONF4 event
CLASS gcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS: on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
      IMPORTING sender
                  e_fieldname
                  e_fieldvalue
                  es_row_no
                  er_event_data
                  et_bad_cells
                  e_display.
ENDCLASS.                    "lcl_event_handler DEFINITION
*************************************************************************************************
*LOCAL CLASS IMPLEMENTATION
*************************************************************************************************
*Class implementation to handle the ONF4 event
CLASS gcl_event_handler IMPLEMENTATION.
  METHOD on_f4.
    TYPES:  BEGIN OF lty_exe_mode,
              mode TYPE zzkdpchar1,
            END OF lty_exe_mode.
    DATA: lt_data   TYPE STANDARD TABLE OF lty_exe_mode,
          lt_ret    TYPE STANDARD TABLE OF ddshretval,
          ls_data   LIKE LINE OF lt_data,
          ls_sel    LIKE LINE OF lt_ret,
          ls_modi   TYPE lvc_s_modi,
          ls_stable TYPE lvc_s_stbl.

    FIELD-SYMBOLS: <lfs_extract> TYPE gty_extract.
    CASE e_fieldname.
      WHEN 'EXECUTION_MODE'.
        "Add the custom F4 values; here we are adding 2 values 'Uncertain' and 'Relevant' for the field STATE
        IF lt_data[] IS INITIAL.
          ls_data-mode = 'B'.
          APPEND ls_data TO lt_data.
          CLEAR ls_data.
          ls_data-mode = 'R'.
          APPEND ls_data TO lt_data.
        ENDIF.
        "Call the function module to display the custom F4 values
        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            retfield        = 'MODE'
            window_title    = 'Execution Mode'
            value_org       = 'S'
          TABLES
            value_tab       = lt_data[]
            return_tab      = lt_ret[]
          EXCEPTIONS
            parameter_error = 1
            no_values_found = 2
            OTHERS          = 3.

        IF sy-subrc = 0.
          READ TABLE lt_ret INTO ls_sel INDEX 1.
          IF sy-subrc EQ 0.
            READ TABLE gt_extract INDEX es_row_no-row_id ASSIGNING <lfs_extract>.
            IF sy-subrc EQ 0.
              <lfs_extract>-execution_mode = ls_sel-fieldval.
              IF go_grid1 IS BOUND.
                ls_stable-row = abap_true.
                ls_stable-col = abap_true.
                CALL METHOD go_grid1->refresh_table_display
                  EXPORTING
                    is_stable = ls_stable
                  EXCEPTIONS
                    finished  = 1
                    OTHERS    = 2.
                IF sy-subrc <> 0.
*             Implement suitable error handling here
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.

      WHEN 'PROJECTIONS'.
        "Write the code for the other columns
      WHEN OTHERS.
    ENDCASE.
    er_event_data->m_event_handled = abap_true. "(to inform grid that f4 was handled manually)
  ENDMETHOD.
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
Include: Z_R_ALV_MOD
*&---------------------------------------------------------------------*
*&  Include           Z_R_ALV_MOD
*&---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE status_1100 OUTPUT.
  SET PF-STATUS 'PF_STATUS'.
  "Preapre the ALV
  PERFORM prepare_alv.
ENDMODULE.                    "pbo OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE user_command_1100 INPUT.
*  save_ok = ok_code.
*  CLEAR ok_code.
  CASE sy-ucomm.
    WHEN '&EXE'.
      CALL METHOD go_grid1->check_changed_data.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                    "pai INPUT
Include: Z_R_ALV_SUB
*&---------------------------------------------------------------------*
*&  Include           Z_R_ALV_SUB
*&---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* PREPARE_ALV *
*---------------------------------------------------------------------*
FORM prepare_alv.
  DATA: lt_fieldcatalog TYPE lvc_t_fcat,
        lt_f4           TYPE lvc_t_f4,
        lt_f4_tmp       TYPE gtt_t_f4,
        lo_event_obj    TYPE REF TO gcl_event_handler.

  IF go_custom_container IS INITIAL.
    CREATE OBJECT go_custom_container
      EXPORTING
        repid                       = sy-repid
        dynnr                       = '1100'
        ratio                       = '90'
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CREATE OBJECT go_grid1
      EXPORTING
        i_parent = go_custom_container.

    "Build Field Catalog
    PERFORM populate_fcat USING '1' 'CALL_REQ_ID' 'Call Req ID' CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '2' 'OBJECT' 'Object'           CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '3' 'SERVICEID' 'Service ID'    CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '4' 'SERVICEKEY' 'Service Key'  CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '5' 'BATCH_SIZE' 'Batch Size'   CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '6' 'COMPRESSION' 'Compression' CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '7' 'MDATA' 'MDATA'             CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '8' 'FORMAT' 'Format'           CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '9' 'PROJECTIONS' 'Projection'  CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '10' 'SELECTIONS' 'Selection'   CHANGING lt_fieldcatalog.

    PERFORM populate_fcat USING '11' 'NUMB_OF_LINES' 'Number of lines'  CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '12' 'FROM_DATE' 'From Date'            CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '13' 'TO_DATE' 'To Date'                CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '14' 'EXTRACT_MODE' 'Extract Mode'      CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '15' 'EXECUTION_MODE' 'Execution Mode'  CHANGING lt_fieldcatalog.
    PERFORM populate_fcat USING '16' 'RESPONSE_MODE' 'Response Mode'    CHANGING lt_fieldcatalog.

    "Prepare F4 help
    PERFORM prepare_f4 USING 'PROJECTIONS' CHANGING lt_f4_tmp.
    PERFORM prepare_f4 USING 'EXECUTION_MODE' CHANGING lt_f4_tmp.

    "Register for F4
    lt_f4[] = lt_f4_tmp[].
    CREATE OBJECT lo_event_obj.
    SET HANDLER lo_event_obj->on_f4 FOR go_grid1.
    CALL METHOD go_grid1->register_f4_for_fields
      EXPORTING
        it_f4 = lt_f4.

    "enable for input
    PERFORM enable_input_cell CHANGING gt_extract.

    "add new entry
    PERFORM add_new_entry CHANGING gt_extract.
    PERFORM add_new_entry CHANGING gt_extract.

    CALL METHOD go_grid1->set_table_for_first_display
      EXPORTING
        i_structure_name = 'GTY_EXTRACT'
        is_layout        = gs_layout
      CHANGING
        it_fieldcatalog  = lt_fieldcatalog
        it_outtab        = gt_extract[].
  ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* PREPARE_F4 *
*---------------------------------------------------------------------*
FORM prepare_f4 USING pv_fieldname TYPE lvc_fname
             CHANGING ct_f4        TYPE gtt_t_f4.
  DATA: ls_f4 LIKE LINE OF ct_f4.
  ls_f4-fieldname  = pv_fieldname.
  ls_f4-register   = abap_true.
  ls_f4-getbefore  = space.
  ls_f4-chngeafter = space.
  APPEND ls_f4 TO ct_f4.
ENDFORM.
*---------------------------------------------------------------------*
* ADD_NEW_ENTRY *
*---------------------------------------------------------------------*
FORM add_new_entry CHANGING ct_extract TYPE gtt_extract.
  FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract.
  APPEND INITIAL LINE TO gt_extract ASSIGNING <lfs_extract>.
  <lfs_extract>-serviceid = '1001'.
  <lfs_extract>-batch_size = '2000'.
  <lfs_extract>-compression = 'GZIP'.
  <lfs_extract>-format = 'JSON'.
  <lfs_extract>-extract_mode = 'F'.
  <lfs_extract>-execution_mode = 'B'.
  <lfs_extract>-response_mode = 'H'.
ENDFORM.
*---------------------------------------------------------------------*
* ENABLE_INPUT_CELL *
*---------------------------------------------------------------------*
FORM enable_input_cell CHANGING ct_extract TYPE gtt_extract.
  DATA: lt_celltab TYPE lvc_t_styl,
        l_mode     TYPE raw4,
        lv_index   TYPE i.
  FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract,
                 <lfs_celltab> LIKE LINE OF lt_celltab.

  l_mode = cl_gui_alv_grid=>mc_style_enabled.

  LOOP AT ct_extract ASSIGNING <lfs_extract>.
    lv_index = sy-tabix.
    CLEAR: lt_celltab[].

    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'CALL_REQ_ID'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'OBJECT'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'SERVICEID'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'SERVICEKEY'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'BATCH_SIZE'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'COMPRESSION'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'MDATA'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'FORMAT'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'PROJECTIONS'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'SELECTIONS'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'NUMB_OF_LINES'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'FROM_DATE'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'TO_DATE'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'EXTRACT_MODE'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'EXECUTION_MODE'.
    <lfs_celltab>-style = l_mode.
    APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>.
    <lfs_celltab>-fieldname = 'RESPONSE_MODE'.
    <lfs_celltab>-style = l_mode.

    <lfs_extract>-celltab[] = lt_celltab[].
    CLEAR: lt_celltab[].
  ENDLOOP.

  "set edit enabled cells ready for input
  CALL METHOD go_grid1->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
  LEAVE PROGRAM.
ENDFORM.                    "exit_program
*---------------------------------------------------------------------*
* FORM POPULATE_FCAT *
*---------------------------------------------------------------------*
FORM populate_fcat USING pv_col_pos   TYPE lvc_colpos
                         pv_fieldname TYPE lvc_fname
                         pv_scrtext_m TYPE scrtext_m
                CHANGING ct_fcat TYPE lvc_t_fcat.
  FIELD-SYMBOLS: <lfs_fieldcatalog> LIKE LINE OF ct_fcat.
  APPEND INITIAL LINE TO ct_fcat ASSIGNING <lfs_fieldcatalog>.
  <lfs_fieldcatalog>-col_pos   = pv_col_pos.
  <lfs_fieldcatalog>-edit      = abap_true.
  <lfs_fieldcatalog>-fieldname = pv_fieldname.
  <lfs_fieldcatalog>-scrtext_m = pv_scrtext_m.

  IF pv_fieldname = 'EXECUTION_MODE' OR  pv_fieldname = 'PROJECTIONS'.
    <lfs_fieldcatalog>-f4availabl  = abap_true.
  ENDIF.
ENDFORM.                    "populate_fcat


2 comments:

  1. Your ex motherly connection by using your girlfriend young people came across as crucial that you your ex, notably when considering nursing a baby them all. https://imgur.com/a/QkIZzsx https://imgur.com/a/8QoZjKR https://imgur.com/a/PrktPTF https://imgur.com/a/PHvdRZb https://imgur.com/a/v10OuxM https://imgur.com/a/NBa4chC https://imgur.com/a/62GKlq4

    ReplyDelete
  2. Transactional emails are system-generated emails triggered by user activities on websites or applications. They include invoices, OTPs, welcome emails, and delivery updates. Businesses rely on transactional emails to provide timely information, improve customer satisfaction, and maintain consistent communication with users.

    ReplyDelete

Report to find CDS view of Standard Table

A small change has been made to the original program ( SAP YARD Article ) so that it can also display the common CDS used by multiple table...