62
Apresentação Básica ABAP Objects para GUI - Rafael de Castro Manopeli - Abril/2006 1 Apresenta Apresenta ç ç ão B ão B á á sica sica - - ABAP ABAP Objects Objects para GUI para GUI Apresenta Apresentaç ão ão Esta apresentação foi desenvolvida com conceitos e exemplos próprios, além de uma linguagem simples e objetiva para proporcionar um rápido e eficaz aprendizado na utilização de ABAP Objects, dirigindo-se especialmente para a interface gráfica com o usuário(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, opiniões ou sugestões [email protected] Rafael de Castro Manopeli Consultor SAP - ABAP

OOP_GUI

Embed Size (px)

DESCRIPTION

OO abap

Citation preview

  • 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