
这里有一些地址:

使用以下语句打开文件
OPEN DATASET f_filepath
FOR INPUT
IN BINARY MODE.
从服务器路径上,以二进制的模式打开和读取服务器上的文件:

读取文件
DO.
READ DATASET f_filepath INTO l_file.
IF sy-subrc = 0.
IF l_xstring IS INITIAL.
l_xstring = l_file.
ELSE.
l_xstring = l_xstring && l_file.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
关闭文件
CLOSE DATASET f_filepath.
函数组:SCMS_CONV,标准 CMS 文档转换函数
作用:把 XSTRING(单变量长二进制串) → 拆分成 SOLIX 类型内表(每行 255 字节)
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = l_xstring
TABLES
binary_tab = lt_bintab.
/mnt/BPM/CP1/CLN888/MM/OTHERGRGI/ /mnt/BPM/CP1/CLN888/SD/SOFDBPM/ /mnt/BPM/CP1/CLN888/SD/SOREBPM/ 這些服務器路徑是怎麼弄的
一句话总结
/mnt/BPM/CP1/CLN888/MM/OTHERGRGI/ 这类路径 不是 SAP 安装自带目录,是 Linux 运维做的【 NFS 网络存储挂载点】,专门给 SAP ABAP 用 OPEN DATASET 读写文件的共享目录。
/mnt 是 Linux 约定:用来挂载外接存储 / 网络盘的目录(mount 挂载点)
目录名称拆解(看懂命名规则)
/mnt/BPM/CP1/CLN888/MM/OTHERGRGI/
/mnt/BPM/CP1/CLN888/SD/SOFDBPM/
/mnt/BPM/CP1/CLN888/SD/SOREBPM/
OTHERGRGI / SOFDBPM / SOREBPM:单据类型 / 接口业务目录(GRGI 收货、销售订单相关文件)
完整创建流程(运维操作,不是 ABAP 代码做的)
1. 存储端(存储服务器 / NFS 服务器)
存储团队先在独立存储阵列上划分一块存储空间,开启 NFS 共享,输出共享地址,类似: shturl.cc/5EjdlnYTKgzlcVXecH1cyQ
2. SAP 应用服务器( Linux )操作
登录 SAP 应用服务器(root 账号)
先创建本地空目录(挂载点)
mkdir -p /mnt/BPM/CP1/CLN888/MM/OTHERGRGI
mkdir -p /mnt/BPM/CP1/CLN888/SD/SOFDBPM
mkdir -p /mnt/BPM/CP1/CLN888/SD/SOREBPM
mount 把远端 NFS 存储挂到这个本地路径
mount -t nfs shturl.cc/5EjdlnYTKgzlcVXecH1cyQ /mnt/BPM/CP1/CLN888
永久挂载(重要) 写入 /etc/fstab,服务器重启自动挂载,不然重启后目录消失、OPEN DATASET 直接打不开。
shturl.cc/5EjdlnYTKgzlcVXecH1cyQ /mnt/BPM/CP1/CLN888 nfs nfsvers=4,hard 0 0
修改目录权限,给 SAP 的<sid>adm用户读写权限
坑点:就算目录存在,如果 sapadm 没有读写权限,OPEN DATASET FOR INPUT 会 sy-subrc≠0 打开失败!
chown -R cp1adm:sapsys /mnt/BPM
chmod 775 /mnt/BPM/CP1/CLN888/*
3. 验证挂载
mount
ls /mnt/BPM/CP1/CLN888/MM/OTHERGRGI
看到目录,就可以交给 ABAP 开发,直接在代码写这个路径用OPEN DATASET读写文件。
为什么要用 NFS 挂载到 /mnt,而不是直接放 /usr/sap 下面?
ABAP 开发这边的重点坑(你写 OPEN DATASET 要注意)
和你前面代码串联
你前面:
OPEN DATASET f_filepath FOR INPUT IN BINARY MODE.
f_filepath 就填这种 /mnt/BPM/... 完整绝对路径,读取 BPM 生成的 PDF、图片等二进制文件,正好用来做 Smartforms 打印附件。
常用查看命令(basis 运维)
mount #查看当前挂载
df -h #看磁盘使用率
ls -ld /mnt/BPM/CP1/CLN888/MM/OTHERGRGI #看目录权限
- 路径末尾斜杠 / 要带上,拼接文件名:lv_path = '/mnt/BPM/CP1/CLN888/MM/OTHERGRGI/' && 'test.pdf'
- 必须确认SAP 应用服务器的操作系统用户<sid>adm对这个目录有读 / 写权限;
- 运维重启服务器后,如果 fstab 没配置好,挂载丢失 → OPEN DATASET 打开失败;
- NFS 网络中断会导致文件读写卡住,需要运维设置 nfs 挂载 hard/soft 参数。
- 多应用服务器共享:SAP 集群多台应用服务器,全部挂载同一个 NFS 存储,A 服务器生成的 PDF,B 服务器也能读取(BPM 单据最常用场景)
- 扩容方便:存储单独扩容,不影响 SAP 系统盘
- 分离业务文件和 SAP 程序:单据 PDF、图片不占用 SAP 系统本身磁盘
- 备份独立:这块存储单独备份,和数据库分开
- /mnt:Linux 标准挂载根目录
- BPM:项目名(BPM 单据平台,存放 BPM 生成的 PDF / 图片 / 接口文件)
- CP1:环境标识(一般是生产环境 SID / 环境代号)
- CLN888:客户 / 租户编码
- MM / SD:SAP 模块(物料管理、销售分销)