Professional Documents
Culture Documents
OOPS-ABAP
1. Oops concepts
2. Alv reporting using classes
3. Alv reporting using function modules (2-3 hrs.)
OOPS Concepts
Features of OOPS:
1. Encapsulation
2. Data abstraction
3. Inheritance
4. Polymorphism
Instance static
Normal special
Methods Methods
Instance static
Attributes Attributes
Instance static
Constructor constructor
Instance static
Endclass.
2. Implementation of class:
Syntax: -
Class <class name> implementation.
Implementation of methods.
Endclass.
C++: -
1. Private (default)
2. Protected
3. Public
Java: -
1. Default(default)
2. Public
3. Protected
4. Private
Abap: -
1. Public section
2. Protected section
3. Private section
Variable are used to store the date as declared inside the class is
called attributes outside is called variables.
DAY 2
OB1->X = 10.
OB1->Y = 20.
Examples 2:
Ob2->y = 30.
Changes public to protected/private give error (we can use inheritance will discuss later)
DAY 3 (METHOD INSTANCE & STATIC)
Methods: Is a set of statements which is implemented only once and can be called any no of
times. Like subroutines and function module
Subroutines: -
Calling perform <sub> {parameters}
Define form … end form
Function modules:
Calling call function <FM name> {parameters}
Define function… end function.
Parameters: -
subroutines: - using, changing, tables.
FM’s: - import, Export, Changing, tables
Methods: - importing, exporting, changing, returning
Instance methods: - This method can access any kind of components they can we called only by using
the objects.
In local class they are declared by using the ‘methods’.
Static methods: - they can be access by using static components
They can be called either by using objects or by using class name
They are declared by using ‘class-methods’.
Note: - 1. If a class contains attributes and methods it is recommended to declared attribute under
protected or private section and methods under public section.
2.Static attributes are also called class attributes.
DAY 4
Note: - if a class contains methods and attributes and when we create object of the class
memory will be allocated only for the attributes but not for the methods.
REPORT Z7AMOOPS3. " local class with attributes and methods with class definition and implem
entation in sequence
START-OF-SELECTION.
CREATE OBJECT OB.
CALL METHOD : OB->M2,
OB->M1,
OB->M2.
ULINE.
OB->M2( ).
Eg 2
PUBLIC SECTION.
METHODS M1.
PROTECTED SECTION.
DATA : EMPNO TYPE I,
ENAME(20) TYPE C.
METHODS M2.
ENDCLASS.
START-OF-SELECTION.
DATA OB TYPE REF TO EMP.
CREATE OBJECT OB.
METHOD m1.
WRITE :/ 'inside instance method m1'.
x = 10.
y = 20.
ENDMETHOD.
METHOD m2.
WRITE :/ 'inside static method m2'.
y = 45.
* x = 34.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS : m1 IMPORTING x TYPE i OPTIONAL
y TYPE c OPTIONAL,
m2.
PROTECTED SECTION.
DATA : empno TYPE i,
ename(20) TYPE c.
ENDCLASS.
METHOD m1.
empno = x.
ename = y.
ENDMETHOD.
METHOD m2.
WRITE :/ empno,ename.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
ULINE.
*ob->m1( exporting x = 34 y = 'abc' ).
ob->m1( x = 34 y = 'abc' ).
ob->m2( ).
PUBLIC SECTION.
METHODS m1 IMPORTING x TYPE kunnr
EXPORTING y TYPE land1_gp
z TYPE name1_gp.
ENDCLASS.
METHOD m1.
IF x IS NOT INITIAL.
SELECT SINGLE land1 name1 FROM kna1
INTO (y,z) WHERE kunnr = x.
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS m1 IMPORTING x TYPE i
CHANGING y TYPE i.
ENDCLASS.
METHOD m1.
y = x + y.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
PUBLIC SECTION.
METHODS m1 IMPORTING x TYPE i y TYPE i
RETURNING VALUE(z) TYPE i.
ENDCLASS.
ENDCLASS.
START-OF-SELECTION.
lv_z = ob->m1( x = 10 y = 20 ).
WRITE :/ 'sum is ',lv_z.
REPORT z7amoops11. " me keyword
PUBLIC SECTION.
METHODS m1 IMPORTING x TYPE i y TYPE i h TYPE i
EXPORTING z TYPE i.
PROTECTED SECTION.
DATA : x TYPE i,
y TYPE i,
m TYPE i.
ENDCLASS.
METHOD m1.
me->x = x.
me->y = y.
m = h.
z = me->x + me->y + m.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS m4.
ENDCLASS.
PUBLIC SECTION.
METHODS m1.
PROTECTED SECTION.
METHODS m2.
PRIVATE SECTION.
METHODS m3.
ENDCLASS.
METHOD m1.
WRITE :/ 'inside public method m1'.
ENDMETHOD.
METHOD m2.
WRITE :/ 'inside protected method m2'.
ENDMETHOD.
METHOD m3.
WRITE :/ 'inside private method m3'.
ENDMETHOD.
ENDCLASS.
METHOD m4.
WRITE :/ 'inside method m4'.
DATA k TYPE REF TO abc.
CREATE OBJECT k.
CALL METHOD k->m1.
CALL METHOD k->m2.
CALL METHOD k->m3.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS m1.
PROTECTED SECTION.
METHODS m2.
PRIVATE SECTION.
METHODS m3.
ENDCLASS.
METHOD m2.
WRITE :/ 'inside protected method m2'.
ENDMETHOD.
METHOD m3.
WRITE :/ 'inside private method m3'.
ENDMETHOD.
ENDCLASS.
PUBLIC SECTION.
METHODS m4.
ENDCLASS.
METHOD m4.
WRITE :/ 'inside method m4'.
DATA k TYPE REF TO abc.
CREATE OBJECT k.
CALL METHOD k->m1.
CALL METHOD k->m2.
* call method k->m3. (or)
k->m3( ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS : m1,
constructor.
CLASS-METHODS class_constructor.
ENDCLASS.
METHOD m1.
WRITE :/ 'inside instance method m1'.
ENDMETHOD.
METHOD constructor.
WRITE :/ 'inside instance constructor'.
ENDMETHOD.
METHOD class_constructor.
WRITE :/ 'inside static constructor'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
ULINE.
WRITE :/ 'Second object..'.
DATA ob2 TYPE REF TO abc.
CREATE OBJECT ob2.
ULINE.
WRITE :/ 'Third object..'.
DATA ob3 TYPE REF TO abc.
CREATE OBJECT ob3.
ULINE.
CALL METHOD ob1->m1.
CALL METHOD ob1->m1.
REPORT z7amoops16. " Normal methods and special methods (static constr
uctor execution before creating any object)
PUBLIC SECTION.
METHODS : m1,
constructor.
CLASS-METHODS class_constructor.
CLASS-DATA x TYPE i.
ENDCLASS.
METHOD m1.
WRITE :/ 'inside instance method m1'.
ENDMETHOD.
METHOD constructor.
WRITE :/ 'inside instance constructor'.
ENDMETHOD.
METHOD class_constructor.
WRITE :/ 'inside static constructor'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
abc=>x = 34.
WRITE :/ 'First object..'.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
ULINE.
WRITE :/ 'Second object..'.
DATA ob2 TYPE REF TO abc.
CREATE OBJECT ob2.
ULINE.
WRITE :/ 'Third object..'.
DATA ob3 TYPE REF TO abc.
CREATE OBJECT ob3.
ULINE.
CALL METHOD ob1->m1.
CALL METHOD ob1->m1.
*uline.
*call method ob1->constructor.
REPORT z7amoops17. " constructors initializing attributes of class
PUBLIC SECTION.
METHODS : constructor,
display.
PROTECTED SECTION.
DATA : empno TYPE i,
ename(20) TYPE c.
ENDCLASS.
METHOD constructor.
empno = 4.
ename = 'raju'.
ENDMETHOD.
METHOD display.
WRITE :/ empno,ename.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PUBLIC SECTION.
METHODS : constructor IMPORTING x TYPE i OPTIONAL
y TYPE c OPTIONAL,
display.
PROTECTED SECTION.
DATA : empno TYPE i,
ename(20) TYPE c.
ENDCLASS.
METHOD constructor.
empno = x.
ename = y.
ENDMETHOD.
METHOD display.
WRITE :/ empno,ename.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
ENDCLASS.
METHOD setcycle.
wheels = 2.
brakes = 2.
colour = 'green'.
ENDMETHOD.
METHOD display.
WRITE :/ wheels,brakes,colour.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
WRITE :/ 'CYCLE CLASS ....'.
DATA ob1 TYPE REF TO cycle.
CREATE OBJECT ob1.
ENDCLASS.
METHOD m2.
WRITE :/ 'inside super class method m2'.
ENDMETHOD.
METHOD m3.
WRITE :/ 'inside static method m3 of super class'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
METHOD class_constructor.
WRITE :/ 'inside static constr of super class'.
ENDMETHOD.
ENDCLASS.
ENDCLASS.
START-OF-SELECTION.
WRITE :/ 'First object ..'.
DATA ob1 TYPE REF TO pqr.
CREATE OBJECT ob1.
ULINE.
WRITE :/ 'Second object ..'.
DATA ob2 TYPE REF TO pqr.
CREATE OBJECT ob2.
REPORT z7amoops25. " hierarchy of const.execution scenario 2
METHOD class_constructor.
WRITE :/ 'inside static constr of super class'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
WRITE :/ 'First object ..'.
DATA ob1 TYPE REF TO pqr.
CREATE OBJECT ob1.
ULINE.
WRITE :/ 'Second object ..'.
DATA ob2 TYPE REF TO pqr.
CREATE OBJECT ob2.
METHOD class_constructor.
WRITE :/ 'inside static constr of super class'.
ENDMETHOD.
ENDCLASS.
METHOD constructor.
WRITE :/ 'inside instance constr of sub class'.
CALL METHOD super->constructor.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
WRITE :/ 'First object ..'.
DATA ob1 TYPE REF TO pqr.
CREATE OBJECT ob1.
ULINE.
WRITE :/ 'Second object ..'.
DATA ob2 TYPE REF TO pqr.
CREATE OBJECT ob2.
METHOD display.
WRITE :/ tableno,steward.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO restaurant.
ULINE.
WRITE :/ 'CHEQUE --> RESTAURANT'.
ob = cq.
CALL METHOD : ob->store,
ob->display,
ob->payment.
ULINE.
WRITE :/ 'CREDIT CARD object..'.
DATA cc TYPE REF TO creditcard.
CREATE OBJECT cc.
ULINE.
WRITE :/ 'CREDIT CARD ---> RESTAURANT'.
ob = cc.
CALL METHOD : ob->store,
ob->display,
ob->payment.
INTERFACE square.
CONSTANTS side TYPE i VALUE 5.
METHODS : area,
perimeter.
ENDINTERFACE.
METHOD rectangle~perimeter.
res = 2 * ( rectangle~length + rectangle~breadth ).
WRITE :/ 'Perimeter of rectangle is ',res.
ENDMETHOD.
METHOD square~area.
res = square~side * square~side.
WRITE :/ 'Area of square is ',res.
ENDMETHOD.
METHOD square~perimeter.
res = 4 * square~side.
WRITE :/ 'perimeter of square is ',res.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA r TYPE REF TO rectangle.
ULINE.
WRITE :/ 'IMPL.CLASS ---> RECTANGLE Interface'.
r = ob.
CALL METHOD : r->area,
r->perimeter.
ULINE.
DATA s TYPE REF TO square.
WRITE :/ 'IMPL.CLASS ---> SQUARE Interface'.
s = ob.
CALL METHOD : s->area,
s->perimeter.
INTERFACE abc.
METHODS : m1,
m2,
m3.
ENDINTERFACE.
ENDCLASS.
METHOD abc~m3.
WRITE :/ 'inside m3'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO lmn.
CREATE OBJECT ob.
INTERFACE pqr.
METHODS : m1,
m2.
ENDINTERFACE.
METHOD a2.
WRITE :/ 'inside method m2'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
INTERFACE intf1.
METHODS : m1,
m2.
ENDINTERFACE.
INTERFACE intf2.
METHODS m3.
INTERFACES intf1.
ENDINTERFACE.
METHOD intf1~m1.
WRITE :/ 'inside method m1'.
ENDMETHOD.
METHOD intf1~m2.
WRITE :/ 'inside method m2'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO impl.
CREATE OBJECT ob.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
ULINE.
CLEAR lv_str.
CALL METHOD k->if_message~get_longtext
RECEIVING
result = lv_str.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
START-OF-SELECTION.
PARAMETERS : p_x TYPE i,
p_y TYPE i.
IF sy-subrc EQ 0.
WRITE :/ 'Division is ',lv_z.
ELSEIF sy-subrc EQ 1.
WRITE :/ 'cannot divide by zero'.
ELSEIF sy-subrc EQ 2.
WRITE :/ 'Unknown error'.
ENDIF.
START-OF-SELECTION.
PARAMETERS : p_x TYPE i,
p_y TYPE i.
IF sy-subrc EQ 0.
WRITE :/ 'Division is ',lv_z.
ELSEIF sy-subrc EQ 1.
WRITE :/ 'cannot divide by zero'.
ELSEIF sy-subrc EQ 2.
WRITE :/ 'Unknown error'.
ENDIF.
IF sy-subrc EQ 0.
WRITE :/ 'Division is ',lv_z.
ELSEIF sy-subrc EQ 11.
WRITE :/ 'Cannot divide by zero'.
ELSEIF sy-subrc EQ 20.
WRITE :/ 'Unknown errror'.
ENDIF.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
TRY.
CALL METHOD ob->m1
EXPORTING
x = p_x
y = p_y
IMPORTING
z = lv_z.
CATCH cx_sy_zerodivide.
WRITE :/ 'Cannot divide by zero'.
ENDTRY.
ULINE.
DATA k TYPE REF TO cx_sy_zerodivide.
DATA lv_str TYPE string.
TRY.
CALL METHOD ob->m1
EXPORTING
x = 99
y = 0
IMPORTING
z = lv_z.
CATCH cx_sy_zerodivide INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep1
EXPORTING
textid = zcx_7amexcep1=>id1.
CATCH zcx_7amexcep1 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
CLEAR lv_str.
ENDTRY.
ULINE.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep1
EXPORTING
textid = zcx_7amexcep1=>id2.
CATCH zcx_7amexcep1 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
CLEAR lv_str.
CALL METHOD k->if_message~get_longtext
RECEIVING
result = lv_str.
WRITE :/ 'long text for id2 is ',lv_str.
ENDTRY.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep2
EXPORTING
textid = zcx_7amexcep2=>id1.
CATCH zcx_7amexcep2 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
ENDTRY.
ULINE.
CLEAR lv_str.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep2
EXPORTING
textid = zcx_7amexcep2=>id2.
CATCH zcx_7amexcep2 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
ENDTRY.
ULINE.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep2
EXPORTING
textid = zcx_7amexcep2=>id3
attr1 = 'CORE ABAP'
attr2 = 'OOPS ABAP'
attr3 = 'CROSS APPS'
attr4 = 'WEBDYNPRO ABAP'.
CATCH zcx_7amexcep2 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
ENDTRY.
ULINE.
TRY.
RAISE EXCEPTION TYPE zcx_7amexcep2
EXPORTING
textid = zcx_7amexcep2=>id4
atr1 = 'CMC'
atr2 = 'WIPRO'
atr3 = 'TCS'
atr4 = 'IBM'.
CATCH zcx_7amexcep2 INTO k.
CALL METHOD k->if_message~get_text
RECEIVING
result = lv_str.
ENDTRY.
ENDCLASS.
ENDCLASS.
START-OF-SELECTION.
*data ob type ref to abc.
*create object ob.
*data ob1 type ref to pqr.
*create object ob1.
START-OF-SELECTION.
*data ob type ref to abc.
*create object ob.
*dynamic instantiation
DATA o_type TYPE REF TO cl_abap_typedescr.
CALL METHOD cl_abap_typedescr=>describe_by_name "RTTI
EXPORTING
p_name = p_tname
RECEIVING
p_descr_ref = o_type.
ref_rowtype ?= o_type.
* value assignment
FIELD-SYMBOLS : <fitab> TYPE ANY TABLE, "fieldsymbol int.table
<fwa> TYPE any, "fieldsymbol work area
<fs>. "fieldsymbol individual field
* data retrieval
SELECT * FROM (p_tname) INTO TABLE <fitab> UP TO 10 ROWS.
* data display
LOOP AT <fitab> INTO <fwa>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <fwa> TO <fs>.
IF sy-subrc EQ 0.
WRITE <fs>.
ELSE.
EXIT.
ENDIF.
ENDDO.
NEW-LINE.
ENDLOOP.
*dynamic instantiation
DATA o_type TYPE REF TO cl_abap_typedescr.
CALL METHOD cl_abap_typedescr=>describe_by_name "RTTI
EXPORTING
p_name = p_tname
RECEIVING
p_descr_ref = o_type.
ref_rowtype ?= o_type.
* value assignment
FIELD-SYMBOLS : <fitab> TYPE ANY TABLE, "fieldsymbol int.table
<fwa> TYPE any, "fieldsymbol work area
<fs>. "fieldsymbol individual field
* data retrieval
SELECT * FROM (p_tname) INTO TABLE <fitab> UP TO 10 ROWS.
* data display
LOOP AT <fitab> INTO <fwa>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <fwa> TO <fs>.
IF sy-subrc EQ 0.
WRITE <fs>.
ELSE.
EXIT.
ENDIF.
ENDDO.
NEW-LINE.
ENDLOOP.
REPORT z7amoops50. " State of the object (local to program)
REPORT z7amoops51. " Creating Persistent object using Business key ide
ntity
START-OF-SELECTION.
actor = zca_7amempl=>agent.
TRY.
CALL METHOD actor->create_persistent
EXPORTING
i_empdesig = p_desig
i_empno = p_empno
i_ename = p_ename
RECEIVING
result = pers.
START-OF-SELECTION.
actor = zca_7amempl=>agent.
TRY.
CALL METHOD actor->create_persistent
EXPORTING
i_empdesig = p_desig
i_empno = p_empno
i_ename = p_ename
RECEIVING
result = pers.
REPORT z7amoops52. " Deleting persistent object using Business key ide
ntity
START-OF-SELECTION.
actor = zca_7amempl=>agent.
TRY.
CALL METHOD actor->delete_persistent
EXPORTING
i_empno = p_empno.
COMMIT WORK.
CATCH cx_os_object_not_existing .
MESSAGE 'Object not existing for deletion' TYPE 'I'.
ENDTRY.
START-OF-SELECTION.
actor = zca_7amempl=>agent.
TRY.
CALL METHOD actor->get_persistent
EXPORTING
i_empno = p_empno
RECEIVING
result = pers.
IF pers IS NOT INITIAL.
CLEAR : lv_ename,
lv_desig.
lv_ename = pers->get_ename( ).
lv_desig = pers->get_empdesig( ).
WRITE :/ 'Employee name :',lv_ename,
/ 'Designation :',lv_desig.
ENDIF.
CATCH cx_os_object_not_found .
MESSAGE 'Object not found' TYPE 'I'.
ENDTRY.
START-OF-SELECTION.
actor = zca_7amempl=>agent.
TRY.
CALL METHOD actor->get_persistent
EXPORTING
i_empno = p_empno
RECEIVING
result = pers.
IF pers IS NOT INITIAL.
pers->set_ename( 'Gensoft' ).
pers->set_empdesig( 'Training' ).
COMMIT WORK.
ENDIF.
CATCH cx_os_object_not_found .
MESSAGE 'Object not found' TYPE 'I'.
ENDTRY.
START-OF-SELECTION.
actor = zca_7am_empl=>agent.
TRY.
CALL METHOD actor->create_persistent
EXPORTING
i_empdesig = p_desig
i_empno = p_empno
i_ename = p_ename
RECEIVING
result = pers.
START-OF-SELECTION.
actor = zca_7am_empl=>agent.
TRY.
CALL METHOD actor->if_os_ca_persistency~get_persistent_by_oid
EXPORTING
i_oid = p_guid
RECEIVING
result = ob.
IF ob IS NOT INITIAL.
pers ?= ob.
lv_empno = pers->get_empno( ).
lv_ename = pers->get_ename( ).
lv_desig = pers->get_empdesig( ).
WRITE :/ 'Employee No :',lv_empno,
/ 'Employee Name :',lv_ename,
/ 'Designation :',lv_desig.
ENDIF.
CATCH cx_os_object_not_found .
MESSAGE 'object not found' TYPE 'I'.
CATCH cx_os_class_not_found .
MESSAGE 'class not found' TYPE 'I'.
ENDTRY.
START-OF-SELECTION.
actor = zca_7am_empl=>agent.
TRY.
CALL METHOD actor->if_os_ca_persistency~get_persistent_by_oid
EXPORTING
i_oid = p_guid
RECEIVING
result = ob.
IF ob IS NOT INITIAL.
pers ?= ob.
IF pers IS NOT INITIAL.
TRY.
CALL METHOD actor->if_os_factory~delete_persistent
EXPORTING
i_object = pers.
COMMIT WORK.
CATCH cx_os_object_not_existing .
MESSAGE 'Object not exisiting for deletion' TYPE 'I'.
ENDTRY.
ENDIF.
ENDIF.
CATCH cx_os_object_not_found .
MESSAGE 'object not found' TYPE 'I'.
CATCH cx_os_class_not_found .
MESSAGE 'class not found' TYPE 'I'.
ENDTRY.
START-OF-SELECTION.
actor = zca_7am_empl=>agent.
TRY.
CALL METHOD actor->if_os_ca_persistency~get_persistent_by_oid
EXPORTING
i_oid = p_guid
RECEIVING
result = ob.
IF ob IS NOT INITIAL.
pers ?= ob.
IF pers IS NOT INITIAL.
pers->set_empno( 20 ).
pers->set_ename( 'Srini' ).
pers->set_empdesig( 'Ceo' ).
COMMIT WORK.
ENDIF.
ENDIF.
CATCH cx_os_object_not_found .
MESSAGE 'object not found' TYPE 'I'.
CATCH cx_os_class_not_found .
MESSAGE 'class not found' TYPE 'I'.
ENDTRY.
REPORT z7amoops59. " Accessing transaction service class (doesn’t work
)
REPORT z7amoops60. " event raised but doesn’t call event handler metho
d as there is no handler registration
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops61. " event raised but doesn’t call event handler metho
d as handler is registered after raising event
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops62. " event raised and also executes event handler meth
od
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops63. " Event raised but event handler method is not call
ed as the wrong object is registered while registering the handlers
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
DATA ob2 TYPE REF TO abc.
CREATE OBJECT ob2.
SET HANDLER ob1->m1 FOR ob2.
CALL METHOD ob1->m2.
REPORT z7amoops64. " event raised and also event handler method is ca
lled
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
DATA ob2 TYPE REF TO abc.
CREATE OBJECT ob2.
SET HANDLER ob2->m1 FOR ob2.
CALL METHOD ob1->m2.
REPORT z7amoops65. " event raised and event handler method is called
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops66. " multiple objects raising events but event handler
method is not called as the handler is not registered
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops67. " multiple objects raising events but only one obje
ct is registered
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops68. " multiple objects raising event and all objects ar
e registered
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops69. " Multiple objects raising event and all objects ar
e registered at a time
METHOD m2.
WRITE :/ 'inside normal method m2,about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
REPORT z7amoops72. " multiple event handler methods within the same cl
ass and across the classes
METHOD m2.
WRITE :/ 'inside second event handler method m2'.
ENDMETHOD.
METHOD m3.
WRITE :/ 'inside m3, about to raise event'.
RAISE EVENT e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob1 TYPE REF TO abc.
CREATE OBJECT ob1.
METHOD m2.
WRITE :/ 'inside m2, about to raise event with parameters'.
RAISE EVENT e1
EXPORTING
p1 = 10.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
INTERFACE abc.
EVENTS e1. "instance event
METHODS : m1 FOR EVENT e1 OF abc, "instance event handler method
m2. "normal method
ENDINTERFACE.
METHOD m3.
WRITE :/ 'inside second event handler method m3'.
ENDMETHOD.
METHOD abc~m2.
WRITE :/ 'inside method m2, about to raise event'.
RAISE EVENT abc~e1.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO pqr.
CREATE OBJECT ob.
METHOD m2.
LOOP AT lt_kna1 INTO ls_kna1.
WRITE :/ ls_kna1-kunnr,
ls_kna1-land1,
ls_kna1-name1.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
CREATE OBJECT ob.
REPORT Z7AMOOPS77.
METHOD m1.
WRITE :/ 'inside static method m1'.
m = k.
ENDMETHOD.
METHOD m2.
WRITE :/ 'inside instance method m2'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ob TYPE REF TO abc.
ob = abc=>m1( ).
CALL METHOD ob->m2.
WRITE :/ 'hello'.
METHOD fasting.
WRITE :/ 'Lion is on fasting'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
WRITE :/ 'ANIMAL Class object ..'.
DATA ob1 TYPE REF TO animal.
CREATE OBJECT ob1.
ULINE.
WRITE :/ 'LION Class object ..'.
DATA ob2 TYPE REF TO lion.
CREATE OBJECT ob2.
ULINE.
WRITE :/ 'LION CLASS OBJECT ---> ANIMAL CLASS OBJECT'.
ob1 = ob2.
CALL METHOD ob1->hungry.
*call method ob1->fasting. not possible
CALL METHOD ob1->('FASTING'). "dynamic calling
In macros editor :
REPORT Z7AMOOPS80. Accessing macros
METHOD m1.
* get the reference of transaction manager
DATA o_trans_mng TYPE REF TO if_os_transaction_manager.
CALL METHOD cl_os_system=>get_transaction_manager
RECEIVING
result = o_trans_mng.
* get the reference of transaction
DATA o_trans TYPE REF TO if_os_transaction.
CALL METHOD o_trans_mng->create_transaction
RECEIVING
result = o_trans.
* start the transaction
TRY.
CALL METHOD o_trans->start.
* perform the operation (create persistent)
* get the actor class object
DATA o_actor TYPE REF TO zca_7amempl.
o_actor = zca_7amempl=>agent.
* create the persistent object
DATA o_pers TYPE REF TO zcl_7amempl.
TRY.
CALL METHOD o_actor->create_persistent
EXPORTING
i_empdesig = 'Ceo'
i_empno = 250
i_ename = 'Satish'
RECEIVING
result = o_pers.
CATCH cx_os_object_existing .
MESSAGE 'Exception in creating persistent object' TYPE 'I'.
ENDTRY.
* end the transaction
TRY.
CALL METHOD o_trans->end.
CATCH cx_os_check_agent_failed .
CATCH cx_os_transaction .
* cancel the transaction
o_trans->undo( ).
ENDTRY.
CATCH cx_os_transaction .
MESSAGE 'error in starting the transaction' TYPE 'I'.
ENDTRY.
ENDMETHOD.