Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ABAP Object Event

Former Member
0 Likes
1,380

Hi All,

Could anybody send me a document for ABAP Object events.

And simple programs for Events.

My id - ponraj_rec@yahoo.com

Thanks,

Ponraj.s.

4 REPLIES 4
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
1,050

http://help.sap.com/saphelp_nw2004s/helpdata/en/71/a8a77955bc11d194aa0000e8353423/frameset.htm

Also, please see example program BCALV_TEST_GRID_EVENTS

Regards,

Rich Heilman

Read only

uwe_schieferstein
Active Contributor
0 Likes
1,050

Hello Ponraj

Have a look at the reuse library (SE83) of SAP. Under controls you will find many (simple) sample programs dealing with various aspects of control programming, which is based on ABAP-OO. This includes also event handling. The programs are usually quite well documented inbetween the coding lines.

The principle behind event handling is simple:

- you have a sender that can raise events (e.g. an instance of CL_GUI_ALV_GRID)

- you have a receiver that has registered itself for these events

Example:

If you have define hotspots on your ALV list and the user click on such a field the ALV grid instance will raise event HOTSPOT_CLICK.

If a receiver has registered itself for this event (statement: SET HANDLER <event handler method> FOR ALL INSTANCES) then the system will call this event handler method.

After calling all event handler methods (of different receivers) the systems returns to where it was before raising the event meaning that we do NOT pass PAI of the dynpro.

Finally, if we have multiple event handler methods registered (of different object instances) we cannot know in which order they are process - just random.

Regards

Uwe

Read only

Former Member
0 Likes
1,050

Hi Ponraj,

You can refer this document for more details.

http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt

There are certain points to be noted while working on events in a class:

1)First the event has to be defined.

For eg:

EVENTS critical_value EXPORTING

value(excess) TYPE i.

2)The method to be executed when the event occurs , has to be defined. It can be in the same or different class in which the event is declared.

For eg:if it is in different class, the way in which the method is declared is like this.

METHODS handle_excess FOR EVENT critical_value OF <b>counter</b> IMPORTING excess.

Here counter is the name of the class in which the event is declared.

3)The event can be raised using the statement RAISE EVENT..

For eg:

RAISE EVENT critical_value

EXPORTING excess = diff.

4)Now the method implementation has to be given in the class implementation using METHOD ... ENDMETHOD.

5) The link between the event and the method is established using the statement SET HANDLER , which registers the event.

For eg:

CREATE OBJECT: r1, h1.

SET HANDLER h1->handle_excess FOR ALL INSTANCES.

This is the case of user-defined events. In the case of Predefined events, you can skip the step 1 & 3, as the events are defined already and they are triggered automatically. For eg: double click event is triggered automatically on button double click.

<b>Award points to all helpful answers.</b>

Regards,

SP.

Read only

Former Member
0 Likes
1,050

Hi,

Go thru this basic simple program with documentation which demonstrates how to handle events, for nodes in a tree using abap objects

REPORT YLIST_TREE MESSAGE-ID ZER_INFO.

CLASS LCL_EVT_HDLR DEFINITION DEFERRED. " definition is given later

CLASS CL_GUI_CFW DEFINITION LOAD. " global class to be loaded

DATA:G_EVENT(50), " to hold the event

G_NODE_KEY TYPE TV_NODEKEY, "holds the node key

G_ITEM_NAME TYPE TV_ITMNAME,

G_KEY TYPE TV_ITMNAME.

DATA:G_EVT_HDLR TYPE REF TO LCL_EVT_HDLR,

G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

G_TREE TYPE REF TO CL_GUI_LIST_TREE,

G_OK_CODE TYPE SY-UCOMM.

TYPES:ITEM_TABLE_TYPE LIKE STANDARD TABLE OF MTREEITM

WITH DEFAULT KEY.

----


  • CLASS lcl_evt_hdlr DEFINITION

----


*

----


CLASS LCL_EVT_HDLR DEFINITION.

PUBLIC SECTION.

METHODS:

*---- methods for action handling for nodes

