Visual – SubScreenArea – Complex Screen Element – Abap

Publicado: 5 de abril de 2014 em Abap

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:

  1. Crie um programa chamado Zsubscreen.
  2. Na transação Se51 crie a tela numero 100, está será sua tela principal.
  3. A tela principal contém um Text Field, um Box, um SubScreenArea e um PushButton.
  4. Para o botão coloque o function code F_SAIR e nomeie o SubScreenArea de SSA1, nomeie os outros componentes da tela como desejar.
  5. Disponha os elementos como no layout abaixo:

    subscreen-100

    Tela – 100

  6. Crie a tela 110 com o tipo de tela da aba Attributes: SubScreen.
  7. Para esta coloque 2 Text Fields, um Box, e um PushButton.
  8. Nomeie o Box de SSA1 e insira o function code do botão de F_S1A, nomeie os outros componentes como desejar.
  9. Use a figura abaixo para o design:

    subscreen-110

    Tela – 110

  10. Crie a tela 120 com o tipo de tela da aba Attributes: SubScreen.
  11. Para esta coloque 2 Text Fields, um Box, e um PushButton.
  12. Nomeie o Box de SSA1 e insira o function code do botão de F_S2V, nomeie os outros componentes como desejar.
  13. Use o seguinte Layout:

    subscreen-120

    Tela – 120

  14. Ative todas as telas.
  15. Na tela 100 use o código abaixo para o Flow Logic.
  16. Use o código abaixo para o programa.
  17. 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
Anúncios
comentários
  1. Rafael disse:

    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

Deixe um comentário

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

Logotipo do WordPress.com

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

Foto do Google+

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

Imagem do Twitter

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

Foto do Facebook

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

Conectando a %s