handle_user_command

in src/zrest/zrest_screen.prog.abap [0:0]


    METHOD handle_user_command.
      DATA: lt_rows     TYPE lvc_t_row,
            l_row       TYPE lvc_s_row,
            sel_row     LIKE LINE OF itab,
            message_val TYPE string,
            sel_tab     TYPE TABLE OF ty,
            lw_monitor  TYPE zrest_monitor, "v-javeda - MS2K948543
            lv_ans      TYPE char1.         "v-javeda - MS2K948543
      CASE e_ucomm.
** v-javeda - MS2K948543 : Delete function added
        WHEN 'DELETE'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            IF lt_rows IS INITIAL.
              MESSAGE 'Please select a row.'(003) TYPE 'I'.
              EXIT.
            ELSEIF lines( lt_rows ) > 1.
              MESSAGE 'Please select only one row.'(004) TYPE 'I'.
              EXIT.
            ENDIF.
            CALL METHOD cl_gui_cfw=>flush.
            IF sy-subrc NE 0.
              CALL FUNCTION 'POPUP_TO_INFORM'
                EXPORTING
                  titel = g_repid
                  txt2  = sy-subrc
                  txt1  = 'Error in Flush'(500).
            ELSE.
              CALL FUNCTION 'POPUP_TO_CONFIRM'
                EXPORTING
                  text_question         = 'Do you want to Proceed for deletion'
                  text_button_1         = 'Yes'
                  icon_button_1         = 'ICON_CHECKED'
                  text_button_2         = 'No'
                  icon_button_2         = 'ICON_INCOMPLETE'
                  display_cancel_button = 'X'
                  start_column          = 25
                  start_row             = 6
                IMPORTING
                  answer                = lv_ans.
              IF sy-subrc  <>   0.
* Implement suitable error handling here
              ENDIF.
              IF lv_ans = '1'.
                FREE MEMORY ID 'ABCD'.
                READ TABLE lt_rows INDEX 1 INTO l_row.
                READ TABLE itab INDEX l_row-index INTO sel_row.
                IF sy-subrc = 0 .
                  SELECT SINGLE * FROM zrest_monitor INTO lw_monitor WHERE zmessageid = sel_row-zmessageid.
                  IF sy-subrc = 0.
                    lw_monitor-zdelete = 'X'.
                    lw_monitor-deleteuser = sy-uname.
                    lw_monitor-deletedate = sy-datum.
                    lw_monitor-deletetime = sy-uzeit.
                    MODIFY zrest_monitor FROM lw_monitor." WHERE messageid = sel_row-zmessageid.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
          lo_report->get_data( ).
          PERFORM layout.
          PERFORM display_output.
**

        WHEN 'DOWNLOAD'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            DATA: count_row TYPE i.
            DESCRIBE TABLE lt_rows LINES count_row.
            IF count_row <> 1.
              DATA: lv_id TYPE icon-id.
              SELECT SINGLE id
                FROM icon
                INTO lv_id
                WHERE name = 'ICON_MESSAGE_WARNING'.
              CALL FUNCTION 'POPUP_TO_INFORM'
                EXPORTING
                  titel  = 'Warning'
                  txt1   = lv_id
                  txt2   = 'Select only one row.'
                EXCEPTIONS
                  OTHERS = 1.
            ELSE.
              FREE MEMORY ID 'ABCD'.
              READ TABLE lt_rows INDEX 1 INTO l_row.
              READ TABLE itab INDEX l_row-index INTO sel_row.
              DATA: pay_body TYPE zrest_mo_payload-payload.
              SELECT payload FROM  zrest_mo_payload INTO pay_body WHERE messageid = sel_row-zmessageid.
              ENDSELECT.
              TRY.
                  CALL METHOD zcl_rest_utility_class=>download_payload_file( xstring = pay_body message_id = sel_row-zmessageid ).
*                Authorization check VSTF # 2163894 | DGDK903413

                CATCH zcx_http_client_failed INTO lv_textid.
                  lv_text2 = lv_textid->if_t100_message~t100key.
                  MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                  EXIT.
              ENDTRY.
*             end of changes VSTF # 2163894 | DGDK903413
            ENDIF.
          ENDIF.

        WHEN 'HEADERS'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          IF lt_rows IS INITIAL.
            MESSAGE 'Please select a row.'(003) TYPE 'I'.
            EXIT.
          ELSEIF lines( lt_rows ) > 1.
            MESSAGE 'Please select only one row.'(004) TYPE 'I'.
            EXIT.
          ENDIF.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            FREE MEMORY ID 'ABCD'.
            CLEAR sel_tab.
            FREE MEMORY ID 'ABCD'.
            READ TABLE lt_rows INDEX 1 INTO l_row.
            READ TABLE itab INDEX l_row-index INTO sel_row.
            TRY.
                CALL METHOD zcl_rest_utility_class=>show_submitted_headers
                  EXPORTING
                    message_id = sel_row-zmessageid.
*             Changed for Authorization Check VSTF # 2163894 | DGDK903413
              CATCH zcx_http_client_failed INTO lv_textid.
                lv_text2 = lv_textid->if_t100_message~t100key.
                MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                EXIT.
            ENDTRY.
*           End of changes VSTF # 2163894 | DGDK903413
          ENDIF.

        WHEN 'RETRY'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            FREE MEMORY ID 'ABCD'.
            DATA obj TYPE REF TO zcl_rest_utility_class.
            CREATE OBJECT obj .
            LOOP AT lt_rows INTO l_row.
              READ TABLE itab INDEX l_row-index INTO sel_row.
**   v-javeda - MS2K948543 - validation for not retrying deleted payload
              SELECT SINGLE *  FROM zrest_monitor INTO lw_monitor
                               WHERE zmessageid = sel_row-zmessageid
                               AND zdelete EQ 'X'.
              IF sy-subrc = 0.
                CALL FUNCTION 'POPUP_TO_INFORM'
                  EXPORTING
                    titel = g_repid
                    txt2  = sel_row-zmessageid
                    txt1  = 'Cannot process for Deleted message id : '(500).
              ELSE.
**         v-javeda - MS2K948543
                IF obj IS BOUND.
                  TRY.
                      CALL METHOD obj->retry( message_id = sel_row-zmessageid method = 'None' ).
*                Authorization check VSTF # 2163894 | DGDK903413
                    CATCH zcx_http_client_failed INTO lv_clnt_failed.
                      lv_text2 = lv_clnt_failed->if_t100_message~t100key.
                      MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                      EXIT.
                  ENDTRY.
*             end of changes VSTF # 2163894 | DGDK903413
                ENDIF.
              ENDIF."              v-javeda - MS2K948543
            ENDLOOP.
          ENDIF.
          lo_report->get_data( ).
          PERFORM layout.
          PERFORM display_output.

        WHEN 'SHOW PAYLOAD'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          IF lt_rows IS INITIAL.
            MESSAGE 'Please select a row.'(003) TYPE 'I'.
            EXIT.
          ELSEIF lines( lt_rows ) > 1.
            MESSAGE 'Please select only one row.'(004) TYPE 'I'.
            EXIT.
          ENDIF.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            FREE MEMORY ID 'ABCD'.
            READ TABLE lt_rows INDEX 1 INTO l_row.
            READ TABLE itab INDEX l_row-index INTO sel_row.
            DATA: payload_body TYPE zrest_mo_payload-payload.
            DATA ob TYPE REF TO zcl_rest_utility_class.
            CREATE OBJECT ob .
            IF ob IS BOUND.
*             Changed for Authorization Check VSTF # 2163894 | DGDK903413
              TRY.
                  CALL METHOD ob->show_payload( message_id = sel_row-zmessageid ).
                CATCH zcx_http_client_failed INTO lv_textid.
                  lv_text2 = lv_textid->if_t100_message~t100key.
                  MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                  EXIT.
              ENDTRY.
*             end of changes VSTF # 2163894 | DGDK903413
            ENDIF.
          ENDIF.

        WHEN 'SHOW RESPONSE'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          IF lt_rows IS INITIAL.
            MESSAGE 'Please select a row.'(003) TYPE 'I'.
            EXIT.
          ELSEIF lines( lt_rows ) > 1.
            MESSAGE 'Please select only one row.'(004) TYPE 'I'.
            EXIT.
          ENDIF.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            FREE MEMORY ID 'ABCD'.
            READ TABLE lt_rows INDEX 1 INTO l_row.
            READ TABLE itab INDEX l_row-index INTO sel_row.
            CREATE OBJECT ob .
            IF ob IS BOUND.
              TRY.
                  CALL METHOD ob->show_payload( message_id = sel_row-zmessageid response = abap_true ).
*              Authorization changes V-DEVEER
                CATCH zcx_http_client_failed INTO lv_textid.
                  lv_text2 = lv_textid->if_t100_message~t100key.
                  MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                  EXIT.
              ENDTRY.
*             end of changes V-DEVEER
            ENDIF.
          ENDIF.
        WHEN 'RETRY_LOG'.
          CALL METHOD grid1->get_selected_rows
            IMPORTING
              et_index_rows = lt_rows.
          IF lt_rows IS INITIAL.
            MESSAGE 'Please select a row.'(003) TYPE 'I'.
            EXIT.
          ELSEIF lines( lt_rows ) > 1.
            MESSAGE 'Please select only one row.'(004) TYPE 'I'.
            EXIT.
          ENDIF.
          CALL METHOD cl_gui_cfw=>flush.
          IF sy-subrc NE 0.
            CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
          ELSE.
            FREE MEMORY ID 'ABCD'.
            READ TABLE lt_rows INDEX 1 INTO l_row.
            READ TABLE itab INDEX l_row-index INTO sel_row.
            CREATE OBJECT ob .
            IF ob IS BOUND.
              TRY.
                  CALL METHOD ob->retry_log( message_id = sel_row-zmessageid response = abap_true ).
*              Authorization changes V-DEVEER
                CATCH zcx_http_client_failed INTO lv_textid.
                  lv_text2 = lv_textid->if_t100_message~t100key.
                  MESSAGE ID lv_text2-msgid TYPE 'I' NUMBER lv_text2-msgno.
                  EXIT.
              ENDTRY.
*             end of changes V-DEVEER
            ENDIF.
          ENDIF.
      ENDCASE.