ABAP 读取长文本优化 特殊字符处理

ABAP-读取长文本

在日常开发中经常会遇到取长文本的需求,SAP针对长文本有专用的设计与底表。一般来说最常见的方法是获取长文本的表头明细,通过调用READ_TEXT函数得到一个包含文本内容的内表,此时得到的内表与前台编辑时的行内容相对应,但是一般在自开发报表中还需要将内表中的内容拼接合并显示在一个字段中。

其实在SAP中还提供了类方法来读取长文本,使用类方法替换后,可以直接获取到拼接好的字符串,并且SAP会针对其中的特殊字符进行处理,避免了一部分ALV显示bug或者接口中的报文异常问题。

首先查看长文本的表头参数。双击进入需要读取的长文本明细页面,菜单栏——转到——表头,即可查看长文本的文本抬头,包括:文本名、语言、文本ID与文本对象。其中,文本名通常由凭证号与行项目等关键对象KEY组成,文本ID根据系统实际配置有不同命名。
例如:
文本抬头示例

以下是调用示例:

  DATA: ls_thead TYPE thead.

  cl_eso_extraction_tools=>extract_long_text_by_id(
    EXPORTING
      iv_langu        = ls_thead-tdspras      "语言
      iv_text_id      = ls_thead-tdid         "文本标识
      iv_name         = ls_thead-tdname       "文本名
      iv_object       = ls_thead-tdobject     "文本对象
    IMPORTING
      ev_search_terms = DATA(lv_long_text) ).

笔者系统为S4 1809,如果在ECC版本的系统中未找到该类方法,可以参考下文中的处理,使用正则表达式过滤特殊字符:

* Eliminate control sequences for highlighting and underlining
    REPLACE ALL OCCURRENCES OF REGEX '<\s?[HU/]\s?>' IN ev_search_terms WITH space.

* Eliminate control sequences
    REPLACE ALL OCCURRENCES OF REGEX '<\s?\(\s?>\s?<\s?<\s?\)\s?>\s?([^>[:blank:]]+)\s?>' IN ev_search_terms WITH space.

* Unescape the control sequences for highlighting and underlining which are part of the ordinary text
    REPLACE ALL OCCURRENCES OF REGEX '<\s?\(\s?>\s?<\s?<\s?\)\s?>' IN ev_search_terms WITH '<'.

* Unescape the control sequences which are part of the ordinary text
    REPLACE ALL OCCURRENCES OF REGEX '<\s?\(\s?>\s?&\s?<\s?\)\s?>\s?lt\s?;' IN ev_search_terms WITH '<' IGNORING CASE.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值