#303 pass dialog reworked, thanks to @sshlapak

This commit is contained in:
atsy 2016-09-01 10:19:09 +03:00
parent f1fceb2021
commit 1d92b82736
4 changed files with 190 additions and 62 deletions

View File

@ -33,6 +33,8 @@ SELECTION-SCREEN BEGIN OF SCREEN 1001.
* dummy for triggering screen * dummy for triggering screen
SELECTION-SCREEN END OF SCREEN 1001. SELECTION-SCREEN END OF SCREEN 1001.
INCLUDE zabapgit_password_dialog. " !!! Contains SELECTION SCREEN
DEFINE _add. DEFINE _add.
ro_html->add( &1 ) ##NO_TEXT. ro_html->add( &1 ) ##NO_TEXT.
END-OF-DEFINITION. END-OF-DEFINITION.
@ -125,13 +127,25 @@ INCLUDE zabapgit_app_impl.
INCLUDE zabapgit_unit_test. INCLUDE zabapgit_unit_test.
INCLUDE zabapgit_forms. INCLUDE zabapgit_forms.
INITIALIZATION.
lcl_password_dialog=>on_screen_init( ).
START-OF-SELECTION. START-OF-SELECTION.
PERFORM run. PERFORM run.
* Hide Execute button from screen * Hide Execute button from screen
AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN OUTPUT.
IF sy-dynnr = lcl_password_dialog=>DYNNR.
lcl_password_dialog=>on_screen_output( ).
ELSE.
PERFORM output. PERFORM output.
ENDIF.
* SAP back command re-direction * SAP back command re-direction
AT SELECTION-SCREEN ON EXIT-COMMAND. AT SELECTION-SCREEN ON EXIT-COMMAND.
PERFORM exit. PERFORM exit.
AT SELECTION-SCREEN.
IF sy-dynnr = lcl_password_dialog=>DYNNR.
lcl_password_dialog=>on_screen_event( sscrfields-ucomm ).
ENDIF.

View File

@ -113,12 +113,6 @@ CLASS lcl_git_transport DEFINITION FINAL.
iv_url TYPE string iv_url TYPE string
RAISING lcx_exception. 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 ENDCLASS. "lcl_transport DEFINITION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
@ -316,12 +310,12 @@ CLASS lcl_git_transport IMPLEMENTATION.
lv_user TYPE string, lv_user TYPE string,
lv_pass TYPE string. lv_pass TYPE string.
do_password_popup( lcl_password_dialog=>popup(
EXPORTING EXPORTING
iv_repo_url = iv_url iv_repo_url = iv_url
IMPORTING CHANGING
ev_user = lv_user cv_user = lv_user
ev_pass = lv_pass ). cv_pass = lv_pass ).
IF lv_user IS INITIAL. IF lv_user IS INITIAL.
lcx_exception=>raise( 'HTTP 401, unauthorized' ). lcx_exception=>raise( 'HTTP 401, unauthorized' ).
@ -333,56 +327,6 @@ CLASS lcl_git_transport IMPLEMENTATION.
ENDMETHOD. "acquire_login_details ENDMETHOD. "acquire_login_details
METHOD do_password_popup.
DATA: lv_returncode TYPE c,
lt_fields TYPE TABLE OF sval.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
* REFACTOR
DEFINE _add_dialog_fld.
APPEND INITIAL LINE TO lt_fields ASSIGNING <ls_field>.
<ls_field>-tabname = &1. "#EC NOTEXT
<ls_field>-fieldname = &2. "#EC NOTEXT
<ls_field>-fieldtext = &3. "#EC NOTEXT
<ls_field>-value = &4. "#EC NOTEXT
<ls_field>-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 <ls_field>.
ASSERT sy-subrc = 0.
ev_user = <ls_field>-value.
READ TABLE lt_fields INDEX 3 ASSIGNING <ls_field>.
ASSERT sy-subrc = 0.
ev_pass = <ls_field>-value.
ENDMETHOD. "do_password_popup
METHOD parse_branch_list. METHOD parse_branch_list.
DATA: lt_result TYPE TABLE OF string, DATA: lt_result TYPE TABLE OF string,

View File

@ -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

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZABAPGIT_PASSWORD_DIALOG</NAME>
<STATE>A</STATE>
<SQLX/>
<EDTX/>
<VARCL>X</VARCL>
<DBAPL/>
<DBNA/>
<CLAS/>
<TYPE/>
<OCCURS/>
<SUBC>I</SUBC>
<APPL/>
<SECU/>
<CNAM/>
<CDAT>0000-00-00</CDAT>
<UNAM/>
<UDAT>0000-00-00</UDAT>
<VERN/>
<LEVL/>
<RSTAT/>
<RMAND/>
<RLOAD>E</RLOAD>
<FIXPT/>
<SSET/>
<SDATE>0000-00-00</SDATE>
<STIME/>
<IDATE>0000-00-00</IDATE>
<ITIME/>
<LDBNAME/>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<TPOOL>
<item>
<ID>R</ID>
<KEY/>
<ENTRY>Password dialog and selection screen</ENTRY>
<LENGTH>36</LENGTH>
<SPLIT/>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>