REPORT z_sts_ucomm_alv.
*&---------------------------------------------------------------------*
" Dando continuação a como faze um ALV básico agora estarei passando como
" colocar botões e colocar ações neles, pra faze isso usaremos o StatusGui
" e o user command a maioria do código desde programa já foi passado menos
" os forms 'z_pf_status_001' e o 'z_user_command', portanto vão pra esses
" forms.
" Include contendo todas as declarações default.
"http://abapjuniores.blogspot.com/2011/07/include-zincldeclaradefault.html
INCLUDE z_incl_declara_default.
" Include contendo os forms da seleção de dados default.
"http://abapjuniores.blogspot.com/2011/07/include-zinclfeeddefault.html
INCLUDE z_incl_feed_default.
" Declarações ...
" type-pools ....
TYPE-POOLS : slis
.
" Tabelas internas ....
DATA : it_fieldcat TYPE slis_t_fieldcat_alv
.
" Estruturas ....
DATA : st_fieldcat TYPE slis_fieldcat_alv,
" Aqui está a estrutura que irá informar como deverá estar o layout.
st_layout TYPE slis_layout_alv
.
" Constantes...
DATA : c_x TYPE c VALUE 'X'.
" Start of selection .....
START-OF-SELECTION.
PERFORM : z_selecao, " Form do Include de seleção default.
z_all_alv
.
*&---------------------------------------------------------------------*
*& Form Z_ALL_ALV
*&---------------------------------------------------------------------*
FORM z_all_alv .
PERFORM : z_fieldcat, " Cria o fieldcat para o ALV
z_layout, " Cria o Layout do ALV.
z_alv " Cria o ALV
.
ENDFORM. " Z_ALL_ALV
*&---------------------------------------------------------------------*
*& Form Z_FIELDCAT
*&---------------------------------------------------------------------*
FORM z_fieldcat .
PERFORM z_feed_fieldcat USING :
"Fname Seltext check Edit Col_pos
'CHECK' 'Check' 'X' 'X' 0,
'MATNR' 'Material' ' ' ' ' 1,
'ERSDA' 'Data de criação' ' ' ' ' 2,
'MAKTX' 'Descrição' ' ' ' ' 3,
'WERKS' 'Centro' ' ' ' ' 4,
'LGORT' 'Depósito' ' ' ' ' 5,
'PSTAT' 'Status de atualização' ' ' ' ' 6
.
ENDFORM. " Z_FIELDCAT
*&---------------------------------------------------------------------*
*& Form Z_FEED_FIELDCAT
*&---------------------------------------------------------------------*
FORM z_feed_fieldcat USING fname
seltext
check
edit
col_pos .
st_fieldcat-fieldname = fname.
st_fieldcat-seltext_m = seltext.
st_fieldcat-checkbox = check.
st_fieldcat-edit = edit.
st_fieldcat-col_pos = col_pos.
APPEND st_fieldcat TO it_fieldcat.
CLEAR st_fieldcat.
ENDFORM. " Z_FEED_FIELDCAT
*&---------------------------------------------------------------------*
*& Form Z_LAYOUT
*&---------------------------------------------------------------------*
FORM z_layout .
" mexe no tamanho da coluna conforme a qtde de caracter da Informação.
st_layout-colwidth_optimize = c_x.
" huahuahuahua, simples,,... deixa zebrado.
st_layout-zebra = c_x.
ENDFORM. " Z_LAYOUT
*&---------------------------------------------------------------------*
*& Form z_pf_status_001
*&---------------------------------------------------------------------*
" Aki começa o eskema primeiramente vc deve faze um status gui...
" se naum lembra entre no link abaixo...
" http://abapjuniores.blogspot.com/2011/07/fazendo-um-statusgui.html
" agora que lembrou faça e 'seta' ele num form que pode ser qualquer
" nome mas por favor use um padrão rsrs.
" Vc deve declarar esta tabela 'pf_tab' pois internamente para executar
" este form o standard pedirá uma tabela como importação.
FORM z_pf_status_001 USING pf_tab TYPE slis_t_extab.
" 'Setando' o status gui com um form.
SET PF-STATUS 'Z_STS_001'.
" Estamos setando pq esse form será usado como parametro dentro do ALV
" e a Function para criar o ALV não consegue ver um status gui mas
" consegue ver um form.
ENDFORM. "z_pf_status_001
*&---------------------------------------------------------------------*
*& Form z_user_command
*&---------------------------------------------------------------------*
" Esse form pedi uma variavel 'r_ucomm' para informar qual botão foi
" apertado e a estrutura 'rs_selfield' que retorna informações da tela,
" neste form estaremos somente tomando ação quando o botão Execute for
" apertado, com essa logica vc conseguirá criar botões e colocar a ação
" que quiser conforme a necessidade.
FORM z_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&EXEC'.
" Caso o variavel retorne o botão '&exec' faça ...
MESSAGE 'Botão execute foi pressionado.' TYPE 'I'.
ENDCASE.
ENDFORM. "z_user_command
*&---------------------------------------------------------------------*
*& Form Z_ALV
*&---------------------------------------------------------------------*
FORM z_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
" Declare o form e não o status gui.
i_callback_pf_status_set = 'Z_PF_STATUS_001'
i_callback_user_command = 'Z_USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = st_layout
it_fieldcat = it_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = c_x
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_outtab
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " Z_ALV