ABAP 长文本内容数据迁移 SAP
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相关推荐
- ABAP 类方法获取长文本内容
区别于READ_TEXT函数获取长文本在于,这是把长文本直接拼接成一个字符串输出,READ_TEXT是装进一个内表输出.用于不同场景, DATA:lv_str TYPE STRING. " ...
- 在notebook中如何能完整的显示长文本内容
print(eth_sample.iloc[0:1,0]) 输出结果: to the recent break=\r... Name: content, dtype: object 内容无法显示完全. ...
- 基于内容的数据迁移计划和方案--转载
越来越多的企业用内容管理系统来管理电子发票,电子文档,人力资源等结构化或非结构化数据内容,而且把这些业务外包到第三方的 IT 公司.外包公司的更换,或者现有内容管理系统不能满足业务增长,性能,兼容性等 ...
- 根据长文本拆分至内表
需求:现有ABAP长文本一条,需要根据其内容每132个字符就截取到内表中保存,请问什么方式合适? 实现: DATA : STR TYPE STRING. DATA : LENGTH TYPE I. S ...
- 【转】采购订单长文本增强
采购订单长文本增强正式内容: 利用BADI:ME_PROCESS_PO_CUST,做PO长文本的增强. 本例程是在修改PO行项目短文本的时候,让下面的长文本内容=项目短文本. 过程:(省略创建BADI ...
- 离线迁移服务(闪电立方) > 常见问题 > 数据迁移
数据迁移 更新时间:2019-05-16 14:55:58 本页目录 您是否需要使用闪电立方离线数据迁移服务? 是否支持云上数据迁移到本地机房? 使用闪电立方离线数据迁移服务可以传输多少数据? 使用闪 ...
- SAP 批导长文本字段自动和手动换行
文章目录 1.背景 2.实现 2.1 自动换行 2.1.1 EXCEL单元格设置成自动换行 2.1.2 去除文本中前后引号 2.1.3 将文本内容转换成长文本内表 2.2 手动换行 2.2.1 EXC ...
- 【转载】ABAP自定义长文本的处理
SAP中所有的长文本都存在如下两张表中: STXH 长文本的抬头信息 STXL 长文本的明细信息 长文本在使用前,需要先进行配置,如果不配置是不可能往表STXH和STXL中写入文本值的. 配置在视图V ...
- 《大数据》2015年第3期“网络大数据专题”——基于特征学习的文本大数据内容理解及其发展趋势...
基于特征学习的文本大数据内容理解及其发展趋势 袁书寒,向 阳,鄂世嘉 (同济大学计算机科学与技术系 上海 201804) 摘要:大数据中蕴含着重要的价值信息,文本大数据作为大数据的重要组成部分,是人类 ...
最新文章
- mac插网线不能上网_实现两个无线路由器之间的连接,最稳定的方式是使用网线连接...
- Intel视频处理与分析技术栈和架构纵览
- 用计算机来控制飞船在太空中运行,神舟飞船在太空中靠什么动力运行
- SharePoint 2007 权限代码分享
- Android Studio如何允许访问网络资源
- java学习资料总结
- 【笔记】OpenCV3 人脸识别
- java面向对象容许单独_java笔试题
- 三菱a系列motion软体_三菱各类伺服电机标准参数一览表
- div css 会员登录表单,html5 css3谷歌会员登录表单界面特效
- C语言中的EOF是什么?
- 部分设计模式案例代码
- DEDE标签调用说明
- linear regression and logistic regression 1
- 华为搅局ERP,北用友南金蝶格局改变?用户:NO,我们另有选择
- 移动网络http请求不到数据,wifi下可以
- 小学教师计算机模块报哪些,小学计算机教师个人工作总结
- 【东大自控笔记9】一文掌握根轨迹法
- 清华大学计算机王佳希,【旧文】北大清华2012年拟录取保送生名单及简析(北京市)...
- duplicate symbol _*** in: