2007 Oct 17 11:04 AM
Hi,
Im using the function READ_TEXT to get the item note text. I call this function at USEREXIT_SAVE_DOCUMENT_PREPARE method of MV45AFZZ user exit. As a result, I get the item note text entered by the user (not the stored into to STXL). My question is: how can I retrieve the text stored at STXL (not from memory)?
Thanks in advance,
Ricard.
2007 Oct 17 11:07 AM
See this sample code
ABAP READ_TEXT functions to read the SAP Long Text
You have to used the READ_TEXT functions to read the SAP long text. e.g. Sales Order, Purchase Order Item text etc.
To check your long text header, go into the long text. Click Goto -> Header
Example of READ_TEXT functions reading tables PBIM - Independent requirements for material.
Example of READ_TEXT functions reading tables PBIM - Independent requirements for material.
REPORT ZTEXT .
TABLES: PBIM.
stxh, stxl, stxb - trans tables for text
ttxit - text on text-ids
ttxot - Short texts on text objects
Transaction MD63
SELECT-OPTIONS: S_MATNR FOR PBIM-MATNR,
S_WERKS FOR PBIM-WERKS.
DATA: BEGIN OF HTEXT.
INCLUDE STRUCTURE THEAD.
DATA: END OF HTEXT.
DATA: BEGIN OF LTEXT OCCURS 50.
INCLUDE STRUCTURE TLINE.
DATA: END OF LTEXT.
DATA: BEGIN OF DTEXT OCCURS 50.
DATA: MATNR LIKE PBIM-MATNR.
INCLUDE STRUCTURE TLINE.
DATA: END OF DTEXT.
DATA: TNAME LIKE THEAD-TDNAME.
SELECT * FROM PBIM WHERE WERKS IN S_WERKS.
MOVE PBIM-BDZEI TO TNAME.
CALL FUNCTION <b>'READ_TEXT'</b>
EXPORTING
CLIENT = SY-MANDT
ID = 'PB'
LANGUAGE = 'E'
NAME = TNAME
OBJECT = 'PBPT'
ARCHIVE_HANDLE = 0
IMPORTING
HEADER = HTEXT
TABLES
LINES = LTEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
LOOP AT LTEXT.
IF LTEXT-TDLINE NE ''.
MOVE LTEXT-TDLINE TO DTEXT-TDLINE.
MOVE PBIM-MATNR TO DTEXT-MATNR.
APPEND DTEXT.
ENDIF.
ENDLOOP.
ENDSELECT.
LOOP AT DTEXT.
WRITE:/ DTEXT-MATNR, DTEXT-TDLINE.
ENDLOOP.
http://www.sapdevelopment.co.uk/sapscript/sapscript_texts.htm
Also
*Internal table to store standard texts
DATA: IT_TEXTS like T_LINE occurs o with header line.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
id = "Text ID
language = "Laguage
name = "Text name
object = "text object
ARCHIVE_HANDLE = 0
IMPORTING
HEADER =
tables
lines = IT_TEXTS "Internal table
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Hope this helps
2007 Oct 17 11:35 AM
Hi Karthikeyan,
Thanks for your answer, but my problem is quite different.
I retrieve the text using READ_TEXT, but the stored at memory (not from stxl). For example: if I modify an item note (text tab) of a material from a sales order (tx-VA02) then the READ_TEXT function (implemented at the user exit) returns the new value (and it has not been stored yet). My problem is, how can I get the old text value (the one that is still stored at STXL)?.
Thanks again,
Ricard.
2007 Oct 19 11:25 AM
Hello Karthikeyan,
I have found the solution. To get the texts entered by the user (and still uncommitted) I use the READ_TEXT function. To get the texts from the database:
DATA:
BEGIN OF STXL_ID,
TDOBJECT LIKE STXL-TDOBJECT,
TDNAME LIKE STXL-TDNAME,
TDID LIKE STXL-TDID,
TDSPRAS LIKE STXL-TDSPRAS,
END OF STXL_ID.
.
. Fill stxl_id fields with the same values used in READ_TEXT function
import tline to lines_bd
from database stxl(tx)
client SY-MANDT
id stxl_id
IGNORING CONVERSION ERRORS.
Finally, I have implemented this code in the USEREXIT_SAVE_DOCUMENT method of MV45AFZZ user exit (presentation behaviour, nothing related with this issue).
Thanks you for your help,
Ricard.