0
点赞
收藏
分享

微信扫一扫

ABAP长文本


在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'.

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

= '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.

 

 

 

 

 

 

举报

相关推荐

0 条评论