mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 02:58:20 +08:00
New Layout (#911)
* New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * New Layout * Update abaplint.jsonc * fix downport * Update src/02/03/z2ui5_cl_popup_layout_v2.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * Update abaplint.jsonc * Update abaplint.jsonc * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_cl_popup_layout_v2.clas.abap * fix * update * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_cl_popup_layout_v2.clas.abap * Update z2ui5_t001.tabl.xml * Update abap_transpile.json * Update abap_transpile.json * Update abap_transpile.json * Update z2ui5_cl_popup_layout_v2.clas.abap --------- Co-authored-by: oblomov <102328295+oblomov-dev@users.noreply.github.com> Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: oblomov-dev@outlook.com <oblomov-dev@outlook.com>
This commit is contained in:
parent
54aa06ce55
commit
e85f1c1811
|
@ -79,7 +79,7 @@
|
|||
"cyclomatic_complexity": {
|
||||
"exclude": [],
|
||||
"severity": "Error",
|
||||
"max": 10
|
||||
"max": 12
|
||||
},
|
||||
"dangerous_statement": true,
|
||||
"db_operation_in_loop": true,
|
||||
|
@ -132,7 +132,7 @@
|
|||
"inline_data_old_versions": true,
|
||||
"intf_referencing_clas": false,
|
||||
"keep_single_parameter_on_one_line": false,
|
||||
"keyword_case": true,
|
||||
"keyword_case": false,
|
||||
"line_break_multiple_parameters": false,
|
||||
"line_break_style": true,
|
||||
"line_length": false,
|
||||
|
@ -231,7 +231,7 @@
|
|||
"space_before_colon": true,
|
||||
"space_before_dot": true,
|
||||
"sql_escape_host_variables": true,
|
||||
"start_at_tab": true,
|
||||
"start_at_tab": false,
|
||||
"static_call_via_instance": {
|
||||
"allowInTestclassIncludes": false
|
||||
},
|
||||
|
|
835
src/02/03/z2ui5_cl_popup_layout_v2.clas.abap
Normal file
835
src/02/03/z2ui5_cl_popup_layout_v2.clas.abap
Normal file
|
@ -0,0 +1,835 @@
|
|||
CLASS z2ui5_cl_popup_layout_v2 DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES if_serializable_object .
|
||||
INTERFACES z2ui5_if_app .
|
||||
|
||||
TYPES:
|
||||
BEGIN OF fixvalue,
|
||||
low TYPE string,
|
||||
high TYPE string,
|
||||
option TYPE string,
|
||||
ddlanguage TYPE string,
|
||||
ddtext TYPE string,
|
||||
END OF fixvalue.
|
||||
TYPES fixvalues TYPE STANDARD TABLE OF fixvalue WITH EMPTY KEY.
|
||||
|
||||
TYPES ty_s_t001 TYPE z2ui5_t001.
|
||||
TYPES ty_t_t001 TYPE STANDARD TABLE OF ty_s_t001 WITH EMPTY KEY.
|
||||
|
||||
TYPES ty_s_t002 TYPE z2ui5_t002.
|
||||
|
||||
TYPES ty_t_t002 TYPE STANDARD TABLE OF ty_s_t002 WITH EMPTY KEY.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_s_layout,
|
||||
s_head TYPE ty_s_t001,
|
||||
t_layout TYPE ty_t_t002,
|
||||
END OF ty_s_layout.
|
||||
|
||||
TYPES BEGIN OF ty_s_layo.
|
||||
* INCLUDE TYPE z2ui5_t001.
|
||||
TYPES layout TYPE c length 12.
|
||||
TYPES tab TYPE c length 30.
|
||||
TYPES descr TYPE c length 50.
|
||||
TYPES classname TYPE c length 30.
|
||||
TYPES def TYPE c length 1.
|
||||
TYPES uname TYPE c length 12.
|
||||
TYPES selkz TYPE abap_bool.
|
||||
TYPES END OF ty_s_layo .
|
||||
TYPES ty_t_layo TYPE STANDARD TABLE OF ty_s_layo WITH EMPTY KEY.
|
||||
|
||||
|
||||
DATA mt_t001 TYPE ty_t_layo.
|
||||
DATA ms_layout TYPE ty_s_layout.
|
||||
DATA mv_descr TYPE string.
|
||||
DATA mv_layout TYPE string.
|
||||
DATA mv_def TYPE abap_bool.
|
||||
DATA mv_usr TYPE abap_bool.
|
||||
DATA mv_open TYPE abap_bool.
|
||||
DATA mv_delete TYPE abap_bool.
|
||||
DATA mv_extended_layout TYPE abap_bool.
|
||||
DATA mt_halign TYPE fixvalues.
|
||||
DATA mt_importance TYPE fixvalues.
|
||||
|
||||
CLASS-METHODS on_event_layout
|
||||
IMPORTING client TYPE REF TO z2ui5_if_client
|
||||
layout TYPE ty_s_layout
|
||||
RETURNING VALUE(result) TYPE REF TO z2ui5_if_client.
|
||||
|
||||
CLASS-METHODS render_layout_function
|
||||
IMPORTING
|
||||
!xml TYPE REF TO z2ui5_cl_xml_view
|
||||
!client TYPE REF TO z2ui5_if_client
|
||||
RETURNING
|
||||
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
|
||||
|
||||
CLASS-METHODS init_layout
|
||||
IMPORTING
|
||||
!tab TYPE REF TO data
|
||||
!classname TYPE string
|
||||
RETURNING
|
||||
VALUE(result) TYPE ty_s_layout.
|
||||
|
||||
CLASS-METHODS factory
|
||||
IMPORTING
|
||||
!layout TYPE ty_s_layout
|
||||
!open_layout TYPE abap_bool OPTIONAL
|
||||
!delete_layout TYPE abap_bool OPTIONAL
|
||||
!extended_layout TYPE abap_bool OPTIONAL
|
||||
RETURNING
|
||||
VALUE(result) TYPE REF TO z2ui5_cl_popup_layout_v2.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
DATA client TYPE REF TO z2ui5_if_client.
|
||||
DATA mv_init TYPE abap_bool.
|
||||
|
||||
METHODS on_init.
|
||||
METHODS render_edit.
|
||||
METHODS on_event.
|
||||
|
||||
METHODS select_layouts
|
||||
IMPORTING
|
||||
!classname TYPE string
|
||||
!tab TYPE string
|
||||
RETURNING
|
||||
VALUE(result) TYPE ty_t_t001.
|
||||
|
||||
METHODS render_save.
|
||||
METHODS save_layout.
|
||||
METHODS render_open.
|
||||
METHODS get_selected_layout.
|
||||
METHODS get_layouts.
|
||||
METHODS init_edit.
|
||||
METHODS render_delete.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS delete_selected_layout.
|
||||
|
||||
|
||||
CLASS-METHODS get_relative_name_of_table
|
||||
IMPORTING !table TYPE any
|
||||
RETURNING VALUE(result) TYPE string.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS z2ui5_cl_popup_layout_v2 IMPLEMENTATION.
|
||||
|
||||
METHOD z2ui5_if_app~main.
|
||||
|
||||
me->client = client.
|
||||
|
||||
IF mv_init = abap_false.
|
||||
mv_init = abap_true.
|
||||
|
||||
on_init( ).
|
||||
|
||||
CASE abap_true.
|
||||
WHEN mv_open.
|
||||
|
||||
get_layouts( ).
|
||||
|
||||
render_open( ).
|
||||
|
||||
WHEN mv_delete.
|
||||
|
||||
get_layouts( ).
|
||||
|
||||
render_delete( ).
|
||||
|
||||
WHEN OTHERS.
|
||||
|
||||
init_edit( ).
|
||||
|
||||
render_edit( ).
|
||||
|
||||
ENDCASE.
|
||||
|
||||
client->view_model_update( ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
on_event( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD on_init.
|
||||
|
||||
mt_halign = VALUE #(
|
||||
( low = 'Begin' ddtext = 'Locale-specific positioning at the beginning of the line' )
|
||||
( low = 'Center' ddtext = 'Centered text alignment' )
|
||||
( low = 'End' ddtext = 'Locale-specific positioning at the end of the line' )
|
||||
( low = 'Initial' ddtext = 'Sets no text align, so the browser default is used' )
|
||||
( low = 'Left' ddtext = 'Hard option for left alignment' )
|
||||
( low = 'Right' ddtext = 'Hard option for right alignment' )
|
||||
).
|
||||
|
||||
mt_importance = VALUE #(
|
||||
( low = 'High' ddtext = 'High priority' )
|
||||
( low = 'Low' ddtext = 'Low priority' )
|
||||
( low = 'Medium' ddtext = 'Medium priority' )
|
||||
( low = 'None' ddtext = 'Default, none priority' ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_edit.
|
||||
|
||||
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
|
||||
|
||||
DATA(dialog) = popup->dialog( title = 'Layout'
|
||||
contentwidth = '50%'
|
||||
afterclose = client->_event( 'CLOSE' ) )->content( ).
|
||||
|
||||
DATA(tab) = dialog->table( growing = abap_true
|
||||
items = client->_bind_edit( ms_layout-t_layout ) ).
|
||||
|
||||
DATA(list) = tab->column_list_item( ).
|
||||
|
||||
DATA(cells) = list->cells( ).
|
||||
|
||||
DATA(columns) = tab->columns( ).
|
||||
|
||||
DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ms_layout-t_layout ).
|
||||
|
||||
LOOP AT lt_comp REFERENCE INTO DATA(comp).
|
||||
|
||||
CASE comp->name.
|
||||
WHEN 'FNAME'.
|
||||
DATA(col) = columns->column( )->header( ).
|
||||
col->text( 'Row' ).
|
||||
WHEN 'VISIBLE'.
|
||||
col = columns->column( )->header( ).
|
||||
col->text( 'Visible' ).
|
||||
WHEN 'MERGE'.
|
||||
CHECK mv_extended_layout = abap_true.
|
||||
col = columns->column( )->header( ).
|
||||
col->text( 'Merge duplicates' ).
|
||||
WHEN 'HALIGN'.
|
||||
CHECK mv_extended_layout = abap_true.
|
||||
col = columns->column( )->header( ).
|
||||
col->text( 'Align' ).
|
||||
WHEN 'IMPORTANCE'.
|
||||
CHECK mv_extended_layout = abap_true.
|
||||
col = columns->column( )->header( ).
|
||||
col->text( 'Importance' ).
|
||||
* WHEN 'WIDTH'.
|
||||
* CHECK mv_extended_layout = abap_true.
|
||||
* col = columns->column( )->header( ).
|
||||
* col->text( 'Width in px' ).
|
||||
ENDCASE.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_comp REFERENCE INTO comp.
|
||||
|
||||
CASE comp->name.
|
||||
WHEN 'FNAME'.
|
||||
|
||||
cells->text( `{` && comp->name && `}` ).
|
||||
|
||||
WHEN 'VISIBLE' OR 'MERGE'.
|
||||
|
||||
cells->switch( type = 'AcceptReject'
|
||||
state = `{` && comp->name && `}` ).
|
||||
|
||||
WHEN 'HALIGN'.
|
||||
|
||||
cells->combobox(
|
||||
selectedkey = `{` && comp->name && `}`
|
||||
items = client->_bind_local( mt_halign )
|
||||
)->item(
|
||||
key = '{LOW}'
|
||||
text = '{LOW} - {DDTEXT}' ).
|
||||
|
||||
WHEN 'IMPORTANCE'.
|
||||
|
||||
cells->combobox(
|
||||
selectedkey = `{` && comp->name && `}`
|
||||
items = client->_bind_local( mt_importance )
|
||||
)->item(
|
||||
key = '{LOW}'
|
||||
text = '{LOW} - {DDTEXT}' ).
|
||||
|
||||
* WHEN 'WIDTH'.
|
||||
*
|
||||
* cells->input( value = `{` && comp->name && `}` ).
|
||||
|
||||
ENDCASE.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
dialog->get_parent(
|
||||
)->footer( )->overflow_toolbar(
|
||||
)->toolbar_spacer(
|
||||
)->button(
|
||||
text = 'Back'
|
||||
icon = 'sap-icon://nav-back'
|
||||
press = client->_event( 'CLOSE' )
|
||||
)->button(
|
||||
text = 'Save'
|
||||
press = client->_event( 'EDIT_SAVE' )
|
||||
icon = 'sap-icon://save'
|
||||
type = 'Emphasized'
|
||||
).
|
||||
|
||||
client->popup_display( popup->get_root( )->xml_get( ) ).
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD on_event.
|
||||
|
||||
CASE client->get( )-event.
|
||||
|
||||
WHEN 'CLOSE'.
|
||||
|
||||
client->popup_destroy( ).
|
||||
|
||||
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
|
||||
|
||||
WHEN 'EDIT_SAVE'.
|
||||
|
||||
render_save( ).
|
||||
|
||||
WHEN 'SAVE_CLOSE'.
|
||||
|
||||
client->popup_destroy( ).
|
||||
|
||||
render_edit( ).
|
||||
|
||||
WHEN 'SAVE_SAVE'.
|
||||
|
||||
save_layout( ).
|
||||
|
||||
client->popup_destroy( ).
|
||||
|
||||
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
|
||||
|
||||
WHEN 'OPEN_SELECT'.
|
||||
|
||||
get_selected_layout( ).
|
||||
|
||||
client->popup_destroy( ).
|
||||
|
||||
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
|
||||
|
||||
WHEN 'DELETE_SELECT'.
|
||||
|
||||
get_selected_layout( ).
|
||||
|
||||
delete_selected_layout( ).
|
||||
|
||||
* ms_layout = init_layout( tab = ms_layout-s_head-tab
|
||||
* classname = ms_layout-s_head-class ).
|
||||
|
||||
client->popup_destroy( ).
|
||||
|
||||
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD factory.
|
||||
|
||||
result = NEW #( ).
|
||||
|
||||
result->ms_layout = layout.
|
||||
|
||||
result->mv_open = open_layout.
|
||||
result->mv_delete = delete_layout.
|
||||
result->mv_extended_layout = extended_layout.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_layout_function.
|
||||
|
||||
result = xml.
|
||||
|
||||
result->overflow_toolbar_menu_button( tooltip = 'Export' icon = 'sap-icon://action-settings'
|
||||
)->_generic( `menu`
|
||||
)->_generic( `Menu`
|
||||
)->menu_item( text = 'Change Layout'
|
||||
icon = 'sap-icon://edit'
|
||||
press = client->_event( val = 'LAYOUT_EDIT' )
|
||||
)->menu_item( text = 'Choose Layout'
|
||||
icon = 'sap-icon://open-folder'
|
||||
press = client->_event( val = 'LAYOUT_OPEN' )
|
||||
)->menu_item( text = 'Manage Layouts'
|
||||
icon = 'sap-icon://delete'
|
||||
press = client->_event( val = 'LAYOUT_DELETE' ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_save.
|
||||
|
||||
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
|
||||
|
||||
DATA(dialog) = popup->dialog( title = 'Save'
|
||||
afterclose = client->_event( 'SAVE_CLOSE' ) ).
|
||||
|
||||
DATA(form) = dialog->simple_form( title = 'Layout'
|
||||
editable = abap_true
|
||||
labelspanxl = `4`
|
||||
labelspanl = `4`
|
||||
labelspanm = `4`
|
||||
labelspans = `4`
|
||||
adjustlabelspan = abap_false
|
||||
).
|
||||
|
||||
form->toolbar( )->title( 'Layout' ).
|
||||
|
||||
form->content( 'form'
|
||||
)->label( 'Layout'
|
||||
)->input( client->_bind_edit( mv_layout )
|
||||
)->label( 'Description'
|
||||
)->input( client->_bind_edit( mv_descr ) ).
|
||||
|
||||
form->toolbar( )->title( `` ).
|
||||
|
||||
form->content( 'form'
|
||||
)->label( 'Default Layout'
|
||||
)->switch( type = 'AcceptReject' state = client->_bind_edit( mv_def )
|
||||
)->label( 'User specific'
|
||||
)->switch( type = 'AcceptReject' state = client->_bind_edit( mv_usr )
|
||||
).
|
||||
|
||||
dialog->footer( )->overflow_toolbar(
|
||||
)->toolbar_spacer(
|
||||
)->button(
|
||||
text = 'Back'
|
||||
icon = 'sap-icon://nav-back'
|
||||
press = client->_event( 'SAVE_CLOSE' )
|
||||
)->button(
|
||||
text = 'Save'
|
||||
press = client->_event( 'SAVE_SAVE' )
|
||||
type = 'Success'
|
||||
icon = 'sap-icon://save' ).
|
||||
|
||||
client->popup_display( popup->get_root( )->xml_get( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD save_layout.
|
||||
|
||||
DATA t002 TYPE STANDARD TABLE OF z2ui5_t002 WITH EMPTY KEY.
|
||||
|
||||
IF mv_layout IS INITIAL.
|
||||
client->message_toast_display( 'Layoutname missing.' ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF mv_usr = abap_true.
|
||||
DATA(user) = sy-uname.
|
||||
ENDIF.
|
||||
|
||||
DATA(t001) = VALUE z2ui5_t001( layout = mv_layout
|
||||
classname = ms_layout-s_head-classname
|
||||
descr = mv_descr
|
||||
def = mv_def
|
||||
uname = user
|
||||
tab = ms_layout-s_head-tab ).
|
||||
|
||||
LOOP AT ms_layout-t_layout INTO DATA(layout).
|
||||
|
||||
INSERT VALUE #( layout = mv_layout
|
||||
tab = ms_layout-s_head-tab
|
||||
fname = layout-fname
|
||||
rollname = layout-rollname
|
||||
visible = layout-visible
|
||||
halign = layout-halign
|
||||
importance = layout-importance
|
||||
merge = layout-merge
|
||||
width = layout-width ) INTO TABLE t002.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
" gibt es das Layyout schon?
|
||||
SELECT SINGLE layout FROM z2ui5_t001
|
||||
WHERE layout = @t001-layout
|
||||
AND tab = @t001-tab
|
||||
INTO @t001-layout.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
|
||||
* postionen lesen und loeschen
|
||||
SELECT layout,
|
||||
tab,
|
||||
fname,
|
||||
rollname,
|
||||
visible,
|
||||
halign,
|
||||
importance,
|
||||
merge,
|
||||
width
|
||||
FROM z2ui5_t002
|
||||
WHERE layout = @t001-layout
|
||||
AND tab = @t001-tab
|
||||
INTO TABLE @DATA(del).
|
||||
|
||||
IF sy-subrc = 0.
|
||||
DELETE z2ui5_t002 FROM TABLE @del.
|
||||
COMMIT WORK AND WAIT.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
MODIFY z2ui5_t001 FROM @t001.
|
||||
IF sy-subrc = 0.
|
||||
|
||||
MODIFY z2ui5_t002 FROM TABLE @t002.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
|
||||
COMMIT WORK AND WAIT.
|
||||
|
||||
client->message_toast_display( 'Data saved.' ).
|
||||
|
||||
ms_layout-s_head = t001.
|
||||
ms_layout-t_layout = t002.
|
||||
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_delete.
|
||||
|
||||
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
|
||||
|
||||
DATA(dialog) = popup->dialog( title = 'Layout'
|
||||
afterclose = client->_event( 'CLOSE' ) ).
|
||||
|
||||
dialog->table(
|
||||
headertext = 'Layout'
|
||||
mode = 'SingleSelectLeft'
|
||||
items = client->_bind_edit( mt_t001 )
|
||||
)->columns(
|
||||
)->column( )->text( 'Layout' )->get_parent(
|
||||
)->column( )->text( 'Description'
|
||||
)->get_parent( )->get_parent(
|
||||
)->items(
|
||||
)->column_list_item( selected = '{SELKZ}'
|
||||
)->cells(
|
||||
)->text( '{LAYOUT}'
|
||||
)->text( '{DESCR}' ).
|
||||
|
||||
dialog->footer( )->overflow_toolbar(
|
||||
)->toolbar_spacer(
|
||||
)->button(
|
||||
text = 'Back'
|
||||
icon = 'sap-icon://nav-back'
|
||||
press = client->_event( 'CLOSE' )
|
||||
)->button(
|
||||
text = 'Delete'
|
||||
press = client->_event( 'DELETE_SELECT' )
|
||||
type = 'Reject'
|
||||
icon = 'sap-icon://delete' ).
|
||||
|
||||
client->popup_display( popup->stringify( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD render_open.
|
||||
|
||||
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ).
|
||||
|
||||
DATA(dialog) = popup->dialog( title = 'Layout'
|
||||
afterclose = client->_event( 'CLOSE' ) ).
|
||||
|
||||
dialog->table(
|
||||
headertext = 'Layout'
|
||||
mode = 'SingleSelectLeft'
|
||||
items = client->_bind_edit( mt_t001 )
|
||||
)->columns(
|
||||
)->column( )->text( 'Layout' )->get_parent(
|
||||
)->column( )->text( 'Description' )->get_parent(
|
||||
)->column( )->text( 'Default' )->get_parent(
|
||||
)->get_parent(
|
||||
)->items(
|
||||
)->column_list_item( selected = '{SELKZ}'
|
||||
)->cells(
|
||||
)->text( '{LAYOUT}'
|
||||
)->text( '{DESCR}'
|
||||
)->text( '{DEF}' ).
|
||||
|
||||
dialog->footer( )->overflow_toolbar(
|
||||
)->toolbar_spacer(
|
||||
)->button(
|
||||
text = 'Back'
|
||||
icon = 'sap-icon://nav-back'
|
||||
press = client->_event( 'CLOSE' )
|
||||
)->button(
|
||||
text = 'Open'
|
||||
icon = 'sap-icon://accept'
|
||||
press = client->_event( 'OPEN_SELECT' )
|
||||
type = 'Emphasized' ).
|
||||
|
||||
client->popup_display( popup->stringify( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD select_layouts.
|
||||
|
||||
SELECT * FROM z2ui5_t001
|
||||
WHERE classname = @classname
|
||||
AND tab = @tab
|
||||
INTO CORRESPONDING FIELDS OF TABLE @result.
|
||||
* User?!
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_selected_layout.
|
||||
|
||||
|
||||
DATA(t001) = VALUE #( mt_t001[ selkz = abap_true ] OPTIONAL ).
|
||||
|
||||
IF t001 IS NOT INITIAL.
|
||||
|
||||
SELECT SINGLE * FROM z2ui5_t001
|
||||
WHERE layout = @t001-layout
|
||||
AND tab = @t001-tab
|
||||
INTO CORRESPONDING FIELDS OF @ms_layout-s_head.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
SELECT * FROM z2ui5_t002
|
||||
WHERE layout = @t001-layout
|
||||
AND tab = @t001-tab
|
||||
INTO CORRESPONDING FIELDS OF TABLE @ms_layout-t_layout.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD init_layout.
|
||||
|
||||
" create the tab first if the db fields were added/deleted
|
||||
|
||||
* DATA(t_comp) = get_comps_by_data( tab ).
|
||||
DATA(t_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( tab ).
|
||||
|
||||
DATA(tab_name) = get_relative_name_of_table( tab ).
|
||||
IF tab_name IS INITIAL.
|
||||
tab_name = classname.
|
||||
ENDIF.
|
||||
|
||||
|
||||
LOOP AT t_comp REFERENCE INTO DATA(lr_comp).
|
||||
INSERT VALUE #(
|
||||
tab = tab_name
|
||||
fname = lr_comp->name
|
||||
rollname = lr_comp->type->get_relative_name( ) ) INTO TABLE result-t_layout.
|
||||
ENDLOOP.
|
||||
|
||||
* Select Layouts
|
||||
SELECT layout,
|
||||
tab,
|
||||
descr,
|
||||
classname,
|
||||
def,
|
||||
uname
|
||||
FROM z2ui5_t001
|
||||
WHERE classname = @classname
|
||||
AND tab = @tab_name
|
||||
INTO TABLE @DATA(t_t001).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
* DEFAULT USER
|
||||
DATA(def) = VALUE #( t_t001[ classname = classname tab = tab_name def = abap_true uname = sy-uname ] OPTIONAL ).
|
||||
|
||||
IF def IS INITIAL.
|
||||
* DEFAULT
|
||||
def = VALUE #( t_t001[ classname = classname tab = tab_name def = abap_true ] OPTIONAL ).
|
||||
ENDIF.
|
||||
|
||||
|
||||
IF def-layout IS NOT INITIAL.
|
||||
|
||||
SELECT mandt,
|
||||
layout,
|
||||
tab,
|
||||
fname,
|
||||
rollname,
|
||||
visible,
|
||||
halign,
|
||||
importance,
|
||||
merge,
|
||||
width,
|
||||
text
|
||||
FROM z2ui5_t002
|
||||
WHERE layout = @def-layout
|
||||
AND tab = @def-tab
|
||||
INTO TABLE @DATA(t_t002).
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
LOOP AT result-t_layout REFERENCE INTO DATA(layout).
|
||||
|
||||
TRY.
|
||||
DATA(t002) = REF #( t_t002[ fname = layout->fname ] ).
|
||||
layout->* = t002->*.
|
||||
CATCH cx_root.
|
||||
layout->layout = 'Default'.
|
||||
layout->halign = 'Initial'.
|
||||
layout->importance = 'None'.
|
||||
layout->rollname = layout->rollname.
|
||||
layout->fname = layout->fname.
|
||||
layout->tab = tab_name.
|
||||
ENDTRY.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
result-s_head = def.
|
||||
RETURN.
|
||||
|
||||
ENDIF.
|
||||
|
||||
* Default Layout
|
||||
DATA(index) = 0.
|
||||
|
||||
LOOP AT result-t_layout REFERENCE INTO layout.
|
||||
|
||||
index = index + 1.
|
||||
|
||||
* Default ony 10 rows
|
||||
IF index <= 10.
|
||||
layout->visible = abap_true.
|
||||
ENDIF.
|
||||
|
||||
IF layout->fname = 'MANDT' OR layout->fname = 'ROW_ID'.
|
||||
layout->visible = abap_false.
|
||||
ENDIF.
|
||||
|
||||
layout->layout = 'Default'.
|
||||
layout->halign = 'Initial'.
|
||||
layout->importance = 'None'.
|
||||
layout->tab = tab_name.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
result-s_head-layout = 'Default'.
|
||||
result-s_head-descr = 'System generated Layout'.
|
||||
result-s_head-def = abap_true.
|
||||
result-s_head-classname = classname.
|
||||
result-s_head-tab = tab_name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_layouts.
|
||||
|
||||
mt_t001 = select_layouts(
|
||||
classname = CONV #( ms_layout-s_head-classname )
|
||||
tab = CONV #( ms_layout-s_head-tab ) ).
|
||||
|
||||
IF mt_t001 IS NOT INITIAL.
|
||||
|
||||
DATA(t001) = REF #( mt_t001[ layout = ms_layout-s_head-layout ] OPTIONAL ).
|
||||
IF t001 IS BOUND.
|
||||
t001->selkz = abap_true.
|
||||
RETURN.
|
||||
ELSE.
|
||||
t001 = REF #( mt_t001[ 1 ] OPTIONAL ).
|
||||
t001->selkz = abap_true.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD init_edit.
|
||||
|
||||
mv_layout = ms_layout-s_head-layout.
|
||||
mv_descr = ms_layout-s_head-descr.
|
||||
mv_def = ms_layout-s_head-def.
|
||||
|
||||
mv_usr = xsdbool( ms_layout-s_head-uname IS NOT INITIAL ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD on_event_layout.
|
||||
|
||||
result = client.
|
||||
|
||||
CASE result->get( )-event.
|
||||
|
||||
WHEN 'LAYOUT_OPEN'.
|
||||
client->view_destroy( ).
|
||||
result->nav_app_call( factory( layout = layout
|
||||
open_layout = abap_true ) ).
|
||||
|
||||
WHEN 'LAYOUT_EDIT'.
|
||||
client->view_destroy( ).
|
||||
result->nav_app_call( factory( layout = layout
|
||||
extended_layout = abap_true ) ).
|
||||
|
||||
WHEN 'LAYOUT_DELETE'.
|
||||
client->view_destroy( ).
|
||||
result->nav_app_call( factory( layout = layout
|
||||
delete_layout = abap_true ) ).
|
||||
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD delete_selected_layout.
|
||||
|
||||
DELETE z2ui5_t001 FROM @ms_layout-s_head.
|
||||
DELETE z2ui5_t002 FROM TABLE @ms_layout-t_layout.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
COMMIT WORK AND WAIT.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_relative_name_of_table.
|
||||
|
||||
FIELD-SYMBOLS <table> TYPE any.
|
||||
|
||||
TRY.
|
||||
DATA(typedesc) = cl_abap_typedescr=>describe_by_data( table ).
|
||||
|
||||
CASE typedesc->kind.
|
||||
|
||||
WHEN cl_abap_typedescr=>kind_table.
|
||||
DATA(tabledesc) = CAST cl_abap_tabledescr( typedesc ).
|
||||
DATA(structdesc) = CAST cl_abap_structdescr( tabledesc->get_table_line_type( ) ).
|
||||
result = structdesc->get_relative_name( ).
|
||||
RETURN.
|
||||
|
||||
WHEN typedesc->kind_ref.
|
||||
|
||||
ASSIGN table->* TO <table>.
|
||||
result = get_relative_name_of_table( <table> ).
|
||||
|
||||
ENDCASE.
|
||||
CATCH cx_root.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
16
src/02/03/z2ui5_cl_popup_layout_v2.clas.xml
Normal file
16
src/02/03/z2ui5_cl_popup_layout_v2.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?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>Z2UI5_CL_POPUP_LAYOUT_V2</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>ui - popup layout V2</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
94
src/02/03/z2ui5_t001.tabl.xml
Normal file
94
src/02/03/z2ui5_t001.tabl.xml
Normal file
|
@ -0,0 +1,94 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>Z2UI5_T001</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<CLIDEP>X</CLIDEP>
|
||||
<DDTEXT>Table Layouts Headder</DDTEXT>
|
||||
<MASTERLANG>E</MASTERLANG>
|
||||
<MAINFLAG>X</MAINFLAG>
|
||||
<CONTFLAG>C</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>Z2UI5_T001</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<PROTOKOLL>X</PROTOKOLL>
|
||||
<BUFALLOW>A</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>MANDT</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>MANDT</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LAYOUT</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TAB</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>DESCR</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000100</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000050</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>CLASSNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>DEF</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>UNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
130
src/02/03/z2ui5_t002.tabl.xml
Normal file
130
src/02/03/z2ui5_t002.tabl.xml
Normal file
|
@ -0,0 +1,130 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>Z2UI5_T002</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<CLIDEP>X</CLIDEP>
|
||||
<DDTEXT>Table Layouts Settings</DDTEXT>
|
||||
<MASTERLANG>E</MASTERLANG>
|
||||
<MAINFLAG>X</MAINFLAG>
|
||||
<CONTFLAG>C</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>Z2UI5_T002</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<PROTOKOLL>X</PROTOKOLL>
|
||||
<BUFALLOW>A</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>MANDT</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>MANDT</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LAYOUT</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TAB</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>FNAME</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>ROLLNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>VISIBLE</FIELDNAME>
|
||||
<ROLLNAME>XSDBOOLEAN</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<VALEXI>X</VALEXI>
|
||||
<SHLPORIGIN>F</SHLPORIGIN>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>HALIGN</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000014</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000007</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>IMPORTANCE</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000014</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000007</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>MERGE</FIELDNAME>
|
||||
<ROLLNAME>XSDBOOLEAN</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<VALEXI>X</VALEXI>
|
||||
<SHLPORIGIN>F</SHLPORIGIN>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>WIDTH</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>X</INTTYPE>
|
||||
<INTLEN>000001</INTLEN>
|
||||
<DATATYPE>INT1</DATATYPE>
|
||||
<LENG>000003</LENG>
|
||||
<MASK> INT1</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TEXT</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000080</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000040</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -14,7 +14,7 @@
|
|||
"addFilenames": true,
|
||||
"addCommonJS": true,
|
||||
"unknownTypes": "runtimeError",
|
||||
"keywords": ["return", "in", "class", "for", "delete"],
|
||||
"keywords": ["return", "in", "class", "for", "delete", "default"],
|
||||
"extraSetup": "../test/setup.mjs",
|
||||
"skip": [
|
||||
{"object": "Z2UI5_CL_AJSON", "class": "ltcl_parser_test", "method": "parse_error", "note": "NodeJS 20 does not set position of parsing error"}
|
||||
|
|
Loading…
Reference in New Issue
Block a user