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:
- Crie um programa chamado Zcustomcontrole.
- Na transação SE51 crie a tela 100 para este programa.
- Você pode criar um titulo e um menu opcional, este post não abrange a criação dos mesmos.
- Coloque 5 componentes Text Fields na tela.
- Coloque um componente Input/Output Field e o nomeie de CAMPO.
- Coloque um componente Custom Control e o nomeie de EDITOR.
- Use a figura abaixo para dispor os componentes na tela e preencher os textos dos componentes Text Fields:
- Na aba Flow Logic da tela 100 digite o código correspondente.
- No programa digite o código abaixo.
- Ative a tela e o programa e teste.
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.



