对SAP service的上传和读取文件

某些时候我们需要把一些文件传输到SAP application service上,这时候需要用到特殊的语法。

首先需要在AL11上找到需要存放的目录。

对于已经存在的目录, AL11通过下面代码逐个获取它们的路径, 例如: DIR_HOME, DIR_GEN                                        


  CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'DIR_XXX'
                     ID 'VALUE' FIELD searchpoints-dirname.
对于人手维护的目录, 它们保存在表user_dir里面, 这个表还是maintenance allowed 

 

AL11的user_dir创建

Step 1: 点configure

Step 2: 点Save保存, Create这个键没什么用, 有兴趣的可以看看代码

Step 3: 查看结果

注:存在在AL11有纪录, 但实际上不存在的目录 ,

Step 1: DIR_ZEROLI2在服务器上其实是不存在的, 当我们双击它, 会有error message抛出

Step 2: 当我们用open dataset语句去这个目录建一个文件时, 是不会成功的。

 

在服务器上建文件夹

方法1: SM69 or SM49

Step 1: 在SM69建一条命令, 支持dos或unix命令, 先保存再执行, 这里当然是建文件夹的命令, /c代表command

Step 2: 查看AL11结果

方法2: CALL 'SYSTEM' 

用C的函数system来调用system command

DATA: command1(64) TYPE c.

DATA:  BEGIN OF tabl OCCURS 0,
        line(200),
       END OF tabl.

DATA: lt_string TYPE STANDARD TABLE OF string,
      lv_strin TYPE string.

COMMAND1(9)    = 'mkdir -p '.
COMMAND1+9(55) = 'e:\zerotest'.

CALL 'SYSTEM' ID 'COMMAND' FIELD COMMAND1
              ID 'TAB'     FIELD TABL-*SYS*.

BREAK-POINT ID z_zero_test.

Open dataset访问共享文件的权限(Windows) 

工作组的共享文件                                                                                                                                                           

Step 1: 测试环境: A机Laoxiang: XP系统(共享文件夹所在机); B机Lupkid: Win7系统(SAP gui所在机); C机Vmecc: Win2003(装在B机的VMware, 同时C机也是SAP服务器).

保证AB相互ping通, AC相互ping通
Step 2: 测试代码:

TYPE-POOLS: z07tp.
 
DATA: gw_rec TYPE z07tp_rec,
      gt_rec TYPE STANDARD TABLE OF z07tp_rec.
 
CONSTANTS: cn_fname(8) TYPE c VALUE 'CUST07AD'.
 
CONSTANTS: cn_path(20) TYPE c VALUE '\\Laoxiang\zerotest\'.
 
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: pr_file(40) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.
 
INITIALIZATION.
  pr_file = cn_fname.
 
START-OF-SELECTION.
  CONCATENATE cn_path pr_file INTO pr_file.
  OPEN DATASET pr_file IN TEXT MODE FOR INPUT ENCODING DEFAULT.
  IF sy-subrc <> 0.
    WRITE:/ text-002.
    EXIT.
  ENDIF.
  DO.
    READ DATASET pr_file INTO gw_rec.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    APPEND gw_rec TO gt_rec.
  ENDDO.
 
END-OF-SELECTION.
  CLOSE DATASET pr_file.
  LOOP AT gt_rec INTO gw_rec.
    WRITE:/   gw_rec-kunnr, gw_rec-name1, gw_rec-sortl,gw_rec-ort01,
              gw_rec-pstlz, gw_rec-land1, gw_rec-spras.
  ENDLOOP.

Step 3: 源文件

Step 4: 读取效果

Step 5: C机的截图

 

对ABAPer而言,所做的动作无非,增加,读取,删除。

新增文件:注:此时需要区分文件是ASC文件还是BIN文件,以及是不是 UTF-8的unicode编码。

OPEN DATASET dname FOR OUTPUT IN TEXT MODE ENCODING UTF-8.

OPEN DATASET filename FOR OUTPUT IN BINARY MODE.

对TEXT文件来说需要区分UTF-8,同时这里的filename需要注意大小写。

  OPEN DATASET LV_PATH FOR OUTPUT IN BINARY MODE.      " 以二进制形式创建

  IF SY-SUBRC <> 0.
    RET_CD  = ''.
    ERR_MSG = '附件创建失败'.
    CLOSE DATASET LV_PATH.
    RETURN.
  ENDIF.
  TRANSFER LV_DATA TO LV_PATH.                       " 写入内容
  CLOSE DATASET LV_PATH.

对二进制文件来说,我先将其转换为RAWSTRING类型,然后transfer,再用loop做的时候我没做好。具体做法其实就是多用了一个function:

bytecount = xstrlen( lv_file ).
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
  EXPORTING
    input_length       = bytecount
*   FIRST_LINE         = 0
*   LAST_LINE          = 0
 IMPORTING
   BUFFER             = lv_data
  tables
    binary_tab         = t_rawdata.

这里SCMS_CONV的function group和cl_bcs_convert这个class的功能基本差不多。

对TEXT文本:(直接在loop循环中处理即可)

  OPEN DATASET dname FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
  LOOP AT it_ascii .
    TRANSFER it_ascii TO dname.
    TRANSFER cl_abap_char_utilities=>cr_lf TO dname.
  ENDLOOP.
  CLOSE DATASET dname.

读取文件:

OPEN DATASET filename FOR INPUT IN BINARY MODE.
  READ DATASET filename INTO lv_data.
CLOSE DATASET filename.

删除文件:

  OPEN DATASET LV_PATH FOR OUTPUT IN BINARY MODE.    " 尝试打开文件

  IF SY-SUBRC <> 0.                                  " 不为0时说明文件不存在,直接返回
    CLOSE DATASET LV_PATH.
    RETURN.
  ENDIF.

  DELETE DATASET LV_PATH.                            " 以二进制形式创建

  IF SY-SUBRC <> 0.
    RET_CD  = ''.
    ERR_MSG = '附件删除失败'.
    CLOSE DATASET LV_PATH.
    RETURN.
  ENDIF.

*****************************关闭文件流****************************
  CLOSE DATASET LV_PATH.

除此之外还有:

打开文件追加 :

OPEN DATASET <dsn> FOR APPENDING IN TEXT MODE ENCODING DEFAULT .

CG3Y 下载文件

CG3Z 上传文件

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值