REPORT zreuse_alv_popup_to_select.
*--------------------------------------------------------------------*
* Fala pessoal, hoje irei mostrar algo que facilita muito escolhas de
* registro em massa em um ALV, para fazer isso usarei a função
* 'REUSE_ALV_POPUP_TO_SELECT' que irá exibir todas as opções de seleção
* em massa.
* Estarei trabalhando com um exemplo simples que trará todos os objetos
* criados pelo usuário que executar o programa.
* A lista de opções de seleção de linhas do ALV será criada baseada nos
* tipos de objetos ( TADIR-OBJECT ).
* Espero que gostem desse metodo que ajudará muito na seleção de linhas
* do ALV, onde além de fazer linha por linha, será feito conforme range
* definido no PopUP.
* Segue no final do código os prints do processo.
* Valeo.
* Tipos.
TYPES :
BEGIN OF ty_tadir,
selected.
INCLUDE TYPE tadir.
TYPES :
END OF ty_tadir.
TYPES :
BEGIN OF ty_popup,
select,
text(50),
END OF ty_popup.
* Tabela global.
DATA :
gt_popup TYPE TABLE OF ty_popup.
* Variaveis referente ao ALVV
DATA :
* Objetos
o_docking TYPE REF TO cl_gui_docking_container,
o_grid TYPE REF TO cl_gui_alv_grid,
* Tabelas internas
gt_tadir TYPE TABLE OF ty_tadir,
gt_fieldcat TYPE TABLE OF lvc_s_fcat,
gt_exclude TYPE TABLE OF ui_func,
* Estruturas
gs_layout TYPE lvc_s_layo.
* Ranges
DATA :
r_object TYPE RANGE OF char20.
* Inicio do processo.
START-OF-SELECTION.
* Quando criarem a tela do ALV ( 9001 ) coloquem o código abaixo na tela.
*--------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
* MODULE :
* status_9001,
* inicialization_9001.
*
*PROCESS AFTER INPUT.
* MODULE :
* user_command_9001.
*--------------------------------------------------------------------*
* Tela ALV principal.
CALL SCREEN 9001.
*&---------------------------------------------------------------------*
*& Form POPUP_COM_MULTIPLA_ESCOLHA
*&---------------------------------------------------------------------*
FORM popup_com_multipla_escolha .
DATA :
ls_popup LIKE LINE OF gt_popup,
lt_fcat_popup TYPE TABLE OF slis_fieldcat_alv,
ls_fcat_popup LIKE LINE OF lt_fcat_popup,
lt_excl TYPE slis_t_extab,
ls_excl TYPE slis_extab,
ls_object LIKE LINE OF r_object.
* Catalogo de campos do PopUp de opções.
ls_fcat_popup-tabname = 'LT_POPUP'.
ls_fcat_popup-col_pos = '1'.
ls_fcat_popup-fieldname = 'SELECT'.
ls_fcat_popup-seltext_m = 'SELECT'.
APPEND ls_fcat_popup TO lt_fcat_popup.
ls_fcat_popup-col_pos = '2'.
ls_fcat_popup-fieldname = 'TEXT'.
ls_fcat_popup-seltext_m = 'Status'.
ls_fcat_popup-outputlen = 50.
APPEND ls_fcat_popup TO lt_fcat_popup.
* Exclusão dos botões padrões do ALV.
ls_excl-fcode = '&ETA'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '%SC+'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OUP'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ODN'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ILT'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&OL0'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRB'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRR'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&CRE'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&ALL'. APPEND ls_excl TO lt_excl.
ls_excl-fcode = '&SAL'. APPEND ls_excl TO lt_excl.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'Tipos de Objetos'
i_zebra = abap_true
i_screen_start_column = 1
i_screen_start_line = 1
i_checkbox_fieldname = 'SELECT'
i_tabname = 'LT_POPUP'
it_fieldcat = lt_fcat_popup
it_excluding = lt_excl
TABLES
t_outtab = gt_popup
EXCEPTIONS
program_error = 1
OTHERS = 2.
FREE r_object.
IF gt_popup[] IS NOT INITIAL.
LOOP AT gt_popup INTO ls_popup.
IF ls_popup-select = abap_true..
ls_object-sign = 'I'.
ls_object-option = 'EQ'.
ls_object-low = ls_popup-text.
APPEND ls_object TO r_object.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.