在标准SAP业务应用中常会修改标准程序和增加一些自己的功能代码来满足特定化的需求,SAP提供了一些出口对特定的程序、屏幕、MENU以及Docuement进行扩展与修改,他们并不包含任何功能,并被分离存在特定的package里所以他既不会影响标准SAP源代码也不会妨碍升级。除了通过后台配置客户化,我们常用主要有三种用户出口来进行Enhancement和Modification:   
      1,User Exit,最早的出口嵌写在标准程序里,修改起来也最为复杂。如Order处理上使用的SAPMV45A中就包含大量ZZ或YY结尾的user exit程序MV45AFZZ/MV45AIZZ。 
      2,Customer Exit,主要有三种类型Menu Exit/Screen Exit/FM Exit,首先通过CMOD来创建一个Project然后指定所需要的Enhancement,然后指定Component并激活。最后则需要加些所需代码在自动创建一个Z程序里。
      3, BADI,SE18/SE19,正如引入了OO的技术,在定义与实现在与Customer Exit两层是一样的,能客户化用户想用的标准解决方案的逻辑,对于开发者主要是通过一些方法来找到合适的BADI。

对于Order Business Process的MV45AFZZ中User Exit开发主要常用在下面几个Form中:

userexit_save_document

userexit_save_document_prepare

userexit_field_modification

userexit_move_field_to_vbap

当然还包括ZZ程序里的很多类似的Form,通过Google搜可以详细知道他们分别有不同的用途。

如常用T-code SHD0来标准的屏幕Field创建一个Variant,然后用VOV8来为不同的doc type指定不同的Variant,这样可以对屏幕Field进行控制:预设置值,必须/可选值,显示/隐藏值等等,这样非常容易设置sales order screen layout。对于更为细致的设置可以选用userexit_field_modification,例如通过权限来控制那些字段是可见或非可见的

if sy-tcode ='XXXX' and screen-name = <your screen field>.
    AUTHORITY-CHECK OBJECT 'XXX' ID 'XXXX' FIELD <screen name>.
    if sy-subrc = 0.
       screen-input = 0.     " Disable it
       screen-invisible = 1. " Hide it
       modify screen.
    endif.
endif.

User Exit的选用

User Exit的选用应该是非常谨慎的,如果有合适的其他出口可代替最好不好,特别是order包括inquiry/quotation/contract大量代码公用,以及SAP最为初始的源代码非常不易于Debug甚至后台运行,选用上还是根据具体的业务找合适的位置:是初始化的修改,是SAVE前的校验,是SAVE时的值的更新与增删,无外乎是对VBAP,VBAK,VBKD,VBEP,VBSN,VBUP,VEDA等等各个表的操作。

值的选取

值的选取不像Customer Exit和BADI,import和export的数据非常清楚,在order user exit则非常含糊,如VBAK *VBAP XVBAP YVBAK FXVEDA FYVBPF等等带* X Y FX FY的表都具有特定的意义:

X: 一般表示更新的值,

Y: 一般表示不完整的值,

FX,FY:中间变量。

另外,在条件判断上可能并没有提供相应的值,可以通过abap memory来获取;另外系统也提供了一些类似sd_vbxx_select来获取当前最新的值。

数据库问题

事实上在取值上直接通过select VBXX来获取,一些字段可能已经被更新甚至是删除以至获取的数据是过时的,这样会导致数据误操作,最终还得多从X,Y表上去检测。

同样,尽量减少Open SQL的操作(insert/delete/modify/upate),运用自身的business process来完成。

代码作用域

上面提到大量代码公共,在什么情况下该使用呢?适当的逻辑判断是非常有必要的,例如像我们常用的的order type(vbak-auart )外还有一些不可忽视的条件:

sy-tcode   (查看SYST)

sy-ucomm

t180-trtyp

测试与监控

对于user exit代码的测试,采用我们一般的测试办法问题并不大,但对memory里的数据操作,如何去检测似乎并不是一件简单的事,特别是对一些“很莫名”的问题:

(SAPLV45W)XVEDA[],类似的其他表可以查看更新后的值

ST05,通过这个t-code可以对sql进行trace,查看值是否被成功写入DB

SM13,查看update Request是否成功执行

SM21,查看system log,是否有些process被中止

