如何通过IMG-Activity找到自定义路径

时间:2017-08-01 14:42:00

标签: sap abap

我想通过代码(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.

提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用相当笨重的交易S_CUS_IMG_ACTIVITY维护IMG活动。该交易提供了一个在哪里使用的功能:

where-used index

跟踪该函数通过功能模块S_CUS_IMG_ACTIVITY_XREFS_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活动,所以它们将显示如下:

enter image description here

但在TNODEIMG表中,我们有 GUID ID,这些ID与技术ID不同。可用于链接它们的关系表是TNODEIMGR,它包含每个节点的GUID和技术ID。从TNODEIMGRTNODEIMGTNODEIMGT表加入父节点,节点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节点。