DATA: obj TYPE REF TO cl_object_class. CREATE OBJECT obj.
DATA(lv_ret) = obj->method( arg ). " Inline declaration DATA(lv_ret) = me->method( arg ). " From within
NB : L'instruction TRY. ... CATCH ...
ne peut catcher que les class-exceptions !! (Donc bien cocher Class exceptions
dans la définition des méthodes.
DATA lx_error TYPE REF TO cx_root. RAISE EXCEPTION lx_error.
TRY. ... " TRY block (application coding) CATCH cx_... cx_... ... ... " CATCH block (exception handler) CATCH cx_... cx_... ... ... " CATCH block (exception handler) ... CLEANUP. ... " CLEANUP block (cleanup context) ENDTRY.
Il est possible de déclarer des types sur les classes. Il devient alors possible de les utiliser simplement dans les définitions des méthodes. En revanche, pour les utiliser dans les déclarations de variables à l'extérieur, il y a une petite siouxerie :
DATA lo_obj TYPE REF TO zcl_obj. CREATE OBJECT lo_obj. * Ne pas faire : DATA lv_var TYPE lo_obj->yv_var. * Mais : DATA lv_var TYPE zcl_obj->yv_var.
Il n'est pas possible de définir des attributs en FIELD-SYMBOLS
. Pour faire l'équivalent il faut :
DATA att TYPE REF TO DATA.
GET REFERENCE OF target INTO att.
FIELD-SYMBOL
: FIELD-SYMBOLS <lv_target> TYPE ANY. ASSIGN me->att->* TO <lv_target>. "me->att->* désigne la cible du pointeur me->att