segunda-feira, 4 de maio de 2015

Customizando botões no ALV - REUSE_ALV_GRID_DISPLAY

Para remover ou adicionar botões específicos no ALV, uma opção é copiar o PF-STATUS de um Grupo de Função Standard para seu programa e incluir ou remover os botões desejados.

Para pegar um PF-STATUS como exemplo, da para copiar o PF-STATUS "STANDARD" do Grupo de Funções SALV.

Depois de copiado e feito as alterações, é necessário alterar a chamada do seu ALV para que o programa chame o seu PF-STATUS customizado.

Abaixo o exemplo de código:

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = l_repid
      is_layout                = lw_layout
      it_fieldcat              = tg_fieldcat
      i_callback_pf_status_set = 'F_PF_STATUS_DET'
      i_callback_user_command  = 'ALV_USER_COMMAND'
      i_save                   = 'A'
      it_sort                  = lt_sort
      is_variant               = lw_variant
    TABLES
      t_outtab                 = tg_saida
    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.

No parâmetro i_callback_pf_status_set você passa o nome do FORM em que irá setar o PF-STATUS customizado, conforme exemplo abaixo:

FORM f_pf_status_det USING ft_extab TYPE slis_t_extab.

  SET PF-STATUS 'STANDARD_DET' EXCLUDING ft_extab.

ENDFORM.                    " F_PF_STATUS

Fazendo isso o ALV irá apresentar o PF-STATUS alterado por você.

Um outro ponto que deve ser considerado fazendo está alteração é o tratamento do user command que deve ser alterado também caso tenha adicionado um novo botão. Para isso existe o parâmetro i_callback_user_command, no qual você deve passar o FORM em que será tratado a ação que o programa deverá tomar apos o seu novo botão ser clicado.

FORM alv_user_command USING f_ucomm LIKE sy-ucomm           "#EC CALLED
                          fw_selfield TYPE slis_selfield.   "#EC NEEDED

  CASE f_ucomm.
    WHEN 'BOTAO1'.
      PERFORM form1.

    WHEN 'BOTAO2'.
      PERFORM form2.

    WHEN 'BOTAO3'.
      PERFORM form3.

  ENDCASE.

ENDFORM.                    " F_USER_COMMAND

Nenhum comentário:

Postar um comentário