前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP 之 长文本直接查底表的使用方式

ABAP 之 长文本直接查底表的使用方式

作者头像
百里丶落云
发布2023-01-06 09:32:22
4010
发布2023-01-06 09:32:22
举报
文章被收录于专栏:享~方法享~方法

HELLO,这里是百里,一个学习中的ABAPER,这篇文章是坚持学习文章. 在工作中我们,肯定会遇到一些长文本的使用方式,在以前我讲过用过使用READ_TEXT的方式通过调用函数来实现长文本的数据读取.但是也讲了他的问题所在,就是会相对较慢,比较卡. 今天我们来讲另外的一种方式,获取长文本数据, 通过读取底表的方式 .

为什么要读取底表

我们不是已经有了READ_TEXT 的方式了么,为什么还要读取底表呢...额 其实我也想过,在日常工作中其实他们的区别非常小.因为我也讲过了就是我们基本上不会在ALV中通过循环的方式讲数据进行拼接早字符串内容使用. 一般都是使用OLE,打印这种进行数据下发展示单个单号的长文本备注. 但是古语怎么说技多不压身.我们一起学学用法吧.

技术解析.

我们主要是通过调用底表 STXHSTXL 这两个表进行数据调取. 具体技术是,先通过stxh 获取表头信息,在通过该STXL 找出相关的表体信息,加入到内表中在循环出来. 至于怎么查相关数据,请求参数请参考我上一篇内容 ABAP 之 长文本READ_TEXT的使用方式-

代码语言:javascript
复制
SELECT TDNAME TDOBJECT TDID  
   FROM STXH  
     INTO CORRESPONDING FIELDS OF TABLE T_STXH  
  where TDOBJECT = '表名' AND TDNAME = '单据号' and tdid = '业务id .
  
  
  
SELECT TDNAME CLUSTR CLUSTD  
        INTO TABLE T_STXL  
        FROM STXL  
        PACKAGE SIZE 3000  
        FOR ALL ENTRIES IN T_STXH "WITH APPLICATION DATA AND TDNAME  
        WHERE RELID    = 'TX'          "standard text  
          AND TDOBJECT = T_STXH-TDOBJECT  
          AND TDNAME   = T_STXH-TDNAME  
          AND TDID     = T_STXH-TDID  
          AND TDSPRAS  = SY-LANGU.  
   LOOP AT T_STXL ASSIGNING <STXL>.  
*   decompress text  
     CLEAR: T_STXL_RAW[], T_TLINE[].  
     W_STXL_RAW-CLUSTR = <STXL>-CLUSTR.  
     W_STXL_RAW-CLUSTD = <STXL>-CLUSTD.  
     APPEND W_STXL_RAW TO T_STXL_RAW.  
     IMPORT TLINE = T_TLINE FROM INTERNAL TABLE T_STXL_RAW.

实例演示

数据准备

这个数据定义内容,一定要参照我的使用,否则会遇到类型不匹配的类似的报错.

代码语言:javascript
复制
TYPES: BEGIN OF TY_STXL,  
          TDNAME TYPE STXL-TDNAME,  
          CLUSTR TYPE STXL-CLUSTR,  
          CLUSTD TYPE STXL-CLUSTD,  
        END OF TY_STXL.  
DATA:  T_STXL TYPE STANDARD TABLE OF TY_STXL.  
FIELD-SYMBOLS: <STXL> TYPE TY_STXL.  
* compressed text data without text name  
TYPES: BEGIN OF TY_STXL_RAW,  
          CLUSTR TYPE STXL-CLUSTR,  
          CLUSTD TYPE STXL-CLUSTD,  
        END OF TY_STXL_RAW.  
DATA:  T_STXL_RAW TYPE STANDARD TABLE OF TY_STXL_RAW.  
DATA:  W_STXL_RAW TYPE TY_STXL_RAW.  
* decompressed text  
DATA:  T_TLINE TYPE STANDARD TABLE OF TLINE.  
FIELD-SYMBOLS: <TLINE> TYPE TLINE.  
DATA: T_STXH TYPE STANDARD TABLE OF STXH,  
       W_STXH TYPE STXH.  
  
  
data : long_text TYPE STRing .

代码调用及成果展示

我们这里以VBBK交货单为例子,输入单号和业务id 进行获取对应的字符串内容 .

代码语言:javascript
复制
SELECT TDNAME TDOBJECT TDID  
   FROM STXH  
     INTO CORRESPONDING FIELDS OF TABLE T_STXH  
  where TDOBJECT = 'VBBK' AND TDNAME = '6000003402' and tdid = '0001' .  
  
IF T_STXH is NOT INITIAL.  
*AND THEN  
* select compressed text lines in blocks of 3000 (adjustable)  
SELECT TDNAME CLUSTR CLUSTD  
        INTO TABLE T_STXL  
        FROM STXL  
        PACKAGE SIZE 3000  
        FOR ALL ENTRIES IN T_STXH "WITH APPLICATION DATA AND TDNAME  
        WHERE RELID    = 'TX'          "standard text  
          AND TDOBJECT = T_STXH-TDOBJECT  
          AND TDNAME   = T_STXH-TDNAME  
          AND TDID     = T_STXH-TDID  
          AND TDSPRAS  = SY-LANGU.  
   LOOP AT T_STXL ASSIGNING <STXL>.  
*   decompress text  
     CLEAR: T_STXL_RAW[], T_TLINE[].  
     W_STXL_RAW-CLUSTR = <STXL>-CLUSTR.  
     W_STXL_RAW-CLUSTD = <STXL>-CLUSTD.  
     APPEND W_STXL_RAW TO T_STXL_RAW.  
     IMPORT TLINE = T_TLINE FROM INTERNAL TABLE T_STXL_RAW.  
*  access text lines for further processing  
     LOOP AT T_TLINE ASSIGNING <TLINE>.  
      " WRITE: / <TLINE>-TDLINE.  
       long_text =  long_text &amp;&amp; <TLINE>-TDLINE .  
     ENDLOOP.  
   ENDLOOP.  
   FREE T_STXL.  
ENDSELECT.  
ENDIF.

结果

如图,我们将对应的长文本数据内容装入到内表中,在通过循环拼接的方式进行操作,从而使数据存在字符串中的目的 .

image.png
image.png

技术总结

今天讲述的内容是,如何通过读取底表的方式,进行获取长文本数据内容, 和READ_tEXT的函数相比,这种代码看起来更直接,毕竟不是标准函数,可以通过DEBUG的方式,知道每一步的操作. 和函数调用方式相同,我们尽量不要在ALV中展示这种长文本内容,因为会很长,在一个就是,不要过于长,因为STRING 的长度是有限的.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要读取底表
  • 技术解析.
  • 实例演示
    • 数据准备
      • 代码调用及成果展示
      • 结果
      • 技术总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档