如何得到内存中的long text 文本 VA01 Check text is empty / default text

58 篇文章 0 订阅
47 篇文章 0 订阅

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 LENGTH 255,
          lv_date type LENGTH 132,
          lv_delidate like sy-datum.
     DATA: LINES LIKE STANDARD TABLE OF TLINE WITH HEADER LINE.
     DATA: LMEMORY_ID(30VALUE 'SAPLSTXD'. "do not change
     data: CATALOG LIKE TCATALOG OCCURS 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内表里,如下图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值