`
JerryWang_SAP
  • 浏览: 1025961 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

SAP ABAP关键字语法图和ABAP代码自动生成工具Code Composer

阅读更多

本文介绍的两个知识点比较零碎,所以我放在同一篇文章里来介绍。

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专题

0
0
分享到:
评论

相关推荐

    abap关键字的查询帮助

    “abap语法.chm”和“abap语法.chw”文件很可能是ABAP的参考手册或词典,提供了完整的ABAP关键字列表和相关解释。这些文件对于学习和查询ABAP关键字非常有用,因为它们通常包含详尽的描述、用法示例以及可能的错误...

    SAP ABAP 代码备份下载到本地程序代码

    SAP ABAP 代码备份下载到本地程序代码

    SAP ABAP基本语法

    作为SAP的开发平台,ABAP提供了一系列的语法和结构,使得开发者可以构建复杂的业务逻辑和应用程序。下面我们将深入探讨ABAP的基本语法。 1. **数据类型**: ABAP支持多种数据类型,包括字符型(CHAR),数值型...

    SAP ABAP 1.4.4代码下载

    文件名为"SAP ABAP CODE下载-1.4.4.txt"可能是一个文本文件,其中包含了这些源代码的清单或者链接,供开发者参考和下载。 在实际应用中,SAP ABAP的开发者可能会使用SE80交易码来访问和编辑代码,或者通过ABAP ...

    SAP ABAP 开发环境和开发工具介绍

    SAP ABAP 开发环境和开发工具介绍 SAP ABAP 开发环境和开发工具是 SAP 系统中最重要的组件之一,它提供了一个强大的开发平台,允许开发者创建、测试和部署 ABAP 程序。ABAP 是 SAP 系统中的主要编程语言,用于开发...

    非常全的 S4 ABAP 新语法(适用S4不适用ECC等老系统)

    在S4 ABAP新语法中,开发者可以利用一系列更新的关键字和特性来提高代码的效率和可读性。以下是对这些关键特性的详细介绍: 1. **DATA**: `DATA`关键字用于声明新的变量或数据结构。在S4 ABAP中,你可以更灵活地...

    SAP ABAP基本语法概述.docx

    SAP ABAP基本语法概述 SAP ABAP是一种高级编程语言,用于开发SAP系统中的应用程序。下面是SAP ABAP基本语法概述的知识点。 ABAP基础 ABAP语言是SAP系统的核心语言,用于开发SAP应用程序。ABAP语言具有强大的功能...

    sapabap开发从入门到精通

    资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...

    ABAP新语法.txt

    SAP HANA系统的查询语法有了许多更新,使用新语法能提高查询速度,特别是大数据的。本文档里面的内容放了大量的新语法,欢迎各位下载。

    SAP ABAP 电子书

    《工程师突击:SAP+ABAP实用程序开发攻略》则可能更专注于实际应用,它可能详细讲解了ABAP编程中的关键技术和工具,如ABAP Workbench、ABAP Object-Oriented Programming(面向对象编程)、Function Modules、BADI...

    SAP ABAP基本语法介绍.pdf

    SAP ABAP基本语法介绍 SAP ABAP是一种高级商务应用编程语言,用于开发SAP系统中的应用程序。ABAP编辑器是SAP系统中的一个集成开发环境,提供了代码编辑、编译、调试和测试等功能。 ABAP语法特点: * 由各自独立的...

    SAP ABAP4语法

    【SAP ABAP4语法详解】 ...SAP ABAP4的语法和结构设计使得它成为开发SAP系统应用的强大工具,支持多种功能,包括数据库交互、用户界面处理以及复杂的业务逻辑。掌握ABAP4语言将有助于构建高效、可靠的SAP解决方案。

    SAP ABAP基本语法.docx

    SAP ABAP基本语法 SAP ABAP基本语法是 SAP 系统中的一种编程语言,用于开发 SAP 应用程序。ABAP 语言与标准数据声明相似的语法处理数据类型,而与数据对象无关。在程序中必须声明要使用的全部数据对象。 1. 基本...

    SAP ABAP初级培训手册

    * ABAP开发环境和工具 * ABAP项目开发流程和方法 * ABAP测试和优化技术 七、SAP ABAP常见错误和解决方法 * ABAP语法错误和解决方法 * ABAP运行时错误和解决方法 * ABAP性能优化和解决方法 * ABAP安全性和解决方法 ...

    sap abap query高级功能

    SAP ABAP Query 是 SAP 系统中一种用于创建自定义报表的强大工具,尤其适合那些对 SQL 不太熟悉或者没有数据库直接访问权限的用户。它提供了丰富的功能,使得开发人员可以构建复杂的数据查询,而无需编写大量的 ABAP...

    ABAP开发从入门到精通-高清自学版 SAP+ABAP开发从入门到精通 SAP开发自学必读 SAP SAP开发自学入门到精通

    接着,将学习到ABAP报表编程,包括编写动态SQL和使用ABAP的Report程序来生成定制报告。 "高清自学版 SAP+ABAP开发从入门到精通"表明了该资料可能包含视频教程,这对于视觉学习者来说是非常有价值的资源。通过观看...

    SAP-ABAP语法详解教材

    《SAP-ABAP语法详解教材》是一本深入解析SAP ABAP编程语言的专业教程,专为初学者和有经验的开发者设计。SAP ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的主要编程语言。通过...

    实战SAP程序开发——从实例学SAP ABAP编程.rar

    8. **报表开发**:SAP ABAP报表用于生成各类报告,如LIST REPORT和ALV(Application List Viewer)。掌握如何生成自定义报表将极大地提升工作效率。 9. **对话模块和屏幕流**:在ABAP中,用户界面的创建涉及对话...

    SAP ABAP官方教程

    9. **ABAP开发工具**:SAP提供了ABAP Development Workbench,包括SE80、SE38等工具,用于编写、调试和测试ABAP代码。教程会指导如何使用这些工具进行日常开发。 10. **单元测试与质量保证**:了解如何使用ABAP ...

    sap abap调用java生成的webservice手册

    【SAP ABAP调用Java生成的Web Service手册】 在SAP系统中,与外部服务进行交互时,经常需要调用由Java等其他语言编写的Web Service。本手册详细介绍了如何在MyEclipse环境中生成Web Service,并在SAP ABAP环境中...

Global site tag (gtag.js) - Google Analytics