SAP 长文本的内容具体存在 STXL  STXH两张表。STXH 主要存长文本抬头明细信息。

    STXL  存长文本的具体内容。


值得注意的是长文本内容在STXL进行存储的内容是转换成其他格式存储,导致不能直接从数据库取数,需要使用READ_TEXT 函数。
长文本最主要的四个参数
TDSPRAS "语言
TDID "文本标识
TDNAME "文本名
TDOBJECT "文本对象
LT_TLINE 这个内表有两列,第一列是长文本格式,第二列是内容,能具体的反应出长文本的格式内容,列如换行之类的。
举一个简单的例子,下图中*号代表换行符。

  DATA: LT_TLINE TYPE STANDARD TABLE OF TLINE .DATA: LS_TLINE TYPE TLINE.CALL FUNCTION 'READ_TEXT'EXPORTINGID       = TDIDLANGUAGE = TDSPRASNAME     = TDNAMEOBJECT   = TDOBJECTTABLESLINES    = LT_TLINE.

或者CL_ESO_EXTRACTION_TOOLS=>EXTRACT_LONG_TEXT_BY_ID
这个方法,他的内核还是READ_TEXT,只不过输出形式不同,会直接把长文本拼接好放入字符串,就不展示了过程了。

*  读取长文本---通过id
*  CALL METHOD CL_ESO_EXTRACTION_TOOLS=>EXTRACT_LONG_TEXT_BY_ID
*     EXPORTING
*       IV_LANGU        = TDSPRAS      "语言
*       IV_TEXT_ID      = TDID         "文本标识
*       IV_NAME         = TDNAME       "文本名
*       IV_OBJECT       = TDOBJECT     "文本对象
*     IMPORTING
*       EV_SEARCH_TERMS = LV_STR.

