C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application Studio进行ABSL编程的一些性能方面的最佳实践。
文章里提纲挈领地给出了一些guideline。这里提供一些具体的例子。
如何批量调用BO action
不好的例子:
第一行和第四行有两个循环,然后在第二次循环里调用一个比较耗时的ServiceRequest BO的item 节点上定义的标准action FinishFulfilmentProcessing。代码的时间复杂度为o(n2)
正确的做法:
优化的原理就是,C4C和其他很多基于Netweaver的SAP产品一样,其BO的核心service都支持批量操作。所谓批量操作,技术上就是指这些service的输入参数是一个内表,而非单条数据。如果您做过CRM开发,可以类比CRM_ORDER_MAINTAIN这个function module,其所有输入参数都是内表结构。C4C的BO提供的service的接口定义也完全采用了这种支持批量操作的设计。
上述不好的例子,编译出来的ABAP代码的伪代码如下:(因为C4C的后台代码没有开放给Partner和客户,我只能提供伪代码)。可以看出尽管BO的action是执行批量操作,但是这种写法并没有发挥批量操作的作用,每次在循环内部作为输入参数的内标在第二行被清空,造成每次调用BO action时输入参数只有一条记录。
而正确的例子,编译后生成的伪代码为:
能清楚地看到BO action的执行已经放到循环外部了。
如何批量执行BO Retrieve
当我们在Cloud Studio里通过代码自动完成功能试图调用BO的Retrieve方法时,IDE会提示我们Retrieve方法有三个重载(Overload), 这表明Retrieve能够支持传入不同的参数。
正确和不建议的做法分别见下图蓝色和红色代码。可以看到蓝色代码retrieve接受的输入参数是一个集合, 包含了两个ID为3和4的元素,使得41行的调用能够一次即可返回2个ServiceRequest的数据。
line 43编译后生成的ABAP代码的伪代码:
line 41编译后生成的ABAP代码的伪代码:
通过比较能发现如果传入retrieve的参数是一个ID的集合,那么编译生成的ABAP代码会调用一个接口为内表的retrieve方法,批量读取数据。
如何批量执行BO Create
对于基础的Create操作,见下列代码第54行,只支持基于单个节点的数据创建。
但是对于CreateWithReference的场景,则和第二个例子的Retrieve场景一样,不仅支持传入单个数据(第56行), 也支持传入一个集合(第58行)。
这两种不同的输入,会导致编译生成的ABAP代码分别进入CREATE_WITH_REF_1和CREATE_WITH_REF_N的执行逻辑,产生性能差异。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践相关推荐
- 一步步使用SAP C4C Cloud Application Studio创建一个BO和对应的屏幕
打开SAP C4C Cloud Application Studio, 进入Solution Explorer,右键菜单里选择Add -> New Item: 新建一个Business Obje ...
- 关于SAP Cloud for Customer Cloud Application Studio登录失败的问题
使用SAP C4C Cloud Application Studio登录时,可能会遇到如下错误: 错误消息: you are already logged on to the SDK on syste ...
- 使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)
2019独角兽企业重金招聘Python工程师标准>>> 在Cloud Application Studio里新建一个Code List Data Type: 维护Value和描述信息 ...
- 如何下载 SAP Cloud for Customer Cloud Application Studio
SAP Cloud Application Studio 是 SAP C4C 二次开发工具. 下载网址: https://support.sap.com/en/index.html 登录 SAP su ...
- SAP Cloud for Customer Cloud Application Studio的Trace功能
You can activate tracing on any system that you can log on to with your developer user account. When ...
- 【实践】一站式数据开发平台在有赞的最佳实践.pdf(附下载链接)
猜你喜欢 0.[免费下载]2021年11月热门报告盘点1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5 ...
- 【区块链 | 前端】前端开发人员入门区块链的最佳实践
前端开发人员入门区块链的最佳实践 一. 建立信仰 从技术入门一个行业通常是漫无目的,个人认为正确的入行区块链的方式是去了解他的背景,是去建立自己信仰的,尤其身处一个刚起步就被扼杀的行业,我们每个人都是 ...
- 大型开发项目中 git 工作流的最佳实践
Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践. 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎. ...
- Android 应用开发(19)--- 应用权限最佳实践
应用权限最佳实践 权限请求保护设备提供的敏感信息,并且只有在访问信息对于您的应用的运行是必要的时才应使用.本文档提供了有关如何在不需要访问此类信息的情况下实现相同(或更好)功能的提示; 这并不是关于权 ...
最新文章
- 四十四、Stata统计操作和绘图
- android之微信分享文本
- mysql innodb和myisam_Mysql InnoDB和MyISAM的区别
- php image处理,php 中图像压缩处理类(二)imageutil.php
- Linux下如何使CP命令不提示覆盖
- 机器博弈 (二) 遗憾最小化算法
- PAIP.MYSQL 1045 Access denied for user 'XXXX'@'loca 的解决.txt
- 不学点《近世代数》怎么学好现代密码学
- 蓝牙打印 设置打印样式_Android——蓝牙连接打印机以及打印格式
- bootstrap搜索图标的使用
- 计算机网络ip地址划分范围,ip地址分类及范围划分有哪些
- 如何让ARM板开机启动Qt
- Spark stand a lone 模式
- 2019 年第 26 周 DApp 影响力排行榜 | TokenInsight
- 判断一个字符串是否为全字母句
- slides.com 导出PDF
- 什么是进程、进程的概念?
- 二进制到汇编学习-狂神说-雁迟
- java aero_java – 结合Aero Glass效果和SWT
- 硕士生如何学习论文、期刊文献
热门文章
- 操作系统线程互斥,锁死机制的简单介绍
- J2EE dynamic web工程搭建 struts2
- 阿里大数据分析与应用(part5)--QuickBI
- cmd mysql log_如何使用mysqlbinlog工具?
- 查看dataloader的大小_一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
- 5000字超干货|如何用数据分析驱动用户增长
- 为什么我们总是喜欢选择差不多的价格
- SAP Spartacus PageMetaService 的单元测试
- SAP Spartacus SpartacusB2cConfigurationModule 的使用场景
- 关于SAP Kyma在国内的落地情况