Trabalhar com o banco de dados SAP conectado aos componentes do Screen Painter é relativamente bem fácil, pois o engine do Screen Painter faz quase todo o trabalho para você, reconhecendo os componentes para cada tipo de campo do dicionário de dados e quando é possível lhe questiona se deseja uma conversão de um componente básico para outro mais adequado ao tipo de campo usado, e além disso lhe da botões de chamadas para pesquisas de campos que contem uma chave estrangeira.
Trabalhar com os componentes desconectados do banco de dados é um pouco diferente, pois você precisa controlar e referenciar os componentes criados na janela de design direto de seu código Abap. Diferentemente de outras linguagens de programação onde você referencia o objeto diretamente pelo nome do componente ou pelo seu ID, o Abap não possui uma unidade de código para o design gerado, que normalmente contém o nome dos componentes e suas propriedades e eventos, deste modo não é possível referenciar automaticamente os componentes em um programa Abap.
Para resolver esta situação o Abap exige que o programador crie variáveis com o mesmo nome do componente criado no Screen Painter e possui uma Function Code que dispara o evento PAI chamada SY-UCOMM que contem as funções que você nomeou nas propriedades dos seus componentes. Mas em seus programas ABAP, você deve trabalhar com o campo OK_CODE em vez de usar diretamente o sy–ucomm, você deve sempre inicializar o campo OK_CODE em um programa ABAP pelo seguinte motivo, é preciso limpar este campo para garantir que o código de função de uma tela não esteja preenchido no evento PBO, com um valor indesejado. Esta limpeza é importante quando o próximo evento PAI for disparado com um código de função vazia (por exemplo, usando ENTER).
Menu Painter/ Screen Painter
- Na transação SE38 crie um programa chamado Z_ZVISUAL_CODIGO.
- Na transação SE41 Crie um titulo chamado ZVISUAL_CODIGO, use a imagem abaixo para referencia:
- Crie um menu com o nome de 100.
- Coloque o nome do menu de “Visual + Código” e preencha os campos Code com o nome das funções dos botões que serão criados posteriormente: F_ACAO, F_LIMPAR, F_SAIR, use a imagem abaixo para referencia:
- Salve e Ative o menu status 100.
- Entre na transação SE51.
- Na aba Flow Logic crie o PBO Module e salve o programa.
- De volta na SE51 crie o seguinte design:
- Na propriedade Name coloque TCAMPO1, e TCAMPO2 para os Input/Output Fields, TRADIO1 e TRADIO2 para os RadioButtons e TCHECK1 e TCHECK2 para os Checkbox.
- Nomeie os botões de TACAO, TLIMPAR e TSAIR e para seus Function Codes nomeie como F_ACAO, F_LIMPAR e F_SAIR.
- Salve e ative a tela de layout.
- Entre na transação SE38 e complete o seu programa com o código abaixo, você deve obter o seguinte resultado:
Neste exemplo criamos um programa Abap que chama um menu e uma tela visual, onde controlamos seus componentes via codificação.
Abap
*&---------------------------------------------------------------------* *& Report ZVISUAL_CODIGO *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Visual + código *&---------------------------------------------------------------------* REPORT ZVISUAL_CODIGO. " Declara variaveis para os componetes DATA TCAMPO1 TYPE string. DATA TCAMPO2 TYPE string. DATA TRADIO1 TYPE C LENGTH 1. DATA TRADIO2 TYPE C LENGTH 1. DATA TCHECK1 TYPE C LENGTH 1. DATA TCHECK2 TYPE C LENGTH 1. " Declara variaveis para os eventos DATA OK_CODE LIKE SY-UCOMM. DATA CLIQUE_OK LIKE SY-UCOMM. " Chama tela visual CALL SCREEN 100. MODULE STATUS_0100 OUTPUT. " Chama o menu e o tilulo da tela SET PF-STATUS '100'. SET TITLEBAR 'ZVISUAL_CODIGO'. " Limpa o evento contra possiveis sujeira PAI CLIQUE_OK = OK_CODE. CLEAR OK_CODE. " Dedfine eventos dos botões CASE CLIQUE_OK. WHEN 'F_ACAO'. " Verifica se o grupo foi clicado CASE 'RADIO'. IF TRADIO1 EQ 'X'. TCAMPO1 = 'Você selecionou o Radio Button numero 1'. ENDIF. IF TRADIO2 EQ 'X'. TCAMPO1 = 'Você selecionou o Radio Button numero 2'. ENDIF. ENDCASE. " Verifica CheckBoxes IF TCHECK1 EQ 'X'. TCAMPO1 = 'Você selecionou o CheckBox 1'. ENDIF. IF TCHECK2 EQ 'X'. TCAMPO2 = 'Você selecionou o CheckBox 2'. ENDIF. " Limpa campos WHEN 'F_LIMPAR'. CLEAR : TCAMPO1, TCAMPO2, TCHECK1, TCHECK2, TRADIO1, TRADIO2. " Sai do programa WHEN 'F_SAIR'. LEAVE PROGRAM. ENDCASE. ENDMODULE. " STATUS_0100 OUTPUT