oop_gui
DESCRIPTION
OO abapTRANSCRIPT
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 1
ApresentaApresentao Bo Bsica sica -- ABAP ABAP ObjectsObjects para GUIpara GUI
ApresentaApresentaoo
Esta apresentao foi desenvolvida com conceitos e exemplos prprios, alm de uma linguagem simples e objetiva para proporcionar
um rpido e eficaz aprendizado na utilizao de ABAP Objects, dirigindo-se especialmente para a interface grfica com o usurio(GUI)Todos os exemplos foram feitos e testados no SAP R/3 5.0 SAPGui 640
Espero que este material seja de grande valia,
Para contato, opinies ou [email protected]
Rafael de Castro ManopeliConsultor SAP - ABAP
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 2
ESCOPOESCOPO 1. Conceitos de OOP Simplificados 2. Utilizao de OOP em ABAP 3. Sintaxe ABAP Objects 4. Exemplos (GUI)
4.1. Text Edit 4.2. Easy Splitter
5. Utilizao de Eventos 5.1. Tree
5.2. ALV Grid
6. Controle 7. Consideraes Finais
ApresentaApresentao Bo Bsica sica -- ABAP ABAP ObjectsObjects para GUIpara GUI
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 3
uma estrutura de dados e aes que so utilizadas como moldes para a criao dos objetos.
a implementao de uma classe. uma cpsula que contm suas propriedades (representadas pelos atributos) e seu comportamento(representado pelos mtodos).
o conceito bsico da OOP. Consiste em esconder os cdigos internos e exibir apenas a funcionalidade, ou seja, exibir para o desenvolvedor apenas o que interessa: o que a classe/objeto faz e que parmetros so necessrios para faz-lo, sem a necessidade de saber como o componente funciona internamente. Este conceito implementado atravs da Visibilidade.
Conceitos de OOP SimplificadosConceitos de OOP Simplificados1.1.
Encapsulamento
Objeto
Classe
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 4
o aproveitamento do cdigo(atributos, mtodos, etc.) de uma classe(Pai) para ser re-utilizado em outra mais especfica(Filha).
a possibilidade de tratar um objeto como se fosse um tipo diferente, ou seja, um objeto pode comportar-se como outro (um mtodo com o mesmo nome pode ter reaes diferentes dependendo do contexto em que utilizado).
So as variveis, tabelas internas, work areas, etc. dos objetos ou classes.
So as funes ou procedimentos presentes em uma classe ou um objeto.
Limita quem poder acessar os componentes de uma classe.
Conceitos de OOP SimplificadosConceitos de OOP Simplificados1.1.
Atributos
Mtodos
Herana
Polimorfismo
Visibilidade
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 5
Algumas facilidades de interao do SAP com o usurio somente esto presentes com a utilizao de OOP.
Existem conceitos na OOP que visam a facilidade de manuteno e melhoria que no so claramente definidos na programao estrutural.
BADIs utilizam-se de ABAP Objects para a customizao de transaes, sendo uma alternativa um pouco mais flexvel que as tradicionais Exits.
UtilizaUtilizao de OOP em ABAPo de OOP em ABAP2.2.
Para uma maior interatividade com o Usurio
Para Enhancements
Como uma alternativa a Programao Estrutural
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 6
Sintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
DATA TYPE REF TO
CREATE OBJECT
CALL METHOD =>
CALL METHOD ->
=>
->
Utilizao de Mtodos da Classe
Utilizao de Mtodos do Objeto
Criao de Tipo de Referncia
Criao do Objeto
Utilizao de Atributos da Classe
Utilizao de Atributos do Objeto
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 7
ZTESTE_RCM_01_SINZTESTE_RCM_01_SIN
Sintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 8
OOP BOOP BsicosicoSintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
Objetivo:
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 9
Definindo uma Classe (Local)CLASS ex1_class DEFINITION.
PUBLIC SECTION.
CLASS-DATA: w_varc TYPE n.DATA: w_vard TYPE n.
METHODS: escreve_m IMPORTING texto_m TYPE c,soma1_m.
CLASS-METHODS: escreve_c IMPORTING texto_c TYPE c.
PROTECTED SECTION.PRIVATE SECTION.
ENDCLASS. "ex1_class DEFINITION
Sintaxe ABAP Sintaxe ABAP ObjectsObjectsOBS.: Quando se cria uma
classe global, seus elementos so definidos na prpria transao (SE24)
3.3.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 10
Implementando uma Classe
CLASS ex1_class IMPLEMENTATION.
METHOD escreve_m.DO w_varc TIMES.WRITE texto_m.
ENDDO.ENDMETHOD. "escreve
METHOD soma1_m.ENDMETHOD. "soma1_m
METHOD escreve_c.ENDMETHOD. "escreve_c
ENDCLASS. "ex1_class IMPLEMENTATION
Sintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 11
Utilizando a Classe criada
DATA g_ex1 TYPE REF TO ex1_class.
START-OF-SELECTION.
CREATE OBJECT g_ex1.
ex1_class=>w_varc = 5.
CALL METHOD g_ex1->escreve_mEXPORTINGtexto_m = 'TESTE'.
Sintaxe ABAP Sintaxe ABAP ObjectsObjects
Conector para Classes
Conector para Objetos
3.3.
FIM
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 12
ParticularidadesParticularidades
Atributos de Classe/Objeto
DEFINITION e IMPLEMENTATION
Tabelas Internas
Constructor
Os mtodos de uma classe somente podero acessar os atributos da classe, enquanto os mtodos dos objetos podero acessar tanto os atributos da classe quanto os do objeto.
Para toda definio de mtodo descrita na DEFINITION da classe necessrio a sua declarao na IMPLEMENTATION. Mesmo sendo vazia!
Em ABAP Objects no possvel utilizar header lines nas tabelas internas, ao invs disto, utilize uma work area ou um field-symbol.
Voc pode definir parmetros para que sejam passados ao objeto e/ou classe no momento de sua criao. Para isto basta criar um mtodo chamado constructor (para objetos) ou class_constructor (para classes).
Sintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 13
Tipos de Visibilidade
Sintaxe ABAP Sintaxe ABAP ObjectsObjects3.3.
Seus componentes podero ser utilizados diretamente pelo usurio da classe.
Seus componentes podero ser utilizados pela prpria classe e as classes que forem herdadas dela (Classes Filha).
Seus componentes apenas podero ser utilizados pela prpria classe.
PUBLIC
PROTECTED
PRIVATE
ParticularidadesParticularidades
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 14
Exemplos BExemplos Bsicos (GUI)sicos (GUI)4.4.
1. Criar Custom Control na Tela
2. Criar varivel de referncia para o Custom Control(tipicamente cl_gui_custom_container)
3. Criar varivel de refrencia para o objeto desejado4. Verificar se o container est vazio
5. Criar o objeto container e atribuir ao nome do container definido em tela
6. Criar objeto desejado com referncia ao objeto container7. Utilizar os mtodos especficos do objeto criado
Passos para construPassos para construo de uma aplicao de uma aplicao Bo Bsica GUI OOsica GUI OO
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 15
ZTESTE_RCM_02_TXTZTESTE_RCM_02_TXT
Exemplos BExemplos Bsicos (GUI)sicos (GUI)4.1.4.1.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 16
TextText EditEditExemplos BExemplos Bsicos (GUI)sicos (GUI)4.1.4.1.
Objetivo:
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 17
Exemplos BExemplos Bsicos (GUI)sicos (GUI)4.1.4.1.
Lgica de Processamento:
Incio.
TOPCria variveis de referncia para containers, TEXTEDIT
PBOCria container, TEXTEDITMuda opes da barra de ferramentas do TEXTEDIT
Fim.
TextText EditEdit
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 18
Exemplos BExemplos Bsicos (GUI)sicos (GUI)
Layout Tela 0100:
Flow Logic Tela 0100:PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
Include TOP:DATA: g_container1 TYPE REF TO cl_gui_custom_container,
g_textedit TYPE REF TO cl_gui_textedit.
CC1(Custom Control)
4.1.4.1.TextText EditEdit
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 19
Exemplos BExemplos Bsicos (GUI)sicos (GUI)Include PBO:MODULE status_0100 OUTPUT.
IF g_container1 IS INITIAL.
CREATE OBJECT g_container1EXPORTING
container_name = 'CC1'.
CREATE OBJECT g_texteditEXPORTINGparent = g_container1.
CALL METHOD g_textedit->set_toolbar_modeEXPORTINGtoolbar_mode = 0.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
4.1.4.1.TextText EditEdit
FIM
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 20
ZTESTE_RCM_03_ESPZTESTE_RCM_03_ESP
Exemplos BExemplos Bsicos (GUI)sicos (GUI)4.2.4.2.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 21
EasyEasy SplitterSplitterExemplos BExemplos Bsicos (GUI)sicos (GUI)4.2.4.2.
Objetivo:
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 22
Exemplos BExemplos Bsicos (GUI)sicos (GUI)4.2.4.2.
Lgica de Processamento:
Incio.
TOPCria variveis de referncia para containers, TEXTEDIT e CALENDAR
PBOCria container principalCria container divisorAtribui cada metade do container dividido a um container diferenteCria TEXTEDIT e CALENDAR nos containers definidos
Fim.
EasyEasy SplitterSplitter
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 23
Exemplos BExemplos Bsicos (GUI)sicos (GUI)
Layout Tela 0100:
Flow Logic Tela 0100:PROCESS BEFORE OUTPUT.MODULE STATUS_0100.
PROCESS AFTER INPUT.
CC1(Custom Control)
4.2.4.2.EasyEasy SplitterSplitter
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 24
Exemplos BExemplos Bsicos (GUI)sicos (GUI)
Include TOP:DATA: g_container1 TYPE REF TO cl_gui_custom_container,
g_container_esq TYPE REF TO cl_gui_container,g_container_dir TYPE REF TO cl_gui_container,g_spt_container TYPE REF TO cl_gui_easy_splitter_container.
DATA: g_textedit TYPE REF TO cl_gui_textedit,g_calendar TYPE REF TO cl_gui_calendar.
Include PBO:MODULE status_0100 OUTPUT.
IF g_container1 IS INITIAL.
CREATE OBJECT g_container1EXPORTINGcontainer_name = 'CC1'.
4.2.4.2.EasyEasy SplitterSplitter
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 25
Exemplos BExemplos Bsicos (GUI)sicos (GUI)Include PBO (Continuao):CREATE OBJECT g_spt_container
EXPORTINGparent = g_container1orientation = 0sash_position = 50with_border = 1.
g_container_esq = g_spt_container->top_left_container.g_container_dir = g_spt_container->bottom_right_container.
CREATE OBJECT g_texteditEXPORTING
parent = g_container_esq.
CREATE OBJECT g_calendarEXPORTING
parent = g_container_dirview_style = 4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
4.2.4.2.EasyEasy SplitterSplitter
FIM
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 26
UtilizaUtilizao de Eventoso de Eventos
Os eventos so necessrios quando se deseja uma interatividade maior entre o usurio e o objeto. Com eles, possvel a criao de context menus, Drag&Drop, etc. no GUI, alm de alguns objetos que requerem seu uso para uma interao bsica com o usurio.
Necessidade de uso
Como utilizarAlgumas classes possuem habilitado o mtodo SET_REGISTERED_EVENTSno qual permite a ativao dos eventos. Ele utilizado em conjunto com o preenchimento da tabela cntl_simple_events e do HANDLER apropriado.
Outras, possuem caractersticas prprias para utilizao de seus eventos, como o caso do ALV GRID, que j vem com alguns eventos registrados.
Para codificar a funcionalidade de cada evento, preciso criar uma classe local com parmetros especiais na sua definio e a funcionalidade em si na sua implementao, conforme ser apresentado adiante.
5.5.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 27
ZTESTE_RCM_04_TREZTESTE_RCM_04_TRE
UtilizaUtilizao de Eventoso de Eventos5.1.5.1.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 28
TreeTreeUtilizaUtilizao de Eventoso de Eventos5.1.5.1.
Objetivo:
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 29
UtilizaUtilizao de Eventoso de Eventos5.1.5.1.
Lgica de Processamento:Incio.
TOPCria variveis de referncia para containers, TREE e HTML_VIEWERCria tabelas internas para eventos e TREECria definition para classe de eventos (event_class)
PBOChama form cria_objetos
Cria containersCria objetos
Chama form implementa_eventosPreencha tabela para eventosRegistra eventos
Chama form monta_menuPreenche tabela de nsCria ns no objeto TREE
Fim.
TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 30
UtilizaUtilizao de Eventoso de Eventos
Layout Tela 0100:
CC_MENU CC_BROWSER
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 31
UtilizaUtilizao de Eventoso de Eventos
Flow Logic Tela 0100:
PROCESS BEFORE OUTPUT.MODULE STATUS_0100.
PROCESS AFTER INPUT.
Include TOP:TYPE-POOLS: cntl.
DATA: g_container_menu TYPE REF TO cl_gui_custom_container,g_container_browser TYPE REF TO cl_gui_custom_container.
DATA: g_tree TYPE REF TO cl_gui_simple_tree,g_browser TYPE REF TO cl_gui_html_viewer.
DATA: wa_event TYPE cntl_simple_event,wa_node TYPE mtreesnode,it_event TYPE cntl_simple_events,it_node TYPE STANDARD TABLE OF mtreesnode.
DATA: w_visible VALUE '1'.
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 32
UtilizaUtilizao de Eventoso de Eventos
Include TOP (continuao):
CLASS event_class DEFINITION.
PUBLIC SECTION.CLASS-METHODS:handle_node_double_clickFOR EVENT node_double_click OF cl_gui_simple_treeIMPORTING node_key,
handle_menu_requestFOR EVENT node_context_menu_request OF cl_gui_simple_tree.
* IMPORTING node_key menu.
ENDCLASS. "event_class DEFINITION
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 33
UtilizaUtilizao de Eventoso de Eventos
Include PBO:
MODULE status_0100 OUTPUT.
IF g_container_menu IS INITIAL.
PERFORM cria_objetos.PERFORM implementa_eventos.PERFORM monta_menu.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 34
Include FOR:CLASS event_class IMPLEMENTATION.
METHOD handle_node_double_click.
READ TABLE it_node WITH KEYnode_key = node_keyrelatkey = 'SITES'INTO wa_node.
IF sy-subrc EQ 0.CALL METHOD g_browser->show_url
EXPORTINGurl = wa_node-text.
ELSE.CASE node_key.
WHEN 'ATUAL'.CALL METHOD g_browser->do_refresh.
WHEN 'PARAR'.CALL METHOD g_browser->stop.
WHEN 'INICI'.CALL METHOD g_browser->go_home.
ENDCASE.
UtilizaUtilizao de Eventoso de Eventos5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 35
Include FOR (Continuao):
ENDIF.
ENDMETHOD. "handle_node_double_click
METHOD handle_menu_request.
IF w_visible EQ '0'.w_visible = '1'.
ELSE.w_visible = '0'.
ENDIF.
CALL METHOD g_browser->set_visibleEXPORTING
visible = w_visible.
ENDMETHOD. "handle_menu_request
ENDCLASS. "event_class IMPLEMENTATION
UtilizaUtilizao de Eventoso de Eventos5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 36
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
FORM cria_objetos .
CREATE OBJECT g_container_menuEXPORTING
container_name = CC_MENU'.
CREATE OBJECT g_container_browserEXPORTING
container_name = CC_BROWSER'.
CREATE OBJECT g_treeEXPORTING
parent = g_container_menunode_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
CREATE OBJECT g_browserEXPORTING
parent = g_container_browser.
ENDFORM. " cria_containers
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 37
UtilizaUtilizao de Eventoso de EventosInclude FOR (Continuao):FORM implementa_eventos .
CLEAR it_event.REFRESH it_event.
CLEAR wa_event.wa_event-appl_event = 'X'.wa_event-eventid = cl_gui_simple_tree=>eventid_node_double_click.APPEND wa_event TO it_event.
CLEAR wa_event.wa_event-appl_event = 'X'.wa_event-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.APPEND wa_event TO it_event.
CALL METHOD g_tree->set_registered_eventsEXPORTING
events = it_event.
SET HANDLER event_class=>handle_node_double_click FOR g_tree.SET HANDLER event_class=>handle_menu_request FOR g_tree.
ENDFORM. " implementa_eventos
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 38
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):FORM monta_menu .
CLEAR wa_node.wa_node-node_key = 'SITES'.wa_node-isfolder = 'X'.wa_node-text = 'Sites'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'ST1'.wa_node-relatkey = 'SITES'.wa_node-text = 'pt.wikipedia.org'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'ST2'.wa_node-relatkey = 'SITES'.wa_node-text = 'www.sap.com'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'ST3'.wa_node-relatkey = 'SITES'.wa_node-text = 'www.google.com'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'ACOES'.wa_node-isfolder = 'X'.wa_node-text = 'Acoes'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'ATUAL'.wa_node-relatkey = 'ACOES'.wa_node-text = 'Atualizar'.APPEND wa_node TO it_node.
5.1.5.1.TreeTree
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 39
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
CLEAR wa_node.wa_node-node_key = 'PARAR'.wa_node-relatkey = 'ACOES'.wa_node-text = 'Parar'.APPEND wa_node TO it_node.
CLEAR wa_node.wa_node-node_key = 'INICI'.wa_node-relatkey = 'ACOES'.wa_node-text = 'Pg Inicial'.APPEND wa_node TO it_node.
CALL METHOD g_tree->add_nodesEXPORTING
table_structure_name = MTREESNODE'node_table = it_node.
ENDFORM. " monta_menu
5.1.5.1.TreeTree
FIM
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 40
ZTESTE_RCM_05_ALVZTESTE_RCM_05_ALV
UtilizaUtilizao de Eventoso de Eventos5.2.5.2.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 41
ALV ALV GridGridUtilizaUtilizao de Eventoso de Eventos5.2.5.2.
Objetivo:
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 42
UtilizaUtilizao de Eventoso de Eventos5.2.5.2.
Lgica de Processamento:Incio.
TOPCria variveis de referncia para containers, ALV, TEXTEDITCria tabelas internas para cabealho(VBAK), itens(VBAP) e eventosCria definition para classe de eventos (event_class)
PBOChama form cria_objetos
Cria containersCria objetosConfigura TEXTEDIT
Chama form preenche_alvSeleciona dadosPreenche fieldcatsConfigura ALVsInicializa ALVs
Seta EventosFim.
ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 43
UtilizaUtilizao de Eventoso de Eventos
Layout Tela 0100:
5.2.5.2.
CC_TEXTEDITCC_ALV_VBAK CC_ALV_VBAP
ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 44
UtilizaUtilizao de Eventoso de EventosFlow Logic Tela 0100:
PROCESS BEFORE OUTPUT.MODULE STATUS_0100.
PROCESS AFTER INPUT.
Include TOP:TYPE-POOLS: cntl.
CLASS event_class DEFINITION DEFERRED.
TYPES: BEGIN OF tp_texto,line(16) TYPE c,END OF tp_texto.
TYPES: BEGIN OF tp_vbak,vbeln LIKE vbak-vbeln,erdat LIKE vbak-erdat,erzet LIKE vbak-erzet,ernam LIKE vbak-ernam,netwr LIKE vbak-netwr,END OF tp_vbak.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 45
UtilizaUtilizao de Eventoso de Eventos
Include TOP (Continuao):
TYPES: BEGIN OF tp_vbap,vbeln LIKE vbap-vbeln,posnr LIKE vbap-posnr,matnr LIKE vbap-matnr,matkl LIKE vbap-matkl,arktx LIKE vbap-arktx,END OF tp_vbap.
DATA: it_fieldcat TYPE lvc_t_fcat,wa_fieldcat TYPE LINE OF lvc_t_fcat,it_toolbar TYPE ui_functions,wa_toolbar TYPE LINE OF ui_functions.
DATA: it_vbak TYPE STANDARD TABLE OF tp_vbak,it_vbap TYPE STANDARD TABLE OF tp_vbap.
DATA: wa_event TYPE cntl_simple_event,it_event TYPE cntl_simple_events.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 46
UtilizaUtilizao de Eventoso de Eventos
Include TOP (Continuao):
DATA: g_container_alv_vbak TYPE REF TO cl_gui_custom_container,g_container_alv_vbap TYPE REF TO cl_gui_custom_container,g_container_textedit TYPE REF TO cl_gui_custom_container,g_alv_vbak TYPE REF TO cl_gui_alv_grid,g_alv_vbap TYPE REF TO cl_gui_alv_grid,g_textedit TYPE REF TO cl_gui_textedit,g_event TYPE REF TO event_class.
CLASS event_class DEFINITION.PUBLIC SECTION.METHODS:handle_user_commandFOR EVENT user_command OF cl_gui_alv_gridIMPORTINGe_ucomm,
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 47
UtilizaUtilizao de Eventoso de Eventos
Include TOP (Continuao):
handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTINGe_rowe_columnes_row_no,
handle_menu_request FOR EVENT context_menu_request OF cl_gui_alv_gridIMPORTINGe_object,
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_gridIMPORTINGe_objecte_interactive.
PROTECTED SECTION.PRIVATE SECTION.
ENDCLASS. "event_class DEFINITION
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 48
UtilizaUtilizao de Eventoso de Eventos
Include PBO:
MODULE status_0100 OUTPUT.
IF g_container_alv_vbak IS INITIAL.
PERFORM cria_objetos.PERFORM preenche_alv.
CREATE OBJECT g_event.SET HANDLER g_event->handle_user_command FOR g_alv_vbak.SET HANDLER g_event->handle_menu_request FOR g_alv_vbak.SET HANDLER g_event->handle_double_click FOR g_alv_vbak.SET HANDLER g_event->handle_toolbar FOR g_alv_vbak.
CALL METHOD g_alv_vbak->set_toolbar_interactive.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 49
UtilizaUtilizao de Eventoso de Eventos
Include FOR:
CLASS event_class IMPLEMENTATION.
METHOD handle_user_command.DATA: w_vbeln TYPE vbeln_va,
w_row TYPE i,wa_dados TYPE tp_texto,it_dados TYPE STANDARD TABLE OF tp_texto.
CALL METHOD g_alv_vbak->get_current_cellIMPORTINGe_row = w_rowe_value = w_vbeln.
CASE e_ucomm.WHEN 'ZZZ' OR 'ADD'.CALL METHOD g_textedit->get_text_as_r3tableIMPORTINGtable = it_dados.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 50
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
IF e_ucomm EQ 'ZZZ'.wa_dados = 'Evento TOOLBAR'.
ELSE.wa_dados = w_vbeln.
ENDIF.APPEND wa_dados TO it_dados.
CALL METHOD g_textedit->set_text_as_r3tableEXPORTING
table = it_dados.
WHEN 'TXT'.wa_dados = w_vbeln.APPEND wa_dados TO it_dados.
CALL METHOD g_textedit->set_text_as_r3tableEXPORTING
table = it_dados.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 51
UtilizaUtilizao de Eventoso de EventosInclude FOR (Continuao):WHEN 'VIEW'.
FIELD-SYMBOLS TYPE tp_vbak.
CALL METHOD g_alv_vbak->get_current_cellIMPORTING
e_row = w_row.
READ TABLE it_vbak INDEX w_row ASSIGNING .IF IS ASSIGNED.
SELECT vbeln posnr matnr matkl arktxFROM vbapINTO TABLE it_vbapWHERE vbeln = -vbeln.
IF sy-subrc EQ 0.CALL METHOD g_alv_vbap->refresh_table_display.
ENDIF.ENDIF.
ENDCASE.
ENDMETHOD. "handle_user_command
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 52
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
METHOD handle_menu_request.
CALL METHOD e_object->clear.
CALL METHOD e_object->add_functionEXPORTING
fcode = 'TXT'text = 'Enviar p/ textedit'.
CALL METHOD e_object->add_functionEXPORTING
fcode = 'ADD'text = 'Adicionar a textedit'.
CALL METHOD e_object->add_functionEXPORTING
fcode = 'VIEW'text = 'Visualizar itens desta ordem'.
ENDMETHOD. "handle_right_click
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 53
UtilizaUtilizao de Eventoso de EventosInclude FOR (Continuao):METHOD handle_toolbar.
DATA: it_botoes TYPE ttb_button,wa_botoes TYPE LINE OF ttb_button.
wa_botoes-function = 'ZZZ'.wa_botoes-icon = '@6C@'. RSTXICONwa_botoes-text = 'ZZZ'.wa_botoes-butn_type = 0.
APPEND wa_botoes TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
ENDCLASS. "event_class IMPLEMENTATION
METHOD handle_double_click.FIELD-SYMBOLS TYPE tp_vbak.
READ TABLE it_vbak INDEX e_row ASSIGNING .SET PARAMETER ID 'AUN' FIELD -vbeln.CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDMETHOD. "handle_double_click
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 54
UtilizaUtilizao de Eventoso de EventosInclude FOR (Continuao):
FORM cria_objetos .
CREATE OBJECT g_container_texteditEXPORTINGcontainer_name = 'CC_TEXTEDIT'.
CREATE OBJECT g_container_alv_vbakEXPORTINGcontainer_name = 'CC_ALV_VBAK'.
CREATE OBJECT g_container_alv_vbapEXPORTINGcontainer_name = 'CC_ALV_VBAP'.
CREATE OBJECT g_texteditEXPORTINGwordwrap_mode = g_textedit->wordwrap_at_fixed_positionwordwrap_position = 16parent = g_container_textedit.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 55
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
CALL METHOD g_textedit->set_statusbar_modeEXPORTINGstatusbar_mode = g_textedit->false.
CALL METHOD g_textedit->set_toolbar_modeEXPORTINGtoolbar_mode = g_textedit->false.
CREATE OBJECT g_alv_vbakEXPORTINGi_parent = g_container_alv_vbak.
CREATE OBJECT g_alv_vbapEXPORTINGi_parent = g_container_alv_vbap.
ENDFORM. " cria_objetos
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 56
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
FORM preenche_alv.
SELECT vbeln erdat erzet ernam netwrFROM vbakINTO TABLE it_vbak UP TO 15 ROWS.
PERFORM fieldcat_vbak.
CALL METHOD g_alv_vbak->set_table_for_first_displayEXPORTINGi_save = 'A'i_default = 'X'
CHANGINGit_outtab = it_vbakit_fieldcatalog = it_fieldcat.
PERFORM fieldcat_vbap.
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 57
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
wa_toolbar = cl_gui_alv_grid=>mc_fc_excl_all.APPEND wa_toolbar TO it_toolbar.
CALL METHOD g_alv_vbap->set_table_for_first_displayEXPORTINGi_save = 'A'i_default = 'X'it_toolbar_excluding = it_toolbar
CHANGINGit_outtab = it_vbapit_fieldcatalog = it_fieldcat.
ENDFORM. " preenche_alv
5.2.5.2.ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 58
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
FORM fieldcat_vbak.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'VBELN'.wa_fieldcat-ref_table = 'VBAK'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'ERDAT'.wa_fieldcat-ref_table = 'VBAK'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'ERZET'.wa_fieldcat-ref_table = 'VBAK'.APPEND wa_fieldcat TO it_fieldcat.
5.2.5.2.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'ERNAM'.wa_fieldcat-ref_table = 'VBAK'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'NETWR'.wa_fieldcat-ref_table = 'VBAK'.APPEND wa_fieldcat TO it_fieldcat.
ENDFORM. "fieldcat_vbak
ALV ALV GridGrid
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 59
UtilizaUtilizao de Eventoso de Eventos
Include FOR (Continuao):
FORM fieldcat_vbap.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'VBELN'.wa_fieldcat-ref_table = 'VBAP'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'POSNR'.wa_fieldcat-ref_table = 'VBAP'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'MATNR'.wa_fieldcat-ref_table = 'VBAP'.APPEND wa_fieldcat TO it_fieldcat.
5.2.5.2.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'MATKL'.wa_fieldcat-ref_table = 'VBAP'.APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.wa_fieldcat-fieldname = 'ARKTX'.wa_fieldcat-ref_table = 'VBAP'.APPEND wa_fieldcat TO it_fieldcat.
ENDFORM. "fieldcat_vbap
ALV ALV GridGrid
FIM
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 60
ParticularidadesParticularidades
Eventos de Sistema
Eventos de Aplicao
CL_GUI_CFW=>FLUSH
CL_GUI_CFW=>DISPATCH
So disparados antes da checagem automtica de campos. PBO e PAI no so processados, por isso os valores que forem alterados no mtodo correspondente ao evento no sero atualizados na SCREEN.
So processados pelo PAI, depois da checagem automtica dos campos. O PBO conseguinte processado normalmente, e os valores alterados so repassados para a SCREEN.
Fora a sincronizao entre as chamadas dos mtodos e o cdigo ABAP (a maioria dos mtodos j faz uma sincronizao automtica).
Executa os eventos de aplicao ( disparado automaticamente ao trmino do PAI).
ControleControle6.6.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 61
Por ser uma apresentao voltada para GUI, algumas caractersticas do ABAP Objects no foram exploradas (tais como INTERFACES e HERANA, ALIAS, etc.) pois as classes criadas localmente nesse
curso so utilizadas apenas para o gerenciamento de eventos, ficando a a dica para um estudo aprofundado das mesmas.
Parte da interatividade (como o Drag&Drop) perdida quando o SAP executado fora do SAPGui, por isso recomendvel que o usurio consiga executar a mesma ao de maneiras diferentes para garantir
que as funcionalidades estejam sempre presentes.
Como esta uma apresentao e no uma apostila, alguns conceitos e dicas so exibidas apenas ao desenrolar do curso, assim sendo,
para um melhor entendimento do assunto recomenda-se a consulta de apostilas e tutoriais especializados, muitos dos quais disponveis
gratuitamente na documentao oficial SAP (http://help.sap.com)
ConsideraConsideraes Finaises Finais7.7.
-
Apresentao Bsica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 62
Anexo IAnexo I
Classes:CL_GUI_CUSTOM_CONTAINERCL_GUI_CONTAINERCL_GUI_EASY_SPLITTER_CONTAINERCL_GUI_TEXTEDITCL_GUI_CALENDARCL_GUI_SIMPLE_TREECL_GUI_HTML_VIEWERCL_GUI_ALV_GRIDCL_CTMENUCL_GUI_CFW
Estruturas:MTREESNODECNTL_SIMPLE_EVENTSUI_FUNCTIONSLVC_T_FCAT
RelaRelao de Classe/Estruturas citadas nesta apresentao de Classe/Estruturas citadas nesta apresentaoo