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.