From 74b5a9f9794fe36c191c43b655a3a12855f01479 Mon Sep 17 00:00:00 2001 From: Viktor Hoffmann Date: Tue, 2 Jul 2024 14:42:12 +0000 Subject: [PATCH 1/4] Sample with Issue --- src/z2ui5_cl_demo_app_211.clas.abap | 221 +++++++++++++++ src/z2ui5_cl_demo_app_211.clas.xml | 16 ++ src/z2ui5_cl_demo_app_212.clas.abap | 404 ++++++++++++++++++++++++++++ src/z2ui5_cl_demo_app_212.clas.xml | 16 ++ 4 files changed, 657 insertions(+) create mode 100644 src/z2ui5_cl_demo_app_211.clas.abap create mode 100644 src/z2ui5_cl_demo_app_211.clas.xml create mode 100644 src/z2ui5_cl_demo_app_212.clas.abap create mode 100644 src/z2ui5_cl_demo_app_212.clas.xml diff --git a/src/z2ui5_cl_demo_app_211.clas.abap b/src/z2ui5_cl_demo_app_211.clas.abap new file mode 100644 index 00000000..455e3b29 --- /dev/null +++ b/src/z2ui5_cl_demo_app_211.clas.abap @@ -0,0 +1,221 @@ +"! +CLASS Z2UI5_CL_DEMO_APP_211 DEFINITION + PUBLIC + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES if_serializable_object. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_t002, + id TYPE string, + icon TYPE string, + count TYPE string, + table TYPE string, + descr TYPE string, + class TYPE string, + END OF ty_s_t002. + TYPES ty_t_t002 TYPE STANDARD TABLE OF ty_s_t002 WITH DEFAULT KEY. + + DATA mv_selectedkey TYPE string. + DATA mv_selectedkey_tmp TYPE string. + DATA mt_t002 TYPE ty_t_t002. + DATA mo_app TYPE REF TO object. + + PROTECTED SECTION. + DATA mo_main_page TYPE REF TO z2ui5_cl_xml_view. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS on_init. + METHODS on_event. + METHODS render_Main. + + METHODS get_count + IMPORTING + tabname TYPE tabname + RETURNING + VALUE(result) TYPE string. + + METHODS Render_sub_app. + + PRIVATE SECTION. + +ENDCLASS. + + +CLASS Z2UI5_CL_DEMO_APP_211 IMPLEMENTATION. + + METHOD get_count. + + DATA o_table TYPE REF TO data. + + FIELD-SYMBOLS TYPE ANY TABLE. + + CHECK tabname IS NOT INITIAL. + + TRY. + + cl_abap_typedescr=>describe_by_name( EXPORTING p_name = tabname + RECEIVING p_descr_ref = DATA(o_type_desc) + EXCEPTIONS type_not_found = 1 ). + + IF sy-subrc = 1. + RETURN. + ENDIF. + + DATA(o_struct_desc) = CAST cl_abap_structdescr( o_type_desc ). + + DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = o_struct_desc + p_table_kind = cl_abap_tabledescr=>tablekind_std ). + + CREATE DATA o_table TYPE HANDLE new_table_desc. + + ASSIGN o_table->* TO
. + + SELECT * FROM (tabname) INTO CORRESPONDING FIELDS OF TABLE
. + + result = lines(
). + + CATCH cx_root. + ENDTRY. + ENDMETHOD. + + METHOD on_event. + CASE client->get( )-event. + WHEN 'ONSELECTICONTABBAR'. + + CASE mv_selectedkey. + + WHEN space. + + WHEN OTHERS. + + ENDCASE. + + WHEN 'BACK'. + + ENDCASE. + ENDMETHOD. + + METHOD on_init. + + mt_t002 = VALUE #( class = 'Z2UI5_CL_DEMO_APP_212' + ( id = '1' count = '5' table = 'Z2UI5_T003' descr = 'Table 01' icon = 'sap-icon://add' ) + ( id = '2' count = '10' table = 'Z2UI5_T003' descr = 'Table 01' icon = 'sap-icon://add' ) + ( id = '3' count = '15' table = 'Z2UI5_T004' descr = 'Table 02' icon = 'sap-icon://accept' ) ). + + mv_selectedkey = '1'. + + ENDMETHOD. + + METHOD render_main. + DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). + + DATA(page) = view->page( id = `page_main` + title = 'Customizing' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + class = 'sapUiContentPadding' ). + + DATA(lo_items) = page->icon_tab_bar( class = 'sapUiResponsiveContentPadding' + selectedKey = client->_bind_edit( mv_selectedkey ) + select = client->_event( val = 'ONSELECTICONTABBAR' ) + )->items( ). + + LOOP AT mt_t002 REFERENCE INTO DATA(line). + + DATA(text) = line->descr. + DATA(with_icon) = line->icon. + + lo_items->icon_tab_filter( icon = line->icon + iconcolor = 'Positive' + count = line->count + text = text + key = line->id + showall = with_icon ). + + lo_items->icon_tab_separator( ). + + ENDLOOP. + + mo_main_page = lo_items. + ENDMETHOD. + + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + on_init( ). + + render_Main( ). + + ENDIF. + + on_event( ). + + Render_sub_app( ). + ENDMETHOD. + + METHOD Render_sub_app. + + READ TABLE mt_t002 REFERENCE INTO DATA(t002) + WITH KEY id = mv_selectedkey. + + IF sy-subrc <> 0. + RETURN. + ENDIF. + + CASE mv_selectedkey. + + WHEN OTHERS. + + IF mv_selectedkey <> mv_selectedkey_tmp. + CREATE OBJECT mo_app TYPE (t002->class). + ENDIF. + + TRY. + + CALL METHOD mo_app->('SET_APP_DATA') + EXPORTING table = t002->table. + + render_Main( ). + + ASSIGN mo_app->('MO_PARENT_VIEW') TO FIELD-SYMBOL(). + IF IS ASSIGNED. + = mo_main_page. + ENDIF. + + CALL METHOD mo_app->('Z2UI5_IF_APP~MAIN') + EXPORTING client = client. + + CATCH cx_root. + RETURN. + ENDTRY. + + ENDCASE. + + IF mo_app->('MV_VIEW_DISPLAY') = abap_true. + mo_app->('MV_VIEW_DISPLAY') = abap_false. + client->view_display( mo_main_page->stringify( ) ). + ENDIF. + + IF mo_app->('MV_VIEW_MODEL_UPDATE') = abap_true. + mo_app->('MV_VIEW_MODEL_UPDATE') = abap_false. + client->view_model_update( ). + ENDIF. + + IF mv_selectedkey <> mv_selectedkey_tmp. + + client->view_display( mo_main_page->stringify( ) ). + + mv_selectedkey_tmp = mv_selectedkey. + + ENDIF. + ENDMETHOD. + +ENDCLASS. diff --git a/src/z2ui5_cl_demo_app_211.clas.xml b/src/z2ui5_cl_demo_app_211.clas.xml new file mode 100644 index 00000000..a3d49239 --- /dev/null +++ b/src/z2ui5_cl_demo_app_211.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_211 + E + App in App I + 1 + X + X + X + + + + diff --git a/src/z2ui5_cl_demo_app_212.clas.abap b/src/z2ui5_cl_demo_app_212.clas.abap new file mode 100644 index 00000000..98f8b353 --- /dev/null +++ b/src/z2ui5_cl_demo_app_212.clas.abap @@ -0,0 +1,404 @@ +CLASS z2ui5_cl_demo_app_212 DEFINITION + PUBLIC + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + DATA mv_view_display TYPE abap_bool. + DATA mv_view_model_update TYPE abap_bool. + DATA mo_parent_view TYPE REF TO z2ui5_cl_xml_view. + DATA mv_table TYPE string. + DATA mt_table TYPE REF TO data. + DATA mt_table_tmp TYPE REF TO data. + DATA ms_table_row TYPE REF TO data. + DATA mt_comp TYPE abap_component_tab. + DATA ms_layout TYPE z2ui5_cl_pop_layout_v2=>ty_s_layout. + DATA mt_dfies TYPE z2ui5_cl_stmpncfctn_api=>ty_t_dfies. + + METHODS set_app_data + IMPORTING + !table TYPE string. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS on_init. + + METHODS on_event. + + METHODS render_main. + + METHODS get_data. + + METHODS get_comp + RETURNING + VALUE(result) TYPE abap_component_tab. + + METHODS init_layout. + + METHODS on_after_navigation. + + METHODS row_select. + + METHODS prefill_popup_values + IMPORTING + !index TYPE string. + + METHODS render_popup. + + PRIVATE SECTION. + METHODS get_dfies. + +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_212 IMPLEMENTATION. + + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'ROW_SELECT'. + + row_select( ). + + WHEN OTHERS. + + client = z2ui5_cl_pop_layout_v2=>on_event_layout( client = client + layout = ms_layout ). + + ENDCASE. + ENDMETHOD. + + METHOD row_select. + + DATA(lt_arg) = client->get( )-t_event_arg. + READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1. + + IF sy-subrc <> 0. + RETURN. + ENDIF. + + prefill_popup_values( ls_arg ). + + render_popup( ). + ENDMETHOD. + + METHOD prefill_popup_values. + + FIELD-SYMBOLS TYPE STANDARD TABLE. + FIELD-SYMBOLS TYPE any. + + ASSIGN mt_table->* TO . + + ASSIGN [ index ] TO FIELD-SYMBOL(). + + IF sy-subrc <> 0. + RETURN. + ENDIF. + + LOOP AT mt_dfies INTO DATA(dfies). + + ASSIGN COMPONENT dfies-fieldname OF STRUCTURE TO FIELD-SYMBOL(). + ASSIGN ms_table_row->* TO . + ASSIGN COMPONENT dfies-fieldname OF STRUCTURE TO FIELD-SYMBOL(). + + IF IS ASSIGNED AND IS ASSIGNED. + = . + ENDIF. + + ENDLOOP. + ENDMETHOD. + + METHOD get_dfies. + + mt_dfies = z2ui5_cl_util_api=>rtti_get_t_dfies_by_table_name( mv_table ). + + ENDMETHOD. + + METHOD render_popup. + + FIELD-SYMBOLS TYPE any. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(simple_form) = popup->dialog( contentwidth = '60%' + )->simple_form( title = '' + layout = 'ResponsiveGridLayout' + editable = abap_true + )->content( ns = 'form' ). + + " Gehe über alle Comps wenn wir im Edit sind dann sind keyfelder nicht eingabebereit. + LOOP AT mt_dfies REFERENCE INTO DATA(dfies). + + ASSIGN ms_table_row->* TO . + ASSIGN COMPONENT dfies->fieldname OF STRUCTURE TO FIELD-SYMBOL(). + IF IS NOT ASSIGNED. + CONTINUE. + ENDIF. + + DATA(text) = ms_layout-t_layout[ fname = dfies->fieldname ]-tlabel. + + simple_form->label( design = COND #( WHEN dfies->keyflag = abap_true THEN 'Bold' ) + text = text ). + + simple_form->input( value = client->_bind_edit( ) + enabled = abap_false + showvaluehelp = abap_false ). + + ENDLOOP. + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + METHOD on_init. + get_data( ). + + get_dfies( ). + + init_layout( ). + + render_main( ). + ENDMETHOD. + + METHOD init_layout. + + IF ms_layout IS NOT INITIAL. + RETURN. + ENDIF. + + DATA(class) = cl_abap_classdescr=>get_class_name( me ). + SHIFT class LEFT DELETING LEADING '\CLASS='. + + ms_layout = z2ui5_cl_pop_layout_v2=>init_layout( control = z2ui5_cl_pop_layout_v2=>m_table + data = mt_table + handle01 = CONV #( class ) + handle02 = CONV #( mv_table ) + handle03 = '' + handle04 = '' ). + + ENDMETHOD. + + METHOD render_main. + + FIELD-SYMBOLS TYPE data. + + IF mo_parent_view IS INITIAL. + DATA(page) = z2ui5_cl_xml_view=>factory( ). + ELSE. + page = mo_parent_view->get( `Page` ). + ENDIF. + + ASSIGN mt_table->* TO . + + DATA(table) = page->table( growing = 'true' + width = 'auto' + items = client->_bind_edit( val = ) ). + + " TODO: variable is assigned but never used (ABAP cleaner) + DATA(headder) = table->header_toolbar( + )->overflow_toolbar( + )->toolbar_spacer( ). + + headder = z2ui5_cl_pop_layout_v2=>render_layout_function( xml = headder + client = client ). + + DATA(columns) = table->columns( ). + + LOOP AT ms_layout-t_layout REFERENCE INTO DATA(layout). + DATA(lv_index) = sy-tabix. + + columns->column( visible = client->_bind( val = layout->visible + tab = ms_layout-t_layout + tab_index = lv_index ) + halign = client->_bind( val = layout->halign + tab = ms_layout-t_layout + tab_index = lv_index ) + importance = client->_bind( val = layout->importance + tab = ms_layout-t_layout + tab_index = lv_index ) + mergeduplicates = client->_bind( val = layout->merge + tab = ms_layout-t_layout + tab_index = lv_index ) + width = client->_bind( val = layout->width + tab = ms_layout-t_layout + tab_index = lv_index ) + + )->text( layout->tlabel ). + + ENDLOOP. + + DATA(cells) = columns->get_parent( )->items( + )->column_list_item( + valign = 'Middle' + type = 'Navigation' + press = client->_event( val = 'ROW_SELECT' + t_arg = VALUE #( ( `${ROW_ID}` ) ) ) + )->cells( ). + + " Subcolumns require new rendering.... + LOOP AT ms_layout-t_layout REFERENCE INTO layout. + + IF layout->t_sub_col IS NOT INITIAL. + + DATA(sub_col) = ``. + DATA(index) = 0. + LOOP AT layout->t_sub_col INTO DATA(subcol). + + index = index + 1. + + READ TABLE ms_layout-t_layout INTO DATA(line) WITH KEY fname = subcol-fname. + + IF index = 1. + sub_col = |{ line-tlabel }: \{{ subcol-fname }\}|. + ELSE. + sub_col = |{ sub_col }{ cl_abap_char_utilities=>cr_lf } { line-tlabel }: \{{ subcol-fname }\}|. + ENDIF. + + ENDLOOP. + + cells->object_identifier( title = |\{{ layout->fname }\}| + text = sub_col ). + + ELSE. + cells->object_identifier( text = |\{{ layout->fname }\}| ). + ENDIF. + ENDLOOP. + + IF mo_parent_view IS INITIAL. + + client->view_display( page->get_root( )->xml_get( ) ). + + ELSE. + + mv_view_display = abap_true. + + ENDIF. + + ENDMETHOD. + + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + on_init( ). + + ENDIF. + + on_event( ). + + on_after_navigation( ). + + ENDMETHOD. + + METHOD set_app_data. + + mv_table = table. + + ENDMETHOD. + + METHOD get_data. + + FIELD-SYMBOLS
TYPE STANDARD TABLE. + FIELD-SYMBOLS TYPE STANDARD TABLE. + + mt_comp = get_comp( ). + + TRY. + + DATA(new_struct_desc) = cl_abap_structdescr=>create( mt_comp ). + + DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = new_struct_desc + p_table_kind = cl_abap_tabledescr=>tablekind_std ). + + CREATE DATA mt_table TYPE HANDLE new_table_desc. + CREATE DATA mt_table_tmp TYPE HANDLE new_table_desc. + CREATE DATA ms_table_row TYPE HANDLE new_struct_desc. + + ASSIGN mt_table->* TO
. + + SELECT * + FROM (mv_table) + INTO CORRESPONDING FIELDS OF TABLE @
+ UP TO 100 ROWS. + + CATCH cx_root. + + ENDTRY. + + ASSIGN mt_table_tmp->* TO . + + =
. + + ENDMETHOD. + + METHOD get_comp. + + DATA index TYPE int4. + + TRY. + TRY. + + cl_abap_typedescr=>describe_by_name( EXPORTING p_name = mv_table + RECEIVING p_descr_ref = DATA(typedesc) + EXCEPTIONS type_not_found = 1 + OTHERS = 2 ). + + DATA(structdesc) = CAST cl_abap_structdescr( typedesc ). + DATA(comp) = structdesc->get_components( ). + + LOOP AT comp INTO DATA(com). + IF com-as_include = abap_false. + APPEND com TO result. + ENDIF. + ENDLOOP. + + CATCH cx_root. + + ENDTRY. + + DATA(component) = VALUE cl_abap_structdescr=>component_table( + ( name = 'ROW_ID' + type = CAST #( cl_abap_datadescr=>describe_by_data( index ) ) ) ). + + APPEND LINES OF component TO result. + + CATCH cx_root. + ENDTRY. + ENDMETHOD. + + METHOD on_after_navigation. + + IF client->get( )-check_on_navigated = abap_false. + RETURN. + ENDIF. + + TRY. + + DATA(app) = CAST z2ui5_cl_pop_layout_v2( client->get_app( client->get( )-s_draft-id_prev_app ) ). + + ms_layout = app->ms_layout. + + IF app->mv_rerender = abap_true. + " subcolumns need rerendering to work .. + render_main( ). + mv_view_display = abap_TRUE. + ELSE. + " for all other changes in Layout View Model Update is enough. + mv_view_model_update = abap_true. + + ENDIF. + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/z2ui5_cl_demo_app_212.clas.xml b/src/z2ui5_cl_demo_app_212.clas.xml new file mode 100644 index 00000000..325cd447 --- /dev/null +++ b/src/z2ui5_cl_demo_app_212.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_212 + E + App in App II + 1 + X + X + X + + + + From 34507d446d03abd1983d53c2258ea7805b086749 Mon Sep 17 00:00:00 2001 From: abapsheep <135960093+abapsheep@users.noreply.github.com> Date: Tue, 2 Jul 2024 16:43:11 +0200 Subject: [PATCH 2/4] Update src/z2ui5_cl_demo_app_211.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/z2ui5_cl_demo_app_211.clas.abap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/z2ui5_cl_demo_app_211.clas.abap b/src/z2ui5_cl_demo_app_211.clas.abap index 455e3b29..421c55e0 100644 --- a/src/z2ui5_cl_demo_app_211.clas.abap +++ b/src/z2ui5_cl_demo_app_211.clas.abap @@ -54,7 +54,9 @@ CLASS Z2UI5_CL_DEMO_APP_211 IMPLEMENTATION. FIELD-SYMBOLS
TYPE ANY TABLE. - CHECK tabname IS NOT INITIAL. + IF NOT ame IS NOT INITIAL. + RETURN. +ENDIF. TRY. From 78df04c348de7669bacff76dab35766be397cd97 Mon Sep 17 00:00:00 2001 From: Viktor Hoffmann Date: Tue, 2 Jul 2024 14:49:46 +0000 Subject: [PATCH 3/4] Update Issue --- src/z2ui5_cl_demo_app_211.clas.abap | 58 ++++++----------------------- 1 file changed, 11 insertions(+), 47 deletions(-) diff --git a/src/z2ui5_cl_demo_app_211.clas.abap b/src/z2ui5_cl_demo_app_211.clas.abap index 421c55e0..8868f7d6 100644 --- a/src/z2ui5_cl_demo_app_211.clas.abap +++ b/src/z2ui5_cl_demo_app_211.clas.abap @@ -1,5 +1,5 @@ "! -CLASS Z2UI5_CL_DEMO_APP_211 DEFINITION +CLASS z2ui5_cl_demo_app_211 DEFINITION PUBLIC CREATE PUBLIC. @@ -33,11 +33,7 @@ CLASS Z2UI5_CL_DEMO_APP_211 DEFINITION METHODS on_event. METHODS render_Main. - METHODS get_count - IMPORTING - tabname TYPE tabname - RETURNING - VALUE(result) TYPE string. + METHODS Render_sub_app. @@ -46,44 +42,8 @@ CLASS Z2UI5_CL_DEMO_APP_211 DEFINITION ENDCLASS. -CLASS Z2UI5_CL_DEMO_APP_211 IMPLEMENTATION. - - METHOD get_count. - - DATA o_table TYPE REF TO data. - - FIELD-SYMBOLS
TYPE ANY TABLE. - - IF NOT ame IS NOT INITIAL. - RETURN. -ENDIF. - - TRY. - - cl_abap_typedescr=>describe_by_name( EXPORTING p_name = tabname - RECEIVING p_descr_ref = DATA(o_type_desc) - EXCEPTIONS type_not_found = 1 ). - - IF sy-subrc = 1. - RETURN. - ENDIF. - - DATA(o_struct_desc) = CAST cl_abap_structdescr( o_type_desc ). - - DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = o_struct_desc - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA o_table TYPE HANDLE new_table_desc. - - ASSIGN o_table->* TO
. - - SELECT * FROM (tabname) INTO CORRESPONDING FIELDS OF TABLE
. +CLASS z2ui5_cl_demo_app_211 IMPLEMENTATION. - result = lines(
). - - CATCH cx_root. - ENDTRY. - ENDMETHOD. METHOD on_event. CASE client->get( )-event. @@ -201,13 +161,17 @@ ENDIF. ENDCASE. - IF mo_app->('MV_VIEW_DISPLAY') = abap_true. - mo_app->('MV_VIEW_DISPLAY') = abap_false. + ASSIGN mo_app->('MV_VIEW_DISPLAY') TO FIELD-SYMBOL(). + + IF = abap_true. + = abap_false. client->view_display( mo_main_page->stringify( ) ). ENDIF. - IF mo_app->('MV_VIEW_MODEL_UPDATE') = abap_true. - mo_app->('MV_VIEW_MODEL_UPDATE') = abap_false. + ASSIGN mo_app->('MV_VIEW_MODEL_UPDATE') TO FIELD-SYMBOL(). + + IF = abap_true. + = abap_false. client->view_model_update( ). ENDIF. From 171ac188c5aa4ea4726a24e70ba044a9010e31ef Mon Sep 17 00:00:00 2001 From: Viktor Hoffmann Date: Tue, 2 Jul 2024 15:12:14 +0000 Subject: [PATCH 4/4] Update Issue --- src/z2ui5_cl_demo_app_212.clas.abap | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/z2ui5_cl_demo_app_212.clas.abap b/src/z2ui5_cl_demo_app_212.clas.abap index 98f8b353..901140ec 100644 --- a/src/z2ui5_cl_demo_app_212.clas.abap +++ b/src/z2ui5_cl_demo_app_212.clas.abap @@ -128,8 +128,7 @@ CLASS z2ui5_cl_demo_app_212 IMPLEMENTATION. DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). DATA(simple_form) = popup->dialog( contentwidth = '60%' - )->simple_form( title = '' - layout = 'ResponsiveGridLayout' + )->simple_form( layout = 'ResponsiveGridLayout' editable = abap_true )->content( ns = 'form' ).