本文介绍的两个知识点比较零碎,所以我放在同一篇文章里来介绍。
Jerry在做SAP CRM Fiori应用开发时,在学习JavaScript时,读过这本书:
书中使用这种语法图讲解JavaScript的语法:
其实ABAP帮助文档里也存在类似的语法图,只是藏在一个不起眼的角落,不为大家所熟知:
以关键字APPEND为例,查看其语法图:
单击超链接,语法图就展示出来了,我觉得比帮助文档里的文字描述直观得多:
点击问号,可以查看图里每个组成部分的详细说明:
我们有时候发现编写的ABAP代码,运行时不能按照自己的期望工作,往往是因为对ABAP帮助文档里描述的ABAP关键字的功能理解得似是而非。如果你阅读有的关键字帮助文档时,感到晦涩难懂时,不妨换个角度,看一看它的语法图,说不定能够豁然开朗。
Jerry之前学习过SAP Commerce,在搭建开发环境执行ant all命令行进行项目构建时,发现会自动生成大量的.java文件。我的同事告诉我,这些Java文件的内容,是基于一个叫做Velocity的Java模板引擎生成的。
这些位于Hybris安装包内,以.vm结尾的文件,即Velocity的模板文件:
打开这些模板文件,发现由下图蓝色区域所示的静态内容和红色区域所示的变量组成。
在基于这些模板文件生成Java文件时,以$开头的变量会被运行时计算出的实际值替换,例如$currentDateTime被替换成实际执行ant all命令行构建项目的时间戳。
一个基于上图模板文件生成的Java文件的例子:
那么ABAP里有没有类似Java Velocity这种模板引擎呢?
和JavaScript一样,ABAP里也有字符串模板(String Template)的概念:
ABAP字符串模板定义在两根竖线之内,如上图第14行代码所示。字符串模板里包含静态的字符串文本和ABAP变量名。在运行时,这些充当占位符的ABAP变量会被其实际包含的值所取代。
下图是JavaScript里的字符串模板的一个例子,只不过分隔符从ABAP的竖线换成了单引号:
使用ABAP的字符串模板,我们同样可以实现类似Java Velocity动态生成代码的需求。Jerry之前的文章 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试 曾经介绍过。
将需要动态创建的ABAP类的源代码用字符串模板拼凑好,存储到内表lt_source中,然后调用关键字GENERATE SUBROUTINE POOL,创建生命周期只存在于当前会话期间内的临时ABAP类。
如果想生成全局ABAP类,即生成之后能够持久化在ABAP服务器上,并且能够通过SE24和SE80打开,则将拼凑好的包含ABAP类实现源代码的内表传给ABAP类的创建API,即函数SEO_CLASS_CREATE_COMPLETE.
下图代码根据内表mt_sourcecode里存储的内容,在$TMP包下创建了一个新的ABAP类。
以上就是ABAP最常用的两种自动生成代码的方式。
其实还有第三种方式,应用在SAP一些框架比如BRFplus自动生成ABAP类的场景里:
可以通过关键字ABAP CODE COMPOSER找到帮助文档。
下面Jerry就通过一个实际的例子介绍如何使用ABAP Code Composer自动生成代码。
和Java Velocity思路一样,我们基于一个ABAP模板自动生成新的代码。创建一个ABAP Include充当模板,取名ZSINGLETON:
模板代码如下,定义了一个用单例设计模式(Singleton)实现的ABAP类的基本骨架。
这个ABAP模板里以$开头和$结尾的变量,作用和Java Velocity里的变量类似,充当占位符的角色,运行时被模板的调用者传入的实际值替换。
而@if和@end, 和Velocity的#if与#end一样,在根据模板生成实际代码时,提供了简单的条件分支处理和控制功能。
我的ZSINGLETON模板里总共定义了4个变量:
- $I_PARAM-class$
- $I_PARAM-global$
- $I_PARAM-interface$
- $I_PARAM-exception$
最后写一个ABAP程序,使用Code Composer消费ZSINGLETON模板,将上述4个变量的实际值传入,生成一个可以持久化保存的ABAP单例类,名称为第18行代码指定的ZCL_JERRY.
下图是通过ABAP模板和ABAP Code Composer生成的ABAP类的源代码,可以看到之前模板里通过$定义的变量,已经被调用模板生成ABAP类时传入的实际值替换了。
希望这篇文章能让大家对SAP ABAP里如何自动生成代码的几种方式有所了解,感谢阅读。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
ABAP专题
- Jerry的ABAP, Java和JavaScript乱炖
- ABAP开发人员未来应该学些什么
- Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
- Jerry的ABAP原创技术文章合集
- 300行ABAP代码实现一个最简单的区块链原型
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
- 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C语言和ABAP
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
- 我用ABAP做过的那些无聊的事情
- 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
- 使用Visual Studio Code编写和激活ABAP代码
- 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
- 在SAP云平台ABAP编程环境上编写第一段ABAP程序
- SAP官方发布的ABAP编程规范
- ABAP Code Inspector那些隐藏的功能,您都知道吗?
- 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
- ABAP Netweaver体内的那些寄生式编程语言
- 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
- 云端的ABAP Restful服务开发
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
- 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
- Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
- Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
- SAP云平台上的ABAP编程环境里如何消费第三方服务
- ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
- SAP云平台里的三叉戟应用
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
- SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
- ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
- 一段让人瑟瑟发抖的ABAP代码
- 昨日万圣节ABAP怪兽级代码谜团,公布答案啦
- 介绍一种在ABAP内核态进行内表高效拷贝的方法
- 使用SAP Cloud Application Programming模型开发OData的一个实际例子
- 当ABAP遇见普罗米修斯
- 使用ABAP绘制可伸缩矢量图
- ABAP开发环境语法高亮的那些事儿
- SAP错误消息调试之七种武器:让所有的错误消息都能被定位
- 使用ABAP操作Excel的几种方法
- SAP GUI里的收藏夹事务码管理工具
- SAP GUI和Windows注册表
- 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
- ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
- 实现ABAP条件断点的三种方式
- 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
- 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害
- SAP ABAP Netweaver容器化, 不可能完成的任务吗?
- SAP产品增强技术回顾
- SAP API开发方法大全
- 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
- SAP ABAP应用服务器的HTTP响应状态码(Status Code)
- SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下
- ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序
- SAP ABAP Netweaver服务器的标准登录方式讲解
相关推荐
“abap语法.chm”和“abap语法.chw”文件很可能是ABAP的参考手册或词典,提供了完整的ABAP关键字列表和相关解释。这些文件对于学习和查询ABAP关键字非常有用,因为它们通常包含详尽的描述、用法示例以及可能的错误...
SAP ABAP 代码备份下载到本地程序代码
作为SAP的开发平台,ABAP提供了一系列的语法和结构,使得开发者可以构建复杂的业务逻辑和应用程序。下面我们将深入探讨ABAP的基本语法。 1. **数据类型**: ABAP支持多种数据类型,包括字符型(CHAR),数值型...
文件名为"SAP ABAP CODE下载-1.4.4.txt"可能是一个文本文件,其中包含了这些源代码的清单或者链接,供开发者参考和下载。 在实际应用中,SAP ABAP的开发者可能会使用SE80交易码来访问和编辑代码,或者通过ABAP ...
SAP ABAP 开发环境和开发工具介绍 SAP ABAP 开发环境和开发工具是 SAP 系统中最重要的组件之一,它提供了一个强大的开发平台,允许开发者创建、测试和部署 ABAP 程序。ABAP 是 SAP 系统中的主要编程语言,用于开发...
在S4 ABAP新语法中,开发者可以利用一系列更新的关键字和特性来提高代码的效率和可读性。以下是对这些关键特性的详细介绍: 1. **DATA**: `DATA`关键字用于声明新的变量或数据结构。在S4 ABAP中,你可以更灵活地...
SAP ABAP基本语法概述 SAP ABAP是一种高级编程语言,用于开发SAP系统中的应用程序。下面是SAP ABAP基本语法概述的知识点。 ABAP基础 ABAP语言是SAP系统的核心语言,用于开发SAP应用程序。ABAP语言具有强大的功能...
资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...
SAP HANA系统的查询语法有了许多更新,使用新语法能提高查询速度,特别是大数据的。本文档里面的内容放了大量的新语法,欢迎各位下载。
《工程师突击:SAP+ABAP实用程序开发攻略》则可能更专注于实际应用,它可能详细讲解了ABAP编程中的关键技术和工具,如ABAP Workbench、ABAP Object-Oriented Programming(面向对象编程)、Function Modules、BADI...
SAP ABAP基本语法介绍 SAP ABAP是一种高级商务应用编程语言,用于开发SAP系统中的应用程序。ABAP编辑器是SAP系统中的一个集成开发环境,提供了代码编辑、编译、调试和测试等功能。 ABAP语法特点: * 由各自独立的...
【SAP ABAP4语法详解】 ...SAP ABAP4的语法和结构设计使得它成为开发SAP系统应用的强大工具,支持多种功能,包括数据库交互、用户界面处理以及复杂的业务逻辑。掌握ABAP4语言将有助于构建高效、可靠的SAP解决方案。
SAP ABAP基本语法 SAP ABAP基本语法是 SAP 系统中的一种编程语言,用于开发 SAP 应用程序。ABAP 语言与标准数据声明相似的语法处理数据类型,而与数据对象无关。在程序中必须声明要使用的全部数据对象。 1. 基本...
* ABAP开发环境和工具 * ABAP项目开发流程和方法 * ABAP测试和优化技术 七、SAP ABAP常见错误和解决方法 * ABAP语法错误和解决方法 * ABAP运行时错误和解决方法 * ABAP性能优化和解决方法 * ABAP安全性和解决方法 ...
SAP ABAP Query 是 SAP 系统中一种用于创建自定义报表的强大工具,尤其适合那些对 SQL 不太熟悉或者没有数据库直接访问权限的用户。它提供了丰富的功能,使得开发人员可以构建复杂的数据查询,而无需编写大量的 ABAP...
接着,将学习到ABAP报表编程,包括编写动态SQL和使用ABAP的Report程序来生成定制报告。 "高清自学版 SAP+ABAP开发从入门到精通"表明了该资料可能包含视频教程,这对于视觉学习者来说是非常有价值的资源。通过观看...
《SAP-ABAP语法详解教材》是一本深入解析SAP ABAP编程语言的专业教程,专为初学者和有经验的开发者设计。SAP ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的主要编程语言。通过...
8. **报表开发**:SAP ABAP报表用于生成各类报告,如LIST REPORT和ALV(Application List Viewer)。掌握如何生成自定义报表将极大地提升工作效率。 9. **对话模块和屏幕流**:在ABAP中,用户界面的创建涉及对话...
9. **ABAP开发工具**:SAP提供了ABAP Development Workbench,包括SE80、SE38等工具,用于编写、调试和测试ABAP代码。教程会指导如何使用这些工具进行日常开发。 10. **单元测试与质量保证**:了解如何使用ABAP ...
【SAP ABAP调用Java生成的Web Service手册】 在SAP系统中,与外部服务进行交互时,经常需要调用由Java等其他语言编写的Web Service。本手册详细介绍了如何在MyEclipse环境中生成Web Service,并在SAP ABAP环境中...