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 模块(物料管理、销售分销)
相关推荐
MichaelJohn1 小时前
我用 Obsidian + Claude Code + GitHub 搭了个真正「会生长」的第二大脑
笔记
zhangrelay2 小时前
手机长周期测评十周年终结版本-2026
笔记·学习·智能手机
海海不掉头发2 小时前
图论与应用_课堂笔记
笔记·图论
杨逢昌工厂6S管理2 小时前
127-钣金产线6S改善后总反弹?杨逢昌一线现场诊断笔记:反弹背后的熵增机理与基准化治理
经验分享·笔记·职场和发展·学习方法
测试运维日常笔记3 小时前
SQL 快速学习笔记:1~2 小时掌握面试重点
笔记·sql·学习
Hotchip_MEMS4 小时前
从触发吸气道智能感知:MEMS硅麦埋下雾化器智能化伏笔
大数据·人工智能·笔记·电脑·制造
迪康Defender4 小时前
端点安全选型观察:一体化平台与传统 EDR 的场景差异
运维·经验分享·安全·自动化·学习方法·远程工作·安全架构
波力海苔夹心脆6754 小时前
C# StringBuilder 详解:字符串拼接为什么总说要用它?
开发语言·笔记·c#·.net·字符串·stringbuilder·入门教程
weixin_448119944 小时前
Datawhale DeepSeek Harness 技术入门与架构原理 笔记3
笔记·架构