SubScreenArea
É um componente da categoria de elementos complexos de tela do Screen Painter que permite marcar uma área da tela que será substituída por uma sub-tela em tempo de execução. Uma SubScreenArea permite que você tenha um efeito de painéis sobrepostos uns aos outros.
Screen Painter
Para usar o componente SubScreenArea siga os seguintes passos:
- Crie um programa chamado Zsubscreen.
- Na transação Se51 crie a tela numero 100, está será sua tela principal.
- A tela principal contém um Text Field, um Box, um SubScreenArea e um PushButton.
- Para o botão coloque o function code F_SAIR e nomeie o SubScreenArea de SSA1, nomeie os outros componentes da tela como desejar.
- Disponha os elementos como no layout abaixo:
- Crie a tela 110 com o tipo de tela da aba Attributes: SubScreen.
- Para esta coloque 2 Text Fields, um Box, e um PushButton.
- Nomeie o Box de SSA1 e insira o function code do botão de F_S1A, nomeie os outros componentes como desejar.
- Use a figura abaixo para o design:
- Crie a tela 120 com o tipo de tela da aba Attributes: SubScreen.
- Para esta coloque 2 Text Fields, um Box, e um PushButton.
- Nomeie o Box de SSA1 e insira o function code do botão de F_S2V, nomeie os outros componentes como desejar.
- Use o seguinte Layout:
- Ative todas as telas.
- Na tela 100 use o código abaixo para o Flow Logic.
- Use o código abaixo para o programa.
- Ative e teste o programa.
Exemplo:
Neste exemplo criamos um programa básico de 3 telas com 2 sub telas e fazemos este programa se comportar como um Wizard sobrepondo os painéis de acordo com a necessidade do programador.
Abap
Flow Logic – Tela 100
PROCESS BEFORE OUTPUT. MODULE STATUS_0100. CALL SUBSCREEN SSA1 INCLUDING sy-repid painel. * PROCESS AFTER INPUT. MODULE USER_COMMAND_0100. CALL SUBSCREEN SSA1.
Programa- ZSubScreen
*&---------------------------------------------------------------------* *& Report ZSUBSCREEN *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Sub Screens - Painéis *&---------------------------------------------------------------------* REPORT ZSUBSCREEN. * Declara eventos dos botões DATA: ok_code TYPE sy-ucomm, clique_ok TYPE sy-ucomm. * Cria componente Painel (SubScreens) DATA painel(4) TYPE n VALUE '0110'. * Chama tela 100 CALL SCREEN 100. MODULE STATUS_0110 OUTPUT. * Crie um menu para este programa. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'. ENDMODULE. " STATUS_0110 OUTPUT MODULE USER_COMMAND_0100 INPUT. * Previne OK_CODE de sujeiras PAI clique_ok = ok_code. CLEAR ok_code. * Eventos dos botões CASE clique_ok. WHEN 'F_SAIR'. LEAVE PROGRAM. WHEN 'F_S1A'. painel = '0120'. WHEN 'F_S2V'. painel = '0110'. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT
Por que não utilizar o sy-ucomm?
Olá Rafael,
Segundo as melhores praticas você nunca deve utilizar o sy-ucomm diretamente para ler as funções, pois se um usuário disparar o evento PAI com um valor vazio de função ele não afeta o campo sy-ucomm e você vai ler a função que já estava contida no campo novamente, deste modo a SAP recomenda utilizar o OK_CODE para limpa-lo, segundo o trecho da documentação oficial abaixo:
“the corresponding function code is placed into the system field SYST-UCOMM or SY-UCOMM and placed in the OK_CODE field (as long as the function code is not empty). Empty function codes are placed in neither the SY-UCOMM field nor the OK_CODE field.”
“…is particularly important when the next PAI event can be triggered with an empty function code (for example, using ENTER). Empty function codes do not affect SY-UCOMM or the OK_CODE field, and consequently, the old field contents are transported.”
O post inicial para o screen painter neste site explica esta questão do campo OK_CODE e sy-ucomm. A lógica seria limpar o OK_CODE, a cada verificação para que ele não transporte valores de funções que já estavam anteriormente no campo sy-ucomm já que não é afetado por valores nulos, deste modo utilizamos o OK_CODE e um outro campo do tipo sy-ucomm para realizar esta limpeza, segundo exemplos oficiais da SAP.
Mais detalhes no link oficial: http://help.sap.com/saphelp_470/helpdata/pt/9f/dbaa1335c111d1829f0000e829fbfe/content.htm