如何以编程方式从abap中的目录参数获取文件路径?

时间:2012-08-17 13:45:17

标签: directory abap

事务AL11返回应用程序服务器AFAIK上的“目录参数”到文件路径的映射。 事务AL11的问题在于它的程序只调用c模块,几乎没有select语句或函数调用的痕迹来进行分析。

我希望能够在我的代码中动态执行此操作,例如将“DATA_DIR”作为输入并将“E:\ usr \ sap \ IDS \ DVEBMGS00 \ data”作为输出的函数模块。

This主题是关于类似主题的,但它没有帮助。

其他一些人有同样的问题,他很好地解释了here

2 个答案:

答案 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中读取这些参数。