再说一下遇到这次遇到的一个问题,因为要求数据迁移之后需要前端对数据库进行分析复现,所以就不能用方法去直接拼成一个字符串进行储存,这样会丢失回车换行符,所以还是需要用到READ_TEXT 来读取数据库的具体内容,因为需要识别换行符,READ_TEXT 输出的内表第一列就有格式,可以进行判断识别换行符,然后替换成通用的编码以帮助于前端分析,* 号用CL_ABAP_CHAR_UTILITIES=>CR_LF进行替换成换行符。但还碰到一种特殊情况,有一个 文本格式是>X的,如下图所示,因为是固定格式所以展示格式不同。
(在这贴上一个SAP官方文档解释格式的种类
https://help.sap.com/saphelp_ewm900/helpdata/en/4e/1c2ae30b4d1a26e10000000a42189e/content.htm?no_cache=true)

这段逻辑就是处理正常分行符格式,和特殊格式,因为>X的问题,导致换行符在文本内容那一列,所以需要单独做一个判断再进行替换

    LOOP AT LT_TLINE INTO LS_TLINE ."ls_tline-TDLINECASE LS_TLINE-TDFORMAT"(文本格式).WHEN '*'." 判断出换行符,直接拼接标准的换行符CONCATENATE LV_STR CL_ABAP_CHAR_UTILITIES=>CR_LF LS_TLINE-TDLINE INTO LV_STR .WHEN '' ." 无换行符CONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .WHEN OTHERS ."   检查文本内容中有没有换行符if LS_TLINE-TDLINE(1) =  '*' . "如果第一位字符出现*,替换为换行符REPLACE FIRST OCCURRENCE OF '*' IN LS_TLINE-TDLINE  WITH CL_ABAP_CHAR_UTILITIES=>CR_LF.CONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .else.CONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .endif.ENDCASE.CLEAR LS_TLINE.ENDLOOP.

在这存储的过程中还遇到一个小问题,在DEBUG的过程中看见*号已经被替换成标准换行符,然后存入底表没有了SE11与SE16N都看不到具体换行符,以为字符串丢失了,经过询问是底表数据库不进行展示,如果用ALV报表对该底表再用SELECT抽出来会有乱码展示,只是不在底表进行显示。(因前端没进行过具体测试不太确定此方法迁移数据有用,方法仅供参考记录。)

老规矩完整代码如下,COPY可以直接运行,可以细致的DEBUG观看具体的处理过程。(还未进行后期测试,仅提供参考处理逻辑方法):

REPORT  ZCCS_MIG004.
TABLES: STXL .
*&---------------------------------------------------------------------*
*&      Internal Tables  Declares
*&---------------------------------------------------------------------*
DATA: TEXT1      TYPE  STRING.
DATA: LV_STR     TYPE  STRING.
DATA: LV_TDNAME  TYPE  STRING.TYPES: BEGIN OF TY_TEXT,MANDT   TYPE MANDT,ZOBJECT TYPE TDOBJECT,    "文本对象ZNAME   TYPE TDOBNAME,    "文本名ZID     TYPE TDID,        "文本标识ZSPRAS  TYPE SPRAS,       "语言ZSRTF2  TYPE SYBIN1,      "同一个长文本内容次数ZTEXT   TYPE ZTEXT,       "长文本内容END  OF TY_TEXT.TYPES:  BEGIN  OF TY_STXL ,MANDT    TYPE MANDT,TDOBJECT TYPE STXL-TDOBJECT,TDNAME   TYPE STXL-TDNAME,TDID     TYPE STXL-TDID,TDSPRAS  TYPE STXL-TDSPRAS,SRTF2    TYPE SYBIN1,      "同一个长文本内容次数END  OF TY_STXL.DATA :  LT_TEXT TYPE STANDARD TABLE OF TY_TEXT,LS_TEXT TYPE TY_TEXT,LT_STXL TYPE STANDARD TABLE OF TY_STXL,LS_STXL TYPE TY_STXL.************************************************************************
*                      Selection screen                                *
************************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
*Input screen: selection options
SELECT-OPTIONS:S_ZOBJE   FOR STXL-TDOBJECT           ,   "文本对象S_ZNAME   FOR STXL-TDNAME   OBLIGATORY,   "文本名S_ZID     FOR STXL-TDID               ,   "文本标识S_ZSPRAS  FOR STXL-TDSPRAS            ,   "语言S_SRTF2   FOR STXL-SRTF2              .    "同一个长文本内容次数
SELECTION-SCREEN: END OF BLOCK B1.*INITIALIZATION.START-OF-SELECTION.PERFORM  PRECESS_DATA.               " 主要数据处理逻辑*&---------------------------------------------------------------------*
*& Form PRECESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM PRECESS_DATA.REFRESH LT_STXL.REFRESH LT_TEXT.CLEAR TEXT1 .CLEAR LV_STR.SELECTMANDTTDOBJECT    "文本对象TDNAME      "文本名TDID        "文本标识TDSPRAS     "语言SRTF2       "同一个长文本内容次数FROM STXLINTO  TABLE LT_STXLWHERE TDOBJECT  IN S_ZOBJEAND TDNAME    IN S_ZNAMEAND TDID      IN S_ZIDAND TDSPRAS   IN S_ZSPRAS .SORT LT_STXL BY TDOBJECT   TDNAME.CLEAR TEXT1.TEXT1 = '0'.LOOP AT LT_STXL INTO LS_STXL.CLEAR LV_STR.PERFORM FRM_READ_TEXT USING     LS_STXL-TDOBJECT   "文本对象LS_STXL-TDNAME     "文本名LS_STXL-TDID       "文本标识LS_STXL-TDSPRAS    "语言CHANGING  TEXT1LV_STR.IF SY-SUBRC = '0'  AND LV_STR IS NOT INITIAL .LS_TEXT-MANDT    =  LS_STXL-MANDT.     "mandtLS_TEXT-ZOBJECT  =  LS_STXL-TDOBJECT.  "文本对象LS_TEXT-ZNAME    =  LS_STXL-TDNAME.    "文本名LS_TEXT-ZID      =  LS_STXL-TDID.      "文本标识LS_TEXT-ZSPRAS   =  LS_STXL-TDSPRAS.   "语言LS_TEXT-ZSRTF2   =  LS_STXL-SRTF2.     "同一个长文本内容次数LS_TEXT-ZTEXT    =  LV_STR.            "长文本APPEND LS_TEXT TO LT_TEXT.IF SY-SUBRC = '0'.TEXT1  = TEXT1 + '1'.ENDIF.ENDIF.CLEAR LS_STXL.ENDLOOP.MODIFY ZCCS_MIG004 FROM TABLE LT_TEXT[].IF SY-SUBRC = 0.COMMIT WORK AND WAIT.MESSAGE '长文本更新成功!总数为'  &&  TEXT1 && '条' TYPE 'S'.ELSE.ROLLBACK WORK.MESSAGE '保存出错' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.ENDFORM.                    " FRM_PRECESS_DATA*&---------------------------------------------------------------------*
*& Form FRM_READ_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM FRM_READ_TEXT  USING   TDOBJECTTDNAMETDIDTDSPRASCHANGING  TEXT1LV_STR.*  读取长文本---通过id
*  CALL METHOD CL_ESO_EXTRACTION_TOOLS=>EXTRACT_LONG_TEXT_BY_ID
*     EXPORTING
*       IV_LANGU        = TDSPRAS      "语言
*       IV_TEXT_ID      = TDID         "文本标识
*       IV_NAME         = TDNAME       "文本名
*       IV_OBJECT       = TDOBJECT     "文本对象
*     IMPORTING
*       EV_SEARCH_TERMS = LV_STR.DATA: LT_TLINE TYPE STANDARD TABLE OF TLINE .DATA: LS_TLINE TYPE TLINE.DATA: LV_TEXT  TYPE C.CALL FUNCTION 'READ_TEXT'EXPORTINGID       = TDIDLANGUAGE = TDSPRASNAME     = TDNAMEOBJECT   = TDOBJECTTABLESLINES    = LT_TLINE.IF SY-SUBRC =  0.LOOP AT LT_TLINE INTO LS_TLINE ."ls_tline-TDLINECASE LS_TLINE-TDFORMAT.WHEN '*'." huan hangCONCATENATE LV_STR CL_ABAP_CHAR_UTILITIES=>CR_LF LS_TLINE-TDLINE INTO LV_STR .WHEN '' ." bu  huanCONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .WHEN OTHERS ."   检查文本内容中有没有换行符if LS_TLINE-TDLINE(1) =  '*' . "如果第一位字符出现*,替换为换行符REPLACE FIRST OCCURRENCE OF '*' IN LS_TLINE-TDLINE  WITH CL_ABAP_CHAR_UTILITIES=>CR_LF.CONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .else.CONCATENATE LV_STR  LS_TLINE-TDLINE INTO LV_STR .endif.ENDCASE.CLEAR LS_TLINE.ENDLOOP.ENDIF.ENDFORM.                    " FRM_READ_TEXT

突然想起来还有一个函数READ_TEXT_TABLE这个函数,没用过,用兴趣可以试试。

ABAP 长文本内容数据迁移 SAP相关推荐

  1. ABAP 类方法获取长文本内容

    区别于READ_TEXT函数获取长文本在于,这是把长文本直接拼接成一个字符串输出,READ_TEXT是装进一个内表输出.用于不同场景, DATA:lv_str  TYPE STRING. " ...

  2. 在notebook中如何能完整的显示长文本内容

    print(eth_sample.iloc[0:1,0]) 输出结果: to the recent break=\r... Name: content, dtype: object 内容无法显示完全. ...

  3. 基于内容的数据迁移计划和方案--转载

    越来越多的企业用内容管理系统来管理电子发票,电子文档,人力资源等结构化或非结构化数据内容,而且把这些业务外包到第三方的 IT 公司.外包公司的更换,或者现有内容管理系统不能满足业务增长,性能,兼容性等 ...

  4. 根据长文本拆分至内表

    需求:现有ABAP长文本一条,需要根据其内容每132个字符就截取到内表中保存,请问什么方式合适? 实现: DATA : STR TYPE STRING. DATA : LENGTH TYPE I. S ...

  5. 【转】采购订单长文本增强

    采购订单长文本增强正式内容: 利用BADI:ME_PROCESS_PO_CUST,做PO长文本的增强. 本例程是在修改PO行项目短文本的时候,让下面的长文本内容=项目短文本. 过程:(省略创建BADI ...

  6. 离线迁移服务(闪电立方) > 常见问题 > 数据迁移

    数据迁移 更新时间:2019-05-16 14:55:58 本页目录 您是否需要使用闪电立方离线数据迁移服务? 是否支持云上数据迁移到本地机房? 使用闪电立方离线数据迁移服务可以传输多少数据? 使用闪 ...

  7. SAP 批导长文本字段自动和手动换行

    文章目录 1.背景 2.实现 2.1 自动换行 2.1.1 EXCEL单元格设置成自动换行 2.1.2 去除文本中前后引号 2.1.3 将文本内容转换成长文本内表 2.2 手动换行 2.2.1 EXC ...

  8. 【转载】ABAP自定义长文本的处理

    SAP中所有的长文本都存在如下两张表中: STXH 长文本的抬头信息 STXL 长文本的明细信息 长文本在使用前,需要先进行配置,如果不配置是不可能往表STXH和STXL中写入文本值的. 配置在视图V ...

  9. 《大数据》2015年第3期“网络大数据专题”——基于特征学习的文本大数据内容理解及其发展趋势...

    基于特征学习的文本大数据内容理解及其发展趋势 袁书寒,向 阳,鄂世嘉 (同济大学计算机科学与技术系 上海 201804) 摘要:大数据中蕴含着重要的价值信息,文本大数据作为大数据的重要组成部分,是人类 ...

最新文章

  1. mac插网线不能上网_实现两个无线路由器之间的连接,最稳定的方式是使用网线连接...
  2. Intel视频处理与分析技术栈和架构纵览
  3. 用计算机来控制飞船在太空中运行,神舟飞船在太空中靠什么动力运行
  4. SharePoint 2007 权限代码分享
  5. Android Studio如何允许访问网络资源
  6. java学习资料总结
  7. 【笔记】OpenCV3 人脸识别
  8. java面向对象容许单独_java笔试题
  9. 三菱a系列motion软体_三菱各类伺服电机标准参数一览表
  10. div css 会员登录表单,html5 css3谷歌会员登录表单界面特效
  11. C语言中的EOF是什么?
  12. 部分设计模式案例代码
  13. DEDE标签调用说明
  14. linear regression and logistic regression 1
  15. 华为搅局ERP,北用友南金蝶格局改变?用户:NO,我们另有选择
  16. 移动网络http请求不到数据,wifi下可以
  17. 小学教师计算机模块报哪些,小学计算机教师个人工作总结
  18. 【东大自控笔记9】一文掌握根轨迹法
  19. 清华大学计算机王佳希,【旧文】北大清华2012年拟录取保送生名单及简析(北京市)...
  20. duplicate symbol _*** in:

热门文章

  1. Java—统计一篇英文文章中出现的不重复单词的个数
  2. 多行文本超过一定行数后显示展开功能
  3. 计算机的智能计算方向,多媒体与智能计算研究方向
  4. 大华NVR设备接分别入宇视摄像机Onvif和RTSP主子码流的方案说明
  5. 电压放大器原理(电压放大器适用于什么场合使用)
  6. word2010 论文引用/文献插入 保姆级图解
  7. 微型计算机选择题题库,微机选择题题库
  8. 检查SSD固态硬盘的使用量和寿命
  9. 云计算系统信息安全等级保护定级备案及测评工作规范
  10. PCSC那事儿(二)