Jerry去年的文章 动手使用ABAP Channel开发一些小工具,提升日常工作效率 里曾经介绍过一些用ABAP实现的可供娱乐的小程序,比如用古老的HPGL接口在SAPGUI里绘图:
关于如何用SAP + HPGL语言在SAPGUI里画出这只哆啦A梦来,参考Jerry的文章:
本文要介绍的是另一种在SAPGUI里用ABAP绘图的方式。矢量图(Scalable Vector Graphics)也是一种图像格式,和传统的图像格式相比具有很多优点,因此近些年使用越来越广泛:
- SVG是开放的标准,基于XML,可以直接用纯文本工具编辑;
- SVG与JPEG和GIF等图像格式比起来,尺寸更小,可压缩性更强;
- SVG顾名思义,是一种可伸缩(Scalable)的图像格式,在图形尺寸发生改变的情况下,图形质量也不会受到影响。
- SVG图形中的文字是可选可搜索的,最适合用于绘制地图。
看个具体的例子。一个矩形由四条边组成,所以一个矩形的SVG实现,则是由对应的四条由line标签代表的线段构成。
从这个例子我们也能发现,SVG标签可以直接被嵌入HTML网页里。
而ABAP有一个工具类,CL_ABAP_BROWSER提供了SHOW_HTML方法,可以在SAPGUI里打开一个嵌入的浏览器窗口。
这样,我们将前面介绍的包含有矩形的SVG格式的HTML代码传入SHOW_HTML的HTML_STRING参数,发现可以在SAPGUI环境下完美工作:
因此,“使用ABAP绘制可伸缩矢量图”这个命题,就划归为“使用ABAP拼接可伸缩矢量图对应的HTML源代码”,一下子就把复杂的图形操作需求,降维成相对简单的字符串拼接操作了。
Jerry小学的时候,上的编程启蒙课,在386上学习过一门名叫Logo的编程语言。LOGO一词源于希腊文,原意为“文字”或“思考”、“想法”,是一种过程性语言,1976年由美国麻省理工学院佩帕特(Seymour Papert)教授指导下的一个研究小组, 在LISP语言基础上,专门为儿童研制开发的编程语言。当时教这门课的老师,一位老大爷,直接把语言里画图的cursor说成是“海龟”,可谓简单形象。
下图是用Logo语言画出来的图案。
有趣的是,30年之后,SAP捷克研究院一位开发人员,在Github上创建了一个ABAP代码仓库,将SVG常用的绘图操作用类LOGO语言的语法封装成库,库的名称就叫ABAP Turtle,仿佛是在向传统的LOGO语言致敬。
这位ABAP开发人员的联系方式维护在Github上,大家感兴趣的可以自行去交友。
基于这位SAP开发人员创建的ABAP Turtle库的SVG矩形绘制代码如下:
下面这个图形又是如何画出来的呢?首先选屏幕某个点作为图形的中心点,从中心点出发画一个正十边形,回到原点,然后重复绘制19次正十边形。每次绘制从中心点出发时,顺时针偏移360 / 20 = 18度角。
最后我们看到的图形,是由20个正十边形施加了18度角的偏移量后叠加而成。
对应的实现代码:
我们还可以自己编辑一些指令序列,比如用符号F代表前进,加号代表右转,减号代表左转。用这三个符号就可以组装一些自定义指令,然后通过参数num_iterations指定,按照我们期望的迭代次数执行图像绘制。
你能想象下面这个图形,是由"|—|"这个基础图形按照F+F-F-F+F迭代四次构成的么?
考一考大家,下面这棵树如何通过构造自定义的SVG指令画出来?
答案在FreHu的github里:https://github.com/FreHu/abap-turtle-graphics
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
2. **生成Proxy代码**:在目标系统中,使用SE80事务码,通过“生成ABAP Proxy”功能,输入源系统的服务接口信息,自动生成对应的ABAP Proxy类和相关代码。 3. **编译与激活**:生成的Proxy代码需要在目标系统中进行...
### 使用Eclipse进行ABAP开发 #### 一、安装与配置 ##### 1.1 先决条件 在开始使用Eclipse进行ABAP开发之前,需要确保满足以下先决条件: - **GUI版本**:必须是7.4或更高版本。 - **Eclipse版本**:推荐使用...
6. **数据库通信**:讲解如何使用ABAP与数据库交互,如使用SELECT-OPTIONS,SQL语句(INSERT, UPDATE, DELETE, SELECT)等。 7. **屏幕编程**:讨论如何利用屏幕事件和用户接口元素进行用户交互界面的设计。 8. **...
标题和描述所涉及的知识点主要集中在ABAP语言在SAP系统中对数据库的操作和管理。由于这部分内容比较专业,我将尽量详细地阐述ABAP(Advanced Business Application Programming)逻辑数据库和数据库操作的概念和用法...
4. **ABAP Git客户端**:SAP提供了ABAP Git客户端工具,如abapGit,它是一个开源的Git客户端,可以直接在ABAP开发环境中使用。开发者可以通过abapGit管理他们的ABAP源代码,进行版本控制,以及与远程仓库同步。 5. ...
abap tips abap tips abap tips abap tips abap tips
ABAP 4.7引入了类和对象的概念,支持继承、封装和多态性,这使得代码可维护性和复用性大大提升。 5. 功能模块和库: 功能模块是预定义的程序单元,可以被其他程序调用。ABAP库则包含一组相关功能模块,用于特定的...
- ABAP与数据库交互:学习使用ABAP SQL(Open SQL和Native SQL)与数据库进行高效交互。 - RFC(Remote Function Call):理解如何通过RFC调用其他系统的服务或函数。 通过这些文档的学习,你可以逐步建立起对...
2. 编写ABAP/4报表:这一部分详细讲解如何使用ABAP编写报表程序,涵盖了从数据检索、数据处理到报表输出的全过程,帮助程序员了解如何利用ABAP处理业务数据。 3. 编写ABAP/4事务:在此部分,读者将学习如何创建和...
ABAP - Keyword Documentation This documentation describes the syntax and meaning of the keywords of the ABAP language and its object-oriented part ABAP Objects. Alongside this, language frameworks ...
### ABAP动态内表使用的例子 #### 一、引言 在ABAP编程语言中,动态内表(Dynamic Internal Tables)是一种非常灵活的数据结构,它允许程序员在运行时定义和操作内表。与静态内表相比,动态内表提供了更多的灵活性...
随着学习的深入,会涉及ABAP的数据存储,如数据库表(内部表和透明表)的创建和操作,以及如何使用ABAP的数据访问语法来与数据库交互。接着,将学习到ABAP报表编程,包括编写动态SQL和使用ABAP的Report程序来生成...
### SAP ABAP 屏幕字段输入帮助实现 #### 一、概述 在SAP ABAP开发过程中,为了提高用户体验和减少输入错误,开发者经常会为屏幕字段设置输入帮助(Input Help)。当用户按下F4键时,系统会弹出一个搜索帮助窗口,...
### ABAP SQL 使用技巧详解 在 SAP 系统开发中,ABAP 语言与 SQL 查询紧密结合,通过优化 SQL 查询方式可以显著提升程序性能。本文将详细介绍 ABAP 中 SQL 查询的各种技巧,帮助开发者更好地掌握这些技能。 #### 1...
标题“abap-ALV.rar_ABAP系统ALV_abap_abap开发alv”暗示我们将深入探讨ABAP ALV的使用,特别是在ABAP系统中的应用以及如何进行开发。 描述中提到“ABAP ALV总结,ALV格式,REUSE_ALV_GRID_DISPLAY_LVC函数使用”,...
详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。...
ABAP数据对象的使用是指ABAP程序中数据对象的使用。数据对象可以用于存储数据、实现逻辑操作等。 15.ABAP技术 ABAP技术是指使用ABAP语言开发应用程序的技术。ABAP技术包括报表设计、报表实现、数据处理、事件处理...
### ABAP SCI使用文档详解 #### 一、SCI概念概览 SCI,即SAP Code Inspector,是SAP系统中一款强大的代码审查工具,旨在帮助开发者优化和维护ABAP代码的质量。它通过全面检查代码的各个方面,如性能、安全性、结构...
本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要定义一个事件接收器类(Event Receiver Class),用于处理ALV框中的事件。在这个类中...
ABAP OLE 颜色代码是指在 ABAP 编程语言中使用的颜色代码。这些代码用于在用户界面中显示不同的颜色,例如背景颜色、文字颜色、按钮颜色等。 在 ABAP 中,颜色代码通常以 šestnaestkovo (hexadecimal) 编码表示,...