mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
ui: add a workaround for JavaGUI dyn form bug (#2873)
JavaGUI does not pass values of options from forms generated via JavaScript. This commit adds enhances the base page class to render stub forms (empty form elements), so the page's JavaScript does not need to create the form element on its own. It is an optional behavior and can be enabled by redefining the method get_events which should return table of required events and the base page object will add the empty form elements for them. Every table line will be converted to a form with id = "form_" + the event's name. On the action submit SAP event in the common JavaScript, the method checks if there is the stub form and if so, the method uses it instead of creating the dynamic one. Otherwise, it follows the old approach that creates the form at run-time. --- v2 Use 'null' instead of 'undefined' to check the form was not found in the JavaScript code. --- Issues: #1866, #2769
This commit is contained in:
parent
d19ce7c4e3
commit
9a6e6e8b24
|
@ -93,11 +93,17 @@ function debugOutput(text, dstID) {
|
||||||
stdout.innerHTML = stdout.innerHTML + wrapped;
|
stdout.innerHTML = stdout.innerHTML + wrapped;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create hidden form and submit with sapevent
|
// Use a pre-created form or create a hidden form
|
||||||
|
// and submit with sapevent
|
||||||
function submitSapeventForm(params, action, method) {
|
function submitSapeventForm(params, action, method) {
|
||||||
var form = document.createElement("form");
|
var stub_form_id = "form_" + action;
|
||||||
form.setAttribute("method", method || "post");
|
var form = document.getElementById(stub_form_id);
|
||||||
form.setAttribute("action", "sapevent:" + action);
|
|
||||||
|
if (form === null) {
|
||||||
|
form = document.createElement("form");
|
||||||
|
form.setAttribute("method", method || "post");
|
||||||
|
form.setAttribute("action", "sapevent:" + action);
|
||||||
|
}
|
||||||
|
|
||||||
for(var key in params) {
|
for(var key in params) {
|
||||||
var hiddenField = document.createElement("input");
|
var hiddenField = document.createElement("input");
|
||||||
|
@ -107,7 +113,10 @@ function submitSapeventForm(params, action, method) {
|
||||||
form.appendChild(hiddenField);
|
form.appendChild(hiddenField);
|
||||||
}
|
}
|
||||||
|
|
||||||
document.body.appendChild(form);
|
if (form.id !== stub_form_id) {
|
||||||
|
document.body.appendChild(form);
|
||||||
|
}
|
||||||
|
|
||||||
form.submit();
|
form.submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,28 @@ CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT CREATE PUBLIC.
|
||||||
page_menu TYPE REF TO zcl_abapgit_html_toolbar,
|
page_menu TYPE REF TO zcl_abapgit_html_toolbar,
|
||||||
END OF ty_control.
|
END OF ty_control.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_event,
|
||||||
|
method TYPE string,
|
||||||
|
name TYPE string,
|
||||||
|
END OF ty_event.
|
||||||
|
|
||||||
|
TYPES: tt_events TYPE STANDARD TABLE OF ty_event WITH DEFAULT KEY.
|
||||||
|
|
||||||
DATA: ms_control TYPE ty_control.
|
DATA: ms_control TYPE ty_control.
|
||||||
|
|
||||||
METHODS render_content ABSTRACT
|
METHODS render_content ABSTRACT
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
METHODS get_events
|
||||||
|
RETURNING VALUE(rt_events) TYPE tt_events
|
||||||
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
|
METHODS render_event_as_form
|
||||||
|
IMPORTING is_event TYPE ty_event
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
||||||
|
RAISING zcx_abapgit_exception.
|
||||||
|
|
||||||
METHODS scripts
|
METHODS scripts
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
@ -346,6 +362,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_events.
|
||||||
|
|
||||||
|
" Return actions you need on your page.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_event_as_form.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
ro_html->add(
|
||||||
|
|<form id='form_{ is_event-name }' method={ is_event-method } action='sapevent:{ is_event-name }'></from>| ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD scripts.
|
METHOD scripts.
|
||||||
|
|
||||||
|
@ -434,7 +463,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_gui_renderable~render.
|
METHOD zif_abapgit_gui_renderable~render.
|
||||||
|
|
||||||
DATA: lo_script TYPE REF TO zcl_abapgit_html.
|
DATA: lo_script TYPE REF TO zcl_abapgit_html,
|
||||||
|
lt_events TYPE zcl_abapgit_gui_page=>tt_events.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS:
|
||||||
|
<ls_event> LIKE LINE OF lt_events.
|
||||||
|
|
||||||
" Redirect
|
" Redirect
|
||||||
IF ms_control-redirect_url IS NOT INITIAL.
|
IF ms_control-redirect_url IS NOT INITIAL.
|
||||||
|
@ -455,6 +488,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
|
||||||
ro_html->add( render_hotkey_overview( ) ).
|
ro_html->add( render_hotkey_overview( ) ).
|
||||||
ro_html->add( render_content( ) ).
|
ro_html->add( render_content( ) ).
|
||||||
ro_html->add( render_error_message_box( ) ).
|
ro_html->add( render_error_message_box( ) ).
|
||||||
|
|
||||||
|
lt_events = me->get_events( ).
|
||||||
|
LOOP AT lt_events ASSIGNING <ls_event>.
|
||||||
|
ro_html->add( render_event_as_form( <ls_event> ) ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ro_html->add( footer( ) ).
|
ro_html->add( footer( ) ).
|
||||||
ro_html->add( '</body>' ). "#EC NOTEXT
|
ro_html->add( '</body>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
METHODS:
|
METHODS:
|
||||||
render_content REDEFINITION,
|
render_content REDEFINITION,
|
||||||
|
get_events REDEFINITION,
|
||||||
scripts REDEFINITION.
|
scripts REDEFINITION.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
@ -147,7 +148,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD find_transports.
|
METHOD find_transports.
|
||||||
DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api,
|
DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api,
|
||||||
ls_new LIKE LINE OF rt_transports.
|
ls_new LIKE LINE OF rt_transports.
|
||||||
|
@ -183,6 +183,17 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
|
||||||
CATCH zcx_abapgit_exception.
|
CATCH zcx_abapgit_exception.
|
||||||
ASSERT 1 = 2.
|
ASSERT 1 = 2.
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_events.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_event> TYPE zcl_abapgit_gui_page=>ty_event.
|
||||||
|
|
||||||
|
APPEND INITIAL LINE TO rt_events ASSIGNING <ls_event>.
|
||||||
|
<ls_event>-method = 'post'.
|
||||||
|
<ls_event>-name = 'stage_commit'.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user