以及其他的一些sm35 sm50 st01 st22 类似的SM/ST的t-code。

[SAP-SD]Sales Order 中的User Exit开发相关推荐

  1. Sales Order 中的User Exit开发

    在标准SAP业务应用中常会修改标准程序和增加一些自己的功能代码来满足特定化的需求,SAP提供了一些出口对特定的程序.屏幕.MENU以及Docuement进行扩展与修改,他们并不包含任何功能,并被分离存 ...

  2. SAP SD销售业务中客户投诉退货的处理方案

    SAP SD销售业务中客户投诉退货的处理方案 客户投诉的另一种解决办法是退货,退货在SAP系统中有三种处理方案. 1.标准退货流程 标准退货流程是指在发生退货时,先将被退回的货物入库,然后将需要补给客 ...

  3. SAP SD发货流程中托盘的管理

    SAP SD发货流程中托盘的管理 企业在销售业务中,一般会把产品包装好以后放在标准托盘上,并在托盘上外加缠绕膜做好外包装,最后一起装车发运给客户. 对于托盘这种物料,不同的SAP项目有不同的管理方式, ...

  4. 如何处理用代码创建SD Sales order时遇到的错误消息KI 180

    2019独角兽企业重金招聘Python工程师标准>>> 错误消息KI 180:You must enter a company code for transaction Create ...

  5. SAP SD 基础知识之Cash Sales和Rush Order的区别

    SAP SD 基础知识之Cash Sales和Rush Order的区别 现金销售与Rush Order流程有些类似,比如都是创建销售订单时立即交货给客户.但是它们适用的场景以及在SAP系统里的流程以 ...

  6. SAP SD基础知识之订单中装运相关的功能 II

    SAP SD基础知识之订单中装运相关的功能 II 一,计划Scheduling 当业务人员创建一张订单时,系统能够决定基于客户要求的delivery date的物料可用日期:需要交货的货物必须在该时点 ...

  7. SAP SD基础知识之订单中装运相关的功能 I

    SAP SD基础知识之订单中装运相关的功能 I 一,装运点决定Shipping Point Determination 每个订单行项目都会决定一个shipping point:系统会自动带出一个shi ...

  8. SAP SD基础知识之交货中的控制元素

    SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...

  9. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式

    SAP Cloud for Customer的Sales工作中心里有Sales Quote和Sales Order两个视图,一个用于销售报价单,另一个用于销售订单. 流程上是先有报价单 ,报价单是一份 ...

最新文章

  1. IC/FPGA校招笔试题分析(四)再看Moore状态机实现序列检测器
  2. Cygwin获取root权限
  3. 格式化字符串的几种方式
  4. Knative 实战:如何在 Knative 中配置自定义域名及路由规则
  5. Bing改善Microsoft Office及Edge浏览器图像搜索功能
  6. 解决CI框架的Disallowed Key Characters错误提示
  7. js基础练习---面向对象浅理解分析
  8. 15、sql编程基本语法介绍
  9. selenium自动化测试_为什么在生产中进行Selenium自动化测试对于您的下一个版本至关重要?...
  10. 计算最后一个单词的字符串长度
  11. WPF事件中的sender就是事件源
  12. windows如何更改字体
  13. Asterisk增加g729编码支持
  14. 戴尔EMC服务器重装系统
  15. 烈焰 页游 一键端 单机自玩 架设
  16. 京东手机webapp商城
  17. 手机QQ2008广告过滤
  18. 福禄克FLUKE 435-2与438-2三相电能质量分析仪特性
  19. chemdraw 科学绘图软件
  20. 洋桃电子STM32物联网入门30步笔记三、新建CubeIDE工程和设置讲解

热门文章

  1. 国内外交互体验很好的十款验证码
  2. 微信运动:抓住用户的小九九,一个都别跑
  3. 【人物】大众点评张涛:未来2-3年是O2O红利期和飞速增长期
  4. C++基础之继承类和派生类
  5. 随机生成颜色和透明度
  6. 蓝桥学院2019算法题1.3
  7. 在ROS中开始自主机器人仿真 - 2 让turtlebot跑起来
  8. delphi 怎么获取工程版本号
  9. 信号量(一) 基础知识
  10. C# SQLite编程总结