2012-08-17 68 views
2

事務AL11將「目錄參數」映射到應用程序服務器AFAIK上的文件路徑。 事務AL11的麻煩在於它的程序只調用c模塊,幾乎沒有選擇語句或函數調用的痕跡來分析。如何以編程方式從abap中的目錄參數獲取文件路徑?

我希望能夠在我的代碼中動態執行此操作,例如將「DATA_DIR」作爲輸入並將「E:\ usr \ sap \ IDS \ DVEBMGS00 \ data」作爲輸出的功能模塊。

This線程是關於類似的話題,但它沒有幫助。

其他一些人也有同樣的問題,他解釋得很好here

回答

2

我強烈懷疑獲取這些值的唯一方法是直接通過內核。其中一些可能因應用程序服務器而異,因此您可能無法在數據庫中找到它們。你可以試試這個:

TYPE-POOLS abap. 

TYPES: BEGIN OF t_directory, 
     log_name TYPE dirprofilenames, 
     phys_path TYPE dirname_al11, 
     END OF t_directory. 

DATA: lt_int_list TYPE TABLE OF abaplist, 
     lt_string_list TYPE list_string_table, 
     lt_directories TYPE TABLE OF t_directory, 
     ls_directory TYPE t_directory. 

FIELD-SYMBOLS: <l_line> TYPE string. 

START-OF-SELECTION-OR-FORM-OR-METHOD-OR-WHATEVER. 
* get the output of the program as string table 
    SUBMIT rswatch0 EXPORTING LIST TO MEMORY AND RETURN. 
    CALL FUNCTION 'LIST_FROM_MEMORY' 
    TABLES 
     listobject = lt_int_list. 
    CALL FUNCTION 'LIST_TO_ASCI' 
    EXPORTING 
     with_line_break = abap_true 
    IMPORTING 
     list_string_ascii = lt_string_list 
    TABLES 
     listobject  = lt_int_list. 

* remove the separators and the two header lines 
    DELETE lt_string_list WHERE table_line CO '-'. 
    DELETE lt_string_list INDEX 1. 
    DELETE lt_string_list INDEX 1. 

* parse the individual lines 
    LOOP AT lt_string_list ASSIGNING <l_line>. 
* If you're on a newer system, you can do this in a more elegant way using regular expressions 
    CONDENSE <l_line>. 
    SHIFT <l_line> LEFT DELETING LEADING '|'. 
    SHIFT <l_line> RIGHT DELETING TRAILING '|'. 
    SPLIT <l_line>+1 AT '|' INTO ls_directory-log_name ls_directory-phys_path. 
    APPEND ls_directory TO lt_directories. 
    ENDLOOP. 
+0

叫'LIST_FROM_MEMORY',什麼也沒得到。我不知道這意味着什麼,但我會繼續尋找解決方案。謝謝。 – 2012-08-17 15:04:27

+1

LIST_FROM_MEMORY獲取由SUBMIT ...將列表導出到存儲器的列表。如果您在致電之前沒有提交任何內容,您將無法獲得任何內容。 RSWATCH0是AL11後面的程序。 – vwegert 2012-08-17 15:37:41

+0

真正令人驚歎的一段代碼,thx很多。我對abap很陌生,這是迄今爲止我見過的最酷的東西之一:D – 2012-08-17 15:56:27

1

請嘗試以下

data : dirname type DIRNAME_AL11. 
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_DATA' 
        ID 'VALUE' FIELD dirname. 

另外,如果你想使用自己的參數(AL11->配置),然後讀出這些表的user_dir的。

+0

雖然我不想直接調用C函數,但這看起來比解析程序更優雅產量 – 2013-02-23 07:28:11