In line 27:strange callstack.Why from API layer directly to local class level?
In line 28:LCL_REQUEST_MANAGER=>PROCESS called 139 times and consumes 4 seconds. Even taking sub nodes into consideration, why 139 times?
Need to compare in our own system and perhaps debug in Lenovo sandbox system.
In line 29: lt_processable: 148 times.
In line 31: CL_CRM_UIU_BT_TOOLS=>SAVE. Check whether it is called within LOOP. Total time: 3.86 seconds
In line 32: LCL_REQUEST_MANAGER=>PROCESS_REQUESTS why it is called 7 times?
In line 42:Call Func. CRM_ORDER_SAVE: it took 2.5 seconds to save a service order via API!
In line 67:CL_BSP_PAGE_CONTEXT=>IF_BSP_PAGE_CONTEXT~ELEMENT_PROCESS: this UI element render method is called 407 times and consumes 2.2 seconds.
In line 78: why the API is called again although control is handed over back to UI layer?
In line 79: Call Func. CRM_ORDER_SAVE_PREPARE_MULT_OW 1.6 seconds for CRM_ORDER_SAVE_PREPARE_MULT_OW
In line 92: Call M. CL_CHTMLB_CONFIG=>IF_BSP_ELEMENT~DO_AT_BEGINNING:why DO_AT_BEGINING triggers expensive Genil READ again?
In line 98: Call Func. CRM_ACTION_DETERM_COMPL_DOC – is this standard action implementation: could it be disabled?
In line 101: Call Func. CRM_ORDER_READ_OW – why is it called?
In line 107: Call M. CL_CRM_INTLAY_BTIL=>READ_ORDERS is called 138 times
In line 117: Submit Report SAPMSSY4 : synchronous or Asynchronous call?
In line 118: Call M. CL_BSP_WD_CONTEXT_NODE_TV=>GET_T_TABLE: 0.8 seconds for a pure UI layer operation!?
In line 127: Call Func. CRM_ORDER_UPLOAD_SINGLE why is it called?
In line 130: Call M. ZL_BT116H_S_OVVIEWSET_IMPL=>ZCHECK_VENDOR_ADDRESS:Lenovo BAdI implementation to check vendor address( 0.6 second)
Any space to improve?
In line 131: Call M. CL_IM_CRM_BUS20001_UPLOAD=>IF_EX_ORDER_SAVE~CHANGE_BEFORE_UPDATE – standard BAdI implementation. Could it be deactivated?
In line 134: Program SAPMSSY4 synchronous or Asynchronous call?
In line 135: why it does dynpro related record?
In line 138: Perform LOCAL_UPDATE_TASK - could it be avoided?
In line 139: Call M. CL_CRM_PARTNERSET_RUN_BTIL=>IF_CRM_RUNTIME_BTIL~READ_ATTRIBUTES - why partner set related function is called here?
In line 144: Call M. CL_CHTMLB_CONFIG_TABLE=>IF_HTMLB_TABLEVIEW_ITERATOR~RENDER_CELL_START – a large number of calls
In line 160: Call M. CL_CONTEXT_MANAGER_PPF=>CONSTRUCTOR-constructor consumes 0.3 seconds
In line 162: Perform(Ext) BAL_DB_INTERNAL_IN_UPDATE_TASK - application log: 0.3 seconds
In line 170: Select PPFTTRIGG 0.2 seconds
In line 173: Call M. CL_BSP_WD_CONTEXT_NODE_TV=>GET_V_T_TABLE get value help: 0.27 seconds
In line 175: Call M. CL_CRM_INTLAY_BTIL=>GET_DATA:a large number of GET_DATA called
In line 180 :Call M. CL_EX_ORDER_SAVE=>IF_EX_ORDER_SAVE~CHECK_BEFORE_SAVE - 0.259 seconds for BAdI implementaton call
In line 181: Call M. CL_SF_MAIL_PPF=>SET_TRIGG - is mail send functionality really necessary?

  1. From trace I can confirm that Service order save is done in a synchronous way in webclient UI. 同步操作哦。

And there is a business function to enable Asynchronous search.
If the Asynchronous search has no impact, the 0.8 seconds could be deducted from the total 7.6 seconds to save in Webclient UI.

It is necessary to clarify that, the 7.6 times consists of both the execution on Webclient UI layer, the Genil layer and API Layer.

In pricing Validation scenario, it is most likely to directly call API ( CRM_ORDER_SAVE ) to persist the order. For this API call, it took 2.5 seconds in Lenovo production system to finish the save.

Of course we need to seek the improvement in both UI save and API save, nevertheless I think we should clearly communicate about the difference between this 7.6 seconds and 2.5 seconds.

Furthermore, the save API is mass-handling enabled, which means the total number of saving N order at one time != N * 2.5 seconds.

I update my progress today: 工作进度汇报。

I have written a report using BOL API to save service order. Tested in BG3 but I don’t have a development user to create it in sandbox system.

I will try to ask for an user with enough authorization.
Then I use SAT to do a trace in sandbox system on transaction CRMD_ORDER( search out one service order, change its description and save ).

In sandbox system there are 238322 entries in order header table.
1.9 second for Modify API
3.3 second for Save API

To do: Need to figure out what action implementation is done here. ( 1.7 second )

I have gone through the source code of ZL_BT116H_S_OVVIEWSET_IMPL. The basic feeling is the custom code is not so good, although some of them may not have a BIG impact on performance. Some examples:

There are some useless code in order save. The highlighted code are always executed during order save but the final result lv_category is never used later. So it could be deleted.