NODE_DBL_CLK

FOR EVENT NODE_DOUBLE_CLICK

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY,

HANDLE_NODE_KEY_PRESS

FOR EVENT NODE_KEYPRESS

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY KEY,

*---- methods for action handling for Items

ITEM_DBL_CLK

FOR EVENT ITEM_DOUBLE_CLICK

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY ITEM_NAME,

HANDLE_ITEM_KEY_PRESS

FOR EVENT ITEM_KEYPRESS

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY ITEM_NAME KEY,

*---- Common methods for action handling

  • HANDLE_RIGHT_CLICK

  • FOR EVENT RIGHT_CLICK

  • OF CL_GUI_LIST_TREE,

HANDLE_EXPAND_NO_CHILDREN

FOR EVENT EXPAND_NO_CHILDREN

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY.

ENDCLASS. "lcl_evt_hdlr DEFINITION

----


  • CLASS lcl_evt_hdlr IMPLEMENTATION

----


*

----


CLASS LCL_EVT_HDLR IMPLEMENTATION.

METHOD NODE_DBL_CLK.

  • this method handles the node double click event of the tree control

  • and shows the key of the double clicked node in a dynpro field

G_EVENT = 'NODE_DOUBLE_CLICK'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ' '.

ENDMETHOD. "node_dbl_clk

METHOD ITEM_DBL_CLK.

G_EVENT = 'ITEM_DOUBLE_CLICK'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ITEM_NAME.

ENDMETHOD. "ITEM_DBL_CLK

METHOD HANDLE_NODE_KEY_PRESS.

G_EVENT = 'NODE_KEYPRESS'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ' '.

G_KEY = KEY.

ENDMETHOD. "HANDLE_NODE_KEY_PRESS

METHOD HANDLE_ITEM_KEY_PRESS.

G_EVENT = 'ITEM_KEYPRESS'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ITEM_NAME.

G_KEY = KEY.

ENDMETHOD. "HANDLE_ITEM_KEY_PRESS

  • METHOD HANDLE_RIGHT_CLICK.

  • G_EVENT = 'RIGHT_CLICK'.

  • ENDMETHOD. "handle_right_click

METHOD HANDLE_EXPAND_NO_CHILDREN.

G_EVENT = 'EXPAND_NO_CHILDREN'.

G_NODE_KEY = NODE_KEY.

ENDMETHOD. "handle_EXPAND_NO_CHILDREN

ENDCLASS. "lcl_evt_hdlr IMPLEMENTATION

*------ start-of-selection.

START-OF-SELECTION.

*data: G_EVT_HDLR TYPE REF TO LCL_EVT_HDLR.

CREATE OBJECT G_EVT_HDLR. "create an object for the class lcl_evt_hdlr

SET SCREEN 100.

----


  • MODULE pbo_100 OUTPUT

----


*

----


MODULE PBO_100 OUTPUT.

SET PF-STATUS 'BUT'.

IF G_TREE IS INITIAL.

  • the tree control has not yet been created

  • create a tree control and insert nodes into it.

PERFORM CREATE_AND_INIT_TREE.

ENDIF.

ENDMODULE. "pbo_100 OUTPUT

----


  • MODULE pai_100 INPUT

----


*

----


MODULE PAI_100 INPUT.

DATA:RETURN_CODE TYPE I.

  • CL_GUI_CFW=>DISPATCH must be called if events are registered

  • that trigger PAI

  • this method calls the event handler method of an event

CALL METHOD CL_GUI_CFW=>DISPATCH

IMPORTING

RETURN_CODE = RETURN_CODE.

IF RETURN_CODE <> CL_GUI_CFW=>RC_NOEVENT.

" a control event occured => exit PAI

CLEAR G_OK_CODE.

EXIT.

ENDIF.

*at user-command.

g_ok_code = sy-ucomm.

CASE G_OK_CODE.

WHEN 'BACK'. " Finish program

IF NOT G_CUSTOM_CONTAINER IS INITIAL.

" destroy tree container (detroys contained tree control, too)

