एबीएपी ऑब्जेक्ट की पहचान संख्या प्राप्त करना

डीबगर में ऑब्जेक्ट-इंस्टेंस का निरीक्षण करते समय, इसे इस तरह मुद्रित किया जाएगा:

{O:9*CLASS=CL_SOMETHING}

क्या किसी दिए गए ऑब्जेक्ट संदर्भ से उस वर्ग की पहचान-संख्या 9 को पुनर्प्राप्त करना संभव है? मैं एक ही कक्षा के कई उदाहरणों को अलग करना चाहता हूं और उनके उदाहरण-संख्या को प्रिंट करना चाहता हूं।

मुझे उस जानकारी को पाने के लिए आरटीटीआई का उपयोग करने का कोई रास्ता नहीं मिला, कोई सलाह?

3
मैं भाग लेने के लिए ऑब्जेक्ट की आवश्यकता के बिना प्रति उदाहरण एक अद्वितीय स्ट्रिंग-पहचानकर्ता उत्पन्न करना चाहता हूं (आईडी-एट्रिब्यूट या हैशकोड() विधि या जो कुछ भी हो)।
जोड़ा लेखक hotzen, स्रोत
हां, मुझे लगता है कि आपने स्पॉट को "उस भाषा की अवधारणा में फिट नहीं किया है - जैसे कि जावा ऑब्जेक्ट का पूर्ण स्मृति पता पूछना।" मैं ऑब्जेक्ट्स का ग्राफ बनाने के लिए पहचानकर्ता का उपयोग करना चाहता हूं, जहां ऑब्जेक्ट का प्रत्येक उदाहरण अपना नोड है। बेशक, मेरे पास हैशटेबल [ऑब्जेक्ट => आईडी] हो सकता है लेकिन सिर्फ इंस्टेंस-नंबर पूरी तरह से ठीक होगा
जोड़ा लेखक hotzen, स्रोत
आप वस्तुओं की पहचान क्यों करना चाहते हैं? आम तौर पर, ऑब्जेक्ट्स को अलग करने के लिए एक साधारण तुलना पर्याप्त होनी चाहिए - क्या आप शायद उपयोग के मामले में थोड़ी अधिक जानकारी दे सकते हैं?
जोड़ा लेखक vwegert, स्रोत
आप पहचानकर्ता का उपयोग किसके लिए करना चाहते हैं? पहचानकर्ता को किस क्षेत्र में अद्वितीय होना चाहिए? मैं तकनीकी रूप से आपके मूल प्रश्न को समझता हूं, लेकिन ऐसा लगता है कि आप ऐसा कुछ करने की कोशिश कर रहे हैं जो भाषा की अवधारणा को फिट न करे - जैसे जावा ऑब्जेक्ट का पूर्ण स्मृति पता मांगना।
जोड़ा लेखक vwegert, स्रोत

2 उत्तर

जहां तक ​​मुझे पता है, आप उस आंतरिक ऑब्जेक्ट पहचानकर्ता तक नहीं पहुंच सकते हैं। डीबगर ऐसा करने के लिए कुछ निजी कर्नेल इंटरफ़ेस का उपयोग करता है जो सामान्य उपयोगकर्ता के लिए उपलब्ध नहीं है। आप इस तरह कुछ कोशिश कर सकते हैं:

CLASS lcl_object_id_map DEFINITION.

  PUBLIC SECTION.
    METHODS get_id
      IMPORTING ir_object TYPE REF TO object
        RETURNING value(r_id) TYPE sysuuid_c.

  PRIVATE SECTION.

    TYPES: BEGIN OF t_object_id,
             object TYPE REF TO object,
             id     TYPE sysuuid_c,
           END OF t_object_id,
           tt_object_id_map TYPE HASHED TABLE OF t_object_id
             WITH UNIQUE KEY object.

    DATA gt_object_id_map TYPE tt_object_id_map.

ENDCLASS.                    "lcl_object_id_map DEFINITION

*----------------------------------------------------------------------*

CLASS lcl_object_id_map IMPLEMENTATION.

  METHOD get_id.

    DATA: ls_entry TYPE t_object_id.
    FIELD-SYMBOLS:  TYPE t_object_id.

    READ TABLE gt_object_id_map
      ASSIGNING 
      WITH KEY object = ir_object.
    IF sy-subrc <> 0.
      ls_entry-object = ir_object.
      ls_entry-id = cl_system_uuid=>create_uuid_c32_static( ).
      INSERT ls_entry INTO TABLE gt_object_id_map ASSIGNING .
    ENDIF.
    r_id = ls_entry-id.

  ENDMETHOD.                    "get_id

ENDCLASS.                    "lcl_object_id_map IMPLEMENTATION
2
जोड़ा
यही वह है जो मैं वर्तमान में रिसॉर्ट के रूप में उपयोग कर रहा हूं;)
जोड़ा लेखक hotzen, स्रोत

I actually found an (internal) way to get the object's internal ID in the Object Services CL_OS_CA_COMMON=>OS_GET_INTERNAL_OID_BY_REF:

CALL 'OBJMGR_GET_INFO' ID 'OPNAME' FIELD 'GET_OBJID'
                       ID 'OBJID'  FIELD integer_oid
                       ID 'OBJ'    FIELD ref_to_object.

हां, यह आंतरिक सामान है ... अपने जोखिम पर प्रयोग करें।

0
जोड़ा