2017-08-01 6 views
5

के माध्यम से कस्टमाइज़िंग पथ कैसे ढूंढें I कोड (abap) के माध्यम से एसएपी में आईएमजी-गतिविधि के अनुकूलन पथ को पढ़ना चाहते हैं। मेरे पास e071K से आईएमजी-गतिविधि है, जो एक परिवहन नौकरी के भीतर वस्तुओं को स्टोर करता है। अब मुझे टेबल TNODEIMG मिला जहां एसपीआरओ की पेड़ संरचना संग्रहित की जाती है। यह सही है, क्योंकि इसमें मेरी ज़रूरत है। लेकिन मुझे अपनी आईएमजी-गतिविधि से कनेक्शन नहीं मिल रहा है। TNODEIMG में अद्वितीय-आईडी अन्य प्रारूप में है और यह एक अलग आईडी प्रतीत होता है। किसी को पता चला कि मैं इसे कैसे पढ़ सकता हूं?आईएमजी-गतिविधि

अद्यतन:

@vwegert: क्या आप मददगार जवाब के लिए धन्यवाद। अब तक मुझे यह सूची नोड-आईडी से भरी है: 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

आप इस तथ्य से अवगत हैं कि एक गतिविधि कई वृक्ष संरचनाओं में दिखाई दे सकती है (और बहुत बार करता है!) या तो सीधे या उसी पेड़ के भीतर कई बार शामिल करने के माध्यम से? – vwegert

+0

@vwegert इस जानकारी के लिए धन्यवाद, मुझे इस बारे में पता नहीं था। लेकिन मेरी समस्या अभी भी वही है। TNODESIMG तालिका में आईएमजी-गतिविधि कैसे खोजें I यह कैसे जुड़ा हुआ है? मैं कई वृक्ष पथ भी पढ़ सकता हूं, यह समस्या नहीं है। – Sebi

+0

इसके लिए आपको क्या चाहिए - वास्तविक समस्या क्या है जिसे आप हल करने की कोशिश कर रहे हैं? यदि आप बस नोड्स की खोज कर रहे हैं, तो गतिविधि का मौजूदा कहां इस्तेमाल किया गया कार्य पर्याप्त हो सकता है ...? – vwegert

उत्तर

1

आईएमजी गतिविधियों को अनावश्यक लेनदेन S_CUS_IMG_ACTIVITY का उपयोग करके बनाए रखा जाता है। यही कारण है कि लेन-देन एक जहां से इस्तेमाल किया समारोह की आपूर्ति:

where-used index

कि समारोह ट्रेसिंग समारोह मॉड्यूल S_CUS_IMG_ACTIVITY_XREF और S_CUS_IMG_ENTRY_VIA_ACTIVITY एक समारोह मॉड्यूल STREE_GET_NODES_FOR_GIVEN_REF नामित कि नोड्स (तैयार करने के लिए, अपने फोन करने वाले की जाँच) की पहचान करता है के माध्यम से होता है। इन फ़ंक्शन मॉड्यूल को पढ़ने से आपको उपयोग किए जाने वाले संरचनाओं और फ़ंक्शन मॉड्यूल के बारे में बहुत सारी जानकारी मिलती है।

आपके प्रयोजनों के लिए, STREE_GET_NODES_FOR_GIVEN_REF दिलचस्प हो सकता है। संदर्भों की सूची में, गतिविधि आईडी को के रूप में COBJ टाइप करें। यह आपको उनके माता-पिता आईडी सहित नोड्स की एक सूची देगा जो आप STREE_GET_PARENTS_OF_NODE पर फ़ीड कर सकते हैं (संरचना आईडी परिणाम सेट से पेड़ आईडी है)। नोड टेक्स्ट प्राप्त करने के लिए, आप STREE_NODE_READ का उपयोग करेंगे।

+0

क्या आप कृपया मेरे अपडेट को देख सकते हैं? आपका जवाब बहुत उपयोगी है, लेकिन मैं struggeling हूँ ... – Sebi

+0

1. संरचना आईडी पेड़ आईडी है, नोड आईडी नहीं। 2. आपको उस नोड को पारित करने की आवश्यकता है जिसे आप माता-पिता को पैरामीटर CHECK_NODES में प्राप्त करना चाहते हैं। – vwegert

0

आईएमजी पथ, टेबल-आधारित खोजने के लिए यहां एक और तरीका है।

e071k में हमारे पास तकनीकी आईएमजी गतिविधियों की आईडी है। > अतिरिक्त जानकारी - -> प्रदर्शन कुंजी - तुम भी अतिरिक्त जानकारी के माध्यम से SPRO में उन्हें सक्षम कर सकते हैं> आईएमजी गतिविधि है, इसलिए वे इस तरह से पता चला की जाएगी:

enter image description here

लेकिन TNODEIMG तालिका में हमारे पास GUID आईडी , जो तकनीकी के समान नहीं हैं। संबंध तालिका जो आप उन्हें जोड़ने के लिए उपयोग कर सकते हैं TNODEIMGR है, इसमें प्रत्येक नोड की GUID और तकनीकी आईडी दोनों शामिल हैं। TNODEIMGR, TNODEIMG और TNODEIMGT टेबल से माता पिता नोड, नोड आईडी और नोड पाठ में शामिल होने से, हम प्रत्येक नोड के लिए पूर्ण आईएमजी पथ का निर्माण कर सकते हैं:

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). 

हालांकि, बहुत जड़ आईएमजी नोड इस दृष्टिकोण के साथ सुलभ नहीं है।

+0

मैं सीधे टेबल तक पहुंचने से मौजूदा बुनियादी ढांचे का उपयोग करूंगा। – vwegert

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^