在标准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。

Sales Order 中的User Exit开发相关推荐

  1. [SAP-SD]Sales Order 中的User Exit开发

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

  2. 使用函数BAPISDORDER_GETDETAILEDLIST读取S/4HANA中Sales Order行项目数据

    事务码MM03查看物料主数据,如下图所示的行项目数据,包含物料ID,描述信息,数量,单价等等: 使用如下代码进行行项目读取: DATA: ls_read TYPE order_view, lt_ite ...

  3. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

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

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

  5. 第二十三篇:在SOUI中使用LUA脚本开发界面

    像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...

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

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

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

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

  8. SAP HU 序列号里的Sales Order号码不一致导致PGI失败问题之对策

    SAP HU & 序列号里的Sales Order号码不一致导致PGI失败问题之对策 笔者所在的项目上,某日收到业务部门用户报问题说某个DN发货过账,报错:"The indicato ...

  9. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

最新文章

  1. 蜗蜗 Linux内核芬妮下,Linux内核的整体架构
  2. 如何调用java的包_jsp如何调用java包
  3. 浅析云控平台画面传输的视频流方案
  4. jsdelivr 缓存刷新
  5. poj 2421 ConstructingRoads 最小生成树 Prim、Kruskal
  6. Vue.js学习系列(八)---使用路由搭建单页应用(一)
  7. MacOS下安装R语言和RStudio教程(超完整)
  8. 计算机化分析原理波涛,证券期货投资计算机化技术分析原理(波涛).pdf.pdf
  9. 做网站用企业网站模板好不好
  10. 800家电子元器件供应商及代理商
  11. Mybatis的灵活运用及注意事项
  12. 回首过去展望未来——14年年终总结
  13. vue安装使用v-chart时报错解决方案
  14. nas文件服务器访问限制,nas文件服务器远程访问
  15. Java多线程并发编程知识体系(附大图-持续更新)
  16. php100以内质数求和,100以内的质数_PHP质数计算三种方法 php求100以内的质数
  17. ruoyi 富文本编辑器Quill-取消自动聚焦
  18. win10睡眠风扇仍然转动解决办法
  19. H2内存数据库数据类型
  20. 解决笔记本开机D、E(硬盘)消失不见问题

热门文章

  1. 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
  2. HTML 5 视频,音频
  3. Hibernate关键字inverse和cascade
  4. 窗体的ControlBox属性
  5. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  6. 美团点评:基于Druid的Kylin存储引擎实践
  7. JavaScript事件循环探索
  8. 运维与自动化系列③自动化部署基础与shell脚本实现
  9. 运维自动化轻量级工具pssh
  10. LinearLayout和RelativeLayoutnbs…