Visual – Custom Control – Text Editor – Complex Screen Element – Abap

Publicado: 8 de abril de 2014 em Abap

Custom Control

É um controle personalizado que reserva uma área em uma tela. Você pode cria-los no Screen Painter, e, como todos os outros objetos de tela, eles têm um nome único. Você usa controles personalizados para incorporar controles. Um controle é um componente de software no servidor de apresentação, que pode ser tanto um controle ActiveX ou um JavaBean, dependendo do SAPgui que você estiver a utilizando. Eles permitem que você execute tarefas, como edição de textos, localmente no servidor de apresentação. O controle é impulsionado pela lógica do aplicativo, que ainda é executado no servidor de aplicativos.

Controles

Os controles são componentes de software binários independentes que podem ser reutilizados. Os desenvolvedores podem criar controles em seus aplicativos e usar as funções que eles fornecem. Normalmente, os controles são usados ​​para projetar a interface do usuário. No entanto, usando controles não se restringe a componentes necessariamente visíveis.

Screen Painter

Para usar o Custom Control siga os seguintes passos:

  1. Crie um programa chamado Zcustomcontrole.
  2. Na transação SE51 crie a tela 100 para este programa.
  3. Você pode criar um titulo e um menu opcional, este post não abrange a criação dos mesmos.
  4. Coloque 5 componentes Text Fields na tela.
  5. Coloque um componente Input/Output Field e o nomeie de CAMPO.
  6. Coloque um componente Custom Control e o nomeie de EDITOR.
  7. Use a figura abaixo para dispor os componentes na tela e preencher os textos dos componentes Text Fields:

    custom-design

    Custom Control

  8. Na aba Flow Logic da tela 100 digite o código correspondente.
  9. No programa digite o código abaixo.
  10. Ative a tela e o programa e teste.
custom-programa

Custom Control – Programa

 

Exemplo:

Neste exemplo criamos um Custom Control para um componente do próprio do NetWeaver  7 que é um editor de textos, mas você pode usar para exibir seus próprios componentes sejam eles visuais ou não.

Abap

Tela 100 – Flow Logic

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.

PROCESS AFTER INPUT.
  MODULE CANCEL AT EXIT-COMMAND.
  MODULE USER_COMMAND_0100.

Programa – ZCustomcontrole

*&---------------------------------------------------------------------*
*& Report  ZCUSTOMCONTROLE
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Custom Control
*&---------------------------------------------------------------------*

REPORT  ZCUSTOMCONTROLE.

* Declara eventos para os botões e teclas
DATA: ok_code LIKE sy-ucomm,
      clique_ok LIKE sy-ucomm.

* Declara componentes
DATA: init,
      container TYPE REF TO cl_gui_custom_container,
      editor    TYPE REF TO cl_gui_textedit.

DATA: evento_tab TYPE cntl_simple_events,
      evento     TYPE cntl_simple_event.

* Declara tabela interna
DATA: linha(256),
      texto_tab LIKE STANDARD TABLE OF linha,
      campo LIKE linha.

* Classe de manipulação de eventos
* Evento baseados em HOT KEYS (teclas)

* Declaração da classe
CLASS event_handler DEFINITION.

  PUBLIC SECTION.
    METHODS: handle_f1 FOR EVENT f1 OF cl_gui_textedit
                       IMPORTING sender,
             handle_f4 FOR EVENT f4 OF cl_gui_textedit
                       IMPORTING sender.
ENDCLASS.

* Declaração da implementação
CLASS event_handler IMPLEMENTATION.
  METHOD handle_f1.

    DATA row TYPE i.

    MESSAGE i888(sabapdocu) WITH 'Disparado evento F1'.

    CALL METHOD sender->get_selection_pos
         IMPORTING from_line = row.

    CALL METHOD sender->get_line_text
         EXPORTING line_number = row
         IMPORTING text = campo.

    CALL METHOD cl_gui_cfw=>set_new_ok_code
         EXPORTING new_code = 'F1'.

    CALL METHOD cl_gui_cfw=>flush.

  ENDMETHOD.

  METHOD handle_f4.

    DATA row TYPE i.

    MESSAGE i888(sabapdocu) WITH 'Disparado evento F4'.

    CALL METHOD sender->get_selection_pos
         IMPORTING from_line = row.

    CALL METHOD sender->get_line_text
         EXPORTING line_number = row
         IMPORTING text = campo.

    CALL METHOD cl_gui_cfw=>flush.

  ENDMETHOD.

ENDCLASS.

* Declara eventos

DATA handle TYPE REF TO event_handler.

* Inicio da seleção
START-OF-SELECTION.

* Adiciona texto na tabela interna

  linha = '--------------------------------------------------'.
  APPEND linha TO texto_tab.
  linha = 'Desenvolvimento Aberto'.
  APPEND linha TO texto_tab.
  linha = 'Area de texto'.
  APPEND linha TO texto_tab.
  linha = '--------------------------------------------------'.
  APPEND linha TO texto_tab.
  linha = '...'.
  APPEND linha TO texto_tab.

* Chama tela
  CALL SCREEN 100.

* Modulos - Flow Logic

MODULE status_0100 OUTPUT.

* Cria controle custom

  IF init is initial.
    init = 'X'.

    CREATE OBJECT:
           container EXPORTING container_name = 'EDITOR',
           editor    EXPORTING parent = container,
           handle.

    evento-eventid = cl_gui_textedit=>event_f1.
    evento-appl_event = ' '.                     "system event

    APPEND evento TO evento_tab.
    evento-eventid = cl_gui_textedit=>event_f4.
    evento-appl_event = 'X'.                     "application event

    APPEND evento TO evento_tab.

    CALL METHOD: editor->set_registered_events
                 EXPORTING events = evento_tab.

    SET HANDLER handle->handle_f1
                handle->handle_f4 FOR editor.

  ENDIF.

  CALL METHOD editor->set_text_as_stream
              EXPORTING text = texto_tab.

ENDMODULE.

MODULE cancel INPUT.

  LEAVE PROGRAM.

ENDMODULE.

MODULE user_command_0100 INPUT.

* limpa evento
  clique_ok = ok_code.
  CLEAR ok_code.

* Eventos dos botões ou teclas
  CASE clique_ok.

    WHEN 'INSERT'.
      CALL METHOD editor->get_text_as_stream
                  IMPORTING text = texto_tab.

    WHEN 'F1'.
      MESSAGE i888(sabapdocu) WITH 'F1 - Evento do sistema'.

    WHEN OTHERS.
      MESSAGE i888(sabapdocu) WITH 'Evento da aplicação - Recorta o texto'.
      CALL METHOD cl_gui_cfw=>dispatch.

  ENDCASE.

ENDMODULE.
Anúncios

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 )

w

Conectando a %s