获取长文本二三事

1、获取长文本

常用的方式就是通过READ_TEXT函数获取长文本,且每次只能获得一行数据,在报表中将会严重拖慢查询速度。

所以,此处介绍如何通过后台表查询长文本

"-----------------------------@斌将军-----------------------------
TYPES:BEGIN OF ty_stxl_raw,
        clustr TYPE stxl-clustr,
        clustd TYPE stxl-clustd,
      END OF ty_stxl_raw.

TYPES:BEGIN OF ty_ltext,
        tdname TYPE stxl-tdname,
        tdid   TYPE stxl-tdid,
        ltext  TYPE string,
      END OF ty_ltext.

TYPES:BEGIN OF ty_string,
        line TYPE char255,
      END OF ty_string.

DATA:lt_tline    TYPE TABLE OF tline,
     ls_tline    TYPE tline,
     lt_stxl_raw TYPE TABLE OF ty_stxl_raw,
     ls_stxl_raw TYPE ty_stxl_raw,
     lt_ltext    TYPE TABLE OF ty_ltext,
     ls_ltext    TYPE ty_ltext,
     lt_string   TYPE TABLE OF ty_string.

"查询长文本表
SELECT
 stxl~relid,
 stxl~tdobject,
 stxl~tdname,
 stxl~tdid,
 stxl~tdspras,
 stxl~srtf2,
 stxl~clustr,
 stxl~clustd
FROM stxh
INNER JOIN stxl ON stxh~tdobject = stxl~tdobject AND stxh~tdname = stxl~tdname
               AND stxh~tdid = stxl~tdid AND stxh~tdspras = stxl~tdspras
INTO TABLE @DATA(lt_stxl)
WHERE stxh~tdobject = 'EKPO'
  AND stxh~tdid IN ( 'F01','F03','F04' )
  AND stxh~tdspras = @sy-langu
  AND stxh~tdname = '410000148200010'
  AND stxl~relid = 'TX'.

"解码为字符串
LOOP AT lt_stxl INTO DATA(ls_stxl).

  REFRESH:lt_stxl_raw,lt_tline,lt_string.
  CLEAR:ls_stxl_raw.
  ls_stxl_raw-clustr = ls_stxl-clustr.
  ls_stxl_raw-clustd = ls_stxl-clustd.
  APPEND ls_stxl_raw TO lt_stxl_raw.

  "对长文本进行解码
  IMPORT tline = lt_tline FROM INTERNAL TABLE lt_stxl_raw.

  "对特殊符号的转换
  CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
    TABLES
      itf_text    = lt_tline
      text_stream = lt_string.

  "获得订单对应的多个长文本
  CLEAR:ls_ltext.
  LOOP AT lt_string INTO DATA(ls_string).
    ls_ltext-ltext = ls_ltext-ltext && ls_string-line.
  ENDLOOP.
  ls_ltext-tdname = ls_stxl-tdname.
  ls_ltext-tdid   = ls_stxl-tdid.
  APPEND ls_ltext TO lt_ltext.

  CLEAR:ls_stxl.
ENDLOOP.
"-----------------------------@斌将军-----------------------------

2、特殊符号

在长文本中如果出现"<"等特殊符号,会被转换成"<(><<)>",当遇到这些特殊符号被转换,取出后,可以通过函数CONVERT_ITF_TO_STREAM_TEXT处理一下,使用方法参考上面代码

 

 3、底表查不到长文本

有时会发现,长文本框中分明有值,但是在STXH、STXL中找不到对应的记录,READ_TEXT函数也查询不到结果,

但是在下边有一行说明,“从何处采用文本”

 这是因为配置了此长文本默认从采购订单中带出对应的物料描述,可以通过事务代码:SPRO确认配置,路径如图所示

 选择对应的长文本类型,可以看到从以下地方自动获取文本作为长文本

 

定期更文,欢迎关注

 
posted @ 2023-03-09 20:31  斌将军  阅读(83)  评论(0编辑  收藏  举报