Skip to Content
author's profile photo Former Member
Former Member

dynamic class loading and abap_parmbind

Hello,

I am using dynamic class loading with a

CREATE OBJECT obj TYPE (<classname>)

PARAMETER-TABLE <param_table>

statement. The objects I am trying to create have a constructor which expect a parameter called 'model' of type ref to cl_bsp_model, i.e. a simple object reference.

Now, as the structure of the parameter table is abap_parmbind, the value of a parameter needs to be of type ref to data - that is not a object reference.

How can I transfer my model object now to the class' constructor?

To put it more general: how can one transfer constructor parameters in dynamic class loading, when the parameters are not simple types (but references)?

Regards,

Sebastian Kamp

Add a comment
10|10000 characters needed characters exceeded

Related questions

1 Answer

  • author's profile photo Former Member
    Former Member
    Posted on Jun 09, 2004 at 05:44 PM

    Hello Sebastian,

    You can take the reference of the object to a data reference variable using command GET REFERENCE OF lv_object_ref INTO lv_data_ref.You can find a small program as an example below.I hope it helps.

    REPORT YREF_TEST.

    TYPE-POOLS: abap.

    DATA: ls_parmbind TYPE abap_parmbind,

    lt_parmbind LIKE HASHED TABLE OF ls_parmbind

    WITH UNIQUE KEY name.

    *----


    *

    • CLASS lcl_test DEFINITION

    *----


    *

    *

    *----


    *

    CLASS lcl_test DEFINITION.

    PUBLIC SECTION.

    DATA: av_int TYPE i VALUE 4 READ-ONLY.

    ENDCLASS. "lcl_test DEFINITION

    *----


    *

    • CLASS lcl_main DEFINITION

    *----


    *

    *

    *----


    *

    CLASS lcl_main DEFINITION.

    PUBLIC SECTION.

    METHODS: constructor

    IMPORTING iv_obj TYPE REF TO lcl_test.

    DATA: av_main_int TYPE i.

    ENDCLASS. "lcl_main DEFINITION

    *----


    *

    • CLASS lcl_main IMPLEMENTATION

    *----


    *

    *

    *----


    *

    CLASS lcl_main IMPLEMENTATION.

    METHOD constructor.

    av_main_int = iv_obj->av_int.

    write av_main_int.

    ENDMETHOD. "constructor

    ENDCLASS. "lcl_main IMPLEMENTATION

    START-OF-SELECTION.

    DATA: lv_dref TYPE REF TO data.

    DATA: lv_objref TYPE REF TO lcl_test,

    lv_obj_dynref TYPE REF TO object,

    lv_class_name TYPE string.

    CREATE OBJECT lv_objref.

    GET REFERENCE OF lv_objref INTO lv_dref.

    lv_class_name = 'LCL_MAIN'.

    ls_parmbind-name = 'IV_OBJ'.

    ls_parmbind-kind = 'E'.

    ls_parmbind-value = lv_dref.

    INSERT ls_parmbind INTO TABLE lt_parmbind.

    CREATE OBJECT lv_obj_dynref TYPE (lv_class_name)

    PARAMETER-TABLE lt_parmbind .

    Regards,

    Sükrü

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hello Sükrü,

      thanks for your answer. I had tested a variant of your solution, but it did not work and I think I know why.

      The GET REFERENCE OF command will return a data reference to the variable - regardless of the type of this variable. If the variable is an object reference itself, the GET REFERENCE will return a data reference to this reference and not the actual object.

      Regards,

      Sebastian

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.