用途:常常会用到类似于说明或者备注这样的信息,这些信息就是长文本信息。long text.
查看:比如销售订单中(SO) 的表单头和表单行项目都可以进行长文本的备注。查看途径: VA02-->输入订单号-->goto--->header--->texts-->show detail (一个放大镜的图标)-->goto --->header.到texts这一步就可以看到备注信息,在最后一步可以看到备注的 头信息。Item的备注页可以通过类似的途径来查看,不再赘述。
那么这些长文本信息存在什么地方呢? 通过对表的查看,发现SO对应的表VBAP,VBAK,不管是header信息还是Item信息里面都没有存储相关的数据。事实上,SAP系统把所有的长文本信息都存在了STXH 和 STXL 这两张表里面。
STXH :STXD SAPscript text file header,长文本的头数据
STXL :STXD SAPscript text file lines,长文本的明细数据。是一张簇表。
通过上面的信息查看,我们在表里面也可以找到数据的数据库存储信息。
对于STXH ,我们可以发现他的关键字有:
TDOBJECT 对象 很多情况下市表名,但不全是。
TDNAME 名称 很多情况下是表单编号&明细号
TDID ID 这个就是ID,
TDSPRAS 语言。
而这些信息都可以在查看的时候看到。
也就是说通过这些信息我们就可以定位到我们所需要的长文本信息。
那在程序中,我们怎么来取这些数呢?直接取么?我们可以看到 STXL-CLUSTD是类似乱码的东西。怎么成这样的,不清楚,簇表的长字段都是这个鸟样子。那如果我们来解析,完了。
在程序中,对于长字段,可能的操作大多数是读取。
在这个时候我们就用: FUNCTION: READ_TEXT。
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
id = ID
language = LANGU
name = NAME
object = OBJECT
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER = HEADER
tables
lines = LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8
.
上面的几个传入的参数都是上面讲过的。
对于传出参数:
LINES则是以一个内表的形式保存了long text,每行数据最多存72个字符。也就是说长文本中的数据被以72个一段的形式分割成了很多段,保存在内标中。这样不管长文本再长,我们都可以顺利地读取出来。并进行处理。
对于长文本的修改和删除,还有其他的功能模块与之对应。
SAVE_TEXT
DELETE_TEXT
这在用法上就大同小异了。在此不多赘述。
有什么问题,还请多多指教,多多更正啊。
2.转到--表头(弹出信息框内容,既是函数所需要的参数了);
3.使用函数READ_TEXT
调用方式: PERFORM gettext using itab-vgbel '0001' '1' 'VBBK' changing ITAB-SAPPO. "读取长文本 T_TDNAME T_TDID T_TDSPRAS T_TDOBJECT
定义:函数如下:
form gettext using T_TDNAME T_TDID T_TDSPRAS T_TDOBJECT changing T_Text.
clear: h_itab.
clear: h_itab[].
data: P LIKE h_itab-TDLINE.
DATA:stxl LIKE stxl OCCURS 0 WITH HEADER LINE."抬头备注
SELECT SINGLE * FROM STXL INTO STXL
WHERE TDNAME = T_TDNAME AND TDID = T_TDID AND TDSPRAS = T_TDSPRAS AND TDOBJECT = T_TDOBJECT.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = STXL-TDID "读取文本的id
language = STXL-TDSPRAS "读取文本的语言
name = STXL-TDNAME "读取文本的名字
object = STXL-TDOBJECT
TABLES
lines = h_itab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
DATA: itemp LIKE thead-tdname."itemp为变量无值
LOOP AT h_itab .
CONCATENATE itemp h_itab-tdline INTO itemp SEPARATED BY space. "解决回车事件
ENDLOOP.
* itab-TSET = itemp.
T_Text = itemp.
itemp = ''.
endform. "readitemtext
例子:
loop itab.
DATA: it_tline LIKE tline OCCURS 0 WITH HEADER LINE.
data :vl_tdname LIKE thead-tdname.
vl_tdname = itab-vbeln.
DATA:s_leadtime(3) TYPE c.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = sy-mandt
id = 'Z002'
language = '1'
name = vl_tdname
object = 'VBBK'
TABLES
lines = it_tline
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
LOOP at it_tline.
CONCATENATE itemp it_tline-tdline INTO itemp SEPARATED BY space.
endloop.
s_leadtime = itemp.
CONDENSE s_leadtime NO-GAPS.
it_head-leadtime = s_leadtime.
endloop.
http://blog.csdn.net/myonlywutong/article/details/5900766
http://scnblogs.techweb.com.cn/winson/archives/78.html
http://blog.csdn.net/trassion/article/details/7212029