1.abap程序属性
2.关于 SAP ABAP REPOSRC 数据库表在 HANA 中的源码 DDL Definition
3.SAP ABAP和Java的动态代理实现
4.SAP AMDP介绍 - ABAP托管的HANA数据库过程
abap程序属性
程序属性在ABAP编程中扮演着重要角色,它定义了程序所属的结构应用类型和关联的逻辑数据库。在创建程序时,源码需要谨慎处理这些属性,结构以确保系统能正确处理(更多关于程序属性的源码细节,可参考第页)。结构源码精灵地龙 程序创建过程中,源码首先在"标题"字段中输入明确的结构程序标题,它应反映程序的源码功能。系统会自动将标题与文本摘要合并。结构若需修改,源码需通过"ABAP/4编辑器初始屏幕"的结构"文本摘要"或"属性"选项,然后选择"更改"。源码 接下来,结构完成两个必填字段:在"类型"中选择1(报表程序)或M(模块存储),源码并输入对应的应用程序分类,如财务会计用"F"。若创建报表,选择"确定",linux cp源码系统会自动填充报表属性。 此外,还需指定其他相关属性(详情见第页)。完成所有设置后,点击"保存"以保存程序属性。此时,会弹出"维护对象目录条目"窗口,输入开发类别。如果为培训或测试,可以输入$TMP或选择"逻辑对象"。 保存开发类别后,"维护对象目录条目"窗口关闭,回到"ABAP/4:程序属性"屏幕。选择"后退"退出当前屏幕,若要直接进入编辑器,选择"转向->源代码"。如果在对象浏览器通过预定义开发类创建,可以跳过步骤6至8直接进行后续操作。秦美人 源码扩展资料
ABAP是一种高级企业应用编程语言(Advanced Business Application Programming),起源于世纪年代。经过不断的发展,现在的版本为ABAP/4,SAP R/3的应用程序就是用ABAP/4编写的。目前ABAP行业人才稀缺成为ABAP发展的制约因素之一,鉴于此,国内的ABAP培训行业逐渐开始发展,ABAP等培训逐渐发展,相信ABAP行业发展的瓶颈可以尽快得到瓦解。关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
点击Show DDL Definition 可以看到DDL Definition 源代码:
理解这段SQL语句之前,需先熟悉SAP HANA数据库。HANA是一个高性能内存数据库,支持复杂数据处理与分析。HANA数据库支持行表与列表存储数据,行表适用于事务处理,列表则适合快速数据分析及报告。HANA提供丰富SQL语法,龙头判官源码用于管理及查询数据库数据。
这段SQL语句由三部分组成:创建列表、修改表参数及创建全文索引。接下来逐一解析。
第一部分创建名为REPOSRC的列表,属于SAPAG3模式。列表中定义多个列,如PROGNAME列最多字符(NVARCHAR()),默认值为空,不允许NULL值。列表包含复合主键,由PROGNAME和R3STATE两列组成。
UNLOAD PRIORITY 5表示在内存管理中赋予该表数据卸载优先级为5,影响数据从内存移至磁盘顺序。AUTO MERGE指示数据库自动合并表分区,优化性能。
第二部分修改REPOSRC表参数。CONCAT_ATTRIBUTE参数定义如何拼接列值形成唯一标识符,iapp源码论坛优化查询性能,特别是复杂数据模型处理。
第三部分创建名为REPOSRC~SRC的全文索引,针对DATA列。允许高效全文搜索文本数据。索引为异步创建,减少即时性能影响。语言检测设为英语,用于指导处理文本数据语言类型。全文索引关闭模糊搜索、搜索优化及文本分析等选项,以满足特定性能或功能需求。
综上所述,这段SQL语句设计体现HANA内存数据库高效数据存储与检索能力。通过精心设计的列表结构、优化表参数及全文索引创建,旨在提高特定数据模型处理性能与查询效率。设计考虑存储效率、访问速度与可维护性,充分利用HANA强大内存计算能力。
SAP ABAP和Java的动态代理实现
在本文中,我们将展示如何在Java和ABAP中动态创建持久化代理类。本文基于代理设计模式。
首先,我们定义一个接口:
然后,我们定义一个实现类:
接下来,我们将基于HelloWorldImp创建一个持久化代理类(将在我们的笔记本上持久化),在原始方法print()之前添加System.out.println("Before Hello World!");,之后添加System.out.println("After Hello World!");。
生成代理类的步骤如下:
步骤1:填充代理类的源代码
步骤2:在磁盘上创建一个新的.java文件,其中包含在步骤1中生成的源代码:
步骤3:通过在包javax.tools中暴露的接口的API编译生成的.java文件。编译后将在磁盘上生成.class文件。
步骤4:使用URLClassLoader加载步骤3中生成的.class文件。之后,可以通过反射创建基于加载类的新实例。
下面的代码展示了如何使用getProxyClass()方法消费:
执行上述代码后,可以观察:
(1) 通过生成的代理类成功增强了原始print方法:
(2) 对应的.java和.class文件在磁盘上被持久化。
在ABAP中动态代理的实现如下:
首先,我们再次定义接口IF_HELLOWORLD和基于其的实现类CL_HELLOWORLD,然后创建一个动态代理类。
以下是ABAP中可以实现的功能:
(1) 将原始CL_HELLOWORLD类的实例传递给GET_PROXY方法。在该方法内部,将通过RTTI将预退出和后退出逻辑注入到原始print方法的实现中。注入的类名通过参数iv_new_class_name传递,在此示例中为ZCLABAP。
(2) 执行上述报告后,返回的注入代理实例包含增强的逻辑,因此,如预期的那样,现在可以看到通过iv_pre_exit和iv_post_exit传递的ABAP语句被执行。
此外,还可以在SE中打开生成的代理类:
预退出和后退出逻辑被注入在这里:
动态代理生成的主要逻辑简述:
(1) extract_interface_info提取涉及的接口名称和通过参数io_origin进行RTTI注入的方法名称。 (2) prepare_source_code将预退出和后退出语句注入到内部方法源代码表中。 (3) prepare_attr_and_signature为新类准备方法签名和私有属性。 (4) generate_class基于前两步组装的元数据调用ABAP类生成函数模块。
进一步阅读:
我已经写了一系列比较ABAP、JavaScript和Java语言特性的博客文章。您可以在以下链接中找到它们:
SAP AMDP介绍 - ABAP托管的HANA数据库过程
随着ABAP 7. SP的发布,SAP ABAP引入了Code Pushdown的新应用开发范式。这种范式与传统的Data to Code(数据到代码)方式有显著不同,它将密集的数据计算从ABAP应用层下推到了HANA数据库层,充分利用HANA数据库的高性能数据处理能力。在Code Pushdown理念下,数据库过程(Database Procedure)的实现成为了关键。
数据库过程是数据库内只能进行数据库读写及相关处理的函数。这些函数能接收任意多个输入参数和定义输出参数,存放数据库操作的结果,参数类型既包括标量式类型(如integer、double、varchar等),也包括表类型。实现数据库过程的方式有两种:AMDP(Application Managed Database Procedure)和数据库过程代理(Database Procedure Proxy)。在此篇文章除了AMDP之外的实现方式将不作讨论。
AMDP的概念是让ABAP开发人员在ABAP层进行HANA数据库过程的实现和生命周期管理。ABAP开发人员通过位于ABAP层的ABAP Development Tool,使用HANA SQLScript编写代码作为AMDP的实现体。这意味着开发人员可以在ABAP层直接利用HANA数据库层的原生功能,同时无需学习额外的技能。AMDP实现体被封装在一个特殊的ABAP类方法中,该方法声明特定接口(IF_AMDP_MARKER_HDB),告知编译器和运行时它是一个AMDP容器。
使用AMDP,ABAP开发人员能够将部分计算逻辑下推到数据库层,这有利于提升应用的性能。具体的实现方法允许ABAP开发人员在SAP GUI中读取源代码,而修改则需要通过ABAP Development Tool进行。开发时,标记接口IF_AMDP_MARKER_HDB用于标记特定类方法为AMDP容器,同时还有其他标记接口用于表示序列化操作或与BAdI Definition相关的操作。
以SFLIGHT模型为例,ABAP开发人员可以在AMDP方法中读取数据并进行数据操作,比如货币转换,所有这些操作都在HANA数据库层执行。这种下推逻辑使应用能更有效地利用数据库资源,提升整体性能。
开发人员可以通过阅读本文附件中的完整代码进行实践学习。Jerry将根据时间和资源情况,后续提供AMDP的调试和性能分析等高级功能的介绍。文章结尾鼓励读者关注“汪子熙”公众号以获取更多Jerry的原创文章。然而,请注意文中已删除提及关注、转发、点赞、评论等行为的指示。