1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
METHOD set_lock_arg. "Dans ZCL_ENQ_OBJ
DATA: l_type_descr TYPE REF TO cl_abap_typedescr,
l_class_descr TYPE REF TO cl_abap_classdescr,
l_struct_descr TYPE REF TO cl_abap_structdescr.
DATA: type1 TYPE c LENGTH 30,
type2 TYPE c LENGTH 30.
DATA: lt_fld TYPE ddfields,
ls_fld LIKE LINE OF lt_fld.
DATA ls_key TYPE zkey_obj_zifp.
DATA: lr_new_obj TYPE REF TO object,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <fs1> TYPE REF TO object,
<fs2> TYPE ANY.
*1 : Retrouver la description de la classe qui appelle cette méthode
l_type_descr = cl_abap_classdescr=>describe_by_object_ref( me ).
* "Me" contient bien une référence vers une class du type ZCL_ENQ_OBJ_*_*
TRY.
l_class_descr ?= l_type_descr.
SPLIT l_class_descr->absolute_name AT '=' INTO type1 type2.
CREATE DATA lr_data TYPE REF TO (type2).
ASSIGN lr_data->* TO <fs2>.
* Ou
* GET REFERENCE OF lr_data INTO <fs>.
TRY.
<fs2> ?= me.
ASSIGN <fs2> TO <fs1>.
* on récupére la structure gs_key de notre sous object
* on la place dans une straucture local du même type
ls_key = <fs1>->(gs_key).
BREAK-POINT.
CATCH cx_sy_move_cast_error.
ENDTRY.
CATCH cx_sy_move_cast_error.
ENDTRY. |
Partager