Difference between revisions of "SAP ABAP ALV OM"
From SapWiki
| Line 367: | Line 367: | ||
************************************************ | ************************************************ | ||
ENDFORM. "create_top_of_list</nowiki> | ENDFORM. "create_top_of_list</nowiki> | ||
| − | === | + | ===Agregar logo=== |
<nowiki> | <nowiki> | ||
*--------------------------------------------------------------------* | *--------------------------------------------------------------------* | ||
Revision as of 20:03, 1 December 2021
Contents
ALV SIMPLE
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_functions TYPE REF TO cl_salv_functions_list.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_alv .
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
DATA: lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key.
*... Create Instance
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_data.
CATCH cx_salv_msg.
ENDTRY.
* setting default ALV generic funtions
gr_functions = gr_table->get_functions( ).
gr_functions->set_all( ).
* set layout
lr_layout = gr_table->get_layout( ).
* set the Layout Key
ls_key-report = sy-repid.
lr_layout->set_key( ls_key ).
* LR_LAYOUT->SET_SAVE_RESTRICTION( 3 ).
lr_layout->set_save_restriction( ).
lr_layout->set_default( 'X' ).
* edit ALV columns
lr_columns = gr_table->get_columns( ).
* optimize output
lr_columns->set_optimize( 'X' ).
*----------------------------------------------------------------------*
* Set column names
*----------------------------------------------------------------------*
TRY.
lr_column = lr_columns->get_column( 'DDTEXT' ).
lr_column->set_long_text( 'Desc. Estatus' ).
lr_column->set_medium_text( 'Desc. Estatus' ).
lr_column->set_short_text( 'Desc.Estat' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*--------------------------------------------------------------------*
* hide columns
*--------------------------------------------------------------------*
TRY.
lr_column = lr_columns->get_column( 'FECHA_FIRMA' ).
lr_column->set_technical( 'X' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*... Display table
gr_table->display( ).
ENDFORM. " DISPLAY_ALV
Función para desplegar un LOG usando ALV OM
*----- Output in Log --------------------------------------------------
TYPES: BEGIN OF ty_news,
icon(4),
pernr TYPE zhr_solicitudes-pernr,
begda TYPE zhr_solicitudes-begda,
endda TYPE zhr_solicitudes-endda,
subty TYPE zhr_solicitudes-subty,
text LIKE bapiret2-message,
END OF ty_news.
DATA: news TYPE TABLE OF ty_news.
..
..
CALL FUNCTION 'Z_DISPLAY_LOG'
EXPORTING
START_COLUMN = 8
END_COLUMN = 120
START_LINE = 3
END_LINE = 15
CHANGING
i_news = news.
FUNCTION Z_DISPLAY_LOG.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(START_COLUMN) TYPE I DEFAULT 8
*" REFERENCE(END_COLUMN) TYPE I DEFAULT 120
*" REFERENCE(START_LINE) TYPE I DEFAULT 3
*" REFERENCE(END_LINE) TYPE I DEFAULT 15
*" CHANGING
*" REFERENCE(I_NEWS) TYPE TABLE
*"----------------------------------------------------------------------
* SALV Data
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_functions TYPE REF TO cl_salv_functions_list.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
try.
* SALV Create Instance
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = i_news. "internal table
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
* setting default ALV generic funtions
gr_functions = gr_table->get_functions( ).
* gr_functions->set_detail( IF_SALV_C_BOOL_SAP=>TRUE ).
gr_functions->set_all( ).
*... §4.1 set the size and position of the Popup via coordinates
gr_table->set_screen_popup(
start_column = start_column
end_column = end_column
start_line = start_line
end_line = end_line ).
* edit ALV columns
lr_columns = gr_table->get_columns( ).
* optimize output
lr_columns->set_optimize( 'X' ).
TRY.
lr_column = lr_columns->get_column( 'ICON' ).
lr_column->set_long_text( 'Status' ).
lr_column->set_medium_text( 'Status' ).
lr_column->set_short_text( 'Status' ).
CATCH cx_salv_not_found. "#EC NO_HANDLER
CATCH cx_salv_existing. "#EC NO_HANDLER
CATCH cx_salv_data_error. "#EC NO_HANDLER
ENDTRY.
*... Display table
gr_table->display( ).
ENDFUNCTION.
USO de Check Box para seleccionar columnas
*---------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
* define a local class for handling events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function,
on_double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
* §5.2 implement the events for handling the events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_user_command.
PERFORM user_command USING e_salv_function.
ENDMETHOD. "on_user_command
METHOD on_double_click.
PERFORM double_click USING row column.
ENDMETHOD. "on_double_click
ENDCLASS. "lcl_handle_events IMPLEMENTATION
* for handling the events of cl_salv_table
DATA: gr_events TYPE REF TO lcl_handle_events.
*----------------------------------------------------------------------*
* CLASS mycheckbox DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS mycheckbox DEFINITION.
PUBLIC SECTION.
CLASS-METHODS on_click_checkbox FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "mycheckbox DEFINITION
*----------------------------------------------------------------------*
* CLASS mycheckbox IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS mycheckbox IMPLEMENTATION.
METHOD on_click_checkbox.
READ TABLE gt_data_col INDEX row INTO wa_data.
IF wa_data-sel IS INITIAL ."AND wa_data-icon <> icon_green_light.
wa_data-sel = 'X'.
ELSE.
CLEAR wa_data-sel.
ENDIF.
MODIFY gt_data_col FROM wa_data INDEX sy-tabix.
gr_table->refresh( refresh_mode = if_salv_c_refresh=>full ).
ENDMETHOD. "on_click_checkbox
ENDCLASS. "mycheckbox IMPLEMENTATION
form display_alv...
DATA: lr_events TYPE REF TO cl_salv_events_table.
..
..
DATA mycolumn TYPE REF TO cl_salv_column_table.
TRY.
mycolumn ?= lr_columns->get_column( 'SEL' ).
mycolumn->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
* register to the events of cl_salv_table
lr_events = gr_table->get_event( ).
CREATE OBJECT gr_events.
SET HANDLER mycheckbox=>on_click_checkbox FOR lr_events.
ALV OM en ABAP 7.4
FORM display_log.
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table)
CHANGING t_table = gt_log ).
CATCH cx_salv_msg.
ENDTRY.
*... Enable Generic ALV functions
DATA(gr_functions) = gr_table->get_functions( ).
** gr_functions->set_default( ).
gr_functions->set_all( ).
DATA(lr_columns) = gr_table->get_columns( ).
* set column text
TRY.
DATA(lr_column) = lr_columns->get_column( 'EQUIPMENT_O' ).
lr_column->set_long_text( 'Equipo Original' ).
lr_column->set_medium_text( 'Equi.Ori.' ).
lr_column->set_short_text( 'Equi.Ori.' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*... Display table
gr_table->display( ).
ENDFORM. "display_log
Ejemplo con double click & user command
Habilitar/Deshabilitar columna como llave
DATA: gt_columns TYPE salv_t_column_ref,
lr_tabcol TYPE REF TO cl_salv_column_table,
sg_columns TYPE salv_s_column_ref.
TRY.
CALL METHOD lr_columns->get
RECEIVING
value = gt_columns.
LOOP AT gt_columns INTO sg_columns.
CASE sg_columns-columnname.
WHEN 'ID_TRAN'.
TRY.
lr_tabcol ?= sg_columns-r_column.
lr_tabcol->set_key( if_salv_c_bool_sap=>false ).
ENDTRY.
ENDCASE.
ENDLOOP.
ENDTRY.
Ejemplo Top of List
data lr_grid TYPE REF TO cl_salv_form_layout_grid.
PERFORM create_top_of_list CHANGING lr_grid.
gr_table->set_top_of_list( lr_grid ).
FORM create_top_of_list CHANGING lr_grid TYPE REF TO cl_salv_form_layout_grid.
DATA : lr_flow TYPE REF TO cl_salv_form_layout_flow,
l_text TYPE string.
l_text = sy-title.
CREATE OBJECT lr_grid.
CALL METHOD lr_grid->create_header_information
EXPORTING
row = 1
column = 1
* ROWSPAN =
* COLSPAN =
text = l_text
tooltip = sy-title.
*********************************************
**... add a row to the grid -> row 2
* lr_grid->add_row( ).
*... in the cell [2,1] create a grid
DATA(lr_grid_1) = lr_grid->create_grid(
row = 2
column = 1 ).
*... in the cell [1,1] of the second Grid create a label
DATA(lr_label) = lr_grid_1->create_label(
row = 1
column = 1
text = 'Fecha:'(t02)
tooltip = 'Fecha:'(t02) ).
l_text = |{ sy-datum DATE = USER }|.
*... in the cell [1,2] of the second Grid create a text
DATA(lr_text) = lr_grid_1->create_text(
row = 1
column = 2
text = l_text
tooltip = l_text ).
lr_label->set_label_for( lr_text ).
************************************************
*... in the cell [2,1] of the second Grid create a label
l_text = TEXT-t01.
lr_label = lr_grid_1->create_label(
row = 2
column = 1
text = l_text
tooltip = l_text ).
*... in the cell [2,2] of the second Grid create a text
l_text = p_file.
lr_text = lr_grid_1->create_text(
row = 2
column = 2
text = l_text
tooltip = l_text ).
lr_label->set_label_for( lr_text ).
************************************************
ENDFORM. "create_top_of_list
Agregar logo
*--------------------------------------------------------------------* * Create logo layout, set grid content on left and logo image on right *--------------------------------------------------------------------* DATA lr_logo TYPE REF TO cl_salv_form_layout_logo. CREATE OBJECT lr_logo. lr_logo->set_left_content( lr_grid ). * ***** lr_logo->set_right_logo( 'ZLOGO' ). "'ENJOYSAP_LOGO' * Set element top_of_list gr_table->set_top_of_list( lr_logo ).
MACROS
DATA: l_text_l TYPE scrtext_l,
l_text_m TYPE scrtext_m,
l_text_s TYPE scrtext_s.
*----------------------------------------------------------------------*
* Set column names
*----------------------------------------------------------------------*
DEFINE m_column_names.
l_text_l = &4.
l_text_m = &3.
l_text_s = &2.
TRY.
lr_column = lr_columns->get_column( &1 ).
lr_column->set_long_text( l_text_l ).
lr_column->set_medium_text( l_text_m ).
lr_column->set_short_text( l_text_s ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
END-OF-DEFINITION.
m_column_names 'DETALLE' 'Detalle'(t03) 'Detalle'(t03) 'Detalle'(t03).
DEFINE m_set_technical.
TRY.
lr_column = lr_columns->get_column( &1 ).
lr_column->set_technical( if_salv_c_bool_sap=>true ).
CATCH cx_salv_not_found.
ENDTRY.
END-OF-DEFINITION.
Definir campo de moneda a campos tipo moneda (CURR)
TYPES BEGIN OF ty_data,
periodo type MAHD_ALV_PERIO,
bukrs type p0001-bukrs,
werks type p0001-werks,
pernr type p0001-pernr,
cname type p0002-cname,
tot_hab type PAD_AMT7S, "CURR
tot_hab_imp_tri type PAD_AMT7S, "CURR
tot_hab_imp_no_tri type PAD_AMT7S, "CURR
tot_hab_no_imp_no_tri type PAD_AMT7S, "CURR
tot_hab_no_imp_tri type PAD_AMT7S, "CURR
waers type waers,
END OF ty_data.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
data gt_data type table of ty_data.
data gs_data type ty_data.
...
...
...
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table)
CHANGING t_table = gt_data ).
CATCH cx_salv_msg.
ENDTRY.
lr_columns = gr_table->get_columns( ).
perform set_moneda.
...
...
FORM set_moneda.
DATA lr_structdesc TYPE REF TO cl_abap_structdescr.
DATA: lt_campo TYPE cl_abap_structdescr=>component_table,
ls_campo TYPE abap_componentdescr.
DATA: lr_descr TYPE REF TO cl_abap_elemdescr,
lt_ddic_info TYPE dd_x031l_table,
lrs_ddic_info TYPE REF TO x031l.
DATA l_cname TYPE lvc_fname.
FIELD-SYMBOLS <fs_field> TYPE ANY.
lr_structdesc ?= cl_abap_typedescr=>describe_by_data( gs_data ).
lt_campo = lr_structdesc->get_components( ).
DO.
READ TABLE lt_campo INTO ls_campo INDEX sy-index.
IF sy-subrc = 0.
ASSIGN COMPONENT ls_campo-name OF STRUCTURE gs_data TO <fs_field>.
CASE ls_campo-type->type_kind. .
WHEN 'P'.
lr_descr ?= cl_abap_elemdescr=>describe_by_data( <fs_field> ).
lt_ddic_info = lr_descr->get_ddic_object( ).
READ TABLE lt_ddic_info INDEX 1 REFERENCE INTO lrs_ddic_info.
IF sy-subrc = 0.
IF lrs_ddic_info->dtyp = 'CURR'.
l_cname = ls_campo-name.
TRY.
lr_column = lr_columns->get_column( l_cname ).
lr_column->set_currency_column( 'WAERS' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
ENDIF.
ENDIF.
ENDCASE.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "set_moneda