CALL METHOD G_CUSTOM_CONTAINER->FREE

EXCEPTIONS

CNTL_SYSTEM_ERROR = 1

CNTL_ERROR = 2.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

CLEAR G_CUSTOM_CONTAINER.

CLEAR G_TREE.

ENDIF.

LEAVE PROGRAM.

ENDCASE.

  • CAUTION: clear ok code!

CLEAR G_OK_CODE.

ENDMODULE. "pai_100 INPUT

&----


*& Form create_and_init_tree

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM CREATE_AND_INIT_TREE .

DATA:NODE_TABLE TYPE TREEV_NTAB,

ITEM_TABLE TYPE ITEM_TABLE_TYPE,

EVENTS TYPE CNTL_SIMPLE_EVENTS,

EVENT TYPE CNTL_SIMPLE_EVENT.

  • create a container for the tree control.

CREATE OBJECT G_CUSTOM_CONTAINER

EXPORTING

  • the container is linked to the custom control with the

  • name 'TREE_CONTAINER' on the dynpro

CONTAINER_NAME = 'TREE_CONTAINER'

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

CREATE_ERROR = 3

LIFETIME_ERROR = 4

LIFETIME_DYNPRO_DYNPRO_LINK = 5.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

  • create a list tree control

CREATE OBJECT G_TREE

EXPORTING

PARENT = G_CUSTOM_CONTAINER

NODE_SELECTION_MODE = CL_GUI_LIST_TREE=>NODE_SEL_MODE_SINGLE

ITEM_SELECTION = 'X'

WITH_HEADERS = ' '

EXCEPTIONS

CNTL_SYSTEM_ERROR = 1

CREATE_ERROR = 2

FAILED = 3

ILLEGAL_NODE_SELECTION_MODE = 4

LIFETIME_ERROR = 5.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

*------- KEY = enter

CALL METHOD G_TREE->ADD_KEY_STROKE

EXPORTING

KEY = CL_TREE_CONTROL_BASE=>KEY_ENTER

EXCEPTIONS

FAILED = 1

ILLEGAL_KEY = 2

CNTL_SYSTEM_ERROR = 3.

IF SY-SUBRC <> 0.

MESSAGE W006 WITH 'ADD_KEY_STROKE'.

ENDIF.

  • define the events which will be passed to the backend

  • node double click

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_DOUBLE_CLICK.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_DOUBLE_CLICK.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_KEYPRESS.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_KEYPRESS.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

  • EVENT-EVENTID = LCL_EVT_HDLR=>EVENT_RIGHT_CLICK.

  • EVENT-APPL_EVENT = 'X'.

  • APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_EXPAND_NO_CHILDREN.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

*------ register the events

CALL METHOD G_TREE->SET_REGISTERED_EVENTS

EXPORTING

EVENTS = EVENTS

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

ILLEGAL_EVENT_COMBINATION = 3.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

  • assign event handlers in the application class to each desired events

SET HANDLER G_EVT_HDLR->NODE_DBL_CLK FOR G_TREE.

SET HANDLER G_EVT_HDLR->ITEM_DBL_CLK FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_NODE_KEY_PRESS FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_ITEM_KEY_PRESS FOR G_TREE.

  • SET HANDLER G_EVT_HDLR->HANDLE_RIGHT_CLICK FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_EXPAND_NO_CHILDREN FOR G_TREE.

  • add some nodes to the tree control

PERFORM BUILD_NODE_AND_ITEM_TABLE USING NODE_TABLE ITEM_TABLE.

CALL METHOD G_TREE->ADD_NODES_AND_ITEMS

EXPORTING

NODE_TABLE = NODE_TABLE

ITEM_TABLE = ITEM_TABLE

ITEM_TABLE_STRUCTURE_NAME = 'mtreeitm'

EXCEPTIONS

FAILED = 1

CNTL_SYSTEM_ERROR = 3

ERROR_IN_TABLES = 4

DP_ERROR = 5

TABLE_STRUCTURE_NAME_NOT_FOUND = 6.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

ENDFORM. " create_and_init_tree

