Visual – Table Control – Complex Screen Element – Abap

Publicado: 30 de março de 2014 em Abap

Table Controls

Controles de tabela são usados para exibir grandes quantidades de dados em tabelas. Como todos os elementos da tela, eles são definidos no Screen Painter. Dentro de um controle de tabela, você pode exibir campos de entrada / saída, botões de rádio, caixas de seleção, grupos de botões de rádio e botões comuns. Você pode ter até 255 colunas e cada coluna pode ter um título. A primeira linha é sempre a linha de cabeçalho.

Elementos Complexos

A Sap classifica o Table Control como um elemento complexo da coleção de componentes do Screen Painter, na verdade o Table Control se comparado a componentes equivalentes de outras linguagens de programação e não precisa ser tão moderna assim, diria que o Table Control é no mínimo confuso e incompleto e concordando plenamente com a afirmação da própria Sap, é muito complexo do ponto de vista de um componente, quando digo incompleto não é por falta de funcionalidades, digo incompleto pela necessidade de vários tipos de interações e de outros componentes ou código auxiliar para que seja funcional.

O Table Control pode ser usado para manipular dados de uma tabela do banco de dados ou dados inseridos em tempo de execução, caso o desenvolvedor precise de uma grade para expô-los. O ponto é que Table Control não sabe determinar sozinho de qual fonte os dados estão sendo fornecidos, nem mesmo se você atribui-lo a uma tabela diretamente do Screen Painter usando o botão para acesso ao dicionário de dados, o Table Control preenche os dados de estrutura da tabela dentro do componente mas não sabe como usa-los, isto o torna um dos componentes menos intuitivos do Screen Painter, confirmando esta afirmação pelo próprio componente possuir a opção de um Wizard para ser usado.

Deste modo o Table Control não possui um padrão  quanto a conectividade do banco de dados ele deve ser usado obrigatoriamente através de uma tabela interna, estando desconectado do set de dados, necessita de um componente externo para efetuar o controle de suas linhas de dados, o componente MARK, que possuir o tamanho de um caractere e precisa ser referenciado dentro do componente Table Control.

O Table Control exige varias linhas de comandos para manipular seus  dados e depois guarda-los definitivamente em uma tabela do banco de dados, ao contrario de outros componentes do Screen Painter como o Input/Output Field que se conectam diretamente ao set dados e não é preciso uma tabela interna para manipula-los. Apesar de não ser usual em Abap alterar os dados de componentes sem uma tabela interna, mas é totalmente possível:

O código abaixo mostra um comando Open SQL que executa o conceito de componentes atrelados a um Dataset:

INSERT INTO SPFLI VALUES SPFLI.

Este comando funciona com Input/Output Field conectado ao dicionário de dados, porque o componente esta ligado ao set de dados e cursor do banco dados sabe exatamente qual row o usuário esta manipulando, este comando seria equivalente em outras linguagens de programação à seguinte sintaxe:  SPFLI.POST.

Exemplo: https://desenvolvimentoaberto.wordpress.com/2014/03/16/visual-menu-painter-abap-development-workbench-abap/

Como podemos ver o Table Control não segue o padrão do componente Input/Output Field de como se conecta ao banco de dados, mas é um componente funcional e  que possui toda a magnitude da empresa SAP, quando se é gasto varias linhas de código para programa-lo.

Screen Painter.

Para usar um componente Table Control siga os seguintes passos:

  1. Crie um programa chamado Zcontrole.
  2. Crie uma tela para este programa com o numero de 100.
  3. No layout da tela coloque um Table Control e mude seu nome para TCTRL.
  4. Clique no botão do dicionário de dados e escolha a tabela FLIGHTS.
  5. Selecione todos os campos da tabela e clique em Ok.
  6. Solte os campo dentro do componente Table Control.

    tablecontrol

    Layout – Table Control

  7. Na aba Flow Logic digite o código abaixo.
  8. No programa Zcontrole digite o código abaixo referente ao programa.
  9. Por default no NetWeaver a tabela Flights não contem dados, use o programa Zvoos para inserir dados para teste.

    tablecontrol_programa

    Programa

Exemplo:

Neste exemplo usamos um Table Control apenas para ler os dados de uma tabela e usamos alguns recursos de Scrolling do componente, você pode criar um Menu para esta tela para as funcionalidades do programa.

Abap

Screen 100 – Flow Logic

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
   LOOP WITH CONTROL flights.
    MODULE fill_table_control.
  ENDLOOP.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  LOOP WITH CONTROL flights.
    MODULE read_table_control.
  ENDLOOP.
  MODULE user_command_0100.

Programa – ZControle

*&---------------------------------------------------------------------*
*& Report  ZCONTROLE
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Table Control
*&---------------------------------------------------------------------*

REPORT  ZCONTROLE.

* Controle precisa ser chamado antes da tabela
CONTROLS TCTRL TYPE TABLEVIEW USING SCREEN 100.

* Cria eventos
DATA:  ok_code TYPE sy-ucomm,
       clique_ok TYPE sy-ucomm.

* Cria tabela interna
DATA: itab TYPE TABLE OF flights,
      fill TYPE i.

* Cria tabela
TABLES flights.

* define linhas e limites do controle
DATA: lines TYPE i,
      limit TYPE i.

* Seleciona dados da tabela para a tabela interna
SELECT * FROM flights INTO CORRESPONDING FIELDS OF TABLE itab.

* chama a tela
CALL SCREEN 100.

MODULE status_0100 OUTPUT.

   "SET PF-STATUS 'SCREEN_100'.

   " Retorna quantidade de linha de uma tabela interna
   DESCRIBE TABLE itab LINES fill.
   tctrl-lines = fill.

 ENDMODULE.

MODULE fill_table_control OUTPUT.

   " Preenche a tabela
   READ TABLE itab INTO flights INDEX tctrl-current_line.

 ENDMODULE.

" Sai do programa
MODULE cancel INPUT.

     LEAVE PROGRAM.

 ENDMODULE.

MODULE read_table_control INPUT.

   lines = sy-loopc.
   MODIFY itab FROM flights INDEX tctrl-current_line.

 ENDMODULE.

MODULE user_command_0100 INPUT.

   clique_ok = ok_code.
   CLEAR ok_code.

   CASE clique_ok.

     WHEN 'NEXT_LINE'.
       tctrl-top_line = tctrl-top_line + 1.
       limit = fill - lines + 1.
       IF tctrl-top_line > limit.
          tctrl-top_line = limit.
       ENDIF.

    WHEN 'PREV_LINE'.
      tctrl-top_line = tctrl-top_line - 1.
       IF tctrl-top_line < 0.
         tctrl-top_line = 0.
       ENDIF.

    WHEN 'NEXT_PAGE'.
      tctrl-top_line = tctrl-top_line + lines.
      limit = fill - lines + 1.
       IF tctrl-top_line > limit.
        tctrl-top_line = limit.
      ENDIF.

    WHEN 'PREV_PAGE'.
      tctrl-top_line = tctrl-top_line - lines.
      IF tctrl-top_line < 0.
         tctrl-top_line = 0.
       ENDIF.

    WHEN 'LAST_PAGE'.
      tctrl-top_line =  fill - lines + 1.

    WHEN 'FIRST_PAGE'.
      tctrl-top_line = 0.

   ENDCASE.

ENDMODULE.

Programa – Zvoos

*&---------------------------------------------------------------------*
*& Report  ZVOOS
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Insere Voos - tabela flights
*&---------------------------------------------------------------------*

REPORT  ZVOOS.

TABLES FLIGHTS.

DATA MATRIZ  TYPE FLIGHTS.

DELETE FROM FLIGHTS.

MATRIZ-ID = 00001.
MATRIZ-DAT ='20140330'.
MATRIZ-PILOT = 'MARIO BRIGADEIRO'.
MATRIZ-COPILOT = 'RONALDO ARANTES'.
MATRIZ-ATTEND1 = 'LUANA ALMEIDA'.
MATRIZ-ATTEND2 = 'LIVIA STEIN'.
MATRIZ-ATTEND3 = 'CAMILLA ARRANTES'.
MATRIZ-ATTEND4 = 'PATRICIA CARVALHO'.

INSERT INTO FLIGHTS VALUES MATRIZ.

MATRIZ-ID = 00002.
MATRIZ-DAT ='20140330'.
MATRIZ-PILOT = 'ARMANDO RODRIGUES'.
MATRIZ-COPILOT = 'CESAR MAURO'.
MATRIZ-ATTEND1 = 'PRICILA MOUTA'.
MATRIZ-ATTEND2 = 'ROBERTA HELENA'.
MATRIZ-ATTEND3 = 'PAULA NUNES'.
MATRIZ-ATTEND4 = 'MARIA OLIVEIRA'.

INSERT INTO FLIGHTS VALUES MATRIZ.

MATRIZ-ID = 00003.
MATRIZ-DAT ='20140330'.
MATRIZ-PILOT = 'PAULO RICARDO'.
MATRIZ-COPILOT = 'PEDRO PAULO'.
MATRIZ-ATTEND1 = 'MARA MOTA'.
MATRIZ-ATTEND2 = 'OLIVIA SANTOS'.
MATRIZ-ATTEND3 = 'CARLA PEREIRA'.
MATRIZ-ATTEND4 = 'SABRINA LAURA'.

INSERT INTO FLIGHTS VALUES MATRIZ.

WRITE : / 'Dados gravados com sucesso.'.

 

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s