【问题标题】:How to get programatically the file path from a directory parameter in abap?如何以编程方式从abap中的目录参数获取文件路径?
【发布时间】:2013-02-20 21:15:10
【问题描述】:

事务 AL11 将“目录参数”映射到应用程序服务器 AFAIK 上的文件路径。 事务 AL11 的问题在于它的程序只调用了 c 模块,几乎没有任何 select 语句或函数调用的踪迹。

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

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

其他人也有同样的问题,他解释得很好here

【问题讨论】:

    标签: directory abap


    【解决方案1】:

    我强烈怀疑获得这些值的唯一方法是直接通过内核。其中一些可能因应用程序服务器而异,因此您可能无法在数据库中找到它们。你可以试试这个:

    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.
    

    【讨论】:

    • 调用了“LIST_FROM_MEMORY”,却一无所获。我不知道这可能意味着什么,但我会继续寻找解决方案。谢谢。
    • LIST_FROM_MEMORY 获取由 SUBMIT ... EXPORTING LIST TO MEMORY 存储的列表。如果您在调用之前不提交任何内容,您将一无所获。 RSWATCH0 是 AL11 背后的程序。
    • 一段非常棒的代码,非常感谢。我对 abap 很陌生,这是迄今为止我见过的最酷的东西之一:D
    【解决方案2】:

    试试下面的

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

    或者,如果您想使用自己的参数(AL11->configure),则从表 user_dir 中读取这些参数。

    【讨论】:

    • 虽然我不想直接调用 C 函数,但这似乎比解析程序输出要优雅得多
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2011-09-13
    • 2011-06-24
    相关资源
    最近更新 更多