SAP ABAP中讀取項目文本的方法
首先,SAP中所有的項目文本都存在兩張數據表中
STXH 抬頭項目文本 透明表
STXL 明細項目文本 透明表
在STXH和STXL中可以找到需要的文本對象。
然后通過Read_Text函數來讀取文本內容。
以讀取Billing抬頭文本為例。
1,先配置Billing抬頭,建一個項目文本,ID:F001。
2,然后建立一張Billing,取得Billing號碼,Billing抬頭數據在VBRK數據表中。
3,建立一個Demo程序讀取抬頭項目文本。
REPORT ZZXLTEST005 .
TABLES: VBRK.
DATA: TEXTNAME(70) TYPE C.
DATA: T_READ LIKE TABLE OF TLINE WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK BLOC1 WITH FRAME TITLE TEXT-001.
PARAMETERS: PVBELN LIKE VBRK-VBELN.
SELECTION-SCREEN END OF BLOCK BLOC1.
START-OF-SELECTION.
TEXTNAME = PVBELN.
*VBBK是從STXH中找到的。
PERFORM FRM_READ_TEXT USING 'F001' TEXTNAME 'VBBK'.
IF SY-SUBRC = 0.
READ TABLE T_READ INDEX 1.
WRITE T_READ-TDLINE.
ENDIF.
END-OF-SELECTION.
FORM FRM_READ_TEXT USING FID TEXTN OBJN.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = FID
LANGUAGE = SY-LANGU
NAME = TEXTN
OBJECT = OBJN
TABLES
LINES = T_READ
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
ENDFORM.
除此READ_TEXT之外,還有:
READ_TEXT_INLINE
主要是找到他的:OBJECTNAME, TEXT OBJECT, TEXT ID
http://www.itpub.net/thread-811046-1-1.html
SAP長文本的讀取和創建
http://scnblogs.techweb.com.cn/winson/archives/78.html
在SAP系統里面很多地方都用到了長文本,這些長文本的值以其他字符的形式存在表STXL和STXH里面,不能直接去這兩個表里面去取值,而是要通過函數READ_TEXT去取,很多新手不了解的地方可能就是怎么取到READ_TEXT函數里面的那些參數值,我這邊介紹兩種方法,通過這兩種方法都可以找到那幾個參數:
一、第一種利用跟蹤查詢,不是用ST05跟蹤,而是去表里面跟蹤查詢,比如你剛剛創建了一個銷售訂單的長文本,這時候你可以去表STXH輸入日期和剛剛的時間,然后查看在這個表里剛剛產生的這些數據,依據此項就可以找到對應的參數了,這個方法非常實用
二、第二種前台查看,進入長文本編輯界面以后(記得是雙擊長文本編輯器進入),點擊菜單轉到—->表頭,里面出現的就是對應的那些參數值,如下圖:
如果是要用ABAP代碼創建文本用函數CREATE_TEXT,修改文本用SAVE_TEXT
貼上用過的幾個代碼:
創建抬頭文本
call function ‘CREATE_TEXT’
exporting
fid = ‘0001′
flanguage = ‘1′
fname = s_deliv_numb
fobject = ‘VBBK’
tables
flines = it_texts.
refresh it_texts.
創建行項目文本
call function ‘CREATE_TEXT’
exporting
fid = wa_thead-tdid
flanguage = ‘1′
fname = wa_thead-tdname
fobject = ‘VBBP’
tables
flines = it_texts.
讀取抬頭文本
call function ‘READ_TEXT’
exporting
* CLIENT = SY-MANDT
id = ‘0001′
language = ‘1′
name = name
object = ‘VBBK’
tables
lines = lines[]
.
參數的值如果是抬頭文本可以到表STXH查看,如果是項目文本可以到STXL查看
讀取行項目文本
call function ‘READ_TEXT’
exporting
* CLIENT = SY-MANDT
id = ‘0001′
language = ‘1′
name = name
object = ‘VBBP’
tables
lines = lines[]
CALL FUNCTION ‘SAVE_TEXT’
EXPORTING
CLIENT = SY-MANDT
HEADER = HEADER
SAVEMODE_DIRECT = ‘X’
TABLES
LINES = LINES
.
http://blog.sina.com.cn/s/blog_53b2e1f70100znfn.html
用途:常常會用到類似於說明或者備注這樣的信息,這些信息就是長文本信息。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
這在用法上就大同小異了。在此不多贅述。