mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Dialogs: HTML forms - follow-up (#4329)
* Dialogs: HTML forms - follow-up Follow-up to #4264: - Split `zcl_abapgit_html_form` class Processing form data has been moved to `zcl_abapgit_html_form_utils` - `iv_is_main` refactored to `iv_cmd_type` - In case of unsaved data, form exit will now prompt for confirmation (`zcl_abapgit_html_form_utils`) * dot space * lint * Remove const Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
4f95be22ad
commit
6623679e67
|
@ -38,9 +38,10 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION
|
|||
add_offline_repo TYPE string VALUE 'add-repo-offline',
|
||||
END OF c_event .
|
||||
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form .
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
|
||||
|
||||
METHODS validate_form
|
||||
IMPORTING
|
||||
|
@ -57,7 +58,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -65,6 +66,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION.
|
|||
CREATE OBJECT mo_validation_log.
|
||||
CREATE OBJECT mo_form_data.
|
||||
mo_form = get_form_schema( ).
|
||||
mo_form_util = zcl_abapgit_html_form_utils=>create( mo_form ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -117,7 +119,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION.
|
|||
iv_hint = 'Ignore translations, serialize just main language'
|
||||
)->command(
|
||||
iv_label = 'Create Offline Repo'
|
||||
iv_is_main = abap_true
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-add_offline_repo
|
||||
)->command(
|
||||
iv_label = 'Create Package'
|
||||
|
@ -133,7 +135,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION.
|
|||
|
||||
DATA lx_err TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
ro_validation_log = mo_form->validate_required_fields( io_form_data ).
|
||||
ro_validation_log = mo_form_util->validate( io_form_data ).
|
||||
|
||||
IF io_form_data->get( c_id-package ) IS NOT INITIAL.
|
||||
TRY.
|
||||
|
@ -163,7 +165,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDOFFLIN IMPLEMENTATION.
|
|||
DATA: ls_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params,
|
||||
lo_new_offline_repo TYPE REF TO zcl_abapgit_repo_offline.
|
||||
|
||||
mo_form_data = mo_form->normalize_form_data( ii_event->form_data( ) ).
|
||||
mo_form_data = mo_form_util->normalize( ii_event->form_data( ) ).
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_event-go_back.
|
||||
|
|
|
@ -42,9 +42,10 @@ CLASS zcl_abapgit_gui_page_addonline DEFINITION
|
|||
add_online_repo TYPE string VALUE 'add-repo-online',
|
||||
END OF c_event.
|
||||
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form .
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
|
||||
|
||||
METHODS validate_form
|
||||
IMPORTING
|
||||
|
@ -61,7 +62,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -69,6 +70,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
|||
CREATE OBJECT mo_validation_log.
|
||||
CREATE OBJECT mo_form_data.
|
||||
mo_form = get_form_schema( ).
|
||||
mo_form_util = zcl_abapgit_html_form_utils=>create( mo_form ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -136,7 +138,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
|||
iv_hint = 'Ignore translations, serialize just main language'
|
||||
)->command(
|
||||
iv_label = 'Clone Online Repo'
|
||||
iv_is_main = abap_true
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-add_online_repo
|
||||
)->command(
|
||||
iv_label = 'Create Package'
|
||||
|
@ -152,7 +154,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
|||
|
||||
DATA lx_err TYPE REF TO zcx_abapgit_exception.
|
||||
|
||||
ro_validation_log = mo_form->validate_required_fields( io_form_data ).
|
||||
ro_validation_log = mo_form_util->validate( io_form_data ).
|
||||
|
||||
IF io_form_data->get( c_id-url ) IS NOT INITIAL.
|
||||
TRY.
|
||||
|
@ -193,7 +195,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
|
|||
DATA: ls_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params,
|
||||
lo_new_online_repo TYPE REF TO zcl_abapgit_repo_online.
|
||||
|
||||
mo_form_data = mo_form->normalize_form_data( ii_event->form_data( ) ).
|
||||
mo_form_data = mo_form_util->normalize( ii_event->form_data( ) ).
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_event-go_back.
|
||||
|
|
|
@ -17,6 +17,7 @@ CLASS zcl_abapgit_gui_page_sett_glob DEFINITION
|
|||
METHODS constructor
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -38,14 +39,17 @@ CLASS zcl_abapgit_gui_page_sett_glob DEFINITION
|
|||
END OF c_id.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_event,
|
||||
go_back TYPE string VALUE 'go-back',
|
||||
go_back TYPE string VALUE 'go_back',
|
||||
proxy_bypass TYPE string VALUE 'proxy_bypass',
|
||||
save TYPE string VALUE 'save',
|
||||
END OF c_event.
|
||||
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
|
||||
|
||||
METHODS validate_form
|
||||
IMPORTING
|
||||
|
@ -82,6 +86,9 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
CREATE OBJECT mo_validation_log.
|
||||
CREATE OBJECT mo_form_data.
|
||||
mo_form = get_form_schema( ).
|
||||
mo_form_util = zcl_abapgit_html_form_utils=>create( mo_form ).
|
||||
|
||||
read_settings( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -103,8 +110,6 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
METHOD get_form_schema.
|
||||
|
||||
CONSTANTS lc_abapgit_prog TYPE progname VALUE `ZABAPGIT`.
|
||||
|
||||
ro_form = zcl_abapgit_html_form=>create(
|
||||
iv_form_id = 'global-setting-form'
|
||||
iv_help_page = 'https://docs.abapgit.org/guide-settings-global.html' ).
|
||||
|
@ -151,7 +156,7 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
iv_hint = |At least { zcl_abapgit_settings=>c_commitmsg_body_size_dft } characters|
|
||||
iv_min = zcl_abapgit_settings=>c_commitmsg_body_size_dft ).
|
||||
|
||||
IF zcl_abapgit_services_abapgit=>is_installed( ) = abap_true AND sy-cprog = lc_abapgit_prog.
|
||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
|
||||
ro_form->start_group(
|
||||
iv_name = c_id-devint_settings
|
||||
iv_label = 'Development Internal Settings'
|
||||
|
@ -165,7 +170,7 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
ro_form->command(
|
||||
iv_label = 'Save Settings'
|
||||
iv_is_main = abap_true
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-save
|
||||
)->command(
|
||||
iv_label = 'Back'
|
||||
|
@ -183,8 +188,11 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
lt_proxy_bypass = mo_settings->get_proxy_bypass( ).
|
||||
LOOP AT lt_proxy_bypass INTO ls_proxy_bypass.
|
||||
lv_val = lv_val && ls_proxy_bypass-low && zif_abapgit_definitions=>c_crlf.
|
||||
lv_val = lv_val && ls_proxy_bypass-low && zif_abapgit_definitions=>c_newline.
|
||||
ENDLOOP.
|
||||
IF sy-subrc <> 0.
|
||||
lv_val = zif_abapgit_definitions=>c_newline.
|
||||
ENDIF.
|
||||
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-proxy_bypass
|
||||
|
@ -207,7 +215,7 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
iv_val = mo_settings->get_proxy_port( ) ).
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-proxy_auth
|
||||
iv_val = mo_settings->get_proxy_authentication( ) ).
|
||||
iv_val = boolc( mo_settings->get_proxy_authentication( ) = abap_true ) ).
|
||||
|
||||
read_proxy_bypass( ).
|
||||
|
||||
|
@ -223,12 +231,17 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
iv_val = |{ mo_settings->get_commitmsg_body_size( ) }| ).
|
||||
|
||||
" Dev Internal
|
||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-run_critical_tests
|
||||
iv_val = |{ mo_settings->get_run_critical_tests( ) }| ).
|
||||
iv_val = boolc( mo_settings->get_run_critical_tests( ) = abap_true ) ).
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-experimental_features
|
||||
iv_val = |{ mo_settings->get_experimental_features( ) }| ).
|
||||
iv_val = boolc( mo_settings->get_experimental_features( ) = abap_true ) ).
|
||||
ENDIF.
|
||||
|
||||
" Set for is_dirty check
|
||||
mo_form_util->set_data( mo_form_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -274,8 +287,10 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
mo_settings->set_commitmsg_body_size( lv_value ).
|
||||
|
||||
" Dev Internal
|
||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
|
||||
mo_settings->set_run_critical_tests( boolc( mo_form_data->get( c_id-run_critical_tests ) = abap_true ) ).
|
||||
mo_settings->set_experimental_features( boolc( mo_form_data->get( c_id-experimental_features ) = abap_true ) ).
|
||||
ENDIF.
|
||||
|
||||
" Store in DB
|
||||
lo_persistence = zcl_abapgit_persist_settings=>get_instance( ).
|
||||
|
@ -285,12 +300,14 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
MESSAGE 'Settings succesfully saved' TYPE 'S'.
|
||||
|
||||
read_settings( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_form.
|
||||
|
||||
ro_validation_log = mo_form->validate_required_fields( io_form_data ).
|
||||
ro_validation_log = mo_form_util->validate( io_form_data ).
|
||||
|
||||
IF io_form_data->get( c_id-proxy_url ) IS NOT INITIAL AND io_form_data->get( c_id-proxy_port ) IS INITIAL OR
|
||||
io_form_data->get( c_id-proxy_url ) IS INITIAL AND io_form_data->get( c_id-proxy_port ) IS NOT INITIAL.
|
||||
|
@ -311,14 +328,14 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_gui_event_handler~on_event.
|
||||
|
||||
mo_form_data = mo_form->normalize_form_data( ii_event->form_data( ) ).
|
||||
mo_form_data = mo_form_util->normalize( ii_event->form_data( ) ).
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_event-go_back.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark.
|
||||
rs_handled-state = mo_form_util->exit( mo_form_data ).
|
||||
|
||||
WHEN c_event-save.
|
||||
" Validate all form entries
|
||||
" Validate form entries before saving
|
||||
mo_validation_log = validate_form( mo_form_data ).
|
||||
|
||||
IF mo_validation_log->is_empty( ) = abap_true.
|
||||
|
@ -336,7 +353,9 @@ CLASS zcl_abapgit_gui_page_sett_glob IMPLEMENTATION.
|
|||
|
||||
gui_services( )->register_event_handler( me ).
|
||||
|
||||
IF mo_form_util->is_empty( mo_form_data ) = abap_true.
|
||||
read_settings( ).
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ CLASS zcl_abapgit_gui_page_sett_pers DEFINITION
|
|||
METHODS constructor
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -38,18 +39,19 @@ CLASS zcl_abapgit_gui_page_sett_pers DEFINITION
|
|||
hide_sapgui_hint TYPE string VALUE 'hide_sapgui_hint',
|
||||
activate_wo_popup TYPE string VALUE 'activate_wo_popup',
|
||||
END OF c_id.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_event,
|
||||
go_back TYPE string VALUE 'go-back',
|
||||
go_back TYPE string VALUE 'go_back',
|
||||
save TYPE string VALUE 'save',
|
||||
END OF c_event.
|
||||
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
|
||||
DATA ms_settings TYPE zif_abapgit_definitions=>ty_s_user_settings.
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
|
||||
METHODS validate_form
|
||||
IMPORTING
|
||||
|
@ -80,6 +82,9 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
CREATE OBJECT mo_validation_log.
|
||||
CREATE OBJECT mo_form_data.
|
||||
mo_form = get_form_schema( ).
|
||||
mo_form_util = zcl_abapgit_html_form_utils=>create( mo_form ).
|
||||
|
||||
read_settings( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -179,7 +184,7 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
iv_hint = 'If disabled, abapGit will use only a single thread to serialize objects'
|
||||
)->command(
|
||||
iv_label = 'Save Settings'
|
||||
iv_is_main = abap_true
|
||||
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
|
||||
iv_action = c_event-save
|
||||
)->command(
|
||||
iv_label = 'Back'
|
||||
|
@ -217,13 +222,13 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
" Interaction
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-activate_wo_popup
|
||||
iv_val = |{ ms_settings-activate_wo_popup }| ).
|
||||
iv_val = boolc( ms_settings-activate_wo_popup = abap_true ) ).
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-adt_jump_enabled
|
||||
iv_val = |{ ms_settings-adt_jump_enabled }| ).
|
||||
iv_val = boolc( ms_settings-adt_jump_enabled = abap_true ) ).
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-link_hints_enabled
|
||||
iv_val = |{ ms_settings-link_hints_enabled }| ).
|
||||
iv_val = boolc( ms_settings-link_hints_enabled = abap_true ) ).
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-link_hint_key
|
||||
iv_val = |{ ms_settings-link_hint_key }| ).
|
||||
|
@ -231,7 +236,10 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
" Resources
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-parallel_proc_disabled
|
||||
iv_val = |{ ms_settings-parallel_proc_disabled }| ).
|
||||
iv_val = boolc( ms_settings-parallel_proc_disabled = abap_true ) ).
|
||||
|
||||
" Set for is_dirty check
|
||||
mo_form_util->set_data( mo_form_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -267,26 +275,28 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
|
||||
MESSAGE 'Settings succesfully saved' TYPE 'S'.
|
||||
|
||||
read_settings( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_form.
|
||||
|
||||
ro_validation_log = mo_form->validate_required_fields( io_form_data ).
|
||||
ro_validation_log = mo_form_util->validate( io_form_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_event_handler~on_event.
|
||||
|
||||
mo_form_data = mo_form->normalize_form_data( ii_event->form_data( ) ).
|
||||
mo_form_data = mo_form_util->normalize( ii_event->form_data( ) ).
|
||||
|
||||
CASE ii_event->mv_action.
|
||||
WHEN c_event-go_back.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark.
|
||||
rs_handled-state = mo_form_util->exit( mo_form_data ).
|
||||
|
||||
WHEN c_event-save.
|
||||
" Validate all form entries
|
||||
" Validate form entries before saving
|
||||
mo_validation_log = validate_form( mo_form_data ).
|
||||
|
||||
IF mo_validation_log->is_empty( ) = abap_true.
|
||||
|
@ -304,7 +314,9 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
|
|||
|
||||
gui_services( )->register_event_handler( me ).
|
||||
|
||||
IF mo_form_util->is_empty( mo_form_data ) = abap_true.
|
||||
read_settings( ).
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
|
|
|
@ -1,40 +1,32 @@
|
|||
CLASS zcl_abapgit_html_form DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PRIVATE.
|
||||
CREATE PRIVATE .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CONSTANTS c_rows TYPE string VALUE 'rows'.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_cmd_type,
|
||||
input TYPE i VALUE 1,
|
||||
link TYPE i VALUE 2,
|
||||
button TYPE i VALUE 3,
|
||||
END OF c_cmd_type.
|
||||
INTERFACES zif_abapgit_html_form .
|
||||
|
||||
CLASS-METHODS create
|
||||
IMPORTING
|
||||
!iv_form_id TYPE csequence OPTIONAL
|
||||
!iv_help_page TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS render
|
||||
IMPORTING
|
||||
!iv_form_class TYPE csequence
|
||||
!io_values TYPE REF TO zcl_abapgit_string_map
|
||||
!io_validation_log TYPE REF TO zcl_abapgit_string_map OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ri_html) TYPE REF TO zif_abapgit_html.
|
||||
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
|
||||
METHODS command
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_action TYPE csequence
|
||||
!iv_is_main TYPE abap_bool DEFAULT abap_false
|
||||
!iv_cmd_type TYPE i DEFAULT 1
|
||||
!iv_cmd_type TYPE i DEFAULT zif_abapgit_html_form=>c_cmd_type-input
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS text
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
|
@ -49,7 +41,7 @@ CLASS zcl_abapgit_html_form DEFINITION
|
|||
!iv_min TYPE i DEFAULT cl_abap_math=>min_int4
|
||||
!iv_max TYPE i DEFAULT cl_abap_math=>max_int4
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS textarea
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
|
@ -59,7 +51,7 @@ CLASS zcl_abapgit_html_form DEFINITION
|
|||
!iv_readonly TYPE abap_bool DEFAULT abap_false
|
||||
!iv_placeholder TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS number
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
|
@ -70,14 +62,14 @@ CLASS zcl_abapgit_html_form DEFINITION
|
|||
!iv_min TYPE i DEFAULT cl_abap_math=>min_int4
|
||||
!iv_max TYPE i DEFAULT cl_abap_math=>max_int4
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS checkbox
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_name TYPE csequence
|
||||
!iv_hint TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS radio
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
|
@ -85,101 +77,45 @@ CLASS zcl_abapgit_html_form DEFINITION
|
|||
!iv_default_value TYPE csequence OPTIONAL
|
||||
!iv_hint TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS option
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_value TYPE csequence
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS table
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_name TYPE csequence
|
||||
!iv_hint TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS column
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_width TYPE csequence OPTIONAL
|
||||
!iv_readonly TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS start_group
|
||||
IMPORTING
|
||||
!iv_label TYPE csequence
|
||||
!iv_name TYPE csequence
|
||||
!iv_hint TYPE csequence OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
METHODS normalize_form_data
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS validate_required_fields
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS is_empty
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(rv_empty) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS hidden
|
||||
IMPORTING
|
||||
!iv_name TYPE csequence
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form.
|
||||
|
||||
VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
|
||||
METHODS get_fields
|
||||
RETURNING
|
||||
VALUE(rt_fields) TYPE zif_abapgit_html_form=>ty_fields .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_subitem,
|
||||
label TYPE string,
|
||||
value TYPE string,
|
||||
readonly TYPE abap_bool,
|
||||
END OF ty_subitem.
|
||||
TYPES:
|
||||
ty_subitems TYPE STANDARD TABLE OF ty_subitem WITH DEFAULT KEY.
|
||||
TYPES:
|
||||
BEGIN OF ty_field,
|
||||
type TYPE i,
|
||||
name TYPE string,
|
||||
label TYPE string,
|
||||
hint TYPE string,
|
||||
dblclick TYPE string,
|
||||
placeholder TYPE string,
|
||||
required TYPE string,
|
||||
upper_case TYPE abap_bool,
|
||||
item_class TYPE string,
|
||||
error TYPE string,
|
||||
default_value TYPE string,
|
||||
side_action TYPE string,
|
||||
subitems TYPE ty_subitems,
|
||||
readonly TYPE abap_bool,
|
||||
password TYPE abap_bool,
|
||||
min TYPE i,
|
||||
max TYPE i,
|
||||
* onclick ???
|
||||
END OF ty_field.
|
||||
TYPES:
|
||||
BEGIN OF ty_command,
|
||||
label TYPE string,
|
||||
action TYPE string,
|
||||
is_main TYPE abap_bool,
|
||||
cmd_type TYPE i,
|
||||
* onclick ???
|
||||
END OF ty_command.
|
||||
TYPES:
|
||||
BEGIN OF ty_attr,
|
||||
value TYPE string,
|
||||
|
@ -188,68 +124,56 @@ CLASS zcl_abapgit_html_form DEFINITION
|
|||
readonly TYPE string,
|
||||
placeholder TYPE string,
|
||||
required TYPE string,
|
||||
END OF ty_attr.
|
||||
END OF ty_attr .
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_field_type,
|
||||
text TYPE i VALUE 1,
|
||||
radio TYPE i VALUE 2,
|
||||
checkbox TYPE i VALUE 3,
|
||||
field_group TYPE i VALUE 4,
|
||||
number TYPE i VALUE 5,
|
||||
textarea TYPE i VALUE 6,
|
||||
table TYPE i VALUE 7,
|
||||
hidden TYPE i VALUE 8,
|
||||
END OF c_field_type.
|
||||
DATA:
|
||||
mt_fields TYPE STANDARD TABLE OF ty_field
|
||||
WITH UNIQUE SORTED KEY by_name COMPONENTS name.
|
||||
mt_fields TYPE zif_abapgit_html_form=>ty_fields.
|
||||
DATA:
|
||||
mt_commands TYPE STANDARD TABLE OF ty_command.
|
||||
DATA mv_form_id TYPE string.
|
||||
DATA mv_help_page TYPE string.
|
||||
mt_commands TYPE STANDARD TABLE OF zif_abapgit_html_form=>ty_command .
|
||||
DATA mv_form_id TYPE string .
|
||||
DATA mv_help_page TYPE string .
|
||||
|
||||
METHODS render_field
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!io_values TYPE REF TO zcl_abapgit_string_map
|
||||
!io_validation_log TYPE REF TO zcl_abapgit_string_map
|
||||
!is_field TYPE ty_field.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field .
|
||||
METHODS render_field_text
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_attr TYPE ty_attr.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr .
|
||||
METHODS render_field_textarea
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_attr TYPE ty_attr.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr .
|
||||
METHODS render_field_checkbox
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_attr TYPE ty_attr.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr .
|
||||
METHODS render_field_radio
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_attr TYPE ty_attr.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr .
|
||||
METHODS render_field_table
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr
|
||||
!io_values TYPE REF TO zcl_abapgit_string_map.
|
||||
!io_values TYPE REF TO zcl_abapgit_string_map .
|
||||
METHODS render_command
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_cmd TYPE ty_command.
|
||||
!is_cmd TYPE zif_abapgit_html_form=>ty_command .
|
||||
METHODS render_field_hidden
|
||||
IMPORTING
|
||||
!ii_html TYPE REF TO zif_abapgit_html
|
||||
!is_field TYPE ty_field
|
||||
!is_attr TYPE ty_attr.
|
||||
!is_field TYPE zif_abapgit_html_form=>ty_field
|
||||
!is_attr TYPE ty_attr .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -261,7 +185,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-checkbox.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-checkbox.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-hint = iv_hint.
|
||||
|
@ -284,7 +208,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
READ TABLE mt_fields INDEX lv_size ASSIGNING <ls_last>.
|
||||
ASSERT sy-subrc = 0.
|
||||
ASSERT <ls_last>-type = c_field_type-table.
|
||||
ASSERT <ls_last>-type = zif_abapgit_html_form=>c_field_type-table.
|
||||
|
||||
ls_column-label = iv_label.
|
||||
ls_column-value = iv_width.
|
||||
|
@ -301,11 +225,10 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_cmd LIKE LINE OF mt_commands.
|
||||
|
||||
ASSERT iv_cmd_type BETWEEN 1 AND 3.
|
||||
ASSERT iv_cmd_type BETWEEN 1 AND 4.
|
||||
|
||||
ls_cmd-label = iv_label.
|
||||
ls_cmd-action = iv_action.
|
||||
ls_cmd-is_main = iv_is_main.
|
||||
ls_cmd-cmd_type = iv_cmd_type.
|
||||
|
||||
APPEND ls_cmd TO mt_commands.
|
||||
|
@ -331,135 +254,27 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_fields.
|
||||
rt_fields = mt_fields.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD hidden.
|
||||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-hidden.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-hidden.
|
||||
ls_field-name = iv_name.
|
||||
APPEND ls_field TO mt_fields.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_empty.
|
||||
|
||||
DATA:
|
||||
lv_value TYPE string,
|
||||
lv_rows TYPE i,
|
||||
lv_row TYPE i.
|
||||
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF mt_fields.
|
||||
|
||||
rv_empty = abap_true.
|
||||
LOOP AT mt_fields ASSIGNING <ls_field> WHERE type <> c_field_type-field_group.
|
||||
lv_value = condense(
|
||||
val = io_form_data->get( <ls_field>-name )
|
||||
del = ` ` ).
|
||||
|
||||
IF <ls_field>-type = c_field_type-number.
|
||||
rv_empty = boolc( lv_value IS INITIAL OR lv_value = '0' ).
|
||||
ELSEIF <ls_field>-type = c_field_type-table.
|
||||
lv_rows = io_form_data->get( |{ <ls_field>-name }-{ c_rows }| ).
|
||||
DO lv_rows TIMES.
|
||||
lv_row = sy-index.
|
||||
DO lines( <ls_field>-subitems ) TIMES.
|
||||
lv_value = io_form_data->get( |{ <ls_field>-name }-{ lv_row }-{ sy-index }| ).
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
IF rv_empty <> abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDDO.
|
||||
ENDDO.
|
||||
ELSEIF <ls_field>-type = c_field_type-textarea.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_value WITH ''.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_newline IN lv_value WITH ''.
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
ELSE.
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
ENDIF.
|
||||
|
||||
IF rv_empty <> abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD normalize_form_data.
|
||||
|
||||
DATA:
|
||||
lv_value TYPE string,
|
||||
lv_rows TYPE i,
|
||||
lv_row TYPE i,
|
||||
lv_len TYPE i.
|
||||
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF mt_fields.
|
||||
|
||||
CREATE OBJECT ro_form_data.
|
||||
|
||||
LOOP AT mt_fields ASSIGNING <ls_field> WHERE type <> c_field_type-field_group.
|
||||
CLEAR lv_value.
|
||||
lv_value = io_form_data->get( <ls_field>-name ).
|
||||
|
||||
IF <ls_field>-type = c_field_type-checkbox.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = boolc( lv_value = 'on' ) ).
|
||||
ELSEIF <ls_field>-type = c_field_type-text AND <ls_field>-upper_case = abap_true.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = to_upper( lv_value ) ).
|
||||
ELSEIF <ls_field>-type = c_field_type-number.
|
||||
" Numeric value is checked in validation
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = condense( val = lv_value del = ` ` ) ).
|
||||
ELSEIF <ls_field>-type = c_field_type-table.
|
||||
lv_rows = io_form_data->get( |{ <ls_field>-name }-{ c_rows }| ).
|
||||
DO lv_rows TIMES.
|
||||
lv_row = sy-index.
|
||||
DO lines( <ls_field>-subitems ) TIMES.
|
||||
lv_value = io_form_data->get( |{ <ls_field>-name }-{ lv_row }-{ sy-index }| ).
|
||||
ro_form_data->set(
|
||||
iv_key = |{ <ls_field>-name }-{ lv_row }-{ sy-index }|
|
||||
iv_val = lv_value ).
|
||||
ENDDO.
|
||||
ENDDO.
|
||||
ro_form_data->set(
|
||||
iv_key = |{ <ls_field>-name }-{ c_rows }|
|
||||
iv_val = |{ lv_rows }| ).
|
||||
ELSEIF <ls_field>-type = c_field_type-textarea.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_value
|
||||
WITH zif_abapgit_definitions=>c_newline.
|
||||
|
||||
" Remove last line if empty (ie 2x newline)
|
||||
lv_len = strlen( lv_value ) - 2.
|
||||
IF lv_len >= 0 AND lv_value+lv_len(1) = zif_abapgit_definitions=>c_newline.
|
||||
lv_len = lv_len + 1.
|
||||
lv_value = lv_value(lv_len).
|
||||
ENDIF.
|
||||
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = lv_value ).
|
||||
ELSE.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = lv_value ).
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD number.
|
||||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-number.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-number.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-readonly = iv_readonly.
|
||||
|
@ -486,7 +301,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
READ TABLE mt_fields INDEX lv_size ASSIGNING <ls_last>.
|
||||
ASSERT sy-subrc = 0.
|
||||
ASSERT <ls_last>-type = c_field_type-radio. " Or dropdown - TODO in future
|
||||
ASSERT <ls_last>-type = zif_abapgit_html_form=>c_field_type-radio. " Or dropdown - TODO in future
|
||||
|
||||
ls_option-label = iv_label.
|
||||
ls_option-value = iv_value.
|
||||
|
@ -502,7 +317,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-radio.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-radio.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-default_value = iv_default_value.
|
||||
|
@ -534,7 +349,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ri_html->add( |<form method="post"{ ls_form_id }>| ).
|
||||
|
||||
" Add hidden button that triggers main command when pressing enter
|
||||
LOOP AT mt_commands ASSIGNING <ls_cmd> WHERE is_main = abap_true.
|
||||
LOOP AT mt_commands ASSIGNING <ls_cmd> WHERE cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main.
|
||||
ri_html->add( |<button type="submit" formaction="sapevent:{ <ls_cmd>-action
|
||||
}" class="hidden-submit" aria-hidden="true" tabindex="-1"></button>| ).
|
||||
EXIT.
|
||||
|
@ -542,12 +357,12 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
LOOP AT mt_fields ASSIGNING <ls_field>.
|
||||
AT FIRST.
|
||||
IF <ls_field>-type <> c_field_type-field_group.
|
||||
IF <ls_field>-type <> zif_abapgit_html_form=>c_field_type-field_group.
|
||||
ri_html->add( |<ul>| ).
|
||||
ENDIF.
|
||||
ENDAT.
|
||||
|
||||
IF <ls_field>-type = c_field_type-field_group.
|
||||
IF <ls_field>-type = zif_abapgit_html_form=>c_field_type-field_group.
|
||||
IF lv_cur_group IS NOT INITIAL AND lv_cur_group <> <ls_field>-name.
|
||||
ri_html->add( |</ul>| ).
|
||||
ri_html->add( |</fieldset>| ).
|
||||
|
@ -607,30 +422,28 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
METHOD render_command.
|
||||
|
||||
DATA lv_main_submit TYPE string.
|
||||
|
||||
CASE is_cmd-cmd_type.
|
||||
WHEN c_cmd_type-link.
|
||||
WHEN zif_abapgit_html_form=>c_cmd_type-link.
|
||||
|
||||
ii_html->add_a(
|
||||
iv_txt = is_cmd-label
|
||||
iv_act = is_cmd-action
|
||||
iv_class = 'dialog-commands' ).
|
||||
|
||||
WHEN c_cmd_type-button.
|
||||
WHEN zif_abapgit_html_form=>c_cmd_type-button.
|
||||
|
||||
ii_html->add( |<button type="submit" name="action" value="{
|
||||
is_cmd-action }" class="action-commands">{ is_cmd-label }</button>| ).
|
||||
|
||||
WHEN c_cmd_type-input.
|
||||
WHEN zif_abapgit_html_form=>c_cmd_type-input.
|
||||
|
||||
IF is_cmd-is_main = abap_true.
|
||||
lv_main_submit = ' class="main"'.
|
||||
ELSE.
|
||||
CLEAR lv_main_submit.
|
||||
ENDIF.
|
||||
ii_html->add( |<input type="submit" value="{
|
||||
is_cmd-label }"{ lv_main_submit } formaction="sapevent:{ is_cmd-action }">| ).
|
||||
is_cmd-label }" formaction="sapevent:{ is_cmd-action }">| ).
|
||||
|
||||
WHEN zif_abapgit_html_form=>c_cmd_type-input_main.
|
||||
|
||||
ii_html->add( |<input type="submit" value="{
|
||||
is_cmd-label }" class="main" formaction="sapevent:{ is_cmd-action }">| ).
|
||||
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
|
@ -685,7 +498,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
IF ls_attr-error IS NOT INITIAL.
|
||||
lv_item_class = condense( lv_item_class && ' error' ).
|
||||
ENDIF.
|
||||
IF is_field-type = c_field_type-text AND is_field-max BETWEEN 1 AND 20.
|
||||
IF is_field-type = zif_abapgit_html_form=>c_field_type-text AND is_field-max BETWEEN 1 AND 20.
|
||||
" Reduced width for short fields
|
||||
lv_item_class = lv_item_class && ' w40'.
|
||||
ENDIF.
|
||||
|
@ -697,35 +510,35 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ii_html->add( |<li{ lv_item_class }>| ).
|
||||
|
||||
CASE is_field-type.
|
||||
WHEN c_field_type-text OR c_field_type-number.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-text OR zif_abapgit_html_form=>c_field_type-number.
|
||||
|
||||
render_field_text(
|
||||
ii_html = ii_html
|
||||
is_field = is_field
|
||||
is_attr = ls_attr ).
|
||||
|
||||
WHEN c_field_type-textarea.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-textarea.
|
||||
|
||||
render_field_textarea(
|
||||
ii_html = ii_html
|
||||
is_field = is_field
|
||||
is_attr = ls_attr ).
|
||||
|
||||
WHEN c_field_type-checkbox.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-checkbox.
|
||||
|
||||
render_field_checkbox(
|
||||
ii_html = ii_html
|
||||
is_field = is_field
|
||||
is_attr = ls_attr ).
|
||||
|
||||
WHEN c_field_type-radio.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-radio.
|
||||
|
||||
render_field_radio(
|
||||
ii_html = ii_html
|
||||
is_field = is_field
|
||||
is_attr = ls_attr ).
|
||||
|
||||
WHEN c_field_type-table.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-table.
|
||||
|
||||
render_field_table(
|
||||
ii_html = ii_html
|
||||
|
@ -733,7 +546,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
is_attr = ls_attr
|
||||
io_values = io_values ).
|
||||
|
||||
WHEN c_field_type-hidden.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-hidden.
|
||||
|
||||
render_field_hidden(
|
||||
ii_html = ii_html
|
||||
|
@ -847,7 +660,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ii_html->add( |</tr>| ).
|
||||
ii_html->add( |</thead>| ).
|
||||
|
||||
lv_rows = io_values->get( |{ is_field-name }-{ c_rows }| ).
|
||||
lv_rows = io_values->get( |{ is_field-name }-{ zif_abapgit_html_form=>c_rows }| ).
|
||||
|
||||
ii_html->add( |<tbody>| ).
|
||||
DO lv_rows TIMES.
|
||||
|
@ -871,7 +684,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ii_html->add( |</table>| ).
|
||||
|
||||
" Hidden field with number of rows to simplify getting values from form
|
||||
lv_value = |{ is_field-name }-{ c_rows }|.
|
||||
lv_value = |{ is_field-name }-{ zif_abapgit_html_form=>c_rows }|.
|
||||
ii_html->add( |<input type="number" name="{ lv_value }" id="{
|
||||
lv_value }" value="{ lv_rows }" style="display:none">| ).
|
||||
|
||||
|
@ -893,7 +706,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ii_html->add( '<div class="input-container">' ). " Ugly :(
|
||||
ENDIF.
|
||||
|
||||
IF is_field-type = c_field_type-number.
|
||||
IF is_field-type = zif_abapgit_html_form=>c_field_type-number.
|
||||
lv_type = 'number'.
|
||||
ELSEIF is_field-password = abap_true.
|
||||
lv_type = 'password'.
|
||||
|
@ -941,7 +754,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-field_group.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-field_group.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-hint = iv_hint.
|
||||
|
@ -957,7 +770,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-table.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-table.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-hint = iv_hint.
|
||||
|
@ -973,7 +786,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-text.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-text.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-upper_case = iv_upper_case.
|
||||
|
@ -1005,7 +818,7 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
|
||||
DATA ls_field LIKE LINE OF mt_fields.
|
||||
|
||||
ls_field-type = c_field_type-textarea.
|
||||
ls_field-type = zif_abapgit_html_form=>c_field_type-textarea.
|
||||
ls_field-name = iv_name.
|
||||
ls_field-label = iv_label.
|
||||
ls_field-readonly = iv_readonly.
|
||||
|
@ -1018,56 +831,4 @@ CLASS zcl_abapgit_html_form IMPLEMENTATION.
|
|||
ro_self = me.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_required_fields.
|
||||
|
||||
DATA lv_value TYPE string.
|
||||
DATA lv_number TYPE i.
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF mt_fields.
|
||||
|
||||
CREATE OBJECT ro_validation_log.
|
||||
|
||||
LOOP AT mt_fields ASSIGNING <ls_field>.
|
||||
lv_value = io_form_data->get( <ls_field>-name ).
|
||||
IF <ls_field>-required IS NOT INITIAL AND lv_value IS INITIAL.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } cannot be empty| ).
|
||||
ENDIF.
|
||||
CASE <ls_field>-type.
|
||||
WHEN c_field_type-text.
|
||||
IF <ls_field>-min <> cl_abap_math=>min_int4 AND strlen( lv_value ) < <ls_field>-min.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be shorter than { <ls_field>-min } characters| ).
|
||||
ENDIF.
|
||||
IF <ls_field>-max <> cl_abap_math=>max_int4 AND strlen( lv_value ) > <ls_field>-max.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be longer than { <ls_field>-max } characters| ).
|
||||
ENDIF.
|
||||
WHEN c_field_type-number.
|
||||
TRY.
|
||||
lv_number = lv_value.
|
||||
CATCH cx_root.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } is not numeric| ).
|
||||
CONTINUE.
|
||||
ENDTRY.
|
||||
IF <ls_field>-min <> cl_abap_math=>min_int4 AND lv_number < <ls_field>-min.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be lower than { <ls_field>-min }| ).
|
||||
ENDIF.
|
||||
IF <ls_field>-max <> cl_abap_math=>max_int4 AND lv_number > <ls_field>-max.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be higher than { <ls_field>-max }| ).
|
||||
ENDIF.
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -1,363 +0,0 @@
|
|||
CLASS ltcl_test_form DEFINITION
|
||||
FOR TESTING
|
||||
RISK LEVEL HARMLESS
|
||||
DURATION SHORT
|
||||
FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS validate FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS normalize FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS is_empty FOR TESTING RAISING zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_test_form IMPLEMENTATION.
|
||||
|
||||
METHOD validate.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_log TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_cut = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->text(
|
||||
iv_name = 'field1'
|
||||
iv_required = abap_true
|
||||
iv_label = 'Field name 1'
|
||||
)->text(
|
||||
iv_name = 'field2'
|
||||
iv_label = 'Field name 2' ).
|
||||
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field1' )
|
||||
exp = '*cannot be empty' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = '' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field1' )
|
||||
exp = '*cannot be empty' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'xyz' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
" New form
|
||||
lo_cut = zcl_abapgit_html_form=>create( ).
|
||||
|
||||
lo_cut->text(
|
||||
iv_name = 'field3'
|
||||
iv_min = 3
|
||||
iv_max = 10
|
||||
iv_label = 'Field name 3' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = 'xy' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field3' )
|
||||
exp = '*must not be shorter*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = '01234567890123' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field3' )
|
||||
exp = '*must not be longer*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = 'xyz!' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
" New form
|
||||
lo_cut = zcl_abapgit_html_form=>create( ).
|
||||
|
||||
lo_cut->number(
|
||||
iv_name = 'field4'
|
||||
iv_min = 100
|
||||
iv_max = 200
|
||||
iv_label = 'Field name 4' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '123-456' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*is not numeric*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '50' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*must not be lower*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '250' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*must not be higher*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '150' ).
|
||||
lo_log = lo_cut->validate_required_fields( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_normalized_act TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_normalized_exp TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_cut = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( iv_case_insensitive = abap_true ).
|
||||
lo_normalized_exp = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->text(
|
||||
iv_name = 'field1'
|
||||
iv_label = 'Field name 1' ).
|
||||
lo_cut->text(
|
||||
iv_name = 'field2'
|
||||
iv_upper_case = abap_true
|
||||
iv_label = 'Field name 2' ).
|
||||
lo_cut->text(
|
||||
iv_name = 'field3'
|
||||
iv_label = 'Field name 3' ).
|
||||
lo_cut->checkbox(
|
||||
iv_name = 'chk1'
|
||||
iv_label = 'Checkbox1' ).
|
||||
lo_cut->checkbox(
|
||||
iv_name = 'chk2'
|
||||
iv_label = 'Checkbox2' ).
|
||||
lo_cut->number(
|
||||
iv_name = 'num1'
|
||||
iv_label = 'Number 1' ).
|
||||
lo_cut->table(
|
||||
iv_name = 'tab1'
|
||||
iv_label = 'Table 1' ).
|
||||
lo_cut->column( iv_label = 'Column 1' ).
|
||||
lo_cut->column( iv_label = 'Column 2' ).
|
||||
lo_cut->number(
|
||||
iv_name = |tab1-{ zcl_abapgit_html_form=>c_rows }|
|
||||
iv_label = 'Number of Rows' ). " simulate hidden form field
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'field2'
|
||||
iv_val = 'val2' ).
|
||||
" Intentionally field3 is not specificed
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'on' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk3'
|
||||
iv_val = 'on' ). " Extra field - filtered by normalizing
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = ' 1234' ).
|
||||
|
||||
" Table with 2 rows, 2 columns
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-{ zcl_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = 'abc' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '123' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = '0' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field2'
|
||||
iv_val = 'VAL2' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = '' ). " But it is present in normalized
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = ` ` ). " hmmm
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'X' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'X' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '1234' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-{ zcl_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = 'abc' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '123' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = '0' ).
|
||||
|
||||
lo_normalized_act = lo_cut->normalize_form_data( lo_form_data ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_normalized_act->mt_entries
|
||||
exp = lo_normalized_exp->mt_entries ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_empty.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_cut = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->text(
|
||||
iv_name = 'field1'
|
||||
iv_label = 'Field name 1' ).
|
||||
lo_cut->checkbox(
|
||||
iv_name = 'chk1'
|
||||
iv_label = 'Checkbox1' ).
|
||||
lo_cut->number(
|
||||
iv_name = 'num1'
|
||||
iv_label = 'Number 1' ).
|
||||
lo_cut->table(
|
||||
iv_name = 'tab1'
|
||||
iv_label = 'Table 1' ).
|
||||
lo_cut->column( iv_label = 'Column 1' ).
|
||||
lo_cut->column( iv_label = 'Column 2' ).
|
||||
lo_cut->number(
|
||||
iv_name = |tab1-{ zcl_abapgit_html_form=>c_rows }|
|
||||
iv_label = 'Number of Rows' ). " simulate hidden form field
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_true ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = 'X' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '123' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '0' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_true ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-{ zcl_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = 'Hello' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -5,12 +5,11 @@
|
|||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_HTML_FORM</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapgit - HTML form component</DESCRIPT>
|
||||
<DESCRIPT>abapGit - HTML Form Component</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
284
src/ui/zcl_abapgit_html_form_utils.clas.abap
Normal file
284
src/ui/zcl_abapgit_html_form_utils.clas.abap
Normal file
|
@ -0,0 +1,284 @@
|
|||
CLASS zcl_abapgit_html_form_utils DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!io_form TYPE REF TO zcl_abapgit_html_form .
|
||||
CLASS-METHODS create
|
||||
IMPORTING
|
||||
!io_form TYPE REF TO zcl_abapgit_html_form
|
||||
RETURNING
|
||||
VALUE(ro_form_util) TYPE REF TO zcl_abapgit_html_form_utils .
|
||||
METHODS normalize
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS validate
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS is_empty
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(rv_empty) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS set_data
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
METHODS exit
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(rv_state) TYPE i
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form .
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
|
||||
METHODS is_dirty
|
||||
IMPORTING
|
||||
!io_form_data TYPE REF TO zcl_abapgit_string_map
|
||||
RETURNING
|
||||
VALUE(rv_dirty) TYPE abap_bool .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_html_form_utils IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
mo_form = io_form.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create.
|
||||
CREATE OBJECT ro_form_util
|
||||
EXPORTING
|
||||
io_form = io_form.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD exit.
|
||||
|
||||
DATA lv_answer TYPE c LENGTH 1.
|
||||
|
||||
IF is_dirty( io_form_data ) = abap_true.
|
||||
lv_answer = zcl_abapgit_ui_factory=>get_popups( )->popup_to_confirm(
|
||||
iv_titlebar = 'abapGit - Unsaved Changes'
|
||||
iv_text_question = 'There are unsaved changes. Do you want to exit the form?'
|
||||
iv_default_button = '2' ).
|
||||
|
||||
IF lv_answer = '1'.
|
||||
rv_state = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark.
|
||||
ELSE.
|
||||
rv_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
rv_state = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_dirty.
|
||||
rv_dirty = boolc( io_form_data->mt_entries <> mo_form_data->mt_entries ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_empty.
|
||||
|
||||
DATA:
|
||||
lt_fields TYPE zif_abapgit_html_form=>ty_fields,
|
||||
lv_value TYPE string,
|
||||
lv_rows TYPE i,
|
||||
lv_row TYPE i.
|
||||
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
rv_empty = abap_true.
|
||||
lt_fields = mo_form->get_fields( ).
|
||||
LOOP AT lt_fields ASSIGNING <ls_field> WHERE type <> zif_abapgit_html_form=>c_field_type-field_group.
|
||||
lv_value = condense(
|
||||
val = io_form_data->get( <ls_field>-name )
|
||||
del = ` ` ).
|
||||
|
||||
IF <ls_field>-type = zif_abapgit_html_form=>c_field_type-number.
|
||||
rv_empty = boolc( lv_value IS INITIAL OR lv_value = '0' ).
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-table.
|
||||
lv_rows = io_form_data->get( |{ <ls_field>-name }-{ zif_abapgit_html_form=>c_rows }| ).
|
||||
DO lv_rows TIMES.
|
||||
lv_row = sy-index.
|
||||
DO lines( <ls_field>-subitems ) TIMES.
|
||||
lv_value = io_form_data->get( |{ <ls_field>-name }-{ lv_row }-{ sy-index }| ).
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
IF rv_empty <> abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDDO.
|
||||
ENDDO.
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-textarea.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_value WITH ''.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_newline IN lv_value WITH ''.
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
ELSE.
|
||||
rv_empty = boolc( lv_value IS INITIAL ).
|
||||
ENDIF.
|
||||
|
||||
IF rv_empty <> abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD normalize.
|
||||
|
||||
DATA:
|
||||
lt_fields TYPE zif_abapgit_html_form=>ty_fields,
|
||||
lv_value TYPE string,
|
||||
lv_rows TYPE i,
|
||||
lv_row TYPE i,
|
||||
lv_len TYPE i.
|
||||
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
CREATE OBJECT ro_form_data.
|
||||
|
||||
IF io_form_data->is_empty( ) = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lt_fields = mo_form->get_fields( ).
|
||||
LOOP AT lt_fields ASSIGNING <ls_field> WHERE type <> zif_abapgit_html_form=>c_field_type-field_group.
|
||||
CLEAR lv_value.
|
||||
lv_value = io_form_data->get( <ls_field>-name ).
|
||||
|
||||
IF <ls_field>-type = zif_abapgit_html_form=>c_field_type-checkbox.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = boolc( lv_value = 'on' ) ).
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-text AND <ls_field>-upper_case = abap_true.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = to_upper( lv_value ) ).
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-number.
|
||||
" Numeric value is checked in validation
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = condense( val = lv_value del = ` ` ) ).
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-table.
|
||||
lv_rows = io_form_data->get( |{ <ls_field>-name }-{ zif_abapgit_html_form=>c_rows }| ).
|
||||
DO lv_rows TIMES.
|
||||
lv_row = sy-index.
|
||||
DO lines( <ls_field>-subitems ) TIMES.
|
||||
lv_value = io_form_data->get( |{ <ls_field>-name }-{ lv_row }-{ sy-index }| ).
|
||||
ro_form_data->set(
|
||||
iv_key = |{ <ls_field>-name }-{ lv_row }-{ sy-index }|
|
||||
iv_val = lv_value ).
|
||||
ENDDO.
|
||||
ENDDO.
|
||||
ro_form_data->set(
|
||||
iv_key = |{ <ls_field>-name }-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_val = |{ lv_rows }| ).
|
||||
ELSEIF <ls_field>-type = zif_abapgit_html_form=>c_field_type-textarea.
|
||||
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_value
|
||||
WITH zif_abapgit_definitions=>c_newline.
|
||||
|
||||
" Remove last line if empty (ie 2x newline)
|
||||
lv_len = strlen( lv_value ) - 2.
|
||||
IF lv_len >= 0 AND lv_value+lv_len(1) = zif_abapgit_definitions=>c_newline.
|
||||
lv_len = lv_len + 1.
|
||||
lv_value = lv_value(lv_len).
|
||||
ENDIF.
|
||||
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = lv_value ).
|
||||
ELSE.
|
||||
ro_form_data->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = lv_value ).
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_data.
|
||||
mo_form_data = io_form_data.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate.
|
||||
|
||||
DATA:
|
||||
lt_fields TYPE zif_abapgit_html_form=>ty_fields,
|
||||
lv_value TYPE string,
|
||||
lv_number TYPE i.
|
||||
|
||||
FIELD-SYMBOLS <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
CREATE OBJECT ro_validation_log.
|
||||
|
||||
lt_fields = mo_form->get_fields( ).
|
||||
LOOP AT lt_fields ASSIGNING <ls_field>.
|
||||
lv_value = io_form_data->get( <ls_field>-name ).
|
||||
IF <ls_field>-required IS NOT INITIAL AND lv_value IS INITIAL.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } cannot be empty| ).
|
||||
ENDIF.
|
||||
CASE <ls_field>-type.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-text.
|
||||
IF <ls_field>-min <> cl_abap_math=>min_int4 AND strlen( lv_value ) < <ls_field>-min.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be shorter than { <ls_field>-min } characters| ).
|
||||
ENDIF.
|
||||
IF <ls_field>-max <> cl_abap_math=>max_int4 AND strlen( lv_value ) > <ls_field>-max.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be longer than { <ls_field>-max } characters| ).
|
||||
ENDIF.
|
||||
WHEN zif_abapgit_html_form=>c_field_type-number.
|
||||
TRY.
|
||||
lv_number = lv_value.
|
||||
CATCH cx_root.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } is not numeric| ).
|
||||
CONTINUE.
|
||||
ENDTRY.
|
||||
IF <ls_field>-min <> cl_abap_math=>min_int4 AND lv_number < <ls_field>-min.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be lower than { <ls_field>-min }| ).
|
||||
ENDIF.
|
||||
IF <ls_field>-max <> cl_abap_math=>max_int4 AND lv_number > <ls_field>-max.
|
||||
ro_validation_log->set(
|
||||
iv_key = <ls_field>-name
|
||||
iv_val = |{ <ls_field>-label } must not be higher than { <ls_field>-max }| ).
|
||||
ENDIF.
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
636
src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap
Normal file
636
src/ui/zcl_abapgit_html_form_utils.clas.testclasses.abap
Normal file
|
@ -0,0 +1,636 @@
|
|||
CLASS ltcl_popups_mock DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PUBLIC SECTION.
|
||||
TYPES:
|
||||
ty_user_decision TYPE string.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_user_decision,
|
||||
cancel TYPE ty_user_decision VALUE 'cancel',
|
||||
confirm TYPE ty_user_decision VALUE 'confirm',
|
||||
END OF c_user_decision.
|
||||
|
||||
INTERFACES:
|
||||
zif_abapgit_popups.
|
||||
|
||||
METHODS:
|
||||
was_confirm_popup_shown
|
||||
RETURNING
|
||||
VALUE(rv_popup_shown) TYPE abap_bool,
|
||||
|
||||
set_user_decision
|
||||
IMPORTING
|
||||
iv_user_decision TYPE ty_user_decision.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
BEGIN OF ms_called,
|
||||
popup_to_confirm TYPE abap_bool,
|
||||
END OF ms_called,
|
||||
mv_user_decision TYPE ty_user_decision,
|
||||
mv_package TYPE devclass.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_popups_mock IMPLEMENTATION.
|
||||
|
||||
METHOD zif_abapgit_popups~branch_list_popup.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~branch_popup_callback.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~choose_pr_popup.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~create_branch_popup.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_folder_logic.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_object.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_package_export.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_perf_test_parameters.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_proxy_bypass.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_search_help.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_confirm.
|
||||
|
||||
ms_called-popup_to_confirm = abap_true.
|
||||
|
||||
CASE mv_user_decision.
|
||||
WHEN c_user_decision-cancel.
|
||||
rv_answer = 'A'.
|
||||
WHEN c_user_decision-confirm.
|
||||
rv_answer = '1'.
|
||||
WHEN OTHERS.
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_create_package.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_create_transp_branch.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_inform.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_select_from_list.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_to_select_transports.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~popup_transport_request.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_popups~repo_popup.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD was_confirm_popup_shown.
|
||||
rv_popup_shown = ms_called-popup_to_confirm.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_user_decision.
|
||||
mv_user_decision = iv_user_decision.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_test_form DEFINITION
|
||||
FOR TESTING
|
||||
RISK LEVEL HARMLESS
|
||||
DURATION SHORT
|
||||
FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mo_popups_mock TYPE REF TO ltcl_popups_mock.
|
||||
|
||||
METHODS setup.
|
||||
METHODS validate FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS normalize FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS is_empty FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS exit_clean FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS exit_dirty_confirm FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS exit_dirty_cancel FOR TESTING RAISING zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_test_form IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
|
||||
CREATE OBJECT mo_popups_mock TYPE ltcl_popups_mock.
|
||||
zcl_abapgit_ui_injector=>set_popups( mo_popups_mock ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_log TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field1'
|
||||
iv_required = abap_true
|
||||
iv_label = 'Field name 1'
|
||||
)->text(
|
||||
iv_name = 'field2'
|
||||
iv_label = 'Field name 2' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field1' )
|
||||
exp = '*cannot be empty' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = '' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field1' )
|
||||
exp = '*cannot be empty' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'xyz' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
" New form
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field3'
|
||||
iv_min = 3
|
||||
iv_max = 10
|
||||
iv_label = 'Field name 3' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = 'xy' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field3' )
|
||||
exp = '*must not be shorter*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = '01234567890123' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field3' )
|
||||
exp = '*must not be longer*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = 'xyz!' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
" New form
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
|
||||
lo_form->number(
|
||||
iv_name = 'field4'
|
||||
iv_min = 100
|
||||
iv_max = 200
|
||||
iv_label = 'Field name 4' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '123-456' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*is not numeric*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '50' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*must not be lower*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '250' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 1 ).
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = lo_log->get( 'field4' )
|
||||
exp = '*must not be higher*' ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field4'
|
||||
iv_val = '150' ).
|
||||
|
||||
lo_log = lo_cut->validate( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_log->size( )
|
||||
exp = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_normalized_act TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_normalized_exp TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( iv_case_insensitive = abap_true ).
|
||||
lo_normalized_exp = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field1'
|
||||
iv_label = 'Field name 1'
|
||||
)->text(
|
||||
iv_name = 'field2'
|
||||
iv_upper_case = abap_true
|
||||
iv_label = 'Field name 2'
|
||||
)->text(
|
||||
iv_name = 'field3'
|
||||
iv_label = 'Field name 3'
|
||||
)->checkbox(
|
||||
iv_name = 'chk1'
|
||||
iv_label = 'Checkbox1'
|
||||
)->checkbox(
|
||||
iv_name = 'chk2'
|
||||
iv_label = 'Checkbox2'
|
||||
)->number(
|
||||
iv_name = 'num1'
|
||||
iv_label = 'Number 1'
|
||||
)->table(
|
||||
iv_name = 'tab1'
|
||||
iv_label = 'Table 1'
|
||||
)->column( 'Column 1'
|
||||
)->column( 'Column 2'
|
||||
)->number(
|
||||
iv_name = |tab1-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_label = 'Number of Rows' ). " simulate hidden form field
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'field2'
|
||||
iv_val = 'val2' ).
|
||||
" Intentionally field3 is not specificed
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'on' ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk3'
|
||||
iv_val = 'on' ). " Extra field - filtered by normalizing
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = ' 1234' ).
|
||||
|
||||
" Table with 2 rows, 2 columns
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = 'abc' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '123' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = '0' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field2'
|
||||
iv_val = 'VAL2' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'field3'
|
||||
iv_val = '' ). " But it is present in normalized
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = ` ` ). " hmmm
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'X' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'chk2'
|
||||
iv_val = 'X' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '1234' ).
|
||||
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = 'abc' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '123' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_normalized_exp->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = '0' ).
|
||||
|
||||
lo_normalized_act = lo_cut->normalize( lo_form_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_normalized_act->mt_entries
|
||||
exp = lo_normalized_exp->mt_entries ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_empty.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field1'
|
||||
iv_label = 'Field name 1'
|
||||
)->checkbox(
|
||||
iv_name = 'chk1'
|
||||
iv_label = 'Checkbox1'
|
||||
)->number(
|
||||
iv_name = 'num1'
|
||||
iv_label = 'Number 1'
|
||||
)->table(
|
||||
iv_name = 'tab1'
|
||||
iv_label = 'Table 1'
|
||||
)->column( 'Column 1'
|
||||
)->column( 'Column 2'
|
||||
)->number(
|
||||
iv_name = |tab1-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_label = 'Number of Rows' ). " simulate hidden form field
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_true ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field1'
|
||||
iv_val = 'val1' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'chk1'
|
||||
iv_val = 'X' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '123' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = 'num1'
|
||||
iv_val = '0' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_true ).
|
||||
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-{ zif_abapgit_html_form=>c_rows }|
|
||||
iv_val = '2' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-1-2|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-1|
|
||||
iv_val = '' ).
|
||||
lo_form_data->set(
|
||||
iv_key = |tab1-2-2|
|
||||
iv_val = 'Hello' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( lo_form_data )
|
||||
exp = abap_false ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exit_clean.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_orig TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_orig = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field'
|
||||
iv_label = 'Field name' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
" Clean form (no changes)
|
||||
lo_form_orig->set(
|
||||
iv_key = 'field'
|
||||
iv_val = 'val' ).
|
||||
|
||||
lo_cut->set_data( lo_form_orig ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field'
|
||||
iv_val = 'val' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->exit( lo_form_data )
|
||||
exp = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_popups_mock->was_confirm_popup_shown( )
|
||||
exp = abap_false ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exit_dirty_confirm.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_orig TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_orig = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field'
|
||||
iv_label = 'Field name' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
" Dirty form (changed field value)
|
||||
lo_form_orig = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->set_data( lo_form_orig ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field'
|
||||
iv_val = 'val' ).
|
||||
|
||||
mo_popups_mock->set_user_decision( ltcl_popups_mock=>c_user_decision-confirm ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->exit( lo_form_data )
|
||||
exp = zcl_abapgit_gui=>c_event_state-go_back_to_bookmark ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_popups_mock->was_confirm_popup_shown( )
|
||||
exp = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD exit_dirty_cancel.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.
|
||||
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
|
||||
DATA lo_form_orig TYPE REF TO zcl_abapgit_string_map.
|
||||
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_form = zcl_abapgit_html_form=>create( ).
|
||||
lo_form_orig = zcl_abapgit_string_map=>create( ).
|
||||
lo_form_data = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_form->text(
|
||||
iv_name = 'field'
|
||||
iv_label = 'Field name' ).
|
||||
|
||||
lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ).
|
||||
|
||||
" Dirty form (changed field value)
|
||||
lo_form_orig = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
lo_cut->set_data( lo_form_orig ).
|
||||
|
||||
lo_form_data->set(
|
||||
iv_key = 'field'
|
||||
iv_val = 'val' ).
|
||||
|
||||
mo_popups_mock->set_user_decision( ltcl_popups_mock=>c_user_decision-cancel ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->exit( lo_form_data )
|
||||
exp = zcl_abapgit_gui=>c_event_state-no_more_act ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_popups_mock->was_confirm_popup_shown( )
|
||||
exp = abap_true ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
17
src/ui/zcl_abapgit_html_form_utils.clas.xml
Normal file
17
src/ui/zcl_abapgit_html_form_utils.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_HTML_FORM_UTILS</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapgit - HTML form component</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
63
src/ui/zif_abapgit_html_form.intf.abap
Normal file
63
src/ui/zif_abapgit_html_form.intf.abap
Normal file
|
@ -0,0 +1,63 @@
|
|||
INTERFACE zif_abapgit_html_form
|
||||
PUBLIC .
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_subitem,
|
||||
label TYPE string,
|
||||
value TYPE string,
|
||||
readonly TYPE abap_bool,
|
||||
END OF ty_subitem .
|
||||
TYPES:
|
||||
ty_subitems TYPE STANDARD TABLE OF ty_subitem WITH DEFAULT KEY .
|
||||
TYPES:
|
||||
BEGIN OF ty_field,
|
||||
type TYPE i,
|
||||
name TYPE string,
|
||||
label TYPE string,
|
||||
hint TYPE string,
|
||||
dblclick TYPE string,
|
||||
placeholder TYPE string,
|
||||
required TYPE string,
|
||||
upper_case TYPE abap_bool,
|
||||
item_class TYPE string,
|
||||
error TYPE string,
|
||||
default_value TYPE string,
|
||||
side_action TYPE string,
|
||||
subitems TYPE ty_subitems,
|
||||
readonly TYPE abap_bool,
|
||||
password TYPE abap_bool,
|
||||
min TYPE i,
|
||||
max TYPE i,
|
||||
END OF ty_field .
|
||||
TYPES:
|
||||
ty_fields TYPE STANDARD TABLE OF ty_field
|
||||
WITH DEFAULT KEY
|
||||
WITH UNIQUE SORTED KEY by_name COMPONENTS name .
|
||||
TYPES:
|
||||
BEGIN OF ty_command,
|
||||
label TYPE string,
|
||||
action TYPE string,
|
||||
cmd_type TYPE i,
|
||||
END OF ty_command .
|
||||
|
||||
CONSTANTS c_rows TYPE string VALUE 'rows'.
|
||||
CONSTANTS:
|
||||
BEGIN OF c_cmd_type,
|
||||
input TYPE i VALUE 1,
|
||||
input_main TYPE i VALUE 2,
|
||||
link TYPE i VALUE 3,
|
||||
button TYPE i VALUE 4,
|
||||
END OF c_cmd_type .
|
||||
CONSTANTS:
|
||||
BEGIN OF c_field_type,
|
||||
text TYPE i VALUE 1,
|
||||
radio TYPE i VALUE 2,
|
||||
checkbox TYPE i VALUE 3,
|
||||
field_group TYPE i VALUE 4,
|
||||
number TYPE i VALUE 5,
|
||||
textarea TYPE i VALUE 6,
|
||||
table TYPE i VALUE 7,
|
||||
hidden TYPE i VALUE 8,
|
||||
END OF c_field_type .
|
||||
|
||||
ENDINTERFACE.
|
15
src/ui/zif_abapgit_html_form.intf.xml
Normal file
15
src/ui/zif_abapgit_html_form.intf.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOINTERF>
|
||||
<CLSNAME>ZIF_ABAPGIT_HTML_FORM</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - HTML Form</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOINTERF>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user