&----


*& Form build_node_and_item_table

&----


  • text

----


  • -->P_NODE_TABLE text

  • -->P_ITEM_TABLE text

----


FORM BUILD_NODE_AND_ITEM_TABLE USING

NODE_TABLE TYPE TREEV_NTAB

ITEM_TABLE TYPE ITEM_TABLE_TYPE.

DATA:NODE TYPE TREEV_NODE,

ITEM TYPE MTREEITM.

  • build the node table

  • node with key 'root'.

CLEAR NODE.

NODE-NODE_KEY = 'Root'. " key of the node

CLEAR NODE-RELATKEY. " root node has no parent node

CLEAR NODE-RELATSHIP.

NODE-HIDDEN = ' '. " the node is visible

NODE-DISABLED = ' '. " selectable

NODE-ISFOLDER = 'X'. " a folder

CLEAR NODE-N_IMAGE. " folder-/ leaf symbol in state "closed"

"use default.

CLEAR NODE-EXP_IMAGE. " folder-/ leaf symbol in state "open"

"use default.

CLEAR NODE-EXPANDER. " the width of the item is adjusted to its "

" content (text)

APPEND NODE TO NODE_TABLE.

  • node with key 'child1'.

CLEAR NODE.

NODE-NODE_KEY = 'Child1'. "key of the node

NODE-RELATKEY = 'Root'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

APPEND NODE TO NODE_TABLE.

  • node with key 'Subchild1' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild1'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

APPEND NODE TO NODE_TABLE.

  • node with key 'subchild2' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild2'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

APPEND NODE TO NODE_TABLE.

  • node with key 'subchild3' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild3'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

APPEND NODE TO NODE_TABLE.

  • node with key 'child2'.

CLEAR NODE.

NODE-NODE_KEY = 'Child2'. "key of the node

NODE-RELATKEY = 'Root'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

NODE-EXPANDER = 'X'. " The node is marked with a '+', although

" it has no children. When the user clicks on the

" + to open the node, the event expand_nc is

" fired. The programmerr can

" add the children of the

" node within the event handler of the expand_nc

" event (see callback handle_expand_nc).

APPEND NODE TO NODE_TABLE.

  • items of the nodes

  • item with key 'root'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Root'.

ITEM-ITEM_NAME = '1'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT. " text item

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO. "the width of the item

"is adjusted to its content

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP. "use proportional font

" for the item

ITEM-TEXT = 'object'.

APPEND ITEM TO ITEM_TABLE.

  • item with key 'child1'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Child1'.

ITEM-ITEM_NAME = '11'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = 'dynpros'.

APPEND ITEM TO ITEM_TABLE.

  • item with key 'child2'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Child2'.

ITEM-ITEM_NAME = '12'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = 'programme'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'Subchild1'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild1'.

ITEM-ITEM_NAME = '111'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 11.

ITEM-TEXT = 'include'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'SubChild2'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '112'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 4. " the width of the item is 4 chars

ITEM-IGNOREIMAG = 'X'. " see documentation of structure treev_item

ITEM-USEBGCOLOR = 'X'.

ITEM-T_IMAGE = '@01@'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '113'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 4. " the width of the item is 4 chars

ITEM-USEBGCOLOR = 'X'.

ITEM-TEXT = '0100'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '114'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 11.

ITEM-USEBGCOLOR = 'X'.

ITEM-TEXT = ' mueller'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '115'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = ' comment to dynpro 100'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'SubChild3'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild3'.

ITEM-ITEM_NAME = '121'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 20.

ITEM-IGNOREIMAG = 'X'.

ITEM-USEBGCOLOR = 'X'.

ITEM-T_IMAGE = '@02@'.

ITEM-TEXT = ' 0200 harryhirsch'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild3'.

ITEM-ITEM_NAME = '122'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = ' comment to dynpro 200'.

APPEND ITEM TO ITEM_TABLE.

ENDFORM. " build_node_and_item_table

also i have sent a material to ur id

I hope you will get a clear idea on events

Regards,

Sowjanya