当前位置: 首页 > news >正文

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

文章目录

  • 需求
  • 一、需求分析
  • 二、需求实现
    • 1.长文本
    • 2.标准代码位置
    • 3.增强实现
  • 总结


需求

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↑*

总结

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


http://www.mrgr.cn/news/25280.html

相关文章:

  • 激光超声成像
  • [网络]TCP/IP协议 之 数据链路层和DNS
  • 国产(DM8)达梦数据库安装教程Windows
  • python 面向对象(进阶篇)详解!
  • 如何打造一款成功的游戏
  • spring boot设置多环境的配置文件
  • GORM中常见的“reflect: reflect.Value.Set using unaddressable value“错误及解决方案
  • Nginx解决跨域问题
  • JSON对接发送短信验证码怎么获取状态报告
  • 基于Python的可视化在线学习系统
  • 如何进行IP清洗
  • 优化安防视频监控的关键体验:视频质量诊断技术如何应用在监控系统中?
  • Spring面试
  • COMDEL电源维修CLX2500康戴尔射频电源维修
  • 计算机毕业设计 基于SpringBoot的课程教学平台的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 乐在其中,销赢未来丨eBest 助饮料巨头斩获IDC数字化转型殊荣
  • 【Docker】docker的一些常用命令
  • 知攻善防 Web2 应急靶机笔记
  • 19:I2C一:程序模拟I2C通信时序
  • Java 稀疏数组