“REINVENT the wheel”: There are quite lots of looping at the BOL collection to find the very bol entity by application code, even in the nested WHILE statement. However, this function is already provided by framework. I just test in BG3 that framework solution is several times faster than implemented by application.

For the order save, several methods are executed in the same session, however the same check logic is done in every method related to save again and again.

In sap standard implementation, the best practice is to buffer the check result to avoid later repeated call.

As I said those bad coding style may not impact the overall performance too much since all of the custom coding only cost 29% of total time, but just from my point of view there is indeed improvement space regarding their custom code.

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

SAP ABAP老司机平时是怎么做代码审查的相关推荐

  1. python打开交互界面设计_老司机必备——用PyQt做一个有交互界面的妹子图爬虫...

    内容简介:老司机必备--用PyQt做一个有交互界面的妹子图爬虫 代码飙车,指日可待.今天的课程教大家结合PyQt和 Python 爬虫技术,做一个带有交互界面的妹子图网站爬虫程序. 一.实验简介 1. ...

  2. 手机黑屏微信连接不上服务器,华为手机黑屏收不到微信?“老司机”竟然是这么做的!...

    作为手机党,基本上可以说是手机不离手的,而我们在使用手机时,用的最多的不是微信,就是QQ.但是最近,有很多"花粉"表示:手机黑屏后就收不到信息啦!老板.领导.女朋友的重要消息万一错 ...

  3. 一个十年SAP CRM老司机对产品主数据的理解

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  4. 3dvary灯光材质为什么不亮_为什么老司机都不把卤素车灯升级?听老司机说完,后悔升级了...

    为什么老司机都不把卤素车灯升级?听老司机说完,后悔升级了!随着汽车行业的发展,汽车的车灯也在不停地更换,从最早的卤素大灯到氙气灯,最后到现在的LED灯,灯光效果也是越来越好了.但是仍有不少的车型还在采 ...

  5. 听说你立志要做数据分析,不如先听听老司机的建议?

    (点击上方公众号,可快速关注) 作者:黄进然 每年总有很多人,怀揣着对世界的一知半解.满腔似火的热情.还有对美好生活的向往,走出象牙塔,投身社会. 世界很大,诱惑很多.对于未来,甚至在工作多年后,他们 ...

  6. 老司机做VR视频,需要什么样的全景相机?

    做为一个在全景内容领域摸爬滚打一年有余的老司机,经历了太多的坑.最近有不少朋友转行进入这个领域,问我买什么样的相机好.我现在项目太多,根本没空详尽解答.所以写下这篇文章,不懂得自己看吧. 说白了,买什 ...

  7. 万物互联时代,这家公司正在让机器人做「5G高速公路」上的「老司机」

    4G移动通信技术的普及,为人们的生活带来了翻天覆地的变化,而即将到来的5G技术,又会怎样影响人们的生活?在"万物互联"的时代,服务机器人会有怎样的升级?作为驶上5G高速公路的&qu ...

  8. 微生物组入门必读+宏基因组实操课程=新老司机赶快上车

    声明:本文转载自宏基因组公众号,原作者朱微金,己获作者授权. 写在前面 作为纯wet遗传学博士,转行微生物组领域已经有两年.目睹微生物组文章中分析所占比重之大,让我痛下决心苦学dry技能.目前感觉对宏 ...

  9. 老司机 iOS 周报 #24 | 2018-06-25

    新闻 <WWDC 17 内参>免费订阅 去年我们组织针对 WWDC 17 的内容写了 25 篇文章,原来售价 39 元,现在免费开放给大家. "iPhone Only" ...

最新文章

  1. 声波配网:通过特定的声波序列将wifi密码发到无屏幕的设备上
  2. 猫和老鼠服务器维修有问题,猫和老鼠:游戏中大范围的断网掉线问题 玩家:土豆服务器就这样...
  3. 让VisualSVN Server支持匿名访问
  4. 学会查看 RabbitMQ日志
  5. python3 for_python3 for循环-range遍历
  6. centos 6.3安装libmcrypt-2.5.8不成功解决方案
  7. Eclipse对Java(TM)8的官方支持
  8. Oracle-查看oracle是否有表被锁
  9. 基线是什么意思_CAD都玩不溜,还好意思说自己搞工程的?
  10. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别
  11. POJ 2828 Buy Tickets(单点更新) 详细题解和思路
  12. Ubuntu 14.04 java环境安装配置(不是openJAVA)
  13. WPS简历模板的图标怎么修改_个人简历怎么做?个人求职简历模板
  14. i510200h和i78750h哪个好?有什么区别
  15. vsto 安装成功后打开office word不加载
  16. java生成eml_用Java创建一个.eml(email)文件
  17. hp-unix操作系统root账号被锁定的两种解决方法:
  18. js html保存word文档,js将页面中指定内容保存到WORD
  19. mysql 用update insert_mysql 一些insert/update的用法
  20. 计算机运行内存设置方法,电脑运行内存怎么扩大

热门文章

  1. sonar 分析的质量数据在数据库表中的存储和质量维度数值的研究
  2. Linux NFS服务器的安装与配置(最简单的文件共享集群)
  3. 时间序列研(part7)--单位根检验
  4. Django从理论到实战(part26)--ORM模型
  5. 第三次学JAVA再学不好就吃翔(part10)--基础语法之if语句
  6. 客户挽留:信用卡客户流失管理
  7. java bufferedwriter 写入tab_Java基础-IO流
  8. 如何利用Python制作可以动的动态图表。
  9. SAP Spartacus 在 Github 托管虚拟机上执行的 pipeline 明细
  10. Web Bundles 学习笔记