使用CL_ABAP_GZIP_TEXT_STREAM的并发压缩流

2020-09-09 17:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 使用CL_ABAP_GZ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

使用CL_ABAP_GZIP_TEXT_STREAM时,它需要一个缓冲接口if_abap_gzip_text_handler〜use_out_buf,该接口被定义为静态接口。

当我需要单个压缩流时,这很好用。 例如。 遍历单个表,使用单个gzip流将数据写出。

但是,当我需要多个独立的并发压缩流(将记录并发写入多个文件)时,这将不起作用,因为user_outbuf类具有静态变量/方法,这意味着缓冲区值将混合在一起。 例如。 遍历一个表将其记录写出,并查询另一张表以获取相关记录并写出相同类型user_outbuf的不同压缩流。

是否有更干净的方法来解决此问题,而不是一遍又一遍地重新定义具有不同名称的相同类以获得并发支持? 例如 (复制类定义/实现),然后引用:
uref1 TYPE REF to user_outbuf1,
uref2 TYPE REF TO user_outbuf2,
etc

谢谢,
周杰伦:)

示例代码:

报告测试。

 "定义一个缓冲区处理程序类
 CLASS user_outbuf定义。
   公共部分。
     接口if_abap_gzip_text_handler。
     类别数据:
          缓冲区类型x长度1000,"缓冲区的预定义大小
          buffer_len TYPE I VALUE -1。  " -1表示缓冲区的总长度
 ENDCLASS。

 类别user_outbuf IMPLEMENTATION。
   方法if_abap_gzip_text_handler〜use_out_buf。
    写:/缓冲区。
   终结法。
 ENDCLASS。

 选择开始。

 数据:
       uref TYPE REF to user_outbuf,
       uref2 TYPE USER_OUTBUF,
       csref TYPE REF TO CL_ABAP_GZIP_TEXT_STREAM。

 "创建缓冲区的副本
 创建对象uref。
 "创建gzip压缩类的副本
 创建对象csref
    导出转换='默认'
               OUTPUT_HANDLER =尿素。
 "设置缓冲区
 csref-> set_out_buf(
   输入
       out_buf = uref->缓冲
       out_buf_len = uref-> buffer_len
 )。
 压缩一些数据
 调用方法csref-> compress_text_stream
     出口
       TEXT_IN ='一些文字'
       TEXT_IN_LEN = -1。
 调用方法csref-> compress_text_stream_end
     EXPORTING TEXT_IN ='最后一个文本'
                TEXT_IN_LEN = -1。
 "创建一个新的缓冲区,
 ",因为if_abap_gzip_text_handler〜use_out_buf是静态的
 "缓冲区变量也必须是静态的,因此,
 "不能在另一个压缩实例中同时重用
 创建对象uref2。
 写:/uref2->缓冲区。