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

Former Member
0 Likes
1,186

hi,

i have raised this but still cannot get the answer.

thanks again.

1) in doubt1 below, may i know why needless to create object for creator but still able to define creator->name?

2) in doubt1, creator already been defined reference variable. why when i have doubt3 or doubt4 statement, i got error while compile. when i have doubt2 statement then compile succesfully.

the error is :

Field "CREATOR" is unknown. It is neither in one of the specified

tables nor defined by a "DATA" statement.

3)can i say that if want to create object or assignment "creator = client_ref" like in doubt3 and doubt4, we must have data keyword to define the reference variable. reference variable defined via interface parameter in methods cannot do the create object.

4) may i know if both the same?

METHODS acknowledge IMPORTING creator TYPE REF TO client

DATA creator TYPE REF TO client.

both also define the reference variable.

syntax error if i just define "METHODS acknowledge IMPORTING creator" for the interface parameter. so if i want to create object, i need to have both statement, correct?

REPORT self_reference.

----


  • CLASS client DEFINITION

----


  • ........ *

----


CLASS client DEFINITION.

PUBLIC SECTION.

DATA name(10) TYPE c VALUE 'master' READ-ONLY.

METHODS create_server.

ENDCLASS.

----


  • CLASS server DEFINITION

----


  • ........ *

----


CLASS server DEFINITION.

PUBLIC SECTION.

METHODS acknowledge IMPORTING creator TYPE REF TO client. "doubt1

PRIVATE SECTION.

DATA name(10) TYPE c VALUE 'servant'.

ENDCLASS.

----


  • CLASS client IMPLEMENTATION

----


  • ........ *

----


CLASS client IMPLEMENTATION.

METHOD create_server.

DATA server_ref TYPE REF TO server.

CREATE OBJECT server_ref.

CALL METHOD server_ref->acknowledge EXPORTING creator = me.

ENDMETHOD.

ENDCLASS.

----


  • CLASS server IMPLEMENTATION

----


  • ........ *

----


CLASS server IMPLEMENTATION.

METHOD acknowledge.

DATA name TYPE string.

name = creator->name.

WRITE: me->name, 'created by', name.

ENDMETHOD.

ENDCLASS.

DATA client_ref TYPE REF TO client.

  • DATA creator TYPE REF TO client. "doubt2

START-OF-SELECTION.

CREATE OBJECT client_ref.

  • create object creator. "doubt3

  • creator = client_ref. "doubt4

CALL METHOD client_ref->create_server.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
841

Yes CREATOR is unknown becos your are declaring creator as type client, although you have not created the object CLIENT.

Example: obj type ref Object.

Object must either be in data dictionary or already created an known to your Report.

See mine.

REPORT zoop_verb_4b .

----


  • CLASS get_sflight_data DEFINITION

----


  • ........ *

----


CLASS get_sflight_data DEFINITION.

PUBLIC SECTION.

METHODS:

constructor,

get_data

IMPORTING:

i_carrid TYPE sflight-carrid

i_connid TYPE sflight-connid

EXCEPTIONS

nothing_found,

display_data.

PROTECTED SECTION.

DATA: itab_sflight TYPE TABLE OF sflight,

list TYPE REF TO cl_gui_alv_grid.

ENDCLASS.

----


  • CLASS get_sflight_data IMPLEMENTATION

----


  • ........ *

----


CLASS get_sflight_data IMPLEMENTATION.

METHOD constructor.

CREATE OBJECT list EXPORTING i_parent = cl_gui_container=>screen0.

ENDMETHOD.

METHOD get_data.

SELECT * FROM

sflight

INTO TABLE itab_sflight

WHERE carrid = i_carrid AND

connid = i_connid.

ENDMETHOD.

METHOD display_data.

CALL METHOD list->set_table_for_first_display

EXPORTING:

i_structure_name = 'SFLIGHT'

CHANGING:

it_outtab = itab_sflight.

ENDMETHOD.

ENDCLASS.

----


  • CLASS get_sbook_data DEFINITION

----


  • ........ *

----


CLASS get_sbook_data DEFINITION INHERITING FROM get_sflight_data.

PUBLIC SECTION.

METHODS:

*redefined method get_data, using die gleich parameter Schnittstelle

*als method get_data der Klasse get_sflight_data

get_data REDEFINITION,

display_data REDEFINITION.

PRIVATE SECTION.

DATA itab_sbook TYPE TABLE OF sbook.

ENDCLASS.

----


  • CLASS get_sbook_data IMPLEMENTATION

----


  • ........ *

----


CLASS get_sbook_data IMPLEMENTATION.

*method get_data redefined

METHOD get_data.

SELECT * FROM

sbook

INTO TABLE itab_sbook

WHERE carrid = i_carrid AND

connid = i_connid.

ENDMETHOD.

*method display_data redefined

METHOD display_data.

CALL METHOD list->set_table_for_first_display

EXPORTING:

i_structure_name = 'SBOOK'

CHANGING:

it_outtab = itab_sbook.

ENDMETHOD.

ENDCLASS.

----


*Selection Screen

----


SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_carrid TYPE sflight-carrid,

p_connid TYPE sflight-connid,

sflight RADIOBUTTON GROUP r1,

sbook RADIOBUTTON GROUP r1.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN END OF SCREEN 500.

INITIALIZATION.

p_carrid = 'LH'.

p_connid = 400.

----


*Data

----


DATA obj TYPE REF TO get_sflight_data.

----


*Processing block

----


START-OF-SELECTION.

DO.

CALL SELECTION-SCREEN 500.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ENDIF.

IF sflight = 'X'.

CREATE OBJECT obj.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ELSE.

CALL METHOD obj->get_data EXPORTING

i_carrid = p_carrid

i_connid = p_connid

EXCEPTIONS

nothing_found = 4.

IF sy-subrc EQ 0.

CALL METHOD obj->display_data.

ENDIF.

ENDIF.

ELSEIF

sbook = 'X'.

CREATE OBJECT obj TYPE get_sbook_data.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ELSE.

CALL METHOD obj->get_data EXPORTING

i_carrid = p_carrid

i_connid = p_connid

EXCEPTIONS

nothing_found = 4.

IF sy-subrc EQ 0.

CALL METHOD obj->display_data.

ENDIF.

ENDIF.

ENDIF.

ENDDO.

END-OF-SELECTION.

4 REPLIES 4
Read only

Former Member
0 Likes
842

Yes CREATOR is unknown becos your are declaring creator as type client, although you have not created the object CLIENT.

Example: obj type ref Object.

Object must either be in data dictionary or already created an known to your Report.

See mine.

REPORT zoop_verb_4b .

----


  • CLASS get_sflight_data DEFINITION

----


  • ........ *

----


CLASS get_sflight_data DEFINITION.

PUBLIC SECTION.

METHODS:

constructor,

get_data

IMPORTING:

i_carrid TYPE sflight-carrid

i_connid TYPE sflight-connid

EXCEPTIONS

nothing_found,

display_data.

PROTECTED SECTION.

DATA: itab_sflight TYPE TABLE OF sflight,

list TYPE REF TO cl_gui_alv_grid.

ENDCLASS.

----


  • CLASS get_sflight_data IMPLEMENTATION

----


  • ........ *

----


CLASS get_sflight_data IMPLEMENTATION.

METHOD constructor.

CREATE OBJECT list EXPORTING i_parent = cl_gui_container=>screen0.

ENDMETHOD.

METHOD get_data.

SELECT * FROM

sflight

INTO TABLE itab_sflight

WHERE carrid = i_carrid AND

connid = i_connid.

ENDMETHOD.

METHOD display_data.

CALL METHOD list->set_table_for_first_display

EXPORTING:

i_structure_name = 'SFLIGHT'

CHANGING:

it_outtab = itab_sflight.

ENDMETHOD.

ENDCLASS.

----


  • CLASS get_sbook_data DEFINITION

----


  • ........ *

----


CLASS get_sbook_data DEFINITION INHERITING FROM get_sflight_data.

PUBLIC SECTION.

METHODS:

