SAP 长文本处理

在ABAP中,我们经常会用到长文本来描述详细信息。
长文本存储在表格:STXH(抬头),STXL(行项目)中。
长文本中有四个关键属性:
object、id、name、langguge

即:
TDOBJECT
TDNAME
TDID
TDSPRAS
其中language不必解释,object 和 id 可以在se75中进行配置,一个object 可以对一个多个ID,比如我们常用的 TEXT + ST

name 一般用对象号。

而对长文本的操作主要是 READ_TEXT 和 SAVE_TEXT

分别实现长文本的读取和写入,例如:

REPORT ZLJC9999.
DATA: TD_NAME LIKE STXH-TDNAME.
DATA ITAB_LINE LIKE TLINE OCCURS 0 WITH HEADER LINE.
TD_NAME = ‘LJC0000001’.
CLEAR ITAB_LINE.
REFRESH ITAB_LINE.

ITAB_LINE-TDLINE = ‘ARE YOU DOG?’. "把多行长文本加在一起
APPEND ITAB_LINE.

DATA:L_THEAD TYPE THEAD.
L_THEAD-TDOBJECT = ‘ZLJC’.

L_THEAD-TDNAME = TD_NAME.
L_THEAD-TDID = ‘SB’.
L_THEAD-TDSPRAS = SY-LANGU.

CALL FUNCTION ‘SAVE_TEXT’
EXPORTING
HEADER = L_THEAD
TABLES
LINES = ITAB_LINE.
COMMIT WORK.

CALL FUNCTION ‘READ_TEXT’
EXPORTING
CLIENT = SY-MANDT
ID = L_THEAD-TDID
LANGUAGE = SY-LANGU
NAME = TD_NAME
OBJECT = L_THEAD-TDOBJECT
TABLES
LINES = ITAB_LINE
EXCEPTIONS
NOT_FOUND = 4.

IF SY-SUBRC = 0.
LOOP AT ITAB_LINE.
WRITE: ITAB_LINE-TDLINE . "把多行长文本加在一起
ENDLOOP.
ENDIF.

一般我们还会提供长文本的录入、编辑、显示界面。这个需要用面向OO的组件。在屏幕上画一个Container。

初始化长文本界面的例子:

DATA:ppcont_desc1 TYPE REF TO cl_gui_custom_container,
ppedit_desc1 TYPE REF TO cl_gui_textedit,
create object: ppcont_desc1 exporting container_name = ‘LONGTEXT1’,
ppedit_desc1 exporting parent = ppcont_desc1.
call method ppedit_desc1->set_toolbar_mode
exporting
toolbar_mode = cl_gui_textedit=>true. "长文本 菜单加载 FALSE 取消菜单
call method ppedit_desc1->set_statusbar_mode
exporting
statusbar_mode = cl_gui_textedit=>false.
call method ppedit_desc1->register_event_dblclick
exporting
appl_event = ‘X’.

      call method ppedit_desc1->set_visible
        exporting
          visible = 'X'.

长文本写到编辑区域的例子:

l_tdid = ‘ST’.
l_tdobject = ‘TEXT’.
refresh: it_tab3[],
text_tab[].
clear it_tab3.
call function ‘READ_TEXT’
exporting
id = l_tdid
language = sy-langu
name = p_tdname
object = l_tdobject
tables
lines = it_tab3
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.
endif.
loop at it_tab3.
line = it_tab3-tdline.
append line to text_tab.
endloop.
refresh it_tab3[].

call method ppedit_desc1->set_text_as_r3table
exporting
table = text_tab

  • EXCEPTIONS
  •  error_dp               = 1
    
  •  error_cntl_call_method = 2
    
  •  error_dp_create        = 3
    
  •  potential_data_loss    = 4
    
  •  OTHERS                 = 5
    .
    
    refresh text_tab[].

将界面中的长文本保存的例子:

break ljc.
refresh: text_tab[],
it_tab3.

  • CALL METHOD ppedit_desc->get_text_as_r3table
  • IMPORTING
  •  table = text_tab.
    
    call method ppedit_desc->get_text_as_r3table
    exporting
    only_when_modified = ‘’
    importing
  •  TEXT = TEXT_TAB.
    table = text_tab
    
    exceptions
    error_dp = 1
    error_cntl_call_method = 2
    error_dp_create = 3
    potential_data_loss = 4
    others = 5.
    loop at text_tab into field.
    it_tab3-tdline = field.
    append it_tab3.
    clear: field,it_tab3.
    endloop.
    **** 保存长文本
    l_thead-tdobject = ‘TEXT’.
    clear l_thead-tdname.
  • concatenate ‘PP’ ZPLM090_PP-PPNUM into L_THEAD-TDNAME.
    l_thead-tdname = tab_check-objnr.
    l_thead-tdid = ‘ST’.
    l_thead-tdspras = sy-langu.
    call function ‘SAVE_TEXT’
    exporting
    header = l_thead
    tables
    lines = it_tab3.
    commit work.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值