事务AL11返回应用程序服务器AFAIK上的“目录参数”到文件路径的映射。 事务AL11的问题在于它的程序只调用c模块,几乎没有select语句或函数调用的痕迹来进行分析。
我希望能够在我的代码中动态执行此操作,例如将“DATA_DIR”作为输入并将“E:\ usr \ sap \ IDS \ DVEBMGS00 \ data”作为输出的函数模块。
This主题是关于类似主题的,但它没有帮助。
其他一些人有同样的问题,他很好地解释了here。
答案 0 :(得分:3)
我强烈怀疑获取这些值的唯一方法是直接通过内核。其中一些可能因应用程序服务器而异,因此您可能无法在数据库中找到它们。你可以试试这个:
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.
答案 1 :(得分:1)
尝试以下
data : dirname type DIRNAME_AL11.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_DATA'
ID 'VALUE' FIELD dirname.
或者,如果您想使用自己的参数(AL11-> configure),请从表user_dir中读取这些参数。