*redefined method get_data, using die gleich parameter Schnittstelle

*als method get_data der Klasse get_sflight_data

get_data REDEFINITION,

display_data REDEFINITION.

PRIVATE SECTION.

DATA itab_sbook TYPE TABLE OF sbook.

ENDCLASS.

----


  • CLASS get_sbook_data IMPLEMENTATION

----


  • ........ *

----


CLASS get_sbook_data IMPLEMENTATION.

*method get_data redefined

METHOD get_data.

SELECT * FROM

sbook

INTO TABLE itab_sbook

WHERE carrid = i_carrid AND

connid = i_connid.

ENDMETHOD.

*method display_data redefined

METHOD display_data.

CALL METHOD list->set_table_for_first_display

EXPORTING:

i_structure_name = 'SBOOK'

CHANGING:

it_outtab = itab_sbook.

ENDMETHOD.

ENDCLASS.

----


*Selection Screen

----


SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_carrid TYPE sflight-carrid,

p_connid TYPE sflight-connid,

sflight RADIOBUTTON GROUP r1,

sbook RADIOBUTTON GROUP r1.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN END OF SCREEN 500.

INITIALIZATION.

p_carrid = 'LH'.

p_connid = 400.

----


*Data

----


DATA obj TYPE REF TO get_sflight_data.

----


*Processing block

----


START-OF-SELECTION.

DO.

CALL SELECTION-SCREEN 500.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ENDIF.

IF sflight = 'X'.

CREATE OBJECT obj.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ELSE.

CALL METHOD obj->get_data EXPORTING

i_carrid = p_carrid

i_connid = p_connid

EXCEPTIONS

nothing_found = 4.

IF sy-subrc EQ 0.

CALL METHOD obj->display_data.

ENDIF.

ENDIF.

ELSEIF

sbook = 'X'.

CREATE OBJECT obj TYPE get_sbook_data.

IF sy-subrc NE 0.

LEAVE PROGRAM.

ELSE.

CALL METHOD obj->get_data EXPORTING

i_carrid = p_carrid

i_connid = p_connid

EXCEPTIONS

nothing_found = 4.

IF sy-subrc EQ 0.

CALL METHOD obj->display_data.

ENDIF.

ENDIF.

ENDIF.

ENDDO.

END-OF-SELECTION.

Read only

Former Member
0 Likes
841

hi,

can have advice which answer by question.

thanks alot

Read only

Former Member
0 Likes
841

e_l,

Doubt 1) If we don't create the Object, how can you call name variable without

Object

CLASS server DEFINITION.

PUBLIC SECTION.

METHODS acknowledge IMPORTING creator TYPE REF TO client. "doubt1

****From here we are creating and passing the object to that method.

CLASS server IMPLEMENTATION.

METHOD acknowledge.

DATA name TYPE string.----


Pt10

name = creator->name.

Here we are receiving the object and calling the variable name and assing that to another variable which deaclared at ---pt10

Note : You can call your variables directly by class name only when that

variable is a static variable.

Doubt2) In doubt 1 we are passing the object as a parameter.That will available to that method only.In Doubt2 If you don't declare doubt2, you can not call methods or variables in the class,because those are in "class" and we have to call from out of class ie ABAP.

Doubt3) whatever the variable you are using as a Reference cvariable you have

to use only that as a OBJECT while creating .

Note : DATA creator TYPE REF TO client-----here this is the reference variable only not object.OBJECT name and reference name should be same for same class.

Doubt4) creator = client_ref.------Here "creater" is the one Object and "client_ref" is the one more object here we are trying to assign the one object to other object.After this staemnet "creater will have the same data as "client_ref".

We can move one object to other.

Pls. mark if useful

Read only

0 Likes
841

hi mural and other gurus,

i have awarded the point.

mural, i quite understand your explanation but...

to my understanding, "creator TYPE REF TO client" is to create the reference variable. this you also explained so.

but here i do not think it is an instance of the class yet as no create object.

so if it is still not an object, why still can do "creator->name"?

this is my doubt. maybe you did explain but i still do not really get it.