ABAP文件接口(一)——基础知识
ABAP文件接口包含如下语句:
-
OPEN DATASET
-
TRANSFER
-
READ DATASET
-
GET DATASET
-
SET DATASET
-
TRUNCATE DATASET
-
CLOSE DATASET
-
DELETE DATASET
可以使用以上语句编辑当前应用服器上的文件。但是应用服务器上的文件,通常不适合作为应用程序数据的持久存储库,因为这种数据被保存的方式特定于平台,并且只有当前的应用服务器可以访问,这个可能会对于多个应用服务器的系统来说有问题。但是来自应用服务器的文件可以用来和其他系统交换数据。
一些基本知识:
1.物理和逻辑文件名
在文件接口的所有语句中使用文件的物理名字,特定平台通过物理名字定位文件,这就是为什么文件不能够在一个程序里被多次打开。文件的物理名字通常由路径描述和文件名组成,文件名可以有空格,空格是文件名的一部分,实际的符号取决于应用服务器的操作系统。如果一个文件名没有路径描述,自动使用配置参数DIR_HOME(RZ11可以查看)的目录。
为了编写平台独立程序,推荐创建文件的逻辑名字,对每个平台逻辑路径是和实际的物理文件路径关联的。系统中提供以下功能维护文件的逻辑名字:
-
非特定客户端的文件逻辑名(事务码FILE)
-
有客制活动的特定客户端的文件逻辑名(SF01)
一些相关函数和方法:
-
FILE_GET_NAME:对逻辑文件名,确定对于当前平台物理文件名是有效,然后可以在文件接口语句中使用。
-
在SAP GUI输入的逻辑文件名的输入框,可以使用函数FILE_LOGFILE_ALIAS_PBO,FILE_LOGFILE_ALIAS_PAI和FILE_LOGFILE_ALIAS_F4,这些函数创建一个列表框,检查输入的值,并且调用一个合适的输入帮助。
-
类CL_FS_PATH包含了分析,变换或者生成文件名和路径条目
2.文件访问授权
文件的授权访问包括自动授权检查和文件名验证。
自动授权检查是在数据访问的时候自动进行以下授权检查:
-
在操作系统的检查
-
独立于程序的访问权限检查
-
对特殊文件的授权检查
-
对无效文件的给用户和程序的授权检查
(1)在操作系统的检查
从应用服务器上操作系统角度来看,所有的文件被AS ABAP访问,因此AS ABAP操作系统的用户必须有权限读写所有要被ABAP文件接口操作的文件和目录,如果这个授权不存在,文件接口语句只能部分使用,或者不能使用。由于操作系统的授权执行语句失败,返回sy-subrc不等于0。
(2)独立于程序的访问权限检查
使用语句OPEN DATASET,READ DATASET,TRANSFER和DELETE访问文件的时候,自动检查验证表SPTH中的条目,表中的条目控制了从ABAP程序到文件的读,写和是否被备份。在数据表SPTH,通常可以禁止指定文件的读写访问,独立于授权对象 ,而且对于存在的文件,授权检查可以在授权对象的基础进行,数据表SPTH中的授权组来自表SPTHB(SPTHT:文本,视图:V_SPT)。
SPTH表如下:
|
列 |
含义 |
|
PATH |
文件的路径。 |
|
SAVEFLAG |
'X':PATH中的路径被包含到备份过程。 |
|
FS_NOREAD |
'X':代表路径不能通过ABAP访问,这个设置重写FS_NOWRITE和FS_BRGRU,同样的还有在授权对象S_DATASET上的授权检查。 |
|
FS_NOWRITE |
'X':代表路径不能通过ABAP进行写访问。这个设置设置重写FS_BRGRU,同样的还有在授权对象S_DATASET上的授权检查。 |
|
FS_BRGRU |
定义授权组。通过这种方式多行上的文件可以组合到一起。在评估数据库表SPTH。为当前用户做授权对象S_PATH的检查包含两个字段RS_BRGRU和ACTVT。用这种方式,访问PATH中指定的文件可以给不同的用户授权。如果没有输入名字,不会进行授权对象S_PATH的检查。 |
说明:和在ABAP程序中使用授权对象S_DATASET(见下面)授权检查比较,使用授权对象S_PATH授权检查是独立的。因此,检查不限于单个文件,也包含所有PATH列通用指定的文件。
例子:
|
PATH |
SAVEFLAG |
FS_NOREAD |
FS_NOWRITE |
FS_BRGRU |
|
* |
- |
X |
X |
- |
|
/tmp |
- |
- |
- |
- |
|
/tmp/myfiles |
X |
- |
- |
FILE |
在/tmp中的文件,所有的程序可以读,写,只有拥有授权组FILE授权的用户可以读写访问/tmp/myfiles,这个路径的文件也设计用来备份。
(3)对特殊文件的授权检查
每次PSE文件(扩展名.pse,Personal Security Environment)被访问,当前用户会被授权对象S_RZL_ADM进行授权检查,默认ACTVT=‘01’。
(4)对无效文件用户和程序的授权检查
每次使用ABAP文件接口进行文件的打开或者删除,都会使用授权对象S_DATASET对当前用户和程序进行授权检查。这个授权对象包含的授权字段有PROGRAM(程序名),FILENAME(被打开的文件名),ACTVT(Delete,Read,Write,Read with Filter,Write with Filter),如果用户或者程序没有必要的授权,不可处理的异常会出现。为了避免这个,可是使用函数AUTHORITY_CHECK_DATSET在相关ABAP语句之前检查授权是否存在。
3.锁
文件接口没有包含任何的集成锁机制确保只有一个ABAP程序在同一时刻被访问。如果多个用户在同一个时刻写一个文件,结果是不可预期的,为了避免这个问题,使用SAP锁或者明确的文件名,比如UUID。当应用层的多个应用服务器试图在同一时刻访问同一个文件,尽管有SAP锁,冲突依旧可以出现,例如,当操作系统在将数据写到文件之前保存数据到buffer。

浙公网安备 33010602011771号