Escolar Documentos
Profissional Documentos
Cultura Documentos
Module Pool.................................................................................................................................5
Programa de diálogo....................................................................................................................5
Estrutura de um programa de diálogo.....................................................................................6
Transferência de campos de dados..........................................................................................7
Atributos de campo..................................................................................................................7
Erro de diálogo.........................................................................................................................7
Consistência de dados..............................................................................................................8
Transação de exemplo.............................................................................................................8
Dynpro....................................................................................................................................10
Característica da tela..............................................................................................................11
Tipo de tela.........................................................................................................................11
Configurações.....................................................................................................................13
Outros atributos.................................................................................................................15
Lista de Elementos.................................................................................................................16
Screen Painter........................................................................................................................17
Palheta de Elementos.........................................................................................................18
Campos de tela.......................................................................................................................24
Lógica de Processamento.......................................................................................................26
Processamento de telas.........................................................................................................28
Ações do usuário na tela........................................................................................................28
Preenchimento de campos de entrada..............................................................................28
Disparando o evento PAI....................................................................................................28
Processamento de campos de entrada/saída.....................................................................29
Campos de programas locais..............................................................................................30
Campos de tela com referência ao Dicionário....................................................................31
Botões na tela....................................................................................................................35
Campo de seleção e botões de radio com código de função..............................................38
Status GUI..............................................................................................................................40
Teclas de função e código de função especiais..................................................................41
Teclas de funções reservadas.............................................................................................41
Teclas de função para a barra de ferramentas padrão.......................................................42
A tecla ENTER.....................................................................................................................42
Definindo o Status GUI.......................................................................................................42
Chamar módulos de diálogo ABAP.........................................................................................45
Chamadas de módulos simples..........................................................................................45
Ajuda de pesquisa..............................................................................................................48
Ajuda de pesquisa no módulo de diálogo...........................................................................48
Caixa de Listagem...............................................................................................................49
Alterar as propriedades da tela dinamicamente....................................................................56
Definindo os atributos dinamicamente..............................................................................56
A tabela SCREEN.................................................................................................................56
ACTIVE, INPUT, OUTPUT, e INVISIBLE.................................................................................57
REQUIRED...........................................................................................................................59
DISPLAY_3D........................................................................................................................59
VALUE_HELP.......................................................................................................................59
INTENSIFIED........................................................................................................................59
LENGTH..............................................................................................................................60
REQUEST............................................................................................................................60
Subtelas..................................................................................................................................64
Definindo a área de subtela na tela principal.....................................................................65
Criar a subtela....................................................................................................................65
Associar a subtela na área de subtela................................................................................66
Controle de Fichas..................................................................................................................70
Definindo a área do controle de fichas e os títulos das abas..............................................70
Atribuindo uma área de subtela a uma aba.......................................................................71
Table Control..........................................................................................................................77
Utilizando o comando LOOP...............................................................................................77
Transferência de valores entre a tela e o programa ABAP.................................................82
Criação do programa ZCADMAT.................................................................................................84
Criação das Includes...................................................................................................................86
Criação da tela 100.....................................................................................................................90
Adicionando elementos na tela 100.......................................................................................92
Criar campo texto – LFA1-LIFNR.........................................................................................94
Criar campo de entrada/saída – LFA1-LIFNR......................................................................95
Criar campo de entrada/saída – LFA1-NAME1...................................................................95
Criar Botão – PB_ABRIR_100..............................................................................................96
Finalização da tela 100...........................................................................................................96
Criação dos elementos da tela 100 no ABAP..........................................................................97
Criação do STATUS GUI para a tela 100..................................................................................97
Criação do TITLE GUI para a tela 100......................................................................................99
Codificação da Lógica de Processamento da tela 100..........................................................100
Codificação do evento PAI................................................................................................103
Criação das transações.........................................................................................................109
Criação da tela 200...................................................................................................................111
Definição do Status GUI........................................................................................................114
Criação do Status GUI.......................................................................................................114
Definição do Title GUI..........................................................................................................118
Associação do Status GUI e Title GUI na tela 200.................................................................118
Tratamento dos códigos de função no evento PAI – Tela 200..............................................119
Adicionando elementos na tela 200.....................................................................................120
Campos de entrada/saída e Campo texto........................................................................121
Controle de Fichas............................................................................................................121
Botão................................................................................................................................124
Criar os objetos correspondentes aos elementos da tela no ABAP......................................125
Codificação do Controle de Fichas na lógica de processamento e no ABAP.........................125
Criação das subtelas do Controle de Ficha...............................................................................129
Criação da subtela 210.........................................................................................................129
Adicionando elementos na subtela 210...............................................................................130
Finalização da tela 210.........................................................................................................131
Criação da subtela 220.........................................................................................................131
Adicionando elementos na subtela 220...............................................................................132
Finalização da tela 220.........................................................................................................133
Criação dos elementos das subtelas no ABAP......................................................................133
Criação da tela 300...................................................................................................................135
Definição do Status GUI........................................................................................................136
Criação dos Códigos de Função na barra de botões.........................................................137
Criação do TITLE GUI para a tela 300....................................................................................138
Associação do Status GUI e Title GUI na tela 300.................................................................139
Tratamento dos códigos de função no evento PAI – Tela 300..............................................139
TABLE CONTROL de materiais..............................................................................................140
Preparação para a criação do Table Control.....................................................................140
Criação da table control...................................................................................................141
Declaração da table control no ABAP (Include TOP)........................................................146
Codificação da lógica de processamento da tela 300.......................................................146
Criação dos botões de funcionalidades da Table Control.....................................................148
Tratamento dos códigos de função da Table Control – Tela 300..........................................149
Validação dos campos da table control................................................................................151
Validação do campo TI_MATERIAL-MATNR.....................................................................153
Validação do campo TI_MATERIAL-MTART......................................................................154
Validação do campo TI_MATERIAL-MBRSH......................................................................155
Validação do campo TI_MATERIAL-MEINS.......................................................................156
Alterar os atributos dos elementos de tela em tempo de execução........................................157
Alteração dos atributos dos elementos da subtela 210.......................................................159
Alteração dos atributos dos elementos da subtela 220.......................................................160
Alteração dos atributos dos elementos da tela 300.............................................................162
Salvar os dados de materiais do fornecedor............................................................................164
Module Pool
Programa de diálogo
Em um programa de diálogo, o sistema apresenta uma tela na qual o usuário pode entrar ou
solicitar uma informação. Como uma reação a entrada ou solicitação do usuário, o programa
executa a ação apropriada: abre a próxima tela, apresenta os dados ou modifica uma tabela do
banco de dados.
Exemplo
5
Estrutura de um programa de diálogo
Module
100 Module
Continua na
tela 200 200
300 Module
Continua na
tela 300
Lógica de
Processamento Module
da tela
Dynpro
Module Pool
Telas (dynpros)
6
chamados no evento PAI, são utilizados para verificar os dados inseridos pelo usuário e
para ativar as medidas adequadas de diálogo, como a tarefa de atualização.
Todas as telas para serem carregadas de uma transação referem-se a um module pool em
comum. As telas de um module pool são numeradas. Por padrão, o sistema armazena para
cada tela, a tela seguinte a ser apresentada. Esta sequência de tela ou cadeia pode ser
linear, bem como cíclica. Dentro de uma cadeia de tela, uma outra cadeia de tela pode ser
chamada e depois de processá-la, retornar à cadeia original.
Atributos de campo
Para todos os campos de uma tela, os atributos de campo são definidos no Screen Painter.
Se o nome do campo na tela corresponde ao nome de um campo do dicionário ABAP, o
sistema automaticamente estabelece uma referência entre esses dois campos. Portanto,
uma grande quantidade de atributos de campos em uma tela é automaticamente copiada
do dicionário ABAP. Os atributos de campo, juntamente com o elemento de dados e
domínio do campo referenciado do dicionário ABAP, formam a base para as funções
padrão para a execução da tela em um diálogo (verificação automática de formato,
verificação de intervalo de valores automático, ajuda de pesquisa, etc).
Erro de diálogo
7
Consistência de dados
Transação de exemplo
8
9
Dynpro
Cada tela contém campos utilizados para apresentar a informação solicitada. Os campos
podem ser elemento de texto, campo de entrada e saída, botões de rádio, caixa de seleção
ou botão. A tela da transação TZ10, contém somente elemento de texto e campos de
entrada e saída.
Atributos
Característica Leiaute de campo Lógica do Processamento
Screen Painter
A criação e edição de todos os componentes de uma tela são realizadas no Screen Painter.
Para abrir o Screen Painter, é necessário criar uma nova tela no Object Browser ou dar um
duplo clique em uma tela existente. O Object Browser abre o Screen Painter. Lá, é possível
entrar a lógica de processamento da nova tela. Pressionando o botão correspondente, é
possível definir os atributos da tela, o qual é uma parte do editor ou é possível escolher o
botão Lista de elementos e alterar os atributos dos campos.
10
Característica da tela
Na opção
“Características” , é
possível definir o tipo de
tela, a tela seguinte a ser
carregada na seqüência,
o posicio-namento do
cursor e a área útil para
a aloca-ção dos objetos
na tela.
Tipo de tela
As telas podem ser Normal, Subtela ou Caixa de diálogo modal.
Tela Normal
A tela normal tem como característica ser apresentada ocupando toda a área
da tela do SAPlogon, possui título e barra de menu. A transação ao ser
chamada, sempre deverá apontar uma tela normal.
11
Subtela
A subtela faz parte de uma tela normal ou de outra subtela. A transação não
pode chamar uma subtela.
A subtela não pode possuir título ou barra de menu, pois os mesmos serão
herdados da tela normal, a qual a subtela está inserida.
A vantagem da utilização de subtelas é a reutilização das mesmas, ou seja, uma
subtela pode ser utilizada por várias subtelas.
12
A tela seleção de visões é uma caixa de diálogo modal, e a tela normal que fica em segundo
plano permanece inativa enquanto a caixa de diálogo modal permanece ativa.
Configurações
Manter os dados
Se a opção não for ativada, as entradas de menu não têm efeito no tempo de
execução da tela.
13
tenha uma área de subtela cuja altura é maior do que a da subtela
utilizada.
linhas onde existe pelo menos um campo invisível e nenhum visível são
"eliminadas", ou seja, as posições de linhas dos campos existentes
mais abaixo são reduzidas. Também os tamanhos de quadro são
reduzidos, caso necessário.
quadros que estão em branco ou que só têm campos invisíveis são
eliminados.
campos de entrada só são válidos como invisíveis se não estiverem
prontos para entrada (não ativos). Para isso são mantidos os campos
de palavra-chave.
se a altura (número de linhas) de uma subtela for inferior à da área de
subtela em que deve processada, então as linhas restantes são válidas
como comprimíveis.
durante a compressão, uma subtela é tratada como se os seus campos
estivessem diretamente na tela em cuja área de subtela deve ser
processada.
O atributo de tela para a compressão ainda não tem qualquer
significado para a subtela.
a compressão de um quadro é efetuada "orientada por objeto"; um
quadro e os campos aí contidos são examinados primeiro como tela
própria e comprimidos. Caso necessário, o quadro é reduzido e então é
feita uma tentativa de executar a "Eliminação" das linhas comprimidas
também para o ambiente do quadro.
Campos que não estivéssem junto a um quadro antes da compressão,
também não estão junto de um quadro depois da compressão.
Campos que estivéssem junto a um quadro antes da compressão,
também estão junto a este quadro depois da compressão, a não ser
que o quadro tenha sido comprimido fora destes campos.
um step loop variável não pode ser aumentado através da
compressão.
14
o a tela não pode ser gerada/ativada e, por isso, voltar a ser executada,
o o ramo "consistência de tela" não é executado para esta tela através da
verificação ampliada de programa (transações SLIN e TODO).
Este atributo foi pensado para telas longas, nas quais foi perdida a posição de
rolagem através de algumas ações.
Indica que a posição de rolagem da tela principal deve ser mantida, se a tela
for exibida várias vezes seguidas.
S/barra ferrams.aplicação
Outros atributos
Tela seguinte
Posição do cursor
Se o curso não deve ser posicionado no primeiro campo da tela pronto para
entrada, mas sim em outro campo, o nome desse campo tem de ser indicado.
Esta função também pode ser efetuada de forma dinâmica no pool de módulos
com o comando ABAP.
15
'SET CURSOR FIELD nome do campo'.
Grupo de telas
Os grupos de telas são atualizados na tabela TFAWT, que contém, por grupo de
telas de um programa (pool de módulos), um texto dependente do idioma,
que descreve o grupo de telas.
Lista de Elementos
16
Os elementos são adicionados e modificados através do screen-painter e a lista de elementos
mantém as características definidas pelo usuário.
17
Screen Painter
Uma tela pode conter uma grande variedade de elementos, seja para apresentar o conteúdo
de um campo, seja para permitir a interação do usuário com o programa. O Screen Painter é
utilizado para organizar os elementos na tela.
Para acessar o Screen Painter é necessário que no ABAP Workbench (SE80), a tela desejada
esteja aberta e o botão Layout seja clicado.
18
Ao abrir o screen painter, o programador tem a disposição a palheta de elementos (1), a barra
de elementos(2) e a janela de atributos(3).
1 2
Palheta de Elementos
Campo texto
Insere um campo de saída de texto, o qual é utilizado como título de um objeto como um
campo de entrada e saída.
19
Campo de entrada/saída
É um campo utilizado para a entrada de dados pelo usuário. Além de um campo de entrada,
ele pode ser utilizado como um campo de saída de valores. Como exemplo, o campo pode ser
utilizado como título de campo um campo de entrada e dependendo do tipo de valor do
campo de entrada, o campo de saída receberá o valor apropriado.
Campo de Entrada
Campo de seleção
Campo utilizado para o usuário escolher uma ou mais opção. Quando o campo estiver
marcado, o valor transferido à variável atribuída ao campo de seleção é ‘X’. O tipo de variável
associado ao campo de seleção é CHAR.
Botão de Rádio
O usuário só pode escolher uma opção e os campos devem ser agrupados para que somente
um valor seja selecionado.
O tipo de dado da variável atribuída ao campo é CHAR e o valor do campo marcado é 'X'.
20
Botão
O botão é um objeto para a execução de uma rotina. Para que o processador ABAP reconheça
que um botão foi pressionado, o botão tem uma propriedade chamada código de função.
Controle de Fichas
O botão de controle de fichas permite a inserção de abas na tela para que os campos fiquem
organizados de acordo com a necessidade do usuário.
O único objeto que pode ser inserido nas abas é o objeto área de subtela. Podem ser
adicionadas várias abas no controle de fichas. Cada aba é um botão, o qual assume as mesmas
características do botão (código de função), com a adição do campo de referência, que é o
nome técnico da área subtela a ser adicionada no controle de ficha.
O controle de fichas pode ser criado através de um assistente. De acordo com as opções
escolhidas pelo desenvolvedor, o sistema irá criar automaticamente as rotinas nos eventos PAI
e PBO.
21
Quadro
O quadro, ou moldura, é uma ferramenta para que o usuário possa organizar a tela agrupando
objetos tais como campos,
tabelas, controle de fichas e
botões.
O quadro “Cadastro de clientes” possui o campo “Nome” e os botões de rádio “Estado Civil”.
Área de Subtela
A área de subtela são áreas que são associadas à telas do tipo subtela. No screen painter, é
nada mais do que uma área, onde através de programação no programa de module pool, a
mesma será associada á uma tela do tipo subtela. A associação pode ser estática ou dinâmica,
ou seja, mais de uma subtela pode ser associada à área de subtela.
Table Control
O objeto table control é uma tabela que permite que os dados sejam apresentados e
manipulados como uma tabela.
22
Table Control (Wizard)
O objeto Table Control pode ser criado através de um assistente e de acordo com as opções
selecionadas pelo desenvolvedor, o sistema cria automaticamente as rotinas de execução da
table control no programa de module pool.
O objeto Custom Control é utilizado para vincular caixas de texto, tabelas ALV GRID, ALV TREE
ou outros objetos através de ABAP OO.
23
Ícone Status
Campo OK_CODE
Toda tela tem um campo de 20 caracteres chamado OK_CODE (também conhecido como
campo de código de função), o qual não é apresentado na tela. As ações do usuário que ativa o
evento PAI também insere o código de função correspon-dente nesse campo, de onde é
passado para o programa ABAP. Um nome deve ser associado ao campo OK_CODE para poder
ser utilizado por uma tela específica.
Todos os elementos de tela têm um conjunto de atributos, alguns os quais são definidos
automaticamente e outros que devem ser especificados no Screen Painter. Eles determinam
coisas como o leiaute dos elementos na tela. Os atributos dos elementos de tela podem ser
definidos no Screen Painter, seja para um simples elemento ou uma lista de elementos, o qual
lista todos os elementos pertencentes à tela atual. Alguns atributos que foram definidos
estaticamente no Screen Painter, podem ser sobregravados dinamicamente no programa
ABAP.
24
Campos de tela
Os campos de tela são campos da working memory de uma tela. Seu conteúdo é transferido
para os campos de nomes idênticos no programa ABAP no evento PAI e preenchido com os
valores de campos de nomes idênticos no evento PBO. Os campos de tela são associados com
os campos de entrada/saída na tela e com o campo OK_CODE. Os campos de entrada e saída
devem ter um nome único (Atributo de elemento Name). Isso fará com que o nome do campo
seja associado com o campo do programa ABAP (variável, por exemplo).
Os atributos técnicos tamanho e tipo de dados de um campo de tela são definidos pelos
atributos de elementos CompDef(1) e Formato(2).
1 2
Para o tipo de dados, uma das entradas do dicionário ABAP pode ser selecionada. Estas são
convertidas adequadamente quando os dados são transferidos entre a tela e o programa
ABAP. Ao definir a opção “Do Dict".”, o nome, tamanho e o tipo de dados são definidos
automaticamente. Caso contrário, esses atributos deverão ser definidos manualmente no
Screen Painter. O mais importante é a definição do campo OK_CODE para cada tela, de modo
que o campo de uma tela correspondente possa ser definida. Isso permite a utilização do
campo OK_CODE no programa ABAP.
Os elementos de exposição, tais como campos de texto ou quadros não estão ligados a
campos da tela, e não precisa de um nome de campo exclusivo.
Assim como os campos de tela definidos no Screen Painter, as telas também reconhecem os
mesmos campos das variáveis de ambiente do programa ABAP. Entretanto, em telas, os
campos de sistema são administrados na estrutura SYST e não na SY. Portanto, ele deve ser
utilizado na forma SYST-<nome>.
25
Exemplo de tela
DATA: text(10),
number TYPE i.
CALL SCREEN 100.
A tela 100, criada no Screen Painter, contém dois campos SPFLI-CARRID e SPFLI-CONNID do
dicionário ABAP, e dois campo TEXT e NUMBER, do programa ABAP. Ele também contém três
campos de textos e um quadro. A tela apresenta a seguinte forma:
As colunas da lista de elementos que são relevantes para os campos de tela são as seguintes:
A tela possui quatro campos de entrada/saída. Cada um desses campos está associado a um
campo no programa ABAP. Os tipos de dados e tamanho dos campos da tela são copiados do
dicionário ABAP ou do programa. No exemplo acima, o campo OK necessita de um nome – por
exemplo, OK_CODE – para associá-lo a uma variável do programa ABAP.
26
Lógica de Processamento
A lógica de processamento de uma tela contém a parte procedural de uma tela. Ele é criado no
editor de lógica de processamento, o qual é similar ao editor ABAP. A linguagem utilizada para
programar a lógica de processamento da tela tem a sintaxe similar do ABAP, mas não faz parte
do ABAP. Às vezes é definido como linguagem de tela.
PROCESS ON HELP-REQUEST.
...
PROCESS ON VALUE-REQUEST.
...
27
Como no ABAP, o evento de bloco é iniciado pelo comando correspondente e é concluído
quando o próximo bloco é iniciado ou quando o programa é finalizado. Os dois primeiro
comandos são criados automaticamente pelo Screen Painter, quando a tela é criada. Os
eventos correspondentes são ativados pelo ambiente de execução:
PROCESS AFTER INPUT (PAI) é ativado quando o usuário seleciona uma função na
tela (clique em um botão, teclar ENTER). O processamento do PAI da tela pode ser
programado nesse bloco. Ao final do processamento do PAI, o sistema chama a
próxima tela ou a partir do ponto em que a tela foi chamada.
Como nos eventos, os eventos de bloco só podem ser programados para o evento no qual a
lógica de processamento irá reagir. Entretanto, a lógica de processamento da tela deve conter
no mínimo os dois comandos PROCESS BEFORE OUTPUT e PROCESS AFTER INPUT, na ordem.
28
CALL Chama uma subtela
CHAIN Inicia o processamento chain.
ENDCHAIN Finaliza o processamento chain.
ENDLOOP Finaliza o processamento em LOOP
Processamento de telas
Existem dois métodos de chamar uma tela. É utilizar uma transação ou o comando CALL
SCREEN no programa ABAP. Ao chamar a tela, o evento PROCESS BEFORE OUTPUT (PBO) é
chamado, e o evento de bloco correspondente é processado. A tela é apresentada ao usuário
até que o mesmo ative o evento PROCESS AFTER INPUT (PAI) ao escolher uma função. Nesse
meio tempo, pode haver o processamento de ajuda de pesquisa(F4) ou ajuda(F1). O evento de
bloco correspondente é processado, se existir. O propósito principal dos evento de bloco na
lógica de processamento da tela é chamar o módulos no programa ABAP e fornecer dados ao
programa ABAP.
O usuário pode inserir valores em qualquer campo de entrada disponível na tela, ou alterar o
valor com o mouse no caso de botão de rádio e campo de seleção. Inserir valor nos campos
normalmente não dispara o evento PAI. Exceções a isso são botões de rádio e campos de
seleção com código de função e campos de entrada com caixa de listagem.
29
Disparando o evento PAI
Há uma série de ações que concluem a interação do usuário com a tela no SAPgui e transfere o
controle de volta para o ambiente de execução no servidor de aplicação, onde o evento PAI é
disparado.
As ações são:
Todas essas ações tem em comum que elas estão associadas com código de função (function
code).
Campos de entrada/saída podem ser campos convencionais no qual o usuário pode inserir os
valores utilizando o teclado ou selecionado através de uma caixa de listagem, ou caixa de
seleção ou botão de rádio, onde o mouse é requerido. Todos os campos de entrada/saída têm
um nome associando-os aos campos da tela. O tipo de dados dos campos da tela determina o
formato de entrada. Por exemplo, não é possível inserir uma letra num campo numérico. A
tela reconhece quando o usuário tenta inserir valores inválidos. Campos de seleção e botões
de rádio tem o tipo de dados CHAR e tamanho 1. A opção selecionada terá o valor ‘X’ e quando
desmarcado o valor será SPACE.
30
O programa ABAP deve conter objetos de dados com o mesmo nome correspondente ao
campo da tela, senão o dado poderá perder-se. Os campos ABAP para campos de seleção e
botão de rádio devem ser do tipo C e tamanho 1.
Depois que o evento PBO foi processado, os campos das telas são preenchidos com os valores
dos campos ABAP. Antes ou durante o evento PAI, os valores dos campos da tela são escritos
nos campos ABAP. O botão de rádio só pode ter um valor selecionado dentro de um grupo de
botões de rádio. Se mais de um campo de botão de rádio possuir o valor ‘X’, o programa é
finalizado com erro.
31
Campos de programas locais
Para a utilização de campos de entrada/saída no programa local, o campo deve ser criado no
programa ABAP, o programa ser ativado e então copiar os campos do programa para a tela.
Deve-se evitar alterar o nome ou a característica dos campos no programa ABAP, para que não
perca a associação com os campos da tela.
32
Campos de tela com referência ao Dicionário
Os nomes dos campos devem ser nomeados de forma idêntica à work área no programa ABAP
utilizando o comando TABLES. A declaração do campo de tela a uma work área de mesmo
nome, mas declarado com o comando TYPES é insuficiente para os dados serem transferidos
entre a tela e o programa ABAP.
Para evitar os conflitos de nomes entre campos de tela, work áreas nos programas e tabelas
transparentes, é aconselhável criar uma estrutura no dicionário ABAP para as telas, contendo
os campos de entrada/saída que forem utilizadas para uma ou mais telas do programa. As
work áreas que são declaradas com o comando TABLES no programa ABAP funcionam
exclusivamente como uma interface entre o programa e a tela.
Exemplo:
33
Na criação da tela, a tela seguinte definida
na tela 0100 é ela mesma.
34
O atributo de edição de alguns campos foi desmarcado no Screen Painter.
O usuário pode entrar com os valores para o campo “Companhia Aérea” e “Número do Vôo”.
O valor dos campos é verificado
automaticamente na tabela transparente
de acordo com a definição no dicionário
ABAP. As opções de ajuda (F1) e ajuda de
pesquisa (F4) também são herdadas do
dicionário ABAP.
As verificações nos campos são realizadas automaticamente antes que qualquer módulo seja
chamado no programa ABAP. Os usuários não podem inserir valores inexistentes no campo
“Companhia aérea”, caso ela não exista na tabela transparente SCARR. Da mesma forma o
campo “Número do vôo” não irá aceitar os valores que não estejam presentes na tabela
transparente SPFLI e o campo “Cancelar” só irá aceitar os valores X ou SPACE, devido aos
valores pré-definidos no domínio S_FLAG. Não há a necessidade de realizar a programação
dessas verificações no programa ABAP.
O módulo USER_COMMAND_0100 no
evento PAI no programa lê os dados do
banco de dados com os campos chaves
especificados (e verificados) na tela e
envia-os de volta para a tela no módulo
INIT_SCREEN_100 do evento PBO.
A work-area SYDN_CONN, definido com o
uso do comando TABLES, atua como uma
interface entre o programa e a tela. Enquanto isso, o dado proveniente do banco de dados é
processado na work-area WA_SPFLI. Se o usuário inserir o valor ‘X’ no campo “Cancelar” e
teclar “Enter”, o programa é finalizado.
35
O código no programa ABAP fica da seguinte forma:
36
Botões na tela
Botões são os únicos elementos da tela que disparam o evento PAI quando o usuário os
selecionam. Nos atributos do botão é definido o código de função com até 20 posições.
Botões tem um texto – um texto que é definido de forma estática nos atributos – e também
pode possuir ícones. Se o atributo “Campo de saída” estiver marcado, o texto do botão pode
ser definido dinamicamente no programa ABAP. Para isso, é necessária a criação de um campo
no programa ABAP com o mesmo nome do botão e então atribuir o texto desejado para o
campo ABAP, antes da apresentação da tela. Os ícones também podem ser atribuídos
dinamicamente no texto do botão. A biblioteca de ícones está contida no programa include
<ICON>. Por exemplo, o ícone ICON_CANCEL ( ) tem o código @0W@.
Em cada evento PAI, o código de função, desde que não esteja vazio, é transferido ao campo
de sistema SYST-UCOMM (SY-UCOMM) e atribuído ao campo OK_CODE da tela. O código de
função é vazio se o atributo “código de função” não foi preenchido no Screen Painter. Antes de
utilizar o campo OK_CODE, é necessário atribuir um campo do programa ABAP a ele, no Screen
Painter.
Um dos meios de permitir os usuários a escolher a funções que disparam o evento PAI e enviar
os códigos de função para o programa é através do Status-GUI. A principal razão é o espaço – o
Status GUI pode conter mais funções do que poderia ser alocado na tela com os botões.
Exemplo:
Ao selecionar um dos quatro botões, o texto correspondente ao botão selecionado deverá ser
apresentado no campo de saída. Ao selecionar o botão “Cancelar” o programa será finalizado.
No programa ABAP, os
campos OK_CODE e
OUTPUT possuem os
mesmos nomes dos
campos da tela 100.
37
No Screen Painter são criados os botões e o campo de saída com o seguinte leiaute:
O campo de saída OUTPUT teve o atributo “Campo saída” definido como ativo no Screen
Painter.
Quando o usuário seleciona um botão, o evento PAI é disparado. O código de função do botão
é atribuído ao campo da tela OK_CODE, o qual é então atribuído ao campo do ABAP OK_CODE.
O módulo USER_COMMAND_0100 é então processado.
38
Primeiramente, o conteúdo do campo OK_CODE é copiado para a variável auxiliar SAVE_OK e
o OK_CODE é inicializado. Isto sempre deve ser feito, pois isso garante que o campo da tela
OK_CODE sempre será reinicializado antes do evento PBO e pode, portanto, sem querer conter
um valor incorreto.
39
Campo de seleção e botões de radio com código de função
Campos de seleção e botões de rádio sem um código de função agem como campos de
entrada/saída normais. Ao clicar nos objetos, o conteúdo dos campos são alterados, mas não
dispara o evento PAI.
Enquanto é possível atribuir um código de função para cada campo de seleção, só é possível
atribuir um código de função para todos os botões de rádio em um grupo. Ao atribuir um
código de função para um botão de rádio de um grupo, todos os botões do grupo recebem
automaticamente o código de função.
Exemplo:
40
No Screen Painter são criados os botões e o campo de saída com o seguinte leiaute:
Cada vez que um dos botões de rádio é selecionado, o evento PAI é disparado e o código de
função RADIO e o conteúdo dos campos da telas são transferidos para o programa ABAP. O
módulo USER_COMMAND_0100 preenche os campos FIELD1 até FIELD3 de acordo com o
botão de rádio selecionado. O conteúdos dos campos aparecem na próxima vez que a tela é
enviada.
O evento PAI também é disparado se o campo de seleção foi selecionado. Neste caso, o código
de função CANCEL é transferido para o programa ABAP e o módulo USER_COMMAND_0100
termina o programa imediatamente.
41
Status GUI
A função de um Status GUI é fornecer ao usuário uma gama de funções na tela. Cada função
está associada a um código de função, e quando o usuário escolhe uma função, o evento PAI é
disparado. Em cada evento PAI, o código de função, desde que não esteja vazio, é transferido
no campo de sistema SYST-UCOMM (SY-UCOMM) e atribuído ao campo da tela OK_CODE.
Todos os códigos de função em um programa ABAP, além daqueles apenas atribuído a botões
nas telas, são definidos e administrados no Menu Painter.
Quando você definir um código de função no Menu Painter, você atribui isso a uma entrada de
menu em uma barra de menu e, possivelmente, também a uma tecla de função livremente
atribuídos no teclado. Códigos de função que são atribuídas a uma tecla de função também
podem ser atribuídos a um ícone na barra de ferramentas padrão ou um botão na barra de
ferramentas. A Status GUI consiste de uma barra de menu, uma barra de botões, uma barra de
ferramentas e configuração de teclas de função.
42
Barra de aplicação Barra de menu
Barra de ferramentas
padrão
No Menu Painter, as funções que são atribuídas aos ícones na barra de ferramentas padrão
também devem ser atribuídas a códigos de funções particulares. Eles não podem ser
atribuídos livremente. Ao invés disso, o sistema automaticamente os atribui para o código de
função correspondente quando o desenvolvedor atribui o código de função a um ícone. Pelo
menos umas das funções Voltar (F3), Sair (Shift+F3) e Cancelar (F12) devem ser
ativados, pois deste modo o usuário pode sair da tela. A atribuição das teclas de função aos
botões da barra de ferramentas não é fixada.
43
Teclas de função para a barra de ferramentas padrão
As seguintes teclas de função estão fortemente associadas aos ícones da barra de ferramentas
padrão.
Tecla de Ícon
Função e Propósito
Ctrl+S Salvar
F3 Voltar
Shift+F3 Sair
Esc ou F12 Cancelar
Ctrl+P Imprimir
Ctrl+F Pesquisar
Ctrl+G Pesquisar Próximo
Ctrl+PageUp Primeira Página
PageUp Pagina Anterior
PageDn Próxima Página
Ctrl+PageDn Última Página
A tecla ENTER
A tecla ENTER pertence ao ícone na barra de ferramentas padrão, e está sempre ativo,
mesmo que nenhuma função esteja atribuída a ele no Status GUI. O evento PAI é sempre
disparado quando o usuário tecla ENTER. Os seguintes códigos de função podem transferidos
para o SY-UCOMM ou o campo OK_CODE.
Qualquer entrada no campo de comando quando o usuário tecla ENTER
Se não houver nenhuma entrada no campo de comando, qualquer código de função
atribuído à tecla ENTER no Menu Painter
Se o campo de comando não contém uma entrada e não há código de função atribuída
a tecla ENTER no Menu Painter, o código de função permanece vazio e portanto não é
transferido para o SY-UCOMM ou o campo OK_CODE
Para associar o Status GUI para uma tela, é necessário utilizar o seguinte comando ABAP:
SET PF-STATUS <stat> [OF PROGRAM <prog>] [EXCLUDING <f>|<itab>].
Este comando define a interface do usuário para todas as telas subseqüentes de uma
seqüência de telas até que a próxima seja definida com o uso de um novo comando SET PF-
STATUS. O Status GUI <stat> deve ser um componente do programa ABAP corrente, a menos
44
que seja utilizada a adição OF PROGRAM no comando SET PF-STATUS para utilizar o Status GUI
de outro programa <prog>.
Dentro do módulo
STATUS_0100, há o comando
para a chamada o Status GUI. No
exemplo ao lado, o comando SET
PF-STATUS irá carregar o Status
GUI chamado “STATUS_MAIN”,
que faz parte do programa
ABAP.
45
A adição EXCLUDING permite a alteração da aparência e função de um status GUI
dinamicamente. É possível definir um Status GUI global e então desabilitar as funções que não
são necessárias utilizando a adição EXCLUDING. Especifique <f> para desabilitar o código de
função armazenado no campo <f>. Especifique <itab> e as linhas da tabela interna <itab> para
desabilitar os códigos de função armazenados na tabela interna <itab>. O campo <f> e as
linhas da tabela interna <itab> devem ser do tipo C e ter o tamanho de 20 posições.
Função “&EXPORTAR”
46
Chamar módulos de diálogo ABAP
Nos eventos PAI, POV e POH, o comando pode ser utilizado para chamar qualquer módulo no
programa ABAP, o qual foi definido utilizando
É tecnicamente possível ter dois módulos com o mesmo nome no mesmo programa, sendo um
definido com o INPUT e o outro com o OUTPUT, entretanto isso não é recomendado.
MODULE <mod>
O sistema inicial o módulo <mod>, o qual deve ter sido definido no mesmo evento de bloco no
qual a chamada ocorre.
Se na área de lógica de processamento o módulo é chamado, o transporte de dados entre o
programa ABAP e a tela é a seguinte:
No evento PAI, todos os dados da tela são transportados para o programa ABAP
(desde que haja campos de programa com o mesmo nome dos campos da tela) depois
da checagem automática de entrada e antes do primeiro módulo PAI é chamado. Isto
inclui o conteúdo dos campos de sistema (por exemplo, SY-UCOMM, o qual contém o
código de função corrente).
No final do último módulo PBO, e antes da tela ser apresentada, todos os dados são
transportados do programa ABAP para os campos de mesmo nome na tela.
47
Os dados são transportados entre a tela e o programa ABAP no início e final de cada dialog
step no servidor de aplicação. Não confunda isto com o transporte de dados entre uma tela no
servidor de aplicação e o SAPgui na estação de trabalho.
Exemplo:
PROGRAM demo_dynpro_module.
TABLES demo_conn.
DATA: ok_code TYPE sy-ucomm,
save_ok LIKE ok_code,
wa_spfli TYPE spfli.
CALL SCREEN 100.
MODULE init_screen_100 OUTPUT.
MOVE-CORRESPONDING wa_spfli TO demo_conn.
ENDMODULE.
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_100'.
SET TITLEBAR '100'.
ENDMODULE.
MODULE clear_ok_code INPUT.
save_ok = ok_code.
CLEAR ok_code.
ENDMODULE.
MODULE get_data INPUT.
MOVE-CORRESPONDING demo_conn TO wa_spfli.
CLEAR demo_conn.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE sy-dynnr.
WHEN 0100.
CASE save_ok.
WHEN 'CANCEL'.
48
LEAVE PROGRAM.
WHEN 'DISPLAY'.
PERFORM read_data.
WHEN 'CLEAR'.
CLEAR wa_spfli.
ENDCASE.
...
ENDCASE.
ENDMODULE.
FORM read_data.
SELECT SINGLE
cityfrom airpfrom cityto airpto fltime deptime arrtime
INTO CORRESPONDING FIELDS OF wa_spfli
FROM spfli
WHERE carrid = wa_spfli-carrid AND connid = wa_spfli-connid.
ENDFORM.
PROCESS BEFORE OUTPUT.
MODULE INIT_SCREEN_100.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE CLEAR_OK_CODE.
MODULE GET_DATA.
MODULE USER_COMMAND_0100.
No status GUI “STATUS_100”, o símbolo (F12) é ativado com o código de função CANCEL, e
as funções e são atribuídos às teclas de função F5 e Shift+F12, respectivamente.
49
Ajuda de pesquisa
A ajuda de pesquisa(F4) é uma função padrão do sistema e conseqüentemente não pode ser
atribuído outros códigos de função para a tecla de atalho F4.
Se o usuário teclar F4 ou o botão de ajuda de pesquisa ( ) à direita do campo de
entrada, uma lista de possíveis entradas são apresentadas para o campo em questão.
O usuário pode escolher um ou mais valores, o qual é copiado para o campo da tela.
Há dois modos de fazer com que a ajuda de pesquisa esteja disponível para o usuário. É
possível utilizar a ajuda de pesquisa contida no dicionário de dados ou programá-la módulo de
diálogo.
Os módulos de diálogos podem ser chamados no evento PBO utilizando o comando de evento
PROCESS ON VALUE_REQUEST.
PROCESS ON VALUE-REQUEST.
FIELD <f> MODULE <mod>.
Existem alguns módulos de funções que podem ser utilizados para auxiliar na programação da
ajuda de pesquisa no evento POV. Eles fornecem suporte a ajuda de pesquisa e são
responsáveis pelo transporte dos dados entre a tela e a ajuda de pesquisa. Eles possuem o
prefixo F4IF_. Os mais importantes são:
F4IF_FIELD_VALUE_REQUEST
Chama a ajuda de pesquisa do dicionário ABAP de forma dinâmica. Os nomes de
componentes de uma estrutura ou de uma tabela de banco de dados podem ser
transferidos do dicionário de dados para o módulo de função pelos parâmetros de
importação TABNAME e FIELDNAME. O módulo de função inicia a ajuda de pesquisa
do dicionário ABAP para este componente. Todos os campos relevantes da tela são
lidos. Se os parâmetros de importação DYNPPROG, DYNPNR e DYNPROFIELD, os
valores selecionados pelo usuário são retornados aos campos correspondentes na tela.
Se o parâmetro de tabela for especificado, o resultado é transferido para a tabela ao
invés da tela.
F4IF_INT_TABLE_VALUE_REQUEST
50
Esta função apresenta uma lista que foi criada no programa ABAP. A lista de valores é
transferida para o módulo de função no parâmetro de tabela VALUE_TAB. Se os
parâmetros de importação DYNPPROG, DYNPNR e DYNPROFIELD, os valores
selecionados pelo usuário são retornados aos campos correspondentes na tela. Se o
parâmetro de tabela for especificado, o resultado é transferido para a tabela ao invés
da tela.
Caixa de Listagem
Bem como a ajuda de pesquisa, no qual os valores aparecem em uma tela à parte, os campos
de entrada/saída podem ser definidas como caixa de listagem. A caixa de listagem fornece ao
usuário um conjunto de valores pré-definidos. Não é possível entrar com um valor numa caixa
de listagem, ao invés disso, o usuário deve selecionar um valor da listagem. Quando o usuário
escolhe um valor, o evento PAI pode ser disparado simultaneamente. Se a caixa de listagem é
utiliza em um campo, a ajuda de pesquisa não pode ser utilizada ao mesmo tempo.
Uma caixas de listagem é uma lista de valores contendo uma única coluna de texto de até 80
caracteres. Internamente, cada campo tem uma chave de até 40 caracteres. Quando o usuário
seleciona uma linha, o conteúdo do campo texto é inserido no campo de entrada da tela, e o
conteúdo da chave é inserido no campo da tela. Os conteúdos e tamanho dos campos de
entrada/saída e o campo da tela não são necessariamente os mesmos.
51
O código de função pode ser atribuído na caixa de listagem. Nesse caso, o
evento PAI é disparado imediatamente quando o usuário seleciona um
valor da listagem, e o código de função é inserido nos campos SY-UCOMM
e OK_CODE.
52
Exemplo:
REPORT demo_dynpro_dropdown_listbox.
TYPE-POOLS vrm.
DATA: name TYPE vrm_id,
list TYPE vrm_values,
value LIKE LINE OF list.
DATA: wa_spfli TYPE spfli,
ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
TABLES demof4help.
name = 'DEMOF4HELP-CONNID'.
CALL SCREEN 100.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE init_listbox OUTPUT.
CLEAR demof4help-connid.
SELECT connid cityfrom cityto deptime
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
WHERE carrid = demof4help-carrier2.
value-key = wa_spfli-connid.
WRITE wa_spfli-deptime TO value-text USING EDIT MASK '__:__:__'.
CONCATENATE value-text
wa_spfli-cityfrom
wa_spfli-cityto
INTO value-text SEPARATED BY space.
APPEND value TO list.
ENDSELECT.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = name
values = list.
ENDMODULE.
MODULE user_command_100.
53
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'CARRIER' AND NOT demof4help-carrier2 IS INITIAL.
LEAVE TO SCREEN 200.
ELSE.
SET SCREEN 100.
ENDIF.
ENDMODULE.
MODULE user_command_200.
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'SELECTED'.
MESSAGE i888(sabapdocu) WITH text-001 demof4help-carrier2
demof4help-connid.
ENDIF.
ENDMODULE.
54
O componente CARRIER2 da estrutura DEMOF4HELP do dicionário
ABAP é atribuído ao campo de entrada. O atributo da caixa de
listagem é definido como “L”, e tem o tamanho de saída de 15
posições.
55
A lógica de processamento da tela 100 tem o seguinte código:
PROCESS BEFORE OUTPUT.
PROCESS AFTER INPUT.
MODULE CANCEL AT EXIT-COMMAND.
MODULE USER_COMMAND_100.
A tela seguinte definida para a tela 200 é a tela 100 (definida estaticamente) e tem a forma
abaixo:
56
A lógica de processamento da tela 200 tem o seguinte código:
PROCESS BEFORE OUTPUT.
MODULE INIT_LISTBOX.
PROCESS AFTER INPUT.
MODULE CANCEL AT EXIT-COMMAND.
MODULE USER_COMMAND_200.
O usuário não pode entrar nenhum valor nos campos da tela. Quando o campo é selecionado
na tela 100, uma lista de valores aparece na caixa de listagem, compilado de ajuda de pesquisa
atribuído ao campo DEMO4HELP_CARRIER2. A ajuda de pesquisa é H_SCARR, a qual está
atribuída à tabela de verificação SCARR. A listagem contém os nomes das companhias aéreas.
Quando o usuário seleciona uma entrada, o campo de entrada é preenchido com o código da
companhia aérea e o evento PAI é disparado. O módulo USER_COMMAND_100 verifica o
campo OK_CODE e chama a tela 200.
No evento PBO da tela 200, a tabela interna LIST é preenchida com os valores da tabela
transparente SPFLI. O campo KEY é preenchido com os números do vôo, e as outras
informações relevantes são inseridas no campo TEXT. A tabela interna LIST é então, transferido
para o módulo de função VRM_SET_VALUES. Quando o usuário seleciona o campo de entrada
da tela 200, a coluna TEXT da tabela interna é apresentada na caixa de listagem. Quando o
usuário seleciona uma entrada, o campo da tela é preenchido com a entrada correspondente
do campo KEY, e o evento PAI é disparado. O módulo USER_COMMAND_200 verifica e
processa o campo OK_CODE.
57
Alterar as propriedades da tela dinamicamente
Cada campo na tela tem um conjunto de atributos que são fixados na definição da tela no
Screen Painter. Na execução do programa ABAP, um subconjunto dos atributos para cada
campo da tela pode ser endereçado utilizando a tabela de sistema chamada SCREEN.
A tabela SCREEN
SCREEN é como uma tabela interna com a linha de cabeçalho. Entretanto, não é necessário
declará-lo no programa. Ele não pode ser apresentado no Debugger, e não pode utilizar
nenhuma work área a não ser a linha de cabeçalho endereçado a ele. Ele tem a seguinte
estrutura.
Tamanh
Componente o Tipo Descrição Atributo
NAME 132 CHA Nome do campo da tela Nome
R
GROUP1 3 CHA Grupo de modificação 1 Grupo 1
R
GROUP2 3 CHA Grupo de modificação 2 Grupo 2
R
GROUP3 3 CHA Grupo de modificação 3 Grupo 3
R
GROUP4 3 CHA Grupo de modificação 4 Grupo 4
R
REQUIRED 1 CHA Campo de entrada é obrigatório Campo de entrada:
R Required
INPUT 1 CHA O campo está pronto para entrada Campo de entrada
R
OUTPUT 1 CHA O campo é somente de saída Campo de saída
R
INTENSIFIED 1 CHA O campo está destacado Visível
R
INVISIBLE 1 CHA O campo é invisível Invisível
R
LENGTH 1 RAW Tamanho do campo Compr.Vis.
ACTIVE 1 CHA O campo está ativo Campo de entrada/Campo
R de saíde/Invisível
DISPLAY_3D 1 CHA Caixa tridimensional Bidimensional
R
58
VALUE_HELP 1 CHA Apresenta o botão de ajuda de pesquisa Aj.p/pes
R
REQUEST 1 CHA Entrada existe --
R
VALUES_IN_COMB 1 CHA Caixa de listagem Dropdown
O R
COLOR 10 INT4 Definição de cor do campo --
A coluna “Atributo” contém os atributos correspondentes dos campos da tela no Screen
Painter.
59
As propriedades work area SCREEN podem ser modificadas no programa ABAP durante o
evento PBO da tela. O conteúdo da work area SCREEN irá sobre gravar os atributos estáticos
do campo da tela em uma simples chamada de tela. Os únicos comandos que podem ser
utilizados com a work area SCREEN são:
LOOP AT SCREEN.
...
MODIFY SCREEN.
...
ENDLOOP.
Há uma certa regra hierárquica entre os componentes ACTIVE, INPUT, OUTPUT e INVISIBLE.
Eles também tem diferentes efeitos dependendo de suas definições estáticas.
O componente ACTIVE não tem equivalente no atributo de elementos. Ao invés disso, ele
modifica os componentes INPUT, OUTPUT e INVISIBLE.
Existem oito possíveis combinações para os componentes ACTIVE, INPUT, OUTPUT e INVISIBLE,
que tem os seguintes efeitos nos campos de tela:
60
ACTIVE INPUT OUTPUT INVISIBL Efeito
E
1 1 1 0 O campo é apresentado, mesmo que o atributo Invisible esteja
definidos estaticamente.
O conteúdo do campo é apresentado.
Pronto para entrada, mesmo se Input não for definido
estaticamente. Entretanto, não está pronto para entrada se Só
campo de saída estiver definido estaticamente.
1 1 0 0 O campo da tela é apresentado, mesmo se Invisible é definido
estaticamente, exceto quando Só campo de saída é definido
estaticamente.
O conteúdo do campo não é apresentado.
Pronto para entrada, mesmo que Input esteja definido
estaticamente.
1 0 1 0 O campo da tela é apresentado, mesmo se Invisible é definido
estaticamente.
O conteúdo do campo é apresentado.
Não está pronto para entrada, mesmo se Input esteja definido
estaticamente.
1 0 0 0 O campo da tela é apresentado, mesmo se Invisible é definido
estaticamente, exceto quando Só campo de saída é definido
estaticamente.
O conteúdo do campo não é apresentado.
Não está pronto para entrada, mesmo se Input esteja definido
estaticamente.
1 1 1 1 O campo da tela é apresentado, mesmo se Invisible é definido
estaticamente, exceto quando Só campo de saída é definido
estaticamente.
O conteúdo do campo não é apresentado.
Pronto para entrada, mesmo se Input não estiver definido
estaticamente.
O valor inserido é mascarado com asterisco (*).
1 1 0 1 O campo da tela é apresentado, mesmo se Invisible é definido
estaticamente, exceto quando Só campo de saída é definido
estaticamente.
O valor de saída é mascarado com asterisco (*).
Pronto para entrada, mesmo se Input não estiver definido
estaticamente.
O valor inserido é mascarado com asterisco (*).
1 0 1 1 O campo está inativo.
O campo não é apresentado, independentemente dos
atributos estáticos.
0 0 0 1 O campo está inativo.
O campo não é apresentado, independentemente dos
atributos estáticos.
Mascarar a entrada de valores pode ser utilizado para entrar senha de usuário.
61
Se uma linha inteira se torna invisível quando os campos se tornam invisíveis, a tela
automaticamente torna-se menor. Este
atributo pode ser desligado nos atributos
estático de tela selecionando a opção
Desativar compact.tmp.exec..
REQUIRED
DISPLAY_3D
VALUE_HELP
INTENSIFIED
62
LENGTH
O tamanho do componente pode ser definido para um valor menor do que o valor
estaticamente definido (Compr.Vis.) para campos de entrada/saída e campos só de saída.
REQUEST
Ao definir REQUEST = 1 para um campo de entrada tem o mesmo efeito no evento PAI como
se o usuário tivesse mudado o conteúdo do campo. Isto significa que uma chamada de módulo
condicional utilizando ON REQUEST ou ON CHAIN-REQUEST deveria ser executado
independentemente se o usuário alterou o valor do campo. REQUEST é automaticamente
definido para 0.
Exemplo:
REPORT demo_dynpro_modify_screen .
INCLUDE demo_dynpro_modify_screen_sel.
DATA: field1(10) TYPE c, field2(10) TYPE c, field3(10) TYPE c,
field4(10) TYPE c, field5(10) TYPE c, field6(10) TYPE c.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: itab LIKE TABLE OF screen WITH HEADER LINE.
DATA length(2) TYPE c.
field1 = field2 = field3 = '0123456789'.
CALL SCREEN 100.
MODULE status_0100 OUTPUT.
CLEAR: itab, itab[].
SET PF-STATUS 'SCREEN_100'.
IF save_ok = 'MODIFY'.
itab-name = text-001.
APPEND itab.
LOOP AT SCREEN.
IF screen-group1 = 'MOD'.
MOVE-CORRESPONDING screen TO itab.
APPEND itab.
ENDIF.
ENDLOOP.
PERFORM change_input CHANGING:
act, inp, out, inv, req, int, d3d, hlp, rqs.
63
CALL SELECTION-SCREEN 1100 STARTING AT 37 5.
PERFORM change_input CHANGING:
act, inp, out, inv, req, int, d3d, hlp, rqs.
MESSAGE s888(SABAPDOCU) WITH act inp out inv.
CLEAR itab.
APPEND itab.
LOOP AT SCREEN.
IF screen-group1 = 'MOD'.
screen-active = act.
screen-input = inp.
screen-output = out.
screen-invisible = inv.
screen-required = req.
screen-intensified = int.
screen-display_3d = d3d.
screen-value_help = hlp.
screen-request = rqs.
screen-length = len.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR itab.
itab-name = text-002.
itab-active = act.
itab-input = inp.
itab-output = out.
itab-invisible = inv.
itab-required = req.
itab-intensified = int.
itab-display_3d = d3d.
itab-value_help = hlp.
itab-request = rqs.
itab-length = len.
APPEND itab.
CLEAR itab.
APPEND itab.
ENDIF.
ENDMODULE.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'MODIFY'.
LEAVE TO SCREEN 100.
WHEN 'LIST'.
CLEAR itab.
itab-name = text-003.
APPEND itab.
64
LOOP AT SCREEN.
IF screen-group1 = 'MOD'.
MOVE-CORRESPONDING screen TO itab.
APPEND itab.
ENDIF.
ENDLOOP.
CALL SCREEN 200 STARTING AT 37 5
ENDING AT 87 22.
ENDCASE.
ENDMODULE.
MODULE requested INPUT.
MESSAGE s888(sabapdocu) WITH text-004.
ENDMODULE.
MODULE status_0200 OUTPUT.
SET PF-STATUS 'SCREEN_200'.
SUPPRESS DIALOG.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
FORMAT COLOR COL_HEADING ON.
WRITE: 10 'ACT', 14 'INP', 18 'OUT', 22 'INV', 26 'REQ',
30 'INT', 34 'D3D', 38 'HLP', 42 'RQS', 46 'LEN'.
FORMAT COLOR COL_HEADING OFF.
ULINE.
LOOP AT itab.
IF itab-name = ' '.
ULINE.
ELSEIF itab-name = text-001 OR itab-name = text-003.
FORMAT COLOR COL_NORMAL ON.
ELSE.
FORMAT COLOR COL_NORMAL OFF.
ENDIF.
len = itab-length.
length = ' '.
IF len NE 0.
length = len.
ENDIF.
WRITE: /(8) itab-name,
11 itab-active,
15 itab-input,
19 itab-output,
23 itab-invisible,
27 itab-required,
31 itab-intensified,
35 itab-display_3d,
39 itab-value_help,
43 itab-request,
47 length.
ENDLOOP.
ENDMODULE.
FORM change_input CHANGING val TYPE any.
IF val = 'X'.
65
val = '1'.
ELSEIF val = ' '.
val = '0'.
ELSEIF val = '1'.
val = 'X'.
ELSEIF val = '0'.
val = ' '.
ENDIF.
ENDFORM.
66
Subtelas
As subtelas permitem que uma ou mais telas sejam embutidas em uma tela. O termo subtela
aplica-se para a tela embutida e a área na tela principal na qual ela é inserida. Esta seção
refere-se a áreas de subtelas. Quando uma subtela é utilizada, a lógica de processamento da
subtela também é embutida na lógica de processamento da tela principal.
As subtelas permitem expandir o conteúdo de uma tela em tempo de execução. Por exemplo,
screen exits, que faz parte do conceito de ampliação, utiliza a técnica de subtela. O controle de
ficha também o utiliza.
67
Definindo a área de subtela na tela principal
Criar a subtela
A subtela pode ser criada no mesmo programa ou num programa externo. Para criar uma
subtela, é necessário:
68
2. O campo “Tela Seguinte” deve ter o mesmo número da subtela criada
Para associar uma subtela a uma área de subtela deve-se utilizar o comando CALL SUBSCREEN
na lógica de processamento da tela principal.
Para incluir uma subtela na área de subtela da tela principal e chamar a sua lógica do fluxo do
PBO, o seguinte comando no evento PBO deve ser utilizado:
Este comando atribui a subtela <dynp> com a área de subtela chamada <area>. Também é
possível especificar o programa no qual a tela é definida (opcional). Se o programa não for
especificado explicitamente, o sistema procura a subtela no mesmo programa da tela
principal. Se a subtela não for encontrada, um erro de execução é apresentado. O fluxo do PBO
da subtela também está incluída no mesmo ponto.
O nome <area> da subtela deve ser definida diretamente sem aspas. Os nomes <prog> e
<dynp> podem ser literais ou variáveis. Se for utilizado variável, a mesma deve ser declarada
69
com o mesmo nome no programa ABAP. O número de tela deve ser do tipo CHAR de 4
posições.
Para chamar o evento PAI da subtela, o seguinte comando no evento PAI da tela principal deve
ser utilizado:
Este comando inclui o fluxo de evento PAI da subtela na área de subtela no evento PBO.
O comando CALL SUBSCREEN não pode ser utilizado dentro dos comandos CHAIN e ENDCHAIN
ou LOOP e ENDLOOP. Enquanto uma subtela estiver sendo processada, o campo de sistema
SY-DYNNR contém o número da subtela.
Os códigos de função das ações dos usuários na tela são sempre inseridos no campo OK-CODE
da tela principal, e transportado no programa no qual está definido. Os códigos de função a
serem utilizados na subtela deverão ser diferentes da tela principal.
Se, por motivos de encapsulamento, as subtelas forem definidas em outro programa ABAP, é
necessário garantir que todos os dados globais utilizados pela subtela deverão ser
transportados para o programa que a subtela reside, depois de ter chamado o fluxo de evento
PAI.
Exemplo:
REPORT demo_dynpro_subscreens.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: number1(4) TYPE n VALUE '0110',
number2(4) TYPE n VALUE '0130',
field(10) TYPE c, field1(10) TYPE c, field2(10) TYPE c.
CALL SCREEN 100.
MODULE status_100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
MODULE fill_0110 OUTPUT.
field = 'Eingabe 1'(001).
ENDMODULE.
MODULE fill_0120 OUTPUT.
field = field1.
70
ENDMODULE.
MODULE fill_0130 OUTPUT.
field = 'Eingabe 2'(002).
ENDMODULE.
MODULE fill_0140 OUTPUT.
field = field2.
ENDMODULE.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE save_ok INPUT.
save_ok = ok_code.
CLEAR ok_code.
ENDMODULE.
MODULE user_command_0110 INPUT.
IF save_ok = 'OK1'.
number1 = '0120'.
field1 = field.
CLEAR field.
ENDIF.
ENDMODULE.
MODULE user_command_0130 INPUT.
IF save_ok = 'OK2'.
number2 = '0140'.
field2 = field.
CLEAR field.
ENDIF.
ENDMODULE.
MODULE user_command_100 INPUT.
CASE save_ok.
WHEN 'SUB1'.
number1 = '0110'.
WHEN 'SUB2'.
number1 = '0120'.
CLEAR field1.
WHEN 'SUB3'.
number2 = '0130'.
WHEN 'SUB4'.
number2 = '0140'.
CLEAR field2.
ENDCASE.
ENDMODULE.
71
A tela seguinte para a tela 100 é ela mesmo. Ela possui o seguinte leiaute:
Há quatro botões com os códigos de função SUB1 a SUB4 e duas áreas de subtelas AREA1 e
AREA2.
No mesmo programa ABAP, há quatro subtelas 100 a 140. Cada uma delas se ajustam
exatamente à área de subtela.
Ao executar o programa, uma tela aberta onde as subtelas 110 e 130 são apresentadas. Os
botões da tela principal permitem a escolha entre duas subtelas para cada área de subtela. Os
botões das subtelas permitem transferir os dados das subtelas 110 e 130 para as subtelas 120
e 140.
72
Controle de Fichas
Um controle de fichas é um objeto de tela que possui duas ou mais abas. Cada aba possui um
título e uma área.
O controle de fichas permite a inserção de uma série de telas pertencentes a uma aplicação
em uma única tela e a navegação entre elas facilmente.
Do ponto de vista técnico, uma aba é uma subtela com um botão atribuído a ele, a qual é
apresentada como título da aba.
O controle de fichas é o conjunto de todas as abas e estão sujeitos as mesmas restrições das
subtelas. Em particular, não é possível alterar o status GUI quando as abas são ativas no
controle de fichas. Entretanto, eles são completamente integrados no ambiente de telas.
A área do controle de fichas e o título das abas são definidos no Screen Painter.
A área do controle de fichas tem um nome único e uma posição, largura e altura.
73
Quando a área do controle de fichas é
definida, ele já possui duas abas.
Paginação no SAPgui
Uma área de subtela é definida para cada aba, e os códigos de função das abas são definidas
com o tipo P (Local GUI Function). Na lógica de processamento, todas as subtelas são
chamadas no evento PBO. Isto significa que todas as abas residem localmente no SAPgui.
Quando o usuário seleciona uma aba, a paginação é ativado dentro do SAPgui. A este respeito,
o controle de fichas se comporta como uma simples tela. Em particular, o evento PAI não é
disparado quando o usuário seleciona uma aba e nenhum dado é transportado. Enquanto esse
método melhora o desempenho do controle de ficha, ele também tem o lado negativo que
quando o usuário dispara o evento PAI, todas as verificações de entrada para todas as subtelas
são executadas. Isto significa que quando o usuário estiver trabalhando em uma aba, a
verificação de entrada poderá pular para um campo mandatório em outra aba.
74
Paginação local no SAPgui é o mais apropriado para telas que apresentam os dados ao invés de
telas que permitem a edição dos dados.
Uma área de subtela é compartilhada por todas as abas e chamado no evento PBO. Os códigos
de função das abas são definidos sem um tipo especial função. Quando o usuário seleciona
uma aba, o evento PAI é disparado, e um módulo é incluído na lógica de processamento para
ativar a aba apropriada e atribui a subtela correta a área de subtela.
Desde o evento PAI é acionado cada vez que o usuário escolhe uma aba, este método é menos
econômico para o servidor de aplicação, mas as verificações de entrada que são executadas só
afetam a aba atual.
As áreas de subtela são criadas dentro das áreas das abas. As áreas de subtelas são atribuídas
para uma ou mais abas no Screen
Painter selecionando uma ou mais
abas.
Na lógica de processamento, tudo que deve ser feito é incluir a subtela correta. O fluxo de
telas e o transporte de dados para o programa ABAP são os mesmos das subtelas normais. Há
dois modos de programar a lógica de processamento:
Paginação no SAPgui
Na paginação pelo SAPgui, cada área de subtela deve ser atribuída a uma subtela:
75
PROCESS BEFORE OUTPUT.
...
CALL SUBSCREEN: <area1> INCLUDING [<prog1>] <dynp1>,
<area2> INCLUDING [<prog2>] <dynp2>,
<area3> INCLUDING [<prog3>] <dynp3>,
...
...
PROCESS AFTER INPUT.
...
CALL SUBSCREEN: <area1>,
<area2>,
<area3>,
Paginação no servidor de aplicação
Ao paginar no servidor de aplicação, só é necessário incluir uma subtela para cada uma das
áreas de subtela.
Antes de criar um controle de fichas no programa ABAP, é necessário criar um objeto controle
para cada controle de ficha na parte de declaração do programa ABAP utilizando o seguinte
comando:
Onde <ctrl> é o nome do controle de ficha na tela do programa ABAP. O controle permite que
o programa ABAP trabalhe com o controle de ficha. O comando declara uma estrutura com o
nome <ctrl>. O único componente que poderá ser utilizado no programa é o ACTIVETAB.
<ctrl>-ACTIVETAB = <fcode>.
76
Ao pagina no SAPgui, é necessário realizar esse procedimento antes da tela ser
apresentada ao usuário. Isto faz com que o controle de fichas seja reinicializado. A aba
padrão é a primeira aba. Depois disso, a aba ativada pelo usuário é definida no SAPgui.
Quando a paginação ocorre no SAPgui, é possível saber a última aba selecionada pelo
usuário. Se a paginação ocorrer no servidor de aplicação, a aba ativa é controlada pelo
programa ABAP.
Paginação no SAPgui
O evento PAI não é disparado quando o usuário seleciona uma aba, e o campo
OK_CODE não é preenchido. O campo OK_CODE só receberá um valor caso o usuário
clique em alguma ação do Status GUI ou quando um botão fora do controle de fichas
ou dentro forem selecionados.
Para paginas através das abas do controle de fichas, o código de função deve ser
atribuído ao componente ACTIVETAB do controle.
<ctrl>-ACTIVETAB = <ok_code>.
Exemplo:
REPORT demo_dynpro_tabstrip_local.
CONTROLS mytabstrip TYPE TABSTRIP.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
mytabstrip-activetab = 'PUSH2'.
CALL SCREEN 100.
77
MODULE status_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE user_command INPUT.
save_ok = ok_code.
CLEAR ok_code.
IF save_ok = 'OK'.
MESSAGE i888(sabapdocu) WITH 'MYTABSTRIP-ACTIVETAB ='
mytabstrip-activetab.
ENDIF.
ENDMODULE.
78
A tela contém uma área de controle de fichas chamada MYTABSTRIP
com três abas PUSH1, PUSH2, PUSH3. Os códigos de função
possuem o mesmo nome das abas e todas foram definidas com o
tipo P. Cada uma das áreas de subtela SUB1 a SUB3 estão associadas
a cada aba. O botão “Avançar” possui o nome BUTTON e o código
de função ‘OK’.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
CALL SUBSCREEN: SUB1 INCLUDING SY-REPID '0110',
SUB2 INCLUDING SY-REPID '0120',
SUB3 INCLUDING SY-REPID '0130'.
PROCESS AFTER INPUT.
MODULE CANCEL AT EXIT-COMMAND.
CALL SUBSCREEN: SUB1,
SUB2,
SUB3.
MODULE USER_COMMAND.
Quando o programa é executado, a tela aparece com a segunda aba ativa, desde que o
programa defina o componente ACTIVETAB da estrutura MYTABSTRIP para PUSH2 antes da
tela ser apresentada. O usuário poderá paginar através do controle de fichas sem o evento PAI
ser disparado.
Quando o usuário pressiona o botão “CONTINUE”, o evento PAI é disparado e uma mensagem
de informação apresenta o código de função da guia ativa.
79
Table Control
O ABAP fornece um mecanismo de visualizar e utilizar dados tabulares na tela. Este mecanismo
é o table control. Table control é um tipo de tabela que pode ser adicionado na tela através do
Screen Painter. Por exemplo, a tela abaixo contém uma table control.
O comando de tela LOOP... ENDLOOP permite a execução das operações de laço na lógica de
processamento da tela. Este comando pode ser utilizado para executar um loop na table
control. Entre o comando LOOP e ENDLOOP, os comandos FIELD, MODULE, SELECT, VALUES e
CHAIN podem ser utilizados. Na maioria dos casos, o comando MODULE é utilizado para
chamar um módulo ABAP.
O comando LOOP deve ser codificado nos eventos PBO e PAI para cada tabela na tela. Isso faz
com que o comando LOOP faz com que os valores dos campos da tela e do ABAP sejam
transferidos de um para o outro e vice-versa. Por esta razão, o comando LOOP...ENDLOOP
deve ser utilizado, mesmo que vazio.
80
81
LOOP AT <tabela interna>.
Este comando executa o loop através de uma tabela interna e o table control da tela de em
paralelo. Os campos da table control geralmente são, mas não é obrigatório, declarados como
campos de tabela interna.
Em particular, o comando LOOP AT, executa o loop através de um porção da tabela interna
que está atualmente visível na tela.
Esta forma do comando LOOP AT, realiza o loop através da tabela interna, executando <ações>
para cada linha. Para cada linha da tabela interna, o sistema transfere os campos relevantes do
programa para ou da linha correspondente da table control.
82
Há duas coisas importantes para serem notadas neste programa:
Os campos da table control são declarados como campos de tabelas (tabela SFLIGHT)
no programa ABAP. Para armazenar vários registros da SFLIGHT de uma única vez, o
programa utiliza a tabela interna INT_FLIGHTS.
1. Durante a execução do evento PAI da tela 100, o programa seleciona todos os dados
de vôo da conexão informada e os armazena na tabela interna INT_FLIGHTS.
2. No evento PBO da tela 200, o comando LOOP executa o loop na tabela interna
INT_FLIGHTS, chamando o módulo DISPLAY_FLIGHTS para cada linha.
DISPLAY_FLIGHTS, por sua vez, transfere uma linha da INT_FLIGHTS para a work area
SFLIGHTS. Os campos da SFLIGHT são iguais dos nomes da table control, então para
cada laço do loop, o sistema transfere os valores do ABAP para os campos da table
control na tela 200.
1. Durante o evento PAI da tela 100, o programa inicializa a variável TOP_LINE para 1. A
variável TOP_LINE indica qual é a primeira linha a ser apresentada na table control.
2. No evento PAI da tela 200, o programa reinicializa as variáveis de rolagem,
especialmente o campo TOP_LINE, caso o usuário tenha utilizado a rolagem com os
botões de paginação ( )
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
LOOP AT INT_FLIGHTS WITH CONTROL FLIGHTS CURSOR FLIGHTS-TOP_LINE.
MODULE DISPLAY_FLIGHTS.
ENDLOOP.
*
PROCESS AFTER INPUT.
*
83
LOOP AT INT_FLIGHTS.
MODULE SET_LINE_COUNT.
ENDLOOP.
MODULE USER_COMMAND_0200.
Código ABAP
*---------------------------------------------------------------------
* INCLUDE MTZ40TOP
*---------------------------------------------------------------------
PROGRAM SAPMTZ60 MESSAGE-ID A&.
TABLES: SFLIGHT, " Flights
SPFLI, " Flight data
SAIRPORT, " Check: Airports
SCARR. " Airlines
DATA: OK_CODE(4),
RCODE(5),
LINE_COUNT TYPE I.
CONTROLS: FLIGHTS TYPE TABLEVIEW USING SCREEN 200.
DATA INT_FLIGHTS LIKE SFLIGHT OCCURS 1 WITH HEADER LINE.
O módulo no evento PBO transfere os dados dos campos da tabela interna para os campos da
table control:
*&--------------------------------------------------------------------
*& Module DISPLAY_FLIGHTS OUTPUT
*&--------------------------------------------------------------------
MODULE DISPLAY_FLIGHTS OUTPUT.
SFLIGHT-FLDATE = INT_FLIGHTS-FLDATE.
SFLIGHT-PRICE = INT_FLIGHTS-PRICE.
SFLIGHT-CURRENCY = INT_FLIGHTS-CURRENCY.
SFLIGHT-PLANETYPE = INT_FLIGHTS-PLANETYPE.
SFLIGHT-SEATSMAX = INT_FLIGHTS-SEATSMAX.
SFLIGHT-SEATSOCC = INT_FLIGHTS-SEATSOCC.
ENDMODULE. " DISPLAY_FLIGHTS OUTPUT
No evento PAI, o programa deve executar o loop novamente para transferir os campos da
table control de volta para o programa. Durante o LOOP o programa utiliza a variável de
sistema SY-LOOPC para descobrir quantas linhas foram transferidas. SY-LOOPC é uma variável
de sistema que informa o número total de linhas sendo apresentado no table control.
84
*&--------------------------------------------------------------------
*& Module SET_LINE_COUNT INPUT
*&--------------------------------------------------------------------
* text
*
*---------------------------------------------------------------------
MODULE SET_LINE_COUNT INPUT.
LINE_COUNT = SY-LOOPC.
ENDMODULE. " SET_LINE_COUNT INPUT
MODULE USER_COMMAND_0200 INPUT.
CASE OK_CODE.
WHEN 'CANC'.
CLEAR OK_CODE.
SET SCREEN 100. LEAVE SCREEN.
WHEN 'EXIT'.
CLEAR OK_CODE.
SET SCREEN 0. LEAVE SCREEN.
WHEN 'BACK'.
CLEAR OK_CODE.
SET SCREEN 100. LEAVE SCREEN.
WHEN 'NEW'.
CLEAR OK_CODE.
SET SCREEN 100. LEAVE SCREEN.
WHEN 'P--'.
CLEAR OK_CODE.
PERFORM PAGING USING 'P--'.
WHEN 'P-'.
CLEAR OK_CODE.
PERFORM PAGING USING 'P-'.
WHEN 'P+'.
CLEAR OK_CODE.
PERFORM PAGING USING 'P+'.
WHEN 'P++'.
CLEAR OK_CODE.
PERFORM PAGING USING 'P++'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
A rotina PAGING faz com que o sistema role a tabela definindo o campo de controle TOP_LINE
para um novo valor. O campo TOP_LINE avisa o comando LOOP onde começar a executar o
laço no evento PBO.
85
*&--------------------------------------------------------------------
*& Form PAGING
*&--------------------------------------------------------------------
* text
*
*---------------------------------------------------------------------
FORM PAGING USING CODE.
DATA: I TYPE I,
J TYPE I.
CASE CODE.
WHEN 'P--'. FLIGHTS-TOP_LINE = 1.
WHEN 'P-'. FLIGHTS-TOP_LINE = FLIGHTS-TOP_LINE - LINE_COUNT.
IF FLIGHTS-TOP_LINE LE 0. FLIGHTS-TOP_LINE = 1. ENDIF.
WHEN 'P+'. I = FLIGHTS-TOP_LINE + LINE_COUNT.
J = FLIGHTS-LINES - LINE_COUNT + 1.
IF J LE 0. J = 1. ENDIF.
IF I LE J. FLIGHTS-TOP_LINE = I.
ELSE. FLIGHTS-TOP_LINE = J.
ENDIF.
WHEN 'P++'. FLIGHTS-TOP_LINE = FLIGHTS-LINES - LINE_COUNT + 1.
IF FLIGHTS-TOP_LINE LE 0. FLIGHTS-TOP_LINE = 1. ENDIF.
ENDCASE.
ENDFORM. " PAGING
Com o comando LOOP AT <tabela interna>, a tabela de tela precisa ser declarada como tabela
interna. As tabelas de tela também podem ser tabelas de banco de dados, estruturas ou outros
campos de programas. Se a tabela de tela não for definida com uma tabela interna, é
necessário verificar se os campos corretos estão sendo movidos de e para o cabeçalho da
tabela interna durante o loop.
Os campos que são utilizados no table control podem ser somente um subconjunto dos
campos de tabelas do dicionário de dados ou de tabelas internas. O sistema transfere os
campos conforme o necessário para a table control.
Detalhes do processamento:
86
Como exemplo é a transação TZ60 que faz isso na rotina DISPLAY_FLIGHTS
MODULE DISPLAY_FLIGHTS OUTPUT.
SFLIGHT-FLDATE = INT_FLIGHTS-FLDATE.
SFLIGHT-PRICE = INT_FLIGHTS-PRICE.
SFLIGHT-CURRENCY = INT_FLIGHTS-CURRENCY.
SFLIGHT-PLANETYPE = INT_FLIGHTS-PLANETYPE.
SFLIGHT-SEATSMAX = INT_FLIGHTS-SEATSMAX.
SFLIGHT-SEATSOCC = INT_FLIGHTS-SEATSOCC.
ENDMODULE. " DISPLAY_FLIGHTS OUTPUT
87
Criação do programa ZCADMAT
88
Informe o pacote que o programa fará
parte e clique no botão ‘Salvar’.
Após as etapas anteriores, o programa será criado e apresentado conforme a figura 1.1:
Figura 1.1
89
Criação das Includes
O próximo passo é criar as includes que irão conter os códigos dos módulos PBO, PAI e das
sub-rotinas FORMS. Para isso, dê um duplo clique no nome do programa, que é o primeiro nó
da árvore de hierarquia do programa. Ao dar o duplo clique, o editor ABAP é aberto no lado
direito da janela, conforme a figura 1.2:
Figura 1.2
O programa possui uma chamada para a include TOP (ZCADMAT_TOP) e mais três chamadas
de includes de forma comentada. As três includes possuem os sufixos O01, I01 e F01. A lógica
de utilização dessas três includes é:
INCLUDE _O01: Nessa include irão conter todos os módulos PBO das telas do programa.
INCLUDE _I01: Nessa include irão conter todos os módulos PAI das telas do programa.
INCLUDE _F01: Nessa include irão conter todas as sub-rotinas FORM do programa.
O próximo passo é criar as três includes para fazer parte do programa. Para isso, será
necessário colocar o código ABAP em modo de edição clicando no botão “Exibir <-> Modificar”
ou utilizar a tecla de atalho CTRL+F1 e remover os asteriscos das linhas das três includes,
de forma que as linhas sejam descomentadas, conforme a figura 1.3.
90
Figura 1.3
Só o fato de descomentar as includes não significa que as mesmas podem ser utilizadas. Ainda
é necessário criá-las, dando o duplo clique no nome da include. Ao fazer isso, o sistema pede a
confirmação da criação do objeto conforme a figura abaixo:
Sempre que algum objeto solicitar pacote e request, utilize os mesmos que foram definidos no
programa, de modo a evitar de ter objetos espalhados em várias change requests e dificultar o
controle.
Após a gravação, o editor ABAP estará aberto na include recém criada, conforma a figura 1.4.
91
Figura 1.4
Salve o código, clicando no botão salvar da barra de ferramentas, mesmo que não tenha
nada, para que o programa include seja gravado.
Retorne para o programa principal utilizando o botão de voltar ou a tecla de atalho ‘F3’.
Faça o mesmo procedimento para os includes I01 e F01.
Após a criação de todas as includes, ative o programa ZCADMAT e suas respectivas includes da
seguinte forma:
Volte para o código fonte do programa principal, dando o duplo clique no nome do programa
na árvore hierárquica do programa. Isso
irá fazer com que o código fonte do
programa ABAP seja carregado. Se o
código estiver editável, alterne para visualização clicando no botão “Exibir <-> Modificar”
ou utilizar a tecla de atalho CTRL+F1.
92
Todos os objetos inativos do programa ZCADMAT estarão marcados para a ativação, conforme
a figura 1.5. Confirme a ativação clicando no botão ‘Avançar’ ou teclando ‘Enter’.
Figura 1.5
Todos os objetos estão ativos. Note que os objetos, no caso as includes e o programa,
possuem os nomes com a fonte na cor preta, o objeto inativo a cor da fonte é azul.
Objetos Ativos (nomes na cor preta) Objeto inativo (nome na cor azul)
93
Criação da tela 100
A tela 100 será a tela principal do nosso programa. A tela irá possuir campos de entrada e
saída, texto de título e botão, conforme a imagem abaixo:
94
Para criar uma nova tela, clique com o
botão direito no nome do programa e
na janela de pop-up que é
apresentado, selecione a opção Criar -
> Tela.
95
Adicionando elementos na tela 100
Para adicionar os objetos na tela, tais como campos de entrada/saída, títulos, botões de rádio,
etc, e definir o leiaute da tela, é necessário utilizar o Screen Painter.
1. Palheta de elementos
2. Barra de propriedades
3. Área de trabalho
4. Janela de atributos 4
96
4. Janela de atributos
Observação: Quando os elementos são adicionados na área de trabalho, eles ficam na cor
vermelha. Isso indica que determinados atributos do elemento devem ser preenchidos. Se
houver algum elemento especificado de forma incompleta, não será possível ativar a tela.
97
Os elementos a serem criado na tela 0100 estão especificados na tabela 1.1.
Tabela 1.1
I Elemento Nome Texto Campo de Só Código de Ícone
D entrada Campo Função
de saída
1 Campo Texto LFA1-LIFNR Fornecedor
2 Campo Entrada/Saída LFA1-LIFNR Sim
3 Campo Entrada/Saída LFA1-NAME1 Não Sim
ICON_OPE
4 Botão PB_ABRIR_100 Abrir FN_ABRIR N
A disposição dos elementos na área de trabalho deverá ficar conforme a figura 1.5.
Figura 1.5
1 2 3
98
Criar campo de entrada/saída – LFA1-LIFNR
Clique no campo de entrada/saída e defina o nome do campo com o valor ‘LFA1-LIFNR’ e tecle
‘Enter’. Novamente o sistema irá solicitar uma ação do desenvolvedor para confirmar a
referência do campo de entrada/saída com o campo LIFNR da tabela LFA1 do dicionário ABAP.
Clique no botão ‘Sim’ para confirmar.
99
Criar Botão – PB_ABRIR_100
‘Compr.vis.’ .
Com todos os elementos necessários para a tela 100 criados, a tela pode ser ativada clicando
no botão ou acionando a tecla de atalho CTRL+F3.
100
Criação dos elementos da tela 100 no ABAP
Os elementos criados na tela 100 precisam ser criados no ABAP para que os valores sejam
copiados do ABAP para a tela e vice-versa.
Os únicos elementos da tela 100 que podem ser criados no ABAP são os campos de
entrada/saída. No nosso caso são os campos LFA1-LIFNR e LFA1-NAME1.
Os elementos de tela a serem criados no ABAP devem ser globais, ou seja, deverão ser criados
no include TOP (ZCADMAT_TOP) e ambos possuem uma característica semelhante, eles são
campos da tabela LFA1. Ou seja, no include TOP iremos criar uma work area com base na
tabela LFA1 através do comando TABLES. Para realizar esse procedimento, siga os passos
abaixo:
O comando TABLES cria uma work area com os mesmos componentes da tabela
informada no comando.
3. Ative a include.
Um Status GUI pode ser utilizado por várias telas. No nosso caso, iremos criar um status GUI
exclusivamente para a tela 100 e terá as seguintes propriedades:
Tabela 1.2
Nome STATUS_100
Barra de Ferramentas
Código de
Botões Função
VOLTAR
CANCELAR
101
ABORTAR
Para ativar os botões da barra de ferramentas, abra a seção ‘Teclas de função’, clicando no
ícone e adicione os códigos de função de acordo com a tabela 1.2.
102
Criação do TITLE GUI para a tela 100
De forma similar ao Status GUI, um único Title GUI também pode ser utilizado por várias telas.
No nosso exemplo, iremos criar dois Title GUI para a tela 100. O Title GUI será carregado de
acordo com o código de transação utilizado pelo usuário. O programa poderá ser chamado por
duas transações sendo uma para criar/modificar os dados de material para o fornecedor e
outra para visualizar os dados.
Tabela 1.3
Title GUI Denominação
TITLE_100_0
1 Criar/Modificar dados de material
TITLE_100_0
2 Visualizar dados de material
103
Codificação da Lógica de Processamento da tela 100
Os procedimentos acima não podem ser realizados diretamente pelo processador de tela, pois
não há comandos de tela disponíveis para isso. Para contornar essa limitação, iremos fazer
com que a tela faça as chamadas para o processador ABAP através de módulos. E o ABAP irá
realizar os procedimentos acima.
Como sabemos, a tela é divida em dois eventos principais: PBO (Process Before Output) e PAI
(Process After Input).
O PBO é o responsável pela preparação da tela antes dela ser apresentada para o usuário.
Geralmente, no PBO, é codificada a transferência dos valores a serem apresentados para os
campos da tela, o leiaute da tela e valores padrão.
O PAI é o responsável pelo tratamento dos eventos do usuário, ou seja, quando o usuário clicar
um botão, por exemplo, é no evento PAI que iremos tratar o botão acionado e executar a
rotina necessária.
104
Codificação do evento PBO
105
O módulo foi criado na include ZCADMAT_O01. Atente que após o nome do módulo, existe o
parâmetro OUTPUT. Isso significa que o módulo é chamado pelo evento PBO.
Agora iremos descomentar as linhas comentadas e atribuir os respectivos nomes do Status GUI
e o Title GUI, para que ambos sejam vinculados à tela, conforme o código abaixo. As
transações tratadas no código abaixo serão criadas posteriormente.
106
Codificação do evento PAI
Com a lógica de processamento da tela 100 aberta, será necessário criarmos o módulo
USER_COMMAND_0100. Para isso faça o seguinte:
O módulo foi criado na include ZCADMAT_I01. Atente que após o nome do módulo, existe o
parâmetro INPUT. Isso significa que o módulo é chamado pelo evento PAI.
O módulo USER_COMMAND_0100 irá conter o código para processar as rotinas referentes aos
códigos de função acionados pelo usuário.
Como sabemos, os códigos de função nada mais são do que um texto atribuído a um elemento
de tela do tipo botão, caixas de seleção, botões de rádio ou elementos do Status GUI tais como
botões, menus e barras de ferramentas. Quando o usuário aciona um desses elementos, o
código de função atribuído a ele é transferido para a variável de sistema SY-UCOMM e para o
campo OK_CODE da tela.
Para evitarmos alterar o campo de sistema SY-UCOMM, iremos definir o campo OK_CODE na
tela e no ABAP para tratarmos o código de função.
107
Essa aba apresenta todos os
elementos adicionados na tela com
seus respectivos atributos. Nós
iremos definir o valor do campo OK
na última linha da tabela com o valor
OK_CODE.
Ative a tela.
Agora é necessário criarmos o objeto correspondente no ABAP. No caso iremos criar uma
variável global na include TOP, conforme se segue:
Dê um duplo clique no include ZCADMAT_TOP
Insira o comando marcado na figura abaixo:
Ative a include.
Com a variável e o campo OK da tela 100 criados, iremos tratar a variável OK_CODE no módulo
USER_COMMAND_0100 do evento PAI.
108
Ative a include.
Atenção: Os valores literais do Status GUI e TITLE GUI devem ser digitados em maiúsculo. O
sistema diferencia maiúsculo de minúsculo.
Uma forma elegante de aplicarmos a validação é utilizarmos no evento PAI uma validação
somente quando o cursor estiver posicionado no campo Fornecedor. Essa validação se dará
em duas etapas: na lógica de processamento e no módulo.
109
Lógica de processamento PAI da tela 100
O comando FIELD irá fazer com que o módulo especificado seja executado para o campo
informado. Sempre que um determinado campo precisar ser validado, utilize o comando de
tela FIELD informando o nome do campo entrada/saída e o módulo a ser executado.
O parâmetro ON REQUEST significa que a validação só irá ocorrer quando o valor do campo
entrada/saída for modificado, independentemente se algum botão foi acionado. Outra opção
é o parâmetro ON INPUT, que irá validar o campo de entrada/saída independentemente da
modificação do valor do campo.
Módulo VALIDA_LIFNR_100
Dentro do módulo terá uma chamada para uma sub-rotina ou Form. É aconselhável inserir o
código ABAP dentro de sub-rotinas quando houver a necessidade de criação de objetos ABAPs,
tais como variáveis, work areas ou tabelas internas, pois se criarmos um objeto dentro do
110
módulo, esse objeto será um objeto pseudo global. Ver a explicação na seção Melhores
Práticas, no final desse documento.
111
Dentro do form VALIDA_LIFNR_100 insira o código conforme figura abaixo e ative as includes
F01 e I01.
O select irá selecionar todos os campos da tabela transparente de mestre de fornecedor LFA1
e irá atribuir os valores para os campos correspondentes da work area LFA1. Um desses
campos é o nome do fornecedor que está atribuído na tela 100 (LFA1-NAME1), ou seja, caso a
validação seja executada com sucesso, o nome do fornecedor será apresentado na tela.
O comando MESSAGE com o tipo de mensagem de erro ‘E’ apresentado no código acima, faz
com que todos os campos da tela sejam fechados com exceção do campo validado. Isso faz
com que o usuário encontre rapidamente qual é o campo problemático e corrija o valor. Os
outros campos, caso houver, só serão liberados para edição quando o usuário inserir um valor
112
válido. Em um programa do tipo Report, o comando MESSAGE com tipo de mensagem de erro,
faz com que o programa seja finalizado.
Os programas do tipo module pool só podem ser executados através de uma transação. No
nosso exemplo, criaremos duas transações conforme a tabela 1.4.
Tabela 1.4
Transaçã
o Denominação
ZMAT02 Criar/Modificar dados de material
ZMAT03 Visualizar dados de material
113
Na próxima tela, preecher os seguintes campos:
114
Criação da tela 200
A tela 200 é a tela que contém dados do fornecedor. Esses dados serão divididos entre duas
abas, de forma a organizar os campos na tela. Além disso, haverá o botão material para abrir
uma janela do tipo pop-up para apresentar os dados de materiais.
115
Para criar uma nova tela, clique com o
botão direito no nome do programa e
na janela de pop-up que é
apresentado, selecione a opção Criar -
> Tela.
Na aba ‘Características’,
preencha o campo
‘Descrição breve’ e defina o
tipo de tela como ‘Normal’
e salve a tela .
116
Clique na aba ‘Lista elemens.’ e insira
nome da variável OK_CODE no
campo OK da tela 200. Lembre-se
que a variável informada ‘OK_CODE’
irá receber o código de função do
objeto acionado pelo usuário, um
botão por exemplo e ele será tratado
no evento PAI para executar uma
determinada rotina.
117
Definição do Status GUI
Criação do Status GUI
Realizar o mesmo procedimento para a criação do Status GUI da tela 100 utilizando os dados
da tabela 2.1.
Tabela 2.1
STATUS GUI
Nome Texto breve
STATUS_20
0 Status GUI tela 200
Barra de Ferramentas
Botões Código de Função
SALVAR
VOLTAR
CANCELAR
ABORTAR
118
Para ativar os botões da barra de ferramentas, abra a seção ‘Teclas de função’, clicando no
ícone e adicione os códigos de função de acordo com a tabela 2.1.
Barra de botões
O próximo passo é criar o botão na barra de botões para o material. A criação do botão se dará
no próprio Status GUI que acabamos de criar, mas na seção ‘Barra de botões’. Abra a sessão
‘Barra de botões’ clicando no ícone .
119
Preencha os campos ‘Texto da Função’,
‘Nome do Ícone’ e ‘Texto de informação’
de acordo com a tabela 2.2.
Clique no botão ‘Avançar’
Barra de Menu
A barra de menu irá conter um menu para consulta onde será possível consultar os dados do
fornecedor acessando a transação standard XK03 e também terá um código de função para
chamar a tela de materiais do fornecedor, o qual será o mesmo código de função da barra de
botões.
Na primeira área, digite o valor ‘Fornecedor’ e dê um duplo clique, isso fará com que
uma área de códigos de função seja criado.
120
A coluna ‘Cód.’ é a área onde será inserido o código de função e a
coluna ‘Texto’ é a área onde será inserido um breve texto descritivo do
código de função. No nosso exemplo, iremos criar um submenu
chamado ‘Consulta’. Quando nos referimos a submenus, não podemos
especificar o código de função, mas somente o texto.
121
Definição do Title GUI
Na tela 200, será utilizado os Titles GUI da tela 100, seguindo a mesma lógica de condicionar a
associação do Title GUI pela transação.
Após a criação do Status GUI e Title GUI, os mesmos deverão ser associados na tela 200
quando o evento PBO for acionado.
Para carregar o Status GUI e Title GUI na tela, é necessário realizar o mesmo procedimento
executado na tela 100, ou seja, o módulo STATUS_0200 no evento PBO deverá ser criado na
include O01 (ZCADMAT_O01) e utilizar os comandos SET PF-STATUS e SET TITLEBAR. Segue
abaixo o código do módulo STATUS_0200:
Os Title GUI utilizados na tela 100 também serão utilizados na tela 200.
Atenção: Os valores literais do Status GUI e TITLE GUI devem ser digitados em maiúsculo. O
sistema diferencia maiúsculo de minúsculo.
122
Tratamento dos códigos de função no evento PAI – Tela 200
Os códigos de função presentes no Status GUI e na tela através de botões e barra de menus
deverão ser tratados no módulo USER_COMMAND_0200 do evento PAI. De forma similar ao
procedimento efetuado na tela 100, o módulo USER_COMMAND_0200 deverá ser criado na
include I01 (ZCADMAT_I01) e dentro dele ser codificado o tratamento dos códigos de função.
Segue abaixo o código do módulo USER_COMMAND_0200:
123
Adicionando elementos na tela 200
Para adicionar os elementos na tela 200, clique no botão ‘Layout’ para abrir o
Screen Painter.
Os elementos que serão inseridos na tela 200 deverão ter a seguinte disposição:
A tela possuirá um campo texto (Título ‘Fornecedor’), dois campos de entrada/saída (Código
do fornecedor e nome), um controle de fichas com dois botões (abas) e duas áreas de subtelas
e um botão.
Os campos que farão parte de cada aba, não fazem parte da tela 200, mas sim de duas
subtelas que serão criadas e associadas ao controle de fichas posteriormente.
124
Campos de entrada/saída e Campo texto
Primeiro, crie os campos de texto e entrada/saída de forma similar ao da tela 100, com
exceção do campo LFA1-LIFNR, o qual não será editável, conforme a tabela 2.1.
Tabela 2.1
ID Elemento Nome Texto Campo de Só Código de Ícone
entrada Campo Função
de saída
1 Campo Texto LFA1-LIFNR Fornecedor
2 Campo Entrada/Saída LFA1-LIFNR Não
3 Campo Entrada/Saída LFA1-NAME1 Não Sim
A disposição dos elementos na área de trabalho deverá ficar conforme a figura 2.1.
Figura 2.1
1 2 3
Obs.: Os campos podem ser copiados da tela 100 e colados e adaptados na tela 200.
Controle de Fichas
O controle de fichas será utilizado para separar os dados do fornecedor em abas. A primeira
aba a ser criada será Endereço, a qual conterá os campos de endereço do fornecedor. A
segunda aba conterá os dados de controle.
Quando o controle de fichas é apresentado ao usuário, os campos que fazem parte de uma
determinada aba não estão incluídos nas abas, como se parece. Os campos fazem parte de
uma subtela a qual é associada à aba. Sendo assim, no momento de criar o controle de fichas
na tela 200, será adicionado um elemento chamado ‘Área de Subtela’ e na lógica de
processamento iremos associar a área de subtela com a subtela.
125
O controle de ficha a ser criado, deverá ter as propriedades de acordo com a tabela 2.2:
Tabela 2.2
Botão Nome Texto Código de Campo de Área de
(Aba) Função Referência Subtela
Endereç
Endereço PB_END o FN_END SCR_END SCR_END
PB_CONTROL FN_CONTROL SCR_CONTROL SCR_CONTROL
Controle E Controle E E E
126
Clique na aba ‘Tab1’ e altere os seguintes dados na janela de
atributos
o Preencha o campo ‘Nome’ com o valor ‘PB_END’;
o Preecha o campo ‘Texto’ com o valor ‘Endereço’;
o Preencha o campo ‘Código de função’ com o valor
‘FN_END’;
o Preencha o campo ‘Cpo.ref.’ com o valor ‘SCR_END’.
Para a aba controle, repita o procedimento acima utilizando os dados informados na tabela
2.2.
127
Botão
Abaixo do controle de ficha, será adicionado um botão chamado Material, que ao ser clicado
deverá abrir a tela de materiais do fornecedor. O botão deverá ter os mesmos atributos do
botão da barra de ferramenta e da entrada ‘Material’ da barra de menu, conforme a tabela
2.3.
Tabela 2.3
Botão Material
Nome PB_MATERIAL
Cód. Função &MATERIAL
Texto Material
Ícone ICON_MATERIAL
InfoRápida Materiais do fornecedor
O processo de criação da tela está finalizado. O próximo passo é criar os objetos ABAP
correspondentes aos elementos da tela e codificar a lógica de processamento da tela 200.
128
Criar os objetos correspondentes aos elementos da tela no ABAP
Os elementos que são adicionados na tela também devem ser criados no ABAP para que
possam ser controlados via programação. O controle de fichas também deverá ser criado no
ABAP. Os componentes do controle de fichas como o botão e a área de subtela, não existem
correspondentes no ABAP.
A criação do controle de fichas no ABAP deverá ser realizada na include TOP, conforme
procedimento abaixo:
Entre na include ZCADMAT_TOP em modo de edição
Insira o código de declaração do controle de ficha como a imagem abaixo marcada.
Como mencionado anteriormente, os campos que são apresentados dentro de uma aba não
fazem parte da área dentro da aba diretamente, mas sim indiretamente, através de uma
subtela. No nosso exemplo, foram criadas duas abas e duas áreas de subtela, sendo uma para
cada aba.
O processo agora é associar a área de subtela presente dentro do controle de fichas com uma
subtela. Quando o usuário clicar na aba ‘Endereço’, a subtela 210, por exemplo, será anexada à
área de subtela SCR_END. E quando o usuário clicar na aba ‘Controle’, a subtela 220, por
129
exemplo, será anexada à área de subtela SCR_CONTROLE. Esse processo de associação de
subtela com área de subtelas é realizado no evento PBO da tela 200, na lógica de
processamento. Segue abaixo o código da associação da subtela com a área de subtela:
No evento PBO, a área de subtela SCR_END está incluindo a tela ‘0210’ do programa contido
na variável de sistema SY-REPID, que no nosso caso é o nome do nosso programa ZCADMAT. E
a área de subtela SCR_CONTROLE está incluindo a tela ‘0220’ do programa contido na variável
de sistema SY-REPID.
O código acima está anexando duas subtelas na tela 200, ou seja, as telas 210 e 220 são
subtelas ou telas filhas da tela principal, que é a tela 200. Até o momento, as telas 210 e 220
não foram criadas. Elas serão criadas posteriormente, de acordo com o contexto do tutorial.
O fluxo de processamento das telas 200 e as subtelas 210 e 220 possuem a seguinte lógica:
Quando a tela é carregada, o primeiro evento a ser executado é o PBO. Logo, os comandos são
executados seqüencialmente. No caso da tela 200, o módulo STATUS_0200 é executado
primeiro e depois a subtela 210 será chamada e o evento PBO da 210 será executada. Se
houver algum módulo ou comando de tela na 210, eles serão executados seqüencialmente. Ao
término do evento PBO da tela 210, o sistema retornará para a tela 200 e irá chamar a tela 220
e executar o evento PBO e seus respectivos comandos e chamadas de módulos. Ao término do
evento PBO da tela 220, a sistema retorna para a tela 200 e finaliza o evento PBO,
apresentando a tela para o usuário.
Quando o usuário acionar algum evento, por exemplo, teclar ‘Enter’, o sistema irá disparar o
evento PAI da tela 200. Os comandos de tela e chamadas de módulos serão executados
seqüencialmente, sendo que no nosso exemplo, o módulo USER_COMMAND_0200 será
executado e após o mesmo, a subtela 210 será chamada e o evento PAI disparado. Ao término
do evento PAI da tela 210 o sistema retorna para a tela 200 no evento PAI e chama a tela 220 e
o evento PAI disparado. Ao término da execução do evento PAI da tela 220, o sistema retorna
para a tela 200 e finaliza o evento PAI. Se o campo ‘Tela Seguinte’ na aba ‘Características’ da
130
tela 200 estiver com o número 200, o sistema dispara o evento PBO da tela 200, novamente.
Ou seja, teremos um evento cíclico.
Tela 210
PBO
Início do evento
...
Fim do evento
1 PAI
Início do evento
Tela 200 ...
Fim do evento
PBO 3
CALL SUBSCREEN scr_end INCLUDING sy-repid ‘0210’.
CALL SUBSCREEN scr1_controle INCLUDING sy-repid ‘0220’.
5
Tela 220
PAI
CALL SUBSCREEN scr_end 2 PBO
CALL SUBSCREEN scr_controle.
Início do evento
...
Fim do evento
PAI
4 Início do evento
...
Fim do evento
131
Ativar a aba selecionada no controle de fichas
Para que a aba selecionada pelo usuário torne-se ativa, é necessário informar o controle de
fichas de forma explícita qual a aba o usuário selecionou. Para isso, utilizaremos o controle
CT_FORN no ABAP para passar o código de função correspondente à aba selecionada para o
usuário. O controle CT_FORN possui um componente chamado ACTIVETAB e atribuiremos a
ele o código de função da aba selecionada. Por se tratar de uma ação do usuário, o código
deverá inserido no evento PAI no módulo USER_COMMAND_0200, como mostrado na área
marcada abaixo:
A variável OK_CODE contém o código de função do botão (aba) selecionada pelo usuário, logo
o componente ACTIVETAB do controle de ficha irá receber o código de função, e quando o
evento PBO da tela 200 for disparado, a aba selecionada pelo usuário ficará ativa.
132
Criação das subtelas do Controle de Ficha
O controle de ficha que foi criado anteriormente possui duas abas (botões) e para cada aba foi
criada um área de subtela, a qual está associada a duas subtelas ‘0210’ e ‘0220’. Essas duas
subtelas serão criadas para inserir os campos relacionados as abas endereço e controle.
Diferentemente das telas normais, as subtelas não possuem Status GUI, Title GUI e nem o
campo OK_CODE, pois os três objetos são herdados da tela principal na qual as subtelas fazem
parte.
Na aba ‘Características’,
preencha o campo ‘Descrição
breve’
Defina o tipo de tela como
‘Subtela’
Salve a tela .
133
O campo OK_CODE está fechado. Essa é uma das características das subtelas.
A disposição dos elementos na área de trabalho deverá ficar conforme a figura 3.1.
Figura 3.1
1 6
2 7
3 8
4 9
5 10
134
Finalização da tela 210
Com todos os elementos necessários para a tela 210 criados, a tela pode ser ativada clicando
no botão ou acionando a tecla de atalho CTRL+F3.
135
O campo OK_CODE está fechado. Essa é uma das características das subtelas.
A disposição dos elementos na área de trabalho deverá ficar conforme a figura 3.2.
Figura 3.2
1 5
2 6 7
3 8 10 11 12
4 9
O campo de seleção não precisa de um campo texto para ele, pois o atributo texto pode ser
utilizado para atribuir um título.
136
Os nomes dos botões de rádio não estão incluídos na work area LFA1, mas sim na work area
SCR_220, que será criada no ABAP. O texto dos botões de rádio segue a mesma lógica do
campo de seleção, ou seja, é só preencher o atributo texto do campo.
Atenção: Os botões de rádio devem ser agrupados para que somente uma das opções sejam
selecionadas. Para agrupar os campos, siga os procedimentos abaixo:
Com todos os elementos necessários para a tela 220 criados, a tela pode ser ativada clicando
no botão ou acionando a tecla de atalho CTRL+F3.
Os campos de entrada/saída e campo de seleção das subtelas 210 e 220 estão todas
associadas com a work area LFA1, sendo que a mesma já foi criada na include TOP
(ZCADMAT_TOP) para a tela 100 e 200 e pode ser utilizada pelas subtelas.
Os botões de rádio da subtela 2 são um caso a parte, pois são dois objetos que irão depender
do valor de um único campo, no caso o campo LFA1-STKZU. Logo, foi associado um
componente da work area SCR_220 para cada um dos botões de rádio.
Agora teremos que criar a work área no ABAP, para que o campo da tela seja reconhecido pelo
ABAP e vice-versa. Para isso, deve-se entrar na include TOP (ZCADMAT_TOP) e criar um tipo de
dados e uma work area com o tipo de dados recém criado.
137
Segue abaixo o código da include TOP:
Após a criação da work area, será necessário fazer o tratamento para que o botão de rádio
reflita o valor presente no campo LFA1-WERKR. A work area será tratada no evento PAI da tela
100 na validação do campo LFA1-LIFNR, pois é lá que está sendo carregado os dados do
fornecedor na tabela LFA1. A codificação poderia ser realizada na tela 200 no evento PBO ou
na subtela 220, também no evento PBO.
Segue abaixo o código do tratamento dos botões de rádio da tela 220 no FORM
VALIDA_LIFNR_100, que é chamado dentro do módulo VALIDA_LIFNR_100.
138
Criação da tela 300
A tela 300 é uma tela do tipo pop-up e irá possuir uma table-control com os dados de material
do fornecedor informado. O Status GUI a ser criado para a tela de pop-up tem um tipo
diferente dos Status GUI utilizado até então.
Na aba ‘Características’,
preencha o campo ‘Descrição
breve’
Defina o tipo de tela como
‘Subtela’
Salve a tela .
139
140
As telas de pop-up possuem o campo OK_CODE aberto, logo iremos definir a variável no
campo OK_CODE da tela.
O Status GUI da tela 300 será do tipo diferente dos Status GUIs criados até o momento. O tipo
de Status GUI a ser criado é ‘Caixa de Diálogo’ e a característica desse tipo é que a barra de
menu e a barra de ferramentas não existem.
141
Criação dos Códigos de Função na barra de botões
Os códigos de função na barra de botões serão criadas de acordo com a tabela 3.1.
Tabela 3.1
STATUS GUI
Nome Texto breve
STATUS_300 Status GUI tela 300
Barra de Botões
Código de Função Texto de Função ícone Txt de Informação
OK Ok ICON_OKAY Continuar
CANCELAR Cancelar ICON_CANCEL Cancelar alteração
Criação do botão OK
142
Atribua a tecla de atalho ‘F8’ para o botão
Clique no botão ‘Avançar’ .
O botão ‘OK’ está pronto. Faça o mesmo procedimento para o botão cancelar utilizando os
dados da tabela 3.1.
A tela 300 irá chamar uma única TITLE GUI e deverá ser criados de acordo com a tabela 3.2.
Tabela 1.3
Title GUI Denominação
TITLE_300 Tabela de materiais
143
Associação do Status GUI e Title GUI na tela 300
Após a criação do Status GUI e Title GUI, os mesmos deverão ser associados na tela 300
quando o evento PBO for acionado.
Para carregar o Status GUI e Title GUI na tela, é necessário realizar o mesmo procedimento
executado na tela 100, ou seja, o módulo STATUS_0300 no evento PBO deverá ser criado na
include O01 (ZCADMAT_O01) e utilizar os comandos SET PF-STATUS e SET TITLEBAR. Segue
abaixo o código do módulo STATUS_0300:
144
No momento somente os códigos de função ‘OK’ e ‘CANCELAR’ irão fechar a tela 300 e voltar
para a tela 200. Eles serão incrementados de acordo com o contexto.
O table control é um recurso para inserir uma tabela contendo valores na tela. Ele é composto
de colunas que são os campos de entrada/saída e títulos de colunas que são os campos textos
ou campos de entrada/saída. As colunas podem conter também botões de rádio, campos de
seleção e botões. Todos os objetos mencionados com exceção dos botões, devem ter objetos
no ABAP com o mesmo nome dos elementos da tela.
Obs.: A partir do momento que o table control for criado, a tela só poderá ser ativada quando
a lógica de processamento estiver codificada e os objetos ABAP criados, caso contrário, o
sistema irá apontar erro na ativação.
Antes de criar o Table Control, é necessário prepararmos a tabela interna no ABAP que irá ser
associada ao Table Control. A tabela interna terá os mesmos componentes da tabela
transparente ZMATERIAL e será criada na include TOP (ZCADMAT_TOP), pois deve ser global.
Além de possuir os componentes da tabela transparente ZMATERIAL, também será adicionado
o componente MAKTX (descrição do material) e o componente SEL, que será utilizado receber
um marcador indicando qual registro foi selecionado pelo usuário no table control. A tabela
interna irá ser chamada de TI_MATERIAL e terá cabeçalho (header line).
145
Após a declaração da tabela interna TI_MATERIAL, ative a include TOP.
A criação da table control é realizada no Screen Painter. Siga os procedimentos abaixo para a
criação do table control.
Como os elementos da tela devem possuir um objeto correspondente no ABAP, com a table
control é a mesma coisa. Além de a table control ter o objeto criado através do comando
CONTROL no ABAP, as colunas da table control também deverão ser criados no ABAP. No
nosso caso, iremos associar as colunas da table control com os campos de uma tabela interna,
na qual será a tabela interna TI_MATERIAL , a qual foi criada anteriormente na include TOP.
146
Para adicionar as colunas na Table Control, será necessário adicionar os campos de
entrada/saída na table control. Utilize a tabela 3.4 para definir as propriedades das colunas.
Tabela 3.4
Nome Texto Campo Tipo Comprimento
Entrada Def/Vis
TI_MATERIAL-MATNR Material X CHAR 18/18
TI_MATERIAL-MAKTX Denominação CHAR 40/25
TI_MATERIAL-MTART TpMat X CHAR 4/4
TI_MATERIAL-MBRSH SI X CHAR 1/2
TI_MATERIAL-MEINS UMB X CHAR 3/3
TI_MATERIAL-BRGEW Peso Bruto X DEC 17/17
TI_MATERIAL-NTGEW Peso Líquido X DEC 17/17
Repita a operação para os outros campos e defina os atributos das colunas de acordo
com a tabela 3.4.
147
Após a criação das colunas da table control, será necessário inserir os títulos de coluna.
Área de título de
coluna
Para inserir o título de coluna em cada coluna, é necessário inserir um campo de texto
na coluna desejada. Siga o procedimento abaixo para realizar a operação. Utilize os
dados da tabela 3.5 para definir os atributos do campo texto.
Tabela 3.5
Significado Nome Texto
Material TI_MATERIAL-MATNR Material
Descrição do material TI_MATERIAL-MAKTX Descrição
Tipo de Material TI_MATERIAL-MTART TpMat
Setor Industrial TI_MATERIAL-MBRSH SI
Unidade de medida básica TI_MATERIAL-MEINS UMB
Peso Bruto TI_MATERIAL-BRGEW Peso Bruto
Peso Líquido TI_MATERIAL-NTGEW Peso Líquido
Clique no campo texto recém adicionado e
define os seguintes atributos na janela de
atributos:
o Nome: TI_MATERIAL-MATNR
o Texto: Material
148
Obs1.: Não é necessário definir o comprimento do título de coluna, pois o
comprimento é definido automaticamente, de acordo com o tamanho da
coluna em si.
Obs2.: O nome do campo texto pode ser o mesmo do campo de entrada/saída
que define a coluna.
O resultado final no Screen Painter, deverá ser semelhante à figura abaixo, sendo que
a coluna TI_MATERIAL-MAKTX, é a única que deverá ficar fechada.
Para finalizar a definição da table control na tela, será necessário definir a coluna de
marcação de linha, conforme apresentado na figura abaixo:
149
Para definir a coluna de marcação de linha, é necessário seguir os passos abaixo no
Screen Painter:
150
Declaração da table control no ABAP (Include TOP)
Após a criação da table control na tela 300, será necessária a declaração da table control no
ABAP. Para isso, o comando CONTROL será utilizando mais uma vez na include TOP
(ZCADMAT_TOP), conforme a figura abaixo:
Para podermos ativar a tela 300, falta definirmos o código na lógica de processamento da tela
nos eventos PBO e PAI, conforme o procedimento abaixo:
Abra a tela 300 e insira o comando LOOP nos eventos PBO e PAI conforme a figura
abaixo:
Os comandos LOOP nos eventos PBO e PAI irão executar o laço nos registros da table
control e não da tabela interna, pois o código será processado pelo processador da
tela e não pelo processador ABAP. Se a table control apresenta 10 registros na tela, o
LOOP irá executar 10 laços.
Dentro dos LOOPs dos eventos PBO e PAI, será necessário incluir os módulos para
transferir os dados da table control para a tabela interna e vice-versa.
151
No evento PBO, os dados da tabela interna deverão ser transferidos para a table
control. Sendo assim, será criado o módulo TRANSF_DADOS_TI_PARA_TC_300,
conforme o procedimento abaixo:
152
A lógica do evento PBO para a table control é a seguinte:
o Para cada registro lido da table control:
O registro correspondente na tabela interna será transferido para a
table control .
A quantidade de registros total será atribuída ao componente LINES
do controle TC_MATERIAL.
Caso não haja o registro correspondente na tabela interna, o laço na
table control é finalizado.
Os botões de funcionalidades da table control serão: inserir registro, excluir registro, marcar
todos os registros e desmarcar todos os registros. Para criar os botões, utilize a tabela 3.5 para
definir os atributos dos botões:
Tabela 3.5
Funcionalidad Nome Nome íconeComprimento Código de Função
e Definido/Visív
el
Inserir PB_300_INS ICON_INSERT_ROW 7/2 FN_300_INS
ICON_DELETE_RO
Excluir PB_300_DEL W 7/2 FN_300_DEL
Marcar PB_300_MARCAR ICON_SELECT_ALL 7/2 FN_300_MARCAR
PB_300_DESMARCA ICON_DESELECT_AL FN_300_DESMARCA
Desmarcar R L 7/2 R
Insira os botões na parte abaixo da table control, conforme demonstrado na figura abaixo:
153
Tratamento dos códigos de função da Table Control – Tela 300
No evento PAI da tela 300, será tratado os códigos de função dos botões de manipulação da
table control. Os botões de inserir, excluir, marcar e desmarcar os registros serão tratados
dentro do módulo USER_COMMAND_0300 no evento PAI.
Será necessário codificar o código conforme a tela abaixo. A rotina específica de cada código
de função será inserida dentro de vários Forms, cada um para cada rotina. Insira o código
marcado dentro do módulo:
Crie cada um dos forms apresentados na figura acima dentro da include ZCADMAT_F01 e insira
os códigos conforme as figuras abaixo:
FORM INSERIR_REGISTRO_300
154
FORM EXCLUIR_REGISTRO_300
FORM MARCAR_REGISTRO_300
155
FORM DESMARCAR_REGISTRO_300
Da mesma forma como foi feita a validação do campo Fornecedor na tela 100, é possível
também validar os campos da table control. Na table control será realizada as seguintes
validações:
Campo Material – Irá verificar se o material é valido, ou seja, existe no sistema e preencher o
campo descrição automaticamente.
Se em qualquer um dos campos a condição não for atendida, o usuário deverá receber uma
mensagem de erro na tela e o cursor deverá estar posicionado no campo correspondente.
A validação dos campos da table control é realizada no evento PAI, pois é o evento que é
acionado quando o usuário dispara uma ação na tela. Para a validação, será utilizando o
comando de tela FIELD na lógica de processamento.
156
A diferença entre as condições do comando FIELD são:
Para utilizar o comando de tela FIELD para validar um campo da table control, será necessário
utilizá-lo dentro do bloco de comando LOOP da table control pretendida.
Utilizando o programa ZCADMAT como exemplo, o comando FIELD deverá ficar dentro do
bloco de LOOP da table control TC_MATERIAL, conforme o código abaixo, para que o campo
seja validado linha a linha. Se a condição definida dentro de um módulo não for atendida, será
emitida uma mensagem de erro (Tipo E) para o usuário, e somente o campo problemático
permanecerá aberto. Com isso, o usuário sabe qual o campo deve ser corrigido e na linha
correta.
Segue abaixo os módulos contendo o código de validação para cada um dos campos
mencionados. Os módulos deverão ser criados na include I01 (CADMAT_I01) e os forms no
include F01 (ZCADMAT_F01).
157
Validação do campo TI_MATERIAL-MATNR
158
Validação do campo TI_MATERIAL-MTART
159
Validação do campo TI_MATERIAL-MBRSH
160
Validação do campo TI_MATERIAL-MEINS
161
Alterar os atributos dos elementos de tela em tempo de execução
Como foi visto anteriormente, quando os elementos de tela são adicionados na tela, é possível
alterar os atributos dos elementos tais como manter um campo aberto ou fechado, o
conteúdo de um campo intensificado ou ocultar um botão.
Para o programa ZCADMAT, dependendo da transação utilizada, os campos dos dados dos
fornecedores ficarão abertos quando a transação for ZMAT02 e ficarão fechadas quando a
transação for ZMAT03. Os campos da tabela de materiais também terão o mesmo
comportamento.
Para definir os atributos dos elementos de tela em tempo de execução, será necessário
manipular os dados da tabela SCREEN dentro do ABAP. A tabela SCREEN possui os seguintes
componentes:
Tabela 4.1
Componente Tamanho Tipo Descrição
NAME 132 CHAR Nome do campo da tela
GROUP1 3 CHAR Grupo de modificação 1
GROUP2 3 CHAR Grupo de modificação 2
GROUP3 3 CHAR Grupo de modificação 3
GROUP4 3 CHAR Grupo de modificação 4
REQUIRED 1 CHAR Campo de entrada é obrigatório
O componente que terá o valor alterado para poder fechar os campos de entrada, de acordo
com a transação utilizada, será o INPUT. O valor a ser atribuído ao componente INPUT será ‘1’
162
ou ‘0’. A alteração deve ser realizada no evento PBO, pois é nesse evento que a lógica de
preparação de tela, antes de ser apresentada ao usuário, é executada.
Cada registro da tabela SCREEN está associado a um elemento de tela. Então para alterar os
atributos de um determinado elemento, será necessário ler o registro da tabela SCREEN que
contém os atributos do elemento.
O único meio de ler a tabela SCREEN é através do comando LOOP AT SCREEN. Esse comando
não aceita parâmetros. Se a tela possuir 100 elementos, a tabela será lida 100 vezes. Então
para ler o registro desejado, será necessário validar o componente ‘NOME’ com o nome do
elemento de tela desejado. Por exemplo, o campo LFA1-NAME1 terá o atributo INPUT definido
com o valor ‘1’. O código ficaria assim:
LOOP AT SCREEN.
IF screen-name = 'LFA1-NAME1'.
screen-input = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Esse tipo de alteração, especificando o nome do campo na validação no laço da tabela SCREEN,
torna-se muito trabalhoso em telas que possuam um grande número de campos de
entrada/saída, botões, caixas de seleção e botões de rádio. Se uma tela possuir, por exemplo,
120 desses elementos, realizar a alteração do atributo INPUT para cada um deles torna-se uma
tarefa trabalhosa. Para facilitar essa operação, é possível agrupar os campos. A tabela SCREEN
possui quatro componentes de agrupamento, são eles: GROUP1, GROUP2, GROUP3 e
GROUP4. Ou seja, é possível atribuir para um conjunto de elementos de tela até quatro grupos
simultaneamente.
1 2 3 4
163
164
Alteração dos atributos dos elementos da subtela 210
Antes de realizar a codificação para alterar os atributos dos elementos da tela dinamicamente,
será necessário agrupar os campos para facilitar a atribuição dos elementos.
Defina o grupo o valor EDT no campo GROUP1, no Screen Painter, para todos os campos de
entrada/saída da tela.
Depois de agrupar os campos, será necessário inserir o código para a definição dos atributos
em tempo de execução. Os atributos dos elementos de tela serão alterados dentro do módulo
DEFINIR_ATRIBUTOS_210 no evento PBO.
165
Insira o código abaixo
Antes de realizar a codificação para alterar os atributos dos elementos da tela dinamicamente,
será necessário agrupar os campos para facilitar a atribuição dos elementos.
Defina o grupo o valor EDT no campo GROUP1, no Screen Painter, para todos os campos de
entrada/saída da tela.
166
Repita o procedimento para os outros campos da tela.
Depois de agrupar os campos, será necessário inserir o código para a definição dos atributos
em tempo de execução. Os atributos dos elementos de tela serão alterados dentro do módulo
DEFINIR_ATRIBUTOS_220 no evento PBO.
167
Alteração dos atributos dos elementos da tela 300
A alteração dos atributos na tela 300 é um pouco diferente das subtelas 210 e 220, devido à
table control. O comando LOOP AT SCREEN não surte efeito na table control.
Para alterar os atributos dos campos da table control, os atributos serão alterados no controle
TC_MATERIAL, que foi criado na include TOP (ZCADMAT_TOP). O controle TC_MATERIAL está
baseada na estrutura SCXTAB_CONTROL, conforme a imagem abaixo:
168
O componente SCREEN contém a mesma estrutura utilizada nas subtelas. Os outros
componentes definem as propriedades da coluna e não do campo, por exemplo, se o
componente INVISIBLE possuir o valor ‘1’, a coluna ficará invisível.
Para definir os atributos dos campos da table control, então será necessário tratar o
componente COLS do controle TC_MATERIAL. Da mesma forma que nos elementos da tela, os
campos da table control também podem ser agrupados, basta realizar o mesmo procedimento
das subtelas 210 e 220 de agrupamento utilizando o Screen Painter. Utilize o valor ‘EDT’ para
agrupar os campos da table control com exceção do campo descrição do material, pois o
mesmo sempre deverá ficar fechado para edição.
No evento PBO, deverá ser chamado o módulo DEFINIR_ATRIBUTOS_300 e após dar o duplo
clique no módulo, criá-lo na include O01(ZCADMAT_O01). Dentro da include, insira o seguinte
código:
169
Salvar os dados de materiais do fornecedor
Os materiais serão salvos na tela 200, através do código de função ‘SALVAR’, presente no
STATUS GUI chamado ‘STATUS_200’, previamente criado.
170
171