事務AL11將「目錄參數」映射到應用程序服務器AFAIK上的文件路徑。 事務AL11的麻煩在於它的程序只調用c模塊,幾乎沒有選擇語句或函數調用的痕跡來分析。如何以編程方式從abap中的目錄參數獲取文件路徑?
我希望能夠在我的代碼中動態執行此操作,例如將「DATA_DIR」作爲輸入並將「E:\ usr \ sap \ IDS \ DVEBMGS00 \ data」作爲輸出的功能模塊。
This線程是關於類似的話題,但它沒有幫助。
其他一些人也有同樣的問題,他解釋得很好here。
事務AL11將「目錄參數」映射到應用程序服務器AFAIK上的文件路徑。 事務AL11的麻煩在於它的程序只調用c模塊,幾乎沒有選擇語句或函數調用的痕跡來分析。如何以編程方式從abap中的目錄參數獲取文件路徑?
我希望能夠在我的代碼中動態執行此操作,例如將「DATA_DIR」作爲輸入並將「E:\ usr \ sap \ IDS \ DVEBMGS00 \ data」作爲輸出的功能模塊。
This線程是關於類似的話題,但它沒有幫助。
其他一些人也有同樣的問題,他解釋得很好here。
我強烈懷疑獲取這些值的唯一方法是直接通過內核。其中一些可能因應用程序服務器而異,因此您可能無法在數據庫中找到它們。你可以試試這個:
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.
請嘗試以下
data : dirname type DIRNAME_AL11.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_DATA'
ID 'VALUE' FIELD dirname.
另外,如果你想使用自己的參數(AL11->配置),然後讀出這些表的user_dir的。
雖然我不想直接調用C函數,但這看起來比解析程序更優雅產量 – 2013-02-23 07:28:11
叫'LIST_FROM_MEMORY',什麼也沒得到。我不知道這意味着什麼,但我會繼續尋找解決方案。謝謝。 – 2012-08-17 15:04:27
LIST_FROM_MEMORY獲取由SUBMIT ...將列表導出到存儲器的列表。如果您在致電之前沒有提交任何內容,您將無法獲得任何內容。 RSWATCH0是AL11後面的程序。 – vwegert 2012-08-17 15:37:41
真正令人驚歎的一段代碼,thx很多。我對abap很陌生,這是迄今爲止我見過的最酷的東西之一:D – 2012-08-17 15:56:27