金色传说:SAP-SD-VA01增强:创建销售订单时检查行项目长文本必输增强


需求

VA01创建特定类型销售订单时检查第一个行项目的长文本有没有输入内容,还必须是ZH中文的内容,没输入时不能保存销售订单.

一、需求分析

销售订单保存增强是很常见的需求,增强程序:MV45AFZZ都快被大家写烂了,但是这次的需求很少见,要求检查的是长文本.而在MV45AFZZ的USEREXIT_SAVE_DOCUMENT_PREPARE里是没有办法直接取到录入的长文本内容的.那么,如何在保存时检查长文本呢?

二、需求实现

1.长文本

做过长文本相关开发的顾问应该都知道,长文本的存储和普通数据不同,是通过文本名称,标识,对象,语言类型存到:
STXH表 - 长文本的抬头信息
STXL表 - 长文本是明细信息
读取时需要调用函数READ_TEXT进行读取.
我断点做了观察,在执行完USEREXIT_SAVE_DOCUMENT_PREPARE增强点时,STXH表还没有数据,所以只能另寻他法.
经过漫长的折磨,分析了SAP的标准代码,最后终于找到了!

2.标准代码位置

SE38: SAPLSTXD=>LSTXDUXX=>LSTXDU08的230行位置
在这里插入图片描述
这里是将长文本放到了内存中,而且这个位置是在MV45AFZZ的USEREXIT_SAVE_DOCUMENT_PREPARE之前运行的,也就是说,我们可以直接在USEREXIT_SAVE_DOCUMENT_PREPARE里获取这个内存参数的数据来判断有没有输入长文本!
这里的MEMORY_ID的格式,行项目的长文本ID是’SAPLSTXD000001’,就是SAPLSTX+行,1就是销售订单的第一行的意思,第二行就是’SAPLSTXD000002’

3.增强实现

代码如下(示例):
代码位置:MV45AFZZ的USEREXIT_SAVE_DOCUMENT_PREPARE中

*--------------------------------------------------------------------S↓*
DATA BEGIN OF catalog OCCURS 50.
INCLUDE STRUCTURE tcatalog.
DATA END OF catalog.

DATA BEGIN OF theader.
     INCLUDE STRUCTURE thead.
DATA END OF theader.
DATA BEGIN OF gt_lines occurs 50.
  INCLUDE STRUCTURE tline.
DATA END OF gt_lines.
DATA item_id(14) TYPE c.
IF ( sy-tcode = 'VA01' OR sy-tcode = 'VA02') AND ( xvbak-auart EQ 'ZOR1' OR xvbak-auart EQ 'ZOR8').
  "取得所有该销售订单的长文本内存
  IMPORT catalog FROM MEMORY ID 'SAPLSTXD'.

  LOOP AT catalog INTO DATA(ds_item10) WHERE tdname cs '000010' AND tdspras EQ '1'."有第一个行项目并且是中文的
    item_id = 'SAPLSTXD' &&  ds_item10-id.
    EXIT.
  ENDLOOP.
  IF ds_item10 IS INITIAL.
     MESSAGE E145(ZV00).
  ENDIF.
  
  "长文本详细内容
  IF item_id IS NOT INITIAL.
    IMPORT thead TO theader tline TO gt_lines FROM MEMORY ID item_id.
      LOOP AT gt_lines.
        "在此处理长文本的内容
      ENDLOOP.
  ENDIF.
ENDIF.

*--------------------------------------------------------------------E↑*

总结

只要找对方法,位置,实现还是很简单的,但往往方法和位置才是最珍贵的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI云书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值