ABAP AS文件目录动态创建

项目上需要将附件上传得到ABAP AS的文件系统上,文件需要按照上传日期存放在 YYYY\MM对应的目录下,所以我们需要动态的创建文件夹,以应对不同月份的所需的新文件夹。以下便是使用ABAP在 AS上创建文件夹的code:

复制代码
class ZCL_FILE_SYSTEM_UTIL definition
  public
  final
  create public .

public section.

  class-methods CHECK_DIRECTORY_EXIST
    importing
      !IV_DIR type STRING
    returning
      value(RV_EXIST) type ABAP_BOOL .
  class-methods CREATE_DIRECTORY
    importing
      !IV_CREATE_DIR type STRING
    returning
      value(RV_SUCCESS) type ABAP_BOOL .
protected section.
private section.

  types:
    TY_SEPARATOR(1)  type c .

  class-data GC_SEPARATOR_SLASH type TY_SEPARATOR value '/' ##NO_TEXT.
  class-data GC_SEPARATOR_BACKSLASH type TY_SEPARATOR value '\' ##NO_TEXT.
ENDCLASS.



CLASS ZCL_FILE_SYSTEM_UTIL IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_FILE_SYSTEM_UTIL=>CHECK_DIRECTORY_EXIST
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_DIR                         TYPE        STRING
* | [<-()] RV_EXIST                       TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD check_directory_exist.
**********************************************************************
* 检查目录是否存在
**********************************************************************
    DATA:lv_dir      TYPE sxpgcolist-parameters,
         lv_status   TYPE extcmdexex-status,
         lv_exitcode TYPE extcmdexex-exitcode,
         lt_protocol TYPE  TABLE OF btcxpm.


    lv_dir = iv_dir.
* 调用SM69中定义的OS命令
    CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
      EXPORTING
        commandname                   = 'ZLS'
        additional_parameters         = lv_dir
      IMPORTING
        status                        = lv_status
        exitcode                      = lv_exitcode
      TABLES
        exec_protocol                 = lt_protocol
      EXCEPTIONS
        no_permission                 = 1
        command_not_found             = 2
        parameters_too_long           = 3
        security_risk                 = 4
        wrong_check_call_interface    = 5
        program_start_error           = 6
        program_termination_error     = 7
        x_error                       = 8
        parameter_expected            = 9
        too_many_parameters           = 10
        illegal_command               = 11
        wrong_asynchronous_parameters = 12
        cant_enq_tbtco_entry          = 13
        jobcount_generation_error     = 14.

    IF sy-subrc EQ 0 AND lv_status EQ 'O' AND lv_exitcode EQ '0'.
      rv_exist = abap_true.
    ELSE.
      rv_exist = abap_false.
    ENDIF.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_FILE_SYSTEM_UTIL=>CREATE_DIRECTORY
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_CREATE_DIR                  TYPE        STRING
* | [<-()] RV_SUCCESS                     TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD create_directory.
**********************************************************************
* 在AS上创建目录
**********************************************************************


    DATA:lv_dir      TYPE string,
         lv_para     TYPE sxpgcolist-parameters,
         lv_status   TYPE extcmdexex-status,
         lv_exitcode TYPE extcmdexex-exitcode,
         lt_protocol TYPE  TABLE OF btcxpm.

    DATA:lv_separator TYPE string." 目录分隔符

    DATA:lt_dir TYPE TABLE OF string.


    IF check_directory_exist( iv_dir = iv_create_dir ) EQ abap_false." 目录不存在

* 判断分隔符
      IF iv_create_dir CS gc_separator_slash.
        lv_separator = gc_separator_slash.
      ELSE.
        lv_separator = gc_separator_backslash.
      ENDIF.

* 逐级检查目录
      SPLIT iv_create_dir AT lv_separator INTO TABLE lt_dir.

      CLEAR lv_dir.
      LOOP AT  lt_dir INTO DATA(ls_dir).
        IF ls_dir eq ''.
          CONTINUE.
        ENDIF.

        lv_dir = |{ lv_dir }{ lv_separator }{ ls_dir }|.
* 检查目录是否存在
        IF  check_directory_exist( iv_dir = lv_dir ) EQ abap_false." 不存在,则创建

          lv_para = lv_dir.
** 调用SM69中定义的 OS 命令
          CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
            EXPORTING
              commandname                   = 'ZMKDIR'
              additional_parameters         = lv_para
            IMPORTING
              status                        = lv_status
              exitcode                      = lv_exitcode
            TABLES
              exec_protocol                 = lt_protocol
            EXCEPTIONS
              no_permission                 = 1
              command_not_found             = 2
              parameters_too_long           = 3
              security_risk                 = 4
              wrong_check_call_interface    = 5
              program_start_error           = 6
              program_termination_error     = 7
              x_error                       = 8
              parameter_expected            = 9
              too_many_parameters           = 10
              illegal_command               = 11
              wrong_asynchronous_parameters = 12
              cant_enq_tbtco_entry          = 13
              jobcount_generation_error     = 14.
          IF  sy-subrc EQ 0 AND lv_status EQ 'O' AND lv_exitcode EQ '0'." 创建成功

          ELSE." 创建失败
            rv_success = abap_false.
            EXIT.
          ENDIF.
        ELSE." 存在,则继续检查下级目录

        ENDIF.

      ENDLOOP.

      IF sy-subrc EQ 0 AND lv_status EQ 'O' AND lv_exitcode EQ '0'.
        rv_success = abap_true.
      ELSE.
        rv_success = abap_false.
      ENDIF.

    ELSE." 目录存在,直接返回成功
      rv_success = abap_true.
    ENDIF.


  ENDMETHOD.

ENDCLASS.
相关推荐
duangww8 天前
SAP ALV导出excel 报 XML 错误的 /xl/sharedStrings.xml
abap
Z y..16 天前
abap po使用函数入参出参作为接口参数
abap
你好coder17 天前
VSCode连接SAP ABAP开发环境
ide·vscode·编辑器·sap·abap·cds
爱喝水的鱼丶17 天前
SAP-ABAP: Open SQL集合函数COUNT(统计行数)、SUM(数值求和)、AVG(平均值)、MAX/MIN(极值)深度指南
运维·数据库·sql·sap·报表·abap·程序
爱喝水的鱼丶19 天前
SAP-ABAP:ABAP Open SQL 深度解析:核心特性、性能优化与实践指南
运维·开发语言·数据库·sql·性能优化·sap·abap
DeveloperMrMeng20 天前
ABAP SQL更新DB小技巧 WITH INDICATORS
sql·sap·abap
爱喝水的鱼丶22 天前
SAP-ABAP:SAP ABAP OpenSQL JOIN 操作权威指南高效关联多表数据
运维·开发语言·数据库·sap·abap
LilySesy1 个月前
【案例总结】幽灵单据——消失的交货单号
数据库·ai·oracle·编辑器·sap·abap
修电脑的猫2 个月前
Performance Monitoring on Production Systems in SAP ERP(ABAP性能优化)
性能优化·abap
LilySesy2 个月前
ABAP+&SFSY-FORMPAGES&变成星号
经验分享·sap·abap·erp系统·smartforms