1. 程式人生 > >ABAP讀取長文字的方法

ABAP讀取長文字的方法

SAP中所有的專案文字都存在以下兩張資料表中:

1. STXH  擡頭專案文字 透明表

2. STXL  明細專案文字   透明表

長文字讀取方法

首先在STXH和STXL中根據OBJECT NAME, TEXT ID,TEXT OBJECT查詢到需要的文字物件,

然後通過READ_TEXT / READ_TEXT_INLINE函式來讀取文字內容。 

以讀取交貨單文字為例:

1.獲取OBJECT NAME, TEXT ID,TEXT OBJECT

2.獲取交貨單擡頭、行專案長文字

FORM read_text USING u_name TYPE tdobname "OBJECT NAME,通常是訂單ID&行專案號
                     u_tdid TYPE tdid "TEXT ID
                     u_tdobject TYPE tdobject "TEXT OBJECT
                     u_split TYPE string
               CHANGING c_text TYPE string.
  DATA: ls_stxh TYPE stxh,
        ls_stxl TYPE stxl,
        lt_lines TYPE TABLE OF tline WITH HEADER LINE.
  IF u_tdobject = 'VBBK'.
    "STXH 擡頭專案文字 透明表
    SELECT SINGLE * INTO ls_stxh FROM stxh WHERE tdobject = u_tdobject AND tdname = u_name AND tdid = u_tdid AND tdspras = sy-langu.
  ELSEIF u_tdobject = 'VBBP'.
    "STXL 明細專案文字 透明表
    SELECT SINGLE * INTO ls_stxl FROM stxl WHERE tdobject = u_tdobject AND tdname = u_name AND tdid = u_tdid AND tdspras = sy-langu.
  ELSE.
    "sy-subrc = 0.
  ENDIF.
  IF sy-subrc = 0.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
*       CLIENT                        = SY-MANDT
        id                            = u_tdid
        language                      = '1'
        name                          = u_name
        object                        = u_tdobject
*       ARCHIVE_HANDLE                = 0
*       LOCAL_CAT                     = ' '
*     IMPORTING
*       HEADER                        =
*       OLD_LINE_COUNTER              =
      TABLES
        lines                         = lt_lines[]
*     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.
* Implement suitable error handling here
      CLEAR c_text.
      LOOP AT lt_lines.
        CONCATENATE c_text lt_lines-tdline INTO c_text SEPARATED BY u_split.  "解決回車事件 space
        CLEAR lt_lines.
      ENDLOOP.
      CONDENSE c_text NO-GAPS.
    ENDIF.
  ENDIF.
ENDFORM.                    "READ_TEXT