diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index bef633d32..aaa891d1e 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -33,6 +33,8 @@ SELECTION-SCREEN BEGIN OF SCREEN 1001. * dummy for triggering screen SELECTION-SCREEN END OF SCREEN 1001. +INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN + DEFINE _add. ro_html->add( &1 ) ##NO_TEXT. END-OF-DEFINITION. @@ -125,13 +127,25 @@ INCLUDE zabapgit_app_impl. INCLUDE zabapgit_unit_test. INCLUDE zabapgit_forms. +INITIALIZATION. + lcl_password_dialog=>on_screen_init( ). + START-OF-SELECTION. PERFORM run. * Hide Execute button from screen AT SELECTION-SCREEN OUTPUT. - PERFORM output. + IF sy-dynnr = lcl_password_dialog=>DYNNR. + lcl_password_dialog=>on_screen_output( ). + ELSE. + PERFORM output. + ENDIF. * SAP back command re-direction AT SELECTION-SCREEN ON EXIT-COMMAND. - PERFORM exit. \ No newline at end of file + PERFORM exit. + +AT SELECTION-SCREEN. + IF sy-dynnr = lcl_password_dialog=>DYNNR. + lcl_password_dialog=>on_screen_event( sscrfields-ucomm ). + ENDIF. \ No newline at end of file diff --git a/src/zabapgit_git.prog.abap b/src/zabapgit_git.prog.abap index aefb25bf8..a903ad17e 100644 --- a/src/zabapgit_git.prog.abap +++ b/src/zabapgit_git.prog.abap @@ -113,12 +113,6 @@ CLASS lcl_git_transport DEFINITION FINAL. iv_url TYPE string RAISING lcx_exception. - CLASS-METHODS do_password_popup - IMPORTING iv_repo_url TYPE string - EXPORTING ev_user TYPE string - ev_pass TYPE string - RAISING lcx_exception. - ENDCLASS. "lcl_transport DEFINITION *----------------------------------------------------------------------* @@ -316,12 +310,12 @@ CLASS lcl_git_transport IMPLEMENTATION. lv_user TYPE string, lv_pass TYPE string. - do_password_popup( + lcl_password_dialog=>popup( EXPORTING iv_repo_url = iv_url - IMPORTING - ev_user = lv_user - ev_pass = lv_pass ). + CHANGING + cv_user = lv_user + cv_pass = lv_pass ). IF lv_user IS INITIAL. lcx_exception=>raise( 'HTTP 401, unauthorized' ). @@ -333,56 +327,6 @@ CLASS lcl_git_transport IMPLEMENTATION. ENDMETHOD. "acquire_login_details - METHOD do_password_popup. - DATA: lv_returncode TYPE c, - lt_fields TYPE TABLE OF sval. - - FIELD-SYMBOLS: LIKE LINE OF lt_fields. - -* REFACTOR - DEFINE _add_dialog_fld. - APPEND INITIAL LINE TO lt_fields ASSIGNING . - -tabname = &1. "#EC NOTEXT - -fieldname = &2. "#EC NOTEXT - -fieldtext = &3. "#EC NOTEXT - -value = &4. "#EC NOTEXT - -field_attr = &5. "#EC NOTEXT - END-OF-DEFINITION. -* REFACTOR - - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'ADR12' 'URI_SRCH' 'Repo URL' iv_repo_url '05'. - _add_dialog_fld 'ADRC' 'NAME1' 'Username' '' ''. - _add_dialog_fld 'ADRC' 'NAME2' 'Pass' '' ''. - - CALL FUNCTION 'POPUP_GET_VALUES' - EXPORTING - popup_title = 'Repository login' - IMPORTING - returncode = lv_returncode - TABLES - fields = lt_fields - EXCEPTIONS - error_in_fields = 1 - OTHERS = 2. "#EC NOTEXT - IF sy-subrc <> 0. - lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). - ENDIF. - - IF lv_returncode = 'A'. - RETURN. - ENDIF. - - READ TABLE lt_fields INDEX 2 ASSIGNING . - ASSERT sy-subrc = 0. - ev_user = -value. - - READ TABLE lt_fields INDEX 3 ASSIGNING . - ASSERT sy-subrc = 0. - ev_pass = -value. - - ENDMETHOD. "do_password_popup - METHOD parse_branch_list. DATA: lt_result TYPE TABLE OF string, diff --git a/src/zabapgit_password_dialog.prog.abap b/src/zabapgit_password_dialog.prog.abap new file mode 100644 index 000000000..96e0e8f19 --- /dev/null +++ b/src/zabapgit_password_dialog.prog.abap @@ -0,0 +1,122 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_PASSWORD_DIALOG +*&---------------------------------------------------------------------* +TABLES sscrfields. + +SELECTION-SCREEN BEGIN OF SCREEN 1002 TITLE s_title. + SELECTION-SCREEN BEGIN OF LINE. + SELECTION-SCREEN COMMENT 1(10) s_url FOR FIELD p_url. + PARAMETER: p_url TYPE string LOWER CASE VISIBLE LENGTH 40. + SELECTION-SCREEN END OF LINE. + SELECTION-SCREEN BEGIN OF LINE. + SELECTION-SCREEN COMMENT 1(10) s_user FOR FIELD p_user. + PARAMETER: p_user TYPE string LOWER CASE VISIBLE LENGTH 40. + SELECTION-SCREEN END OF LINE. + SELECTION-SCREEN BEGIN OF LINE. + SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass. + PARAMETER: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40. + SELECTION-SCREEN END OF LINE. +SELECTION-SCREEN END OF SCREEN 1002. + +*----------------------------------------------------------------------- +* LCL_PASSWORD_DIALOG +*----------------------------------------------------------------------- +CLASS lcl_password_dialog DEFINITION. + + PUBLIC SECTION. + CONSTANTS DYNNR TYPE char4 VALUE '1002'. + + CLASS-METHODS popup + IMPORTING + iv_repo_url TYPE string + CHANGING + cv_user TYPE string + cv_pass TYPE string. + + CLASS-METHODS on_screen_init. + CLASS-METHODS on_screen_output. + CLASS-METHODS on_screen_event + IMPORTING + iv_ucomm TYPE syucomm. + + PRIVATE SECTION. + CLASS-DATA mv_confirm TYPE abap_bool. + +ENDCLASS. "lcl_password_dialog DEFINITION + +CLASS lcl_password_dialog IMPLEMENTATION. + + METHOD popup. + + clear p_pass. + p_url = iv_repo_url. + p_user = cv_user. + mv_confirm = abap_false. + + CALL SELECTION-SCREEN DYNNR STARTING AT 5 5 ENDING AT 60 8. + + IF mv_confirm = abap_true. + cv_user = p_user. + cv_pass = p_pass. + ELSE. + CLEAR: cv_user, cv_pass. + ENDIF. + + ENDMETHOD. "popup + + METHOD on_screen_init. + s_title = 'Login' ##NO_TEXT. + s_url = 'Repo URL' ##NO_TEXT. + s_user = 'User' ##NO_TEXT. + s_pass = 'Password' ##NO_TEXT. + ENDMETHOD. "on_screen_init + + METHOD on_screen_output. + DATA lt_ucomm TYPE TABLE OF sy-ucomm. + + ASSERT sy-dynnr = DYNNR. + + LOOP AT SCREEN. + IF screen-name = 'P_URL'. + screen-input = '0'. + screen-display_3d = '0'. + MODIFY SCREEN. + ENDIF. + IF screen-name = 'P_PASS'. + screen-invisible = '1'. + MODIFY SCREEN. + ENDIF. + ENDLOOP. + + " Program RSSYSTDB, GUI Status %_CSP + PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND. + APPEND 'NONE' TO lt_ucomm. "Button Check + APPEND 'SPOS' TO lt_ucomm. "Save as Variant + + CALL FUNCTION 'RS_SET_SELSCREEN_STATUS' + EXPORTING p_status = sy-pfkey + TABLES p_exclude = lt_ucomm. + + ENDMETHOD. "on_screen_output + + METHOD on_screen_event. + ASSERT sy-dynnr = DYNNR. + + " CRET - F8 + " OTHERS - simulate Enter press + CASE iv_ucomm. + WHEN 'CRET'. + mv_confirm = abap_true. + WHEN OTHERS. "TODO REFACTOR !!! A CLUTCH ! + " This will work unless any new specific logic appear + " for other commands. The problem is that the password dialog + " does not have Enter event (or I don't know how to activate it ;) + " so Enter issues previous command from previous screen + " But for now this works :) Fortunately Esc produces another flow + mv_confirm = abap_true. + LEAVE TO SCREEN 0. + ENDCASE. + + ENDMETHOD. "on_screen_event + +ENDCLASS. " lcl_password_dialog IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_password_dialog.prog.xml b/src/zabapgit_password_dialog.prog.xml new file mode 100644 index 000000000..bbc81505b --- /dev/null +++ b/src/zabapgit_password_dialog.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_PASSWORD_DIALOG + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Password dialog and selection screen + 36 + + + + + +