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