我想通过代码(abap)阅读SAP中IMG活动的自定义路径。我有来自e071K的IMG-Activity,它将对象存储在传输作业中。现在我找到了存储SPRO树结构的表TNODEIMG。这是完美的,因为它符合我的需要。但我无法找到与IMG-Activity的连接。 TNODEIMG中的Unique-Id采用其他格式,似乎是一个不同的Id。有人知道我怎么能读到这个?
更新:
@vwegert:谢谢你的帮助答案。到目前为止,我已经将此列表填充了Node-Id&#39:s lt_eref_list
,但没有得到父母。你看到一些误解或失败吗?
DATA: lt_iref_list TYPE STANDARD TABLE OF hier_ref,
lt_eref_list TYPE STANDARD TABLE OF hier_ref,
ls_ref TYPE hier_ref,
lt_parent_list TYPE STANDARD TABLE OF hier_iface,
lt_check_list TYPE STANDARD TABLE OF hier_iface.
ls_ref-node_id = 'SIMG_CFMENUOLQSOQ46'.
APPEND ls_ref TO lt_iref_list.
CALL FUNCTION 'STREE_GET_NODES_FOR_GIVEN_REF'
TABLES
i_list_of_references = lt_iref_list
e_list_of_references = lt_eref_list.
LOOP AT lt_eref_list ASSIGNING FIELD-SYMBOL(<ls_ref>).
CALL FUNCTION 'STREE_GET_PARENTS_OF_NODE'
EXPORTING
structure_id = <ls_ref>-node_id
* IMPORTING
* message = ls_message
TABLES
check_nodes = lt_check_list
parent_nodes = lt_parent_list.
ENDLOOP.
提前谢谢。
答案 0 :(得分:1)
使用相当笨重的交易S_CUS_IMG_ACTIVITY
维护IMG活动。该交易提供了一个在哪里使用的功能:
跟踪该函数通过功能模块S_CUS_IMG_ACTIVITY_XREF
和S_CUS_IMG_ENTRY_VIA_ACTIVITY
引导到一个名为STREE_GET_NODES_FOR_GIVEN_REF
的功能模块,用于标识节点(用于准备,检查其调用者)。阅读这些功能模块可以获得有关要使用的结构和功能模块的大量信息。
出于您的目的,STREE_GET_NODES_FOR_GIVEN_REF
可能会很有趣。在引用列表中,将活动ID指定为NODE_ID
,类型为COBJ
。这将为您提供一个节点列表,包括其父ID,然后您可以将其提供给STREE_GET_PARENTS_OF_NODE
(结构ID是结果集中的树ID)。要获取节点文本,您可以使用STREE_NODE_READ
。
答案 1 :(得分:0)
以下是另一种查找IMG路径的方法,基于表格。
在e071k
我们有IMG活动的技术 ID。您也可以通过其他信息在SPRO
中启用它们&gt;附加信息 - &gt;显示键 - &gt; IMG活动,所以它们将显示如下:
但在TNODEIMG
表中,我们有 GUID ID,这些ID与技术ID不同。可用于链接它们的关系表是TNODEIMGR
,它包含每个节点的GUID和技术ID。从TNODEIMGR
,TNODEIMG
和TNODEIMGT
表加入父节点,节点ID和节点文本,我们可以为每个节点构建完整的IMG路径:
REPORT z_img.
DATA: lv_final_path TYPE string,
exit_root TYPE abap_bool,
out TYPE string.
* picking random activity from requests
SELECT SINGLE *
FROM e071k
INTO @DATA(lv_e071k).
* finding correspondent GUID ID for tech ID
SELECT gr~node_id, ach~text, img~parent_id
FROM tnodeimgr AS gr
JOIN cus_imgact AS ach
ON ach~activity = gr~ref_object
JOIN tnodeimg AS img
ON img~node_id = gr~node_id
AND spras = @sy-langu
INTO TABLE @DATA(lt_node)
WHERE ref_object = @lv_e071k-activity.
LOOP AT lt_node ASSIGNING FIELD-SYMBOL(<fs_tnode>).
CLEAR: lv_final_path.
* writing bottom node text
lv_final_path = lv_final_path && <fs_tnode>-text.
DATA(lv_node_id) = <fs_tnode>-parent_id.
DO 15 TIMES.
* fetching parent node text
SELECT SINGLE g~parent_id, text
INTO @DATA(lv_node)
FROM tnodeimg AS g
LEFT JOIN tnodeimgt AS t
ON t~tree_id = g~tree_id
AND t~extension = g~extension
AND t~node_id = g~node_id
AND t~ext_key = g~ext_key
AND t~spras = @sy-langu
WHERE g~node_id = @lv_node_id.
* checking if parent exists
IF sy-subrc <> 0.
exit_root = abap_true.
EXIT.
ELSE.
exit_root = abap_false.
ENDIF.
lv_final_path = |{ lv_final_path } \n { repeat( val = |\t| occ = sy-index + 1 ) } --> { lv_node-text }|.
lv_node_id = lv_node-parent_id.
IF lv_node-parent_id IS INITIAL.
EXIT.
ENDIF.
ENDDO.
CHECK exit_root = abap_false.
* building the path
lv_final_path = | IMG path no. { sy-tabix } is \n\n { lv_final_path } \n\n |.
out = out && lv_final_path.
ENDLOOP.
cl_demo_output=>display( out ).
但是,使用此方法无法访问根IMG节点。