====== ABAP objet ====== ===== Usage ===== ==== Instanciation ==== DATA: obj TYPE REF TO cl_object_class. CREATE OBJECT obj. ==== Appel de méthode ==== DATA(lv_ret) = obj->method( arg ). " Inline declaration DATA(lv_ret) = me->method( arg ). " From within ===== Exceptions ===== **__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. [[http://help.sap.com/saphelp_470/helpdata/en/cf/f2bbc8142c11d3b93a0000e8353423/content.htm?frameset=/en/a9/b8eef8fe9411d4b2ee0050dadfb92b/frameset.htm¤t_toc=/en/d3/2e974d35c511d1829f0000e829fbfe/plain.htm&node_id=214&show_children=false|handling exceptions]] 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. ===== Tips ===== ==== Types ==== 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. ==== Attributs dynamiques ==== Il n'est pas possible de définir des attributs en ''FIELD-SYMBOLS''. Pour faire l'équivalent il faut : * Définir l'attribut en DATA att TYPE REF TO DATA. * Instancier l'attribut par référence : GET REFERENCE OF target INTO att. * Dans la méthode, assigner la référence à un ''FIELD-SYMBOL'' : FIELD-SYMBOLS TYPE ANY. ASSIGN me->att->* TO . "me->att->* désigne la cible du pointeur me->att