在检查调试器中的对象实例时,它将按如下方式打印:
{O:9*CLASS=CL_SOMETHING}
是否可以从给定的对象引用中检索该类的标识号9? 我想区分同一个类的多个实例并打印它们的实例编号。
我发现没有办法使用RTTI来获取这些信息,有什么建议吗?
答案 0 :(得分: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: <ls_entry> TYPE t_object_id.
READ TABLE gt_object_id_map
ASSIGNING <ls_entry>
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 <ls_entry>.
ENDIF.
r_id = ls_entry-id.
ENDMETHOD. "get_id
ENDCLASS. "lcl_object_id_map IMPLEMENTATION
答案 1 :(得分:0)
我实际上找到了一种(内部)方式来获取对象服务CL_OS_CA_COMMON=>OS_GET_INTERNAL_OID_BY_REF
中对象的内部ID:
CALL 'OBJMGR_GET_INFO' ID 'OPNAME' FIELD 'GET_OBJID'
ID 'OBJID' FIELD integer_oid
ID 'OBJ' FIELD ref_to_object.
是的,这是内部事情......自担风险。