要对基于one order framework进行性能调优,需要对one order framework的事件处理有一个最基本的了解。
我通过截图列出了一些关键点,你看看根据这些信息能不能自己找到问题的答案:

通过UI创建一个transaction type为TA的sales order为例:

transaction type TA对应的transaction category如下:

Order修改的所有操作都是通过FM CRM_ORDER_MAINTAIN 统一trigger:

最终会调用CRM_ORDER_H_MAINTAIN_OW 或者 CRM_ORDER_I_MAINTAIN_OW处理Header或者Item:

里面的FM CRM_ORDERADM_H_PUBLISH_OW统一raise Order header level的各种事件,从而调用事件上注册的callback。

在该function module内搜索关键字 CRM_EVENT_PUBLISH_OW,能找出该FM 负责raise的所有支持的event:

internal table gt_allowed_callbacks_hdr 存放了当前系统注册的所有call back信息。系统理一次进入CRM_EVENT_PUBLISH_OW时,该内表是空的,通过subroutine register_callbacks 初始化。

当前创建的sales order

gt_pr_assign包含两个从SPRO里维护的category 再加上一个generic的BUS20001:

register完毕后针对transaction type TA,有411个可用的callback:

CRM_EVENT_PUBLISH_OW的执行逻辑就是找出这411个callback中有哪些是注册在Order的header level,且event为after_create:

lv_guid_hdr: 新创建的sales order guid
lt_atonce_exets: 需要立即执行的function module name

真正的function module 执行发生在这里:

Sent: Friday, August 15, 2014 5:36 PM

To: Wang, Jerry
Subject: 关于回调函数

首先,有几个概念我有点混淆, call back是指回调函数,对吗?也就是在SPRO里, 最下面那个红框EDIT EVENT Handler Table里定义的

CRMV_EVENT is for predefined callbacks. The customer-defined callbacks should not be registered here. Move them to SPRO.

界面如下, 可以看到某个function 比如第3行 ZCRM_CP_PRIN0_ITMCHG_EC被注册到了BUS200001这个general 类型上, immediately执行, event事件是在after_change,即发生改变就触发这个函数,优先度为0,那就是先执行它, 后续可能其他function注册为1,2,3,顺序执行, 执行的触发函数是下面界面的form execute_callbacks_planned; 因为item那项有勾, 只执行ITEM level的也就是item发生改变时执行, header改变的时候不执行,不知道理解的对不对?

但是这个form execute_callbacks_planned的次数, 比如29次是由什么决定的? 还有里面的function, 比如第5行ZER1_YMRP_BTX_QUT_PRODOC_CHK_EC, 被执行了10次, 这是在哪里决定的?

这个调用堆栈, 看来是由CRM_OREDER_MAINTAIN调到的

但是在call stack里也见到了如下form EXECUTE_CALLBACKS_AT_ONCE, 它和上面的区别, 按字面是一个是plan, 一个是立即执行, 但是这是如何区分的? 程序如何知道

看起来也是由Execute_callbacks_planned 最终调用到了EXECUTE_CALLBACKS_AT_ONCE, 但是我不理解 的是那注册在SPRO的那些回调函数到底是由哪个form真正调用的? 或者我的理解是不是已经方向性偏离了?

看以前同事(已经离职, 最近两年走了很多资深同事, 想咨询也很难了)写的关于回调函数的注意点:
Consider the following:
CRMV_EVENT is for predefined callbacks. The customer-defined callbacks should not be registered here. Move them to SPRO.
Restrict the number of times the callback is planned in for a certain execution time to a minimum.
Register the callback for individual transaction categories instead of for the generic transaction category BUS20001 so that the callbacks do not run unnecessarily for other transactions.
Avoid register the unnecessary callbacks to transaction category BUS2000115 -------115 我知道是CRM Sales Transaction, 注册FM在这个上面,是不是也相当于general的调用, 我看联想很多fm都是注册在这里的,

Consider whether it is absolutely necessary to set the execution time “Immediately”. The other execution times are better for performance since several events might trigger the same callback.-----如果不设置成immediately,

还有很多选项, 这个完全得看业务需要和实际逻辑了。

Consider carefully which value you set for the parameter Call Callback and restrict the number of times the callback is planned in for a certain execution time to a minimum. ------这个是在哪里设置????是我第一个界面吗?如何限制调用次数?
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

CRM one order性能调优指南相关推荐

  1. Hadoop数据库性能调优指南

    Hadoop数据库性能调优指南 作为谷歌云计算基础架构的模仿实现,Hadoop堪称业界最经典的开源云计算平台软件. 详细解读 和小伙伴们一起来吐槽

  2. 国产数据库清单;微盟《生产环境和数据恢复》;TiDB招聘;Oracle备份还原指南、GaussDB性能调优指南……墨天轮数据库周刊-第5期

    热门资讯 1.国产数据库清单(2020年第1季度)发布! modb.pro/db/22488 [摘要]本文统计了国产数据库产品清单,共58个产品仅供参考,同时在清单下方简单整理了各产品的基本介绍.应用 ...

  3. Docker中应用的性能调优指南(一)- 先谈谈容器化性能调优

    摘要: 前言 性能调优是一个老生常谈的话题,通常情况下,一个应用在上线之前会进行容量规划.压力测试并进行验证,而性能调优则是在容量规划与验证结果之间出现差异时会进行的必然手段.从某种角度来讲,性能调优 ...

  4. ES 性能调优,这可能是全网最详细的 Elasticsearch 性能调优指南

    文章目录 1.通用优化策略 1.1 通用最小化法则 1.2 职责单一原则 1.3 其他 2.写性能调优 2.1 基本原则 2.2 优化手段 2.2.1 增加 flush 时间间隔, 2.2.2 增加` ...

  5. linux 分析磁盘性能,03.分析性能瓶颈 - 3.4.磁盘瓶颈 - 《Linux性能调优指南》 - 书栈网 · BookStack...

    磁盘瓶颈磁盘瓶颈性能调优选项 磁盘子系统通常是服务器性能的最重要方面,是瓶颈问题的高发部件.但是,磁盘问题表现的有时候并不是那么直接,比如说可能是内存不足.如果CPU周期浪费在等待I/O任务完成,应用 ...

  6. java性能调优指南,帮你解决90%的问题!

    正文 模块(Module).组件(Component).包(Package),这些概念对于我们技术同学并不陌生,但并不是所有人都能理解其要义. 深入理解之后,我才发现,其背后的深意是分类思维.而这种分 ...

  7. linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...

    压测工具其它有用工具 在这里,我们会讨论主要的压力测试工具,选择合适的压测工具,才能准确衡量系统性能.好的压测工具有很多,可能的功能如下: 发起压力 监控性能 监控系统使用率 生成报告 基准测试无非就 ...

  8. java性能调优指南,就是这么简单

    类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载这7个阶段.其中其中验证.准备.解析3个部分统称为连接. 加载.验证.准备 ...

  9. 硬刚PS?微软推出AI设计软件;一键下载多篇论文Latex源码;PyTorch教程·模型性能调优指南;电子书·机器人与感知导论 | ShowMeAI资讯日报

最新文章

  1. Spring中 @Autowired注解与@Resource注解的区别
  2. Python__random库基本介绍
  3. 程序员必备:提升开发效率神器,强烈推荐 !!!
  4. linux 单例模式改密码,Java 利用枚举实现单例模式
  5. java中的关键字有哪些_Java关键字有哪些?
  6. yolov3前向传播(一)-- darknet53网络解析与实现
  7. 深度学习(十八)基于R-CNN的物体检测-CVPR 2014
  8. cognos数据源配置修改oracle,Cognos 新建数据源报错(原创)
  9. 网络安全等级保护三级产品清单整理
  10. 计算机卡和c盘东西多有关吗,电脑c盘东西装太多会卡吗
  11. 2022年最新手机处理器性能排行榜,手机处理器天梯图
  12. glusterfs分布式文件系统详细原理
  13. 推荐一个python库:Vaex
  14. Parse error: syntax error, unexpected ''解决办法
  15. 广西英拓网络,7*24昼夜无差别 提供G空间,首月送产权服务器租用托管!
  16. 笔记:echarts 标题(title)设置
  17. GIt后悔药:还原提交的操作(谨慎操作)
  18. ThreadPoolExecutor源码走读
  19. mysql是应用软件还是系统软件_数据库管理系统属于系统软件还是应用软件
  20. 秋招寒冬不如换个思维——试试中小厂

热门文章

  1. git fatal:HttpRequestException encountered
  2. Android内存解析(二)— 详解内存,内部存储和外部存储
  3. 小组项目第一次讨论总结
  4. 啊啊啊 草蛋啊 之前努力一天搞出来的时间算法 被一句pk掉 给我砖头
  5. WordPress中使用mod_rewrite设置漂亮链结
  6. C#如何使用DirectX实现视频播放
  7. linux关于bashrc与profile
  8. 机器学习中的不平衡分类方法(part3)--不平衡分类学习策略
  9. CSS基础(part16)--CSS用户界面样式
  10. python观察日志(part21)--ord,chr,unichr方法的联系与区别