ABAP 读取服务器的文件 OPEN DATASET,READ DATASET f_filepath INTO l_file.

这里有一些地址:

使用以下语句打开文件

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 模块(物料管理、销售分销)
相关推荐
柳鲲鹏3 小时前
内斗学概论:43、平级内斗
笔记
星恒随风5 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
Z21-X6 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
仓库日记8 小时前
Excel进销存何时该换?用3项检查判断是否需要软件
经验分享·excel·进销存·开单软件
晓梦林11 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
AI工具挖掘机11 小时前
开源!2个Skill复刻带货视频、图文和Live,做百号矩阵
经验分享
虹科网络安全20 小时前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
聪明的笨猪猪1 天前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
星恒随风1 天前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql