"
Apoiado por

ALV com múltipla escolha num ecrã de diálogo modal

pipocas

Sabes apresentar, numa janela de diálogo, uma ALV com uma lista de registos permitindo escolha múltipla? Eu não sabia e agora já sei. Vou explicar como é.

Faz de conta que queres escolher uns clientes:


DATA: t_kna1 TYPE STANDARD TABLE OF kna1.

SELECT * FROM kna1 INTO TABLE t_kna1.

Pronto, agora já enchemos à bruta uma tabela interna com os clientes todos. O próximo passo é criar o catálogo de campos:


  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        lt_fieldcat TYPE slis_t_fieldcat_alv.

  CLEAR ls_fieldcat.
  ls_fieldcat-row_pos   = '1'.
  ls_fieldcat-tabname   = 'T_KNA1'.

  ls_fieldcat-col_pos   = '1'.
  ls_fieldcat-fieldname = 'CHECKBOX'.
  ls_fieldcat-seltext_m = 'SELECT'.
  APPEND ls_fieldcat TO lt_fieldcat.

  ls_fieldcat-col_pos   = '2'.
  ls_fieldcat-fieldname = 'KUNNR'.
  ls_fieldcat-seltext_m = 'Nº cliente'.
  ls_fieldcat-outputlen = 10.
  APPEND ls_fieldcat TO lt_fieldcat.

  ls_fieldcat-col_pos   = '3'.
  ls_fieldcat-fieldname = 'NAME1'.
  ls_fieldcat-seltext_m = 'Nome'.
  ls_fieldcat-outputlen = 35.
  APPEND ls_fieldcat TO lt_fieldcat.

Claro que o catálogo pode ser criado automaticamente recorrendo à FM REUSE_ALV_FIELDCATALOG_MERGE se for caso disso. Mas nota que, para poder fazer a selecção múltipla, terás de adicionar uma coluna chamada CHECKBOX (ou com o nome que bem entenderes).

A seguir vamos criar uma tabela com as funções a excluir da ALV (para que em vez de aparecerem todos os comandos apareçam apenas o OK e o CANCEL:


  DATA: lt_excl     TYPE slis_t_extab,
        ls_excl     TYPE slis_extab.

  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.

Depois chamamos a função mágica que faz aparecer o popup com a ALV:


  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_zebra              = 'X'
      it_fieldcat          = lt_fiedcat
      i_tabname            = 'T_KNA1'
      i_screen_start_column = 1
      i_screen_start_line   = 1
      i_screen_end_column   = 100
      i_screen_end_line     = 25
      i_checkbox_fieldname = 'CHECKBOX'
    TABLES
      t_outtab             = t_kna1.

Esta função mostra o popup que permite ao utilizador seleccionar um ou mais registos. Quando o utilizador carrega em OK ou CANCEL, o programa continua e podemos utilizar o campo CHECKBOX para determinar quais as linhas por ele seleccionadas:


  LOOP AT it_output INTO wa_output WHERE checkbox = 'X'.
"  Faz aqui o que te apeteceer
  ENDLOOP.

E já está.

Obrigado a Ayelie pela foto.

O Abapinho saúda-vos.

Partilha:
  • Facebook
  • del.icio.us
  • LinkedIn
  • Tumblr
  • Twitter
  • email
  • PDF
  • Print

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).