1、MV45AFZZ
Check text
FORM USEREXIT_SAVE_DOCUMENT_PREPARE.
*{ INSERT DEVK900304 1
* insert by Lionel to default rejection reason by header status
DATA: BEGIN OF ISTAT OCCURS 0.
INCLUDE STRUCTURE JSTAT.
DATA: END OF ISTAT.
DATA: L_WFID TYPE ZWFID.
DATA: L_INSTID TYPE SIBFBORIID.
DATA: L_SPID TYPE ZSPID.
DATA: L_WFSTATE TYPE CHAR1.
include fv45ploc.
include fv45eloc.
DATA: Z_STONR LIKE TJ30-STONR.
data: z_updkz like xvbap-updkz.
CALL FUNCTION 'STATUS_READ'
EXPORTING
OBJNR = VBAK-OBJNR
IMPORTING
STONR = Z_STONR
TABLES
STATUS = ISTAT.
if sy-subrc = 0.
case sy-tcode.
when 'VA01' or 'VA31'.
z_updkz = ' '.
when 'VA02' or 'VA32'.
z_updkz = 'U'.
when others.
z_updkz = ' '.
endcase.
*if sy-mandt <> '120'.
loop at xvbap.
svbap-tabix = sy-tabix.
perform vbap_bearbeiten_vorbereiten(sapfv45p).
Case z_stonr.
* 00 - waiting for approval, 10 - reject by system, ' ' approved
* status 20 = approve, status 30 = reject
when '20'.
if vbap-abgru = '00' or vbap-abgru = ' ' or vbap-abgru = '10'.
vbap-abgru = ' '.
endif.
when '30'.
if vbap-abgru = '00' or vbap-abgru = ' ' or vbap-abgru = '10'.
vbap-abgru = '10'.
endif.
when '10'.
if vbap-abgru = '00' or vbap-abgru = ' ' or vbap-abgru = '10'.
vbap-abgru = '00'.
endif.
endcase.
perform vbap_bearbeiten(sapfv45p).
perform vbap_bearbeiten_ende(sapfv45p).
endloop.
endif.
*Add Jimmy at 05/08/2013
if sy-tcode = 'VA01' or sy-tcode = 'VA02'.
if xvbak-AUART = 'OR' or xvbak-AUART = 'ZSP' or xvbak-AUART = 'ZCOS'
or xvbak-AUART = 'KB' or xvbak-AUART = 'KE' or xvbak-AUART = 'ZREP'.
DATA BEGIN OF THEADER.
INCLUDE STRUCTURE THEAD.
DATA END OF THEADER.
data:lv_message type c LENGTH 255,
lv_date type c LENGTH 132,
lv_delidate like sy-datum.
DATA: LINES LIKE STANDARD TABLE OF TLINE WITH HEADER LINE.
DATA: LMEMORY_ID(30) VALUE 'SAPLSTXD'. "do not change
data: CATALOG LIKE TCATALOG OCCURS 0 WITH HEADER LINE.
IMPORT CATALOG from MEMORY ID 'SAPLSTXD'.
loop at CATALOG WHERE TDID = 'Z204' and TDOBJECT = 'VBBP'.
clear:LINES,LINES[],THEADER,lv_date,lv_delidate.
LMEMORY_ID = 'SAPLSTXD'.
CONCATENATE LMEMORY_ID CATALOG-ID INTO LMEMORY_ID.
IMPORT THEAD TO THEADER
TLINE TO LINES
FROM MEMORY ID LMEMORY_ID.
if not LINES[] is INITIAL.
READ TABLE lines INDEX 1.
lv_date = LINES-TDLINE.
if not lv_date is INITIAL.
perform change_date_format using lv_date '' changing lv_delidate.
if lv_delidate = '00000000' or lv_delidate is INITIAL.
CONCATENATE 'Item' CATALOG-tdname+10(6) 'Customer request delivery date format is error' into lv_message SEPARATED BY space.
exit.
endif.
endif.
endif.
endloop.
if lv_message is NOT INITIAL.
MESSAGE lv_message TYPE 'E'.
endif.
endif.
endif.
*end Jimmy
*} INSERT
ENDFORM.
*eject
*{ INSERT DEVK905925 1
form change_date_format using p_old_date
p_external
changing p_new_date.
constants:c_chk_date like pa0001-ename value '0123456789/'.
if p_external = 'X'.
call function 'CONVERT_DATE_TO_EXTERNAL'
exporting
date_internal = p_old_date
importing
date_external = p_new_date
exceptions
date_internal_is_invalid = 1
others = 2.
if sy-subrc <> 0.
clear:p_new_date.
endif.
else.
check p_old_date is not initial.
if p_old_date cn c_chk_date.
p_new_date = '00000000'.
else.
call function 'CONVERT_DATE_TO_INTERNAL'
exporting
date_external = p_old_date
importing
date_internal = p_new_date
exceptions
date_external_is_invalid = 1
others = 2.
if sy-subrc ne 0.
p_new_date = '00000000'.
endif.
endif.
endif.
endform. " CHANGE_DATE_FORMAT
2、Default text
data:l_header type standard table of thead with header line,
l_lines type standard table of tline with header line,
l_tdname type tdobname.
l_header-tdname = vblen posnr
l_header-tdid = 'Z205'.
l_header-tdobject = 'VBBP'.
l_header-tdspras = sy-langu.
append l_header.
l_lines-tdformat = '*'.
l_lines-tdline = ‘dddd’.
append l_lines.
call function 'SAVE_TEXT'
exporting
client = sy-mandt
header = l_header
savemode_direct = 'X'
tables
lines = l_lines
exceptions
id = 1
language = 2
name = 3
object = 4
others = 5.
1.直接可以从READ_TEXT中取长文本。
查找READ_TEXT要填写属性的方法。
2.情况描述: (以下为转载)
假设在做me21n,va01,mm01,vf01的时候输入了长本文,在保存的时候想要通过增强得到长文本的内容,是不能通过read_text的function来读取的,原因是该信息还在内存里没有写到数据表STXH中,那么有什么办法能够取到
如果我在billing head的text ID是‘z004’的文本
Biliing的增强是:
Enhancement : SDVFX002 User exit for A/R line in transfer to accounting
Component: EXIT_SAPLV60B_002
所以代码就放到这里面:
DATA BEGIN OF THEADER. INCLUDE STRUCTURE THEAD. DATA END OF THEADER. DATA: LINES LIKE STANDARD TABLE OF TLINE WITH HEADER LINE. DATA: LMEMORY_ID(30) VALUE 'SAPLSTXD'. "do not change data: CATALOG LIKE TCATALOG OCCURS 0 WITH HEADER LINE. IMPORT CATALOG from MEMORY ID 'SAPLSTXD'. READ TABLE CATALOG WITH KEY TDID = 'Z004' TDOBJECT = 'VBBK'. CHECK SY-SUBRC = 0. CONCATENATE LMEMORY_ID CATALOG-ID INTO LMEMORY_ID. IMPORT THEAD TO THEADER TLINE TO LINES FROM MEMORY ID LMEMORY_ID.
通过这段代码可以得到当前的text文本信息
IMPORT CATALOG from MEMORY ID ’SAPLSTXD’.
在catalog里面存放的是各个文本的head信息,主要包含了textID TextObject可以看到下面的debug截图:
图中的字段TDOBJECT存放的是billing的head还是item的object, TDID是他的text ID(如果这个ID的text有数值就会包含在这个表中)这里关键的是‘ID’这个字段,把这个字段的值前面加上SAPLSTXD就可以得到想要的文本的路径,如现在我想要抓取billing header的‘Z004’的文本内容,那么它对应的内存地址就是SAPLSTXD000003再通过上图的这些信息,调用
IMPORT THEAD TO THEADER
TLINE TO LINES
FROM MEMORY ID ‘SAPLSTXD000003’.就可以得到billing head的text id是‘z004’的文本内容,得到文本内容,文本内容放在lines内表里,如下图: