segunda-feira, 1 de agosto de 2011

ALV - 'Status gui' e 'user command'

  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
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário