原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
前言
特定的程序中,可能需要存储多个变量,结构,内表. 后续需要再次读取出之前存储的数据.
对于存储的数据无需数据检索,只要能读出即可.
此时可以考虑使用EXPORT/IMPRT TO/FROM DATABASE 语句实现.
**使用EXPORT TO DATABASE IMPORT FROM DATABASE 解决特殊场景下的数据记录**
二
语法规则
截图是ABAP语法帮助中的部分内容
三
数据存储表.
** 固定字段部分 **
• RELID IMPORT/EXPORT 数据表中的区域.根据需使用固定2位的字符串
• ID 写入/读取的关键ID
• SRTF2 EXPORT/IMPORT 数据表中的下个记录计数器 (新版无需该字段)
• CLUSTR EXPORT/IMPORT 表格中的用户数据长度字段 (新版无需该字段)
• CLUSTD IMPORT/EXPORT数据库表的数据字段
**自定义字段部分** ,记录一些通用字段:日期,时间,用户等. 可以根据需要增加新的字段,用于快速检索查询保存的数据.
• USERID 用户名
• TIMESTAMP简短格式的 UTC 时戳 (YYYYMMDDhhmmss)
• ......
根据CLUSTD字段定义的类型,可以分为两种版本.
• LRAW 限制了长度2886 需要字段SRTF2,CLUSTER 辅助保存超出2886长度的内容.早期ECC版本中使用,如图旧版本
• RAWSTRING 无长度限制 无需字段SRTF2,CLUSTER辅助. 新的ECC版本中使用.如图新版本
旧版本
新版本
四
使用业务场景
可以在如下场景是使用这种数据记录方式
• 接口内容日志
• 程序临时保存的数据(单据的暂存功能)
• 程序中动态内表保存的数据
• ......
下图是我在一些程序中使用了这种存储方式.
五
以接口RFC函数为例
在RFC接口中,可以需要记录所有接口调用时传递的内容,以便监控接口的调用是否正确
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱之 接口调用集中监控
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485919&idx=1&sn=28ed168f2d167eea7e23f4c3c194e282&chksm=cf5dd4e9f82a5dff86123597a2d1ec33e22a2796f4ddf4e56a00c3537949f0540f571fd00550#rd)
> 接口框架
>
> 无峰,公众号:ABAP 技巧与实战 [ SAP开发框架系列之 接口框架
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247484693&idx=1&sn=651a852dba65476a2e2beeb59d109d42&chksm=cf5dd823f82a5135d9fd136931c4945187061095e6853eb2e188f49f8afc3446f29f877287ba#rd)
_**01** _
**界面定义**
所有的RFC函数使用相同的界面. 比如传入变量,结构都使用IS_STR 不同的函数参考不同的类型.
_**02** _
**内容保存**
RFC函数传递内容的保存
_**03** _
**内容呈现**
统一监控程序中, 使用IMPORT 读取需要查看的传输内容,呈现的时候,根据不同的接口定义通过动态内表呈现内容.
六
致命的缺点
保存的数据结构一旦发现变化,历史存储的记录将无法读出.
如果一次保存了多个结构/内表. 其中有一个内表中增强了字段或者修改了字段长度. 则改变的内表将无法读出. 但是未改变的其它结构/内表的读取不受影响.
具体表现为IMPORT 语句返回值SY-SUBRC <> 0\. 读取的内表为空
七
解决方案
在数据结构发现变化后, 使用程序升级保存的数据内容.
示例代码中 gt_alv_12_old 是按照改变前的结构定义的内表,
GT_ALV_12按照改变后的结构定义的内表. IMPORT读取数据后,赋值到新结构内表中(系统会执行类型转换或长度变更),写回数据,完成数据内容的升级.
八
总结
EXPORT/IMPORT TO/FROM DATABASE便于存储大量/动态结构的数据内容.
因为存储的数据是非结构化数据,所以不能对数据中的字段进行检索,只能全部读取内容呈现时再检索内容.
在一些特殊的场景中使用,可以简化数据存储,读取过程.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**