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开发的一些性能方面的最佳实践相关推荐

  1. 一步步使用SAP C4C Cloud Application Studio创建一个BO和对应的屏幕

    打开SAP C4C Cloud Application Studio, 进入Solution Explorer,右键菜单里选择Add -> New Item: 新建一个Business Obje ...

  2. 关于SAP Cloud for Customer Cloud Application Studio登录失败的问题

    使用SAP C4C Cloud Application Studio登录时,可能会遇到如下错误: 错误消息: you are already logged on to the SDK on syste ...

  3. 使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)

    2019独角兽企业重金招聘Python工程师标准>>> 在Cloud Application Studio里新建一个Code List Data Type: 维护Value和描述信息 ...

  4. 如何下载 SAP Cloud for Customer Cloud Application Studio

    SAP Cloud Application Studio 是 SAP C4C 二次开发工具. 下载网址: https://support.sap.com/en/index.html 登录 SAP su ...

  5. 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 ...

  6. 【实践】一站式数据开发平台在有赞的最佳实践.pdf(附下载链接)

    猜你喜欢 0.[免费下载]2021年11月热门报告盘点1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5 ...

  7. 【区块链 | 前端】前端开发人员入门区块链的最佳实践

    前端开发人员入门区块链的最佳实践 一. 建立信仰 从技术入门一个行业通常是漫无目的,个人认为正确的入行区块链的方式是去了解他的背景,是去建立自己信仰的,尤其身处一个刚起步就被扼杀的行业,我们每个人都是 ...

  8. 大型开发项目中 git 工作流的最佳实践

    Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践. 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎. ...

  9. Android 应用开发(19)--- 应用权限最佳实践

    应用权限最佳实践 权限请求保护设备提供的敏感信息,并且只有在访问信息对于您的应用的运行是必要的时才应使用.本文档提供了有关如何在不需要访问此类信息的情况下实现相同(或更好)功能的提示; 这并不是关于权 ...

最新文章

  1. 四十四、Stata统计操作和绘图
  2. android之微信分享文本
  3. mysql innodb和myisam_Mysql InnoDB和MyISAM的区别
  4. php image处理,php 中图像压缩处理类(二)imageutil.php
  5. Linux下如何使CP命令不提示覆盖
  6. 机器博弈 (二) 遗憾最小化算法
  7. PAIP.MYSQL 1045 Access denied for user 'XXXX'@'loca 的解决.txt
  8. 不学点《近世代数》怎么学好现代密码学
  9. 蓝牙打印 设置打印样式_Android——蓝牙连接打印机以及打印格式
  10. bootstrap搜索图标的使用
  11. 计算机网络ip地址划分范围,ip地址分类及范围划分有哪些
  12. 如何让ARM板开机启动Qt
  13. Spark stand a lone 模式
  14. 2019 年第 26 周 DApp 影响力排行榜 | TokenInsight
  15. 判断一个字符串是否为全字母句
  16. slides.com 导出PDF
  17. 什么是进程、进程的概念?
  18. 二进制到汇编学习-狂神说-雁迟
  19. java aero_java – 结合Aero Glass效果和SWT
  20. 硕士生如何学习论文、期刊文献

热门文章

  1. 操作系统线程互斥,锁死机制的简单介绍
  2. J2EE dynamic web工程搭建 struts2
  3. 阿里大数据分析与应用(part5)--QuickBI
  4. cmd mysql log_如何使用mysqlbinlog工具?
  5. 查看dataloader的大小_一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
  6. 5000字超干货|如何用数据分析驱动用户增长
  7. 为什么我们总是喜欢选择差不多的价格
  8. SAP Spartacus PageMetaService 的单元测试
  9. SAP Spartacus SpartacusB2cConfigurationModule 的使用场景
  10. 关于SAP Kyma在国内的落地情况