ABAP 7.52 中的Open SQL新特性
S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52。
本文翻译了更新文档中有关Open SQL的部分。
如果读者是Open SQL的新手,请不要从本文看起。更合适的教程是:A complete guide to OpenSQL statements – Step-by-step tutorial with screenshots
本文链接:http://www.cnblogs.com/hhelibeb/p/7941300.html
1,内表作为数据源
现在可以将内表指定为查询语句的数据源。如果内表数据需要传递给数据库的话,则只能在部分数据库上运行。
例子:
DATA itab TYPE HASHED TABLE OFscarrWITHUNIQUE KEY mandt carrid.IF NOT cl_abap_dbfeatures=>use_features(EXPORTINGrequested_features=VALUE #( ( cl_abap_dbfeatures=>itabs_in_from_clause ) ) ).
cl_demo_output=>display(
`System doesnotsupport internal tables as data source` ).
RETURN.ENDIF.
itab= VALUE #( ( carrid = 'LH' carrname = 'L.H.')
( carrid= 'UA' carrname = 'U.A.') ).SELECTscarr~carrid, scarr~carrname, spfli~connidFROM@itab AS scarr
INNER JOIN spfliON scarr~carrid =spfli~carridINTO TABLE @DATA(result)
##db_feature_mode[itabs_in_from_clause].
cl_demo_output=>display( result ).
ABAP中的枚举对象
枚举对象是枚举类型的数据对象。枚举对象只能包含类型为枚举类型的枚举值。ABAP从版本7.51开始支持它们。
这是一种常见的模式。在ABAP 7.51之前,人们通常用如下方式实现类似的功能:
CLASS cx_wrong_size DEFINITION INHERITING FROMcx_static_check.ENDCLASS.CLASS shirt DEFINITION.PUBLIC SECTION.TYPES tsize TYPEi.CONSTANTS:
size_sTYPE tsize VALUE 0,
size_mTYPE tsize VALUE 1,
size_lTYPE tsizeVALUE 2,
size_xlTYPE tsize VALUE 3.METHODSconstructorIMPORTING size TYPEtsize
RAISING cx_wrong_size.
...PRIVATE SECTION.DATAsizeTYPEtsize.ENDCLASS.CLASS shirt IMPLEMENTATION.METHODconstructor.IF size <> size_s ANDsize<> size_m ANDsize<> size_l ANDsize<>size_xl.RAISE EXCEPTION TYPEcx_wrong_size.ENDIF.me->size =COND #(
WHEN size<> size_s ANDsize<> size_m ANDsize<> size_l ANDsize<> size_xl THENTHROW cx_wrong_size( )ELSEsize ).ENDMETHOD.ENDCLASS.
ABAP CDS Table Function介绍与示例
Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS。
如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种数据库供应商,结果是,ABAP CDS相比之下要少一些功能。因此,在某些情况下,无法使用ABAP CDS解决问题时,可以使用一种变通的方法,即通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function。
本文链接:http://www.cnblogs.com/hhelibeb/p/8057788.html
注:本文的主要理论内容已经包含在之前的AMDP介绍文章:ABAP中的AMDP(ABAP-Managed Database Procedures ) 中,相比它,本文更像一个step by step教程。
ABAP CDS视图
在通常的ABAP CDS视图开发过程中,我们通过编辑器(通常是ADT)在ABAP层声明了我们的字段结构和annotations。激活后,系统会自动地在数据库层生成所有的SQL视图。
ABAP CDS视图提供多种SQL命令和函数的支持,如果你想要了解细节和全部的可用特性,建议你看这篇文章:ABAP CDS Feature Matrix。
ABAP CDS Table Function
在ABAP CDS Table Function的开发过程中,我们将字段结构、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们可以直接在ABAP层写存储过程,并且把它封装在类/方法中,更多介绍可以看之前的文章:ABAP中的AMDP(ABAP-Managed Database Procedures 。
因为AMDP直接运行数据库脚本,所以需要做几个额外的步骤并且会使用到脚本语言(在HANA中即SQL Script)。稍后在示例部分我们会讨论配置的细节。
通过上文介绍的这两种开发技术,我们可以开始开发一个技术示例了。按本文的例子做下去,你将会可以创建你自己的ABAP CDS Table Function,并且为不能直接通过ABAP CDS实现的需求提供解决方案。为了实现示例,我们会使用数据库视图SFLIGHTS,这一视图提供了航班连接的细节。
场景
每个航空公司提供世界上不同城市的航班连接,用户想要在单一字段中看到某一特定航空公司支持的所有城市,内容以逗号分隔。因为每家航空公司的城市数是不同的,我们需要一个逻辑来拼接城市们,无论有查询结果多少条数据。
在常规的ABAP CDS内我们可以使用CONCAT函数,但是使用它的时候,我们需要定义固定数量的字段,既然CDS视图不能实现此处需要的处理动态逻辑,要如何处理呢?
这是一个使用ABAP CDS Table Function的绝佳场景,因为我们可以使用简单的数据库函数STRING_AGG(String Aggregation)。这个功能在SQL Script中可用,但是目前还是不支持ABAP CDS视图。
开发
打开你的HANA Studio(或者ADT),创建一个新的Core Data Services -> Data Definitio。
选择project,package并且定义名字和描述:
选择传输请求,然后点击Next。在模板中选择最后一个选项“Define Table Function with Parameters”,然后点击Finish:
编辑生成的实体,包含以下内容:
- 字段:
- Client
- Airline Code
- Airline Name
- Cities To
- 类: ZCL_FLIGHTS_DEMO_CDS
- 方法: FLIGHTS_CONNECTIONS
结果应该是:
define table functionZDEMO_FLIGHTS_TABLE_FUNCTION
returns
{
client : abap.clnt;
airline_code : s_carr_id;
airline_name : s_carrname;
cities_to : abap.string;
}
implemented by method
ZCL_FLIGHTS_DEMO_CDS=>FLIGHTS_CONNECTIONS;
SAP HANA中的SLT简介
在以SAP系统作为主要ERP的企业中,不同系统之间的数据库数据同步是个重要的工作。对于这种需求,除了开发ABAP接口之外,也有高效的工具可用。SLT就是其中之一。
SLT是SAP的第一个ETL(Extract-Transform-Load)工具,它允许实时加载和复制数据,或者将数据从源系统和非源系统调度到SAP HANA数据库。
SAP SLT服务器使用基于触发器的复制方式以实现从源系统到目标系统的数据传递。
SLT服务器可以安装在单独的系统或SAP ECC系统上。
SLT系统的好处如下:
- 允许实时或按计划时间进行数据复制。
- 在实时复制数据的过程中,可以以SAP HANA格式迁移数据。
- SLT可以处理簇表和池表
- 在加载/复制期间支持非Unicode和Unicode的自动转换。
- 与SAP HANA Studio有着完全的集成。
- SLT有表设置和转换能力。
- 可以通过SAP HANA Solution Manager监控。
SLT的全称是 SAP Landscape Transformation
本文链接:http://www.cnblogs.com/hhelibeb/p/8258915.html
SAP/非SAP系统的SAP SLT服务器的架构概述如下:
SAP系统和SAP HANA之间的SLT连接架构
SAP SLT Replication Server将所有元数据表定义从ABAP源系统转换为SAP HANA的元数据表定义。
对于SAP源,SLT连接具有以下功能:
- 在复制表时,SAP SLT Replication Server将在源系统中创建日志表。
- 读取引擎在SAP源系统中创建。
- SAP SLT和SAP源系统之间的连接基于RFC连接。
- SAP SLT和SAP HANA之间的连接基于DB连接。
与“SYSTEM”具有相同权限的数据库用户可以在SAP SLT和SAP HANA数据库之间创建连接。
图 SAP SLT连接SAP系统和SAP HANA数据库
在SAP源系统中配置SLT服务器
首先,我们需要配置SAP SLT Replication Server以连接SAP源服务器和SAP HANA数据库。 事务代码LTR用于在SAP源服务器和SAP SLT之间创建连接。
步骤1)登录到SAP SLT服务器,并从SAP SLT复制服务器调用事务“LTR”。
系统会弹出一个Web Dynpro窗口,用于登陆到SAP SLT服务器。
输入用户名密码并登录。
会出现一个如下的弹出窗,用于配置:
点击“New”按钮,创建一个新的配置。
步骤2)在本步骤:
- 输入配置名和描述。
- 选择SAP系统作为源系统。
- 输入SAP系统的RFC连接(destination)。
- 输入用户名/密码/主机名和实例编号。
- 输入作业选项细节。
- 数据传输任务编号
- 计算任务编号
- 选择复制选项为实时。
- 一旦所有选项维护完毕,点击‘OK’来创建一个SLT的新SCHEMA。
现在已经添加并激活了名为“SLTECC”的新配置:
成功配置SAP SLT服务器后,SAP SLT服务器会自动为SAP HANA数据库创建数据库连接(当通过事务LTR创建新的配置时)。不需要手动创建它。
下一步,我们将数据从SAP源导入SAP HANA。
通过SLT将数据从SAP源导入至SAP HANA
一旦我们成功配置了SAP SLT服务器,SAP HANA数据库就会创建一个和SAP SLT中的配置同名的SCHEMA。
该SCHEMA包含以下对象:
- 1 Schema- SLTECC.
- 1 User– SLTECC.
- 1 Privileges
- 8 Tables:
- DD02L (SAP Tables Name )
- DD02T (SAP Table Texts)
- RS_LOG_FILES
- RS_MESSAGE
- RS_ORDER
- RS_ORDER_TEXT
- RS_SCHEMA_MAP
- RS_STATUS.
- 4 Role -
- SLTECC_DATA_PROV
- SLTECC_DATA_POWER_USER
- SLTECC_DATA_USER_ADMIN
- SLTECC_DATA_SELECT
- 2 Procedures
- RS_GRANT_ACCESS
- RS_REVOKE_ACCESS
所有配置完成后,现在我们从SAP ECC(ERP中央组件)中加载一个表。
步骤1)要将表从SAP ECC加载到SAP HANA数据库,请按照以下步骤:
- 从Quick View前往Data provisioning。
- 选择SAP HANA系统
- 点击完成按钮
程序会显示一个基于SLT的Table Data Provisioning屏幕。有5个用于data provisioning的选项:
Load (Full Load) | 这是一个一次性事件,会开启从源系统的初始数据加载。 |
Replicate (Full Load + Delta Load) | 会开启一个初始加载(如果之前没进行过的话),并且也会传输增量数据。会为每个表创建数据库触发器和日志表。 |
Stop Replication | 为当前表停止复制过程。完全地移除触发器和日志表。 |
Suspend | 暂停正在进行的表复制过程。数据库触发器不会从源系统移除,日志也将继续记录。相关信息会存储在源系统的日志表里。 |
Resume | 重启暂停的表复制。 |
我们使用“加载选项”列表中的第一个选项来对表(LFBK)数据进行初始加载,将其从源系统加载到SAP HANA数据库。
操作步骤如下:
- 根据SAP SLT配置选择源和目标系统详细信息。
- 点击加载按钮,然后选择我们需要在SAP HANA中加载/复制的表(LFBK)。
- 表(LFBK)将被添加到数据加载管理部分,它的Action是"Load",状态为"Scheduled"。
数据加载后,状态将变为“已执行”。 该表和数据将在“SLTECC” schema中创建。
步骤3)通过schema “SLTECC”中的Data Preview检查表(LFBK)中的数据:
- 使用SAP HANA Studio登录SAP HANA数据库,并且选择SAP HANA系统HDB(HANAUSER)。
- 在表节点下选择表(LFBK)。
- 右键点击表(LFBK)选择打开Open data preview。
- 在Data Preview屏幕中将显示通过SLT处理加载的数据。
现在我们已经成功的将数据加载到表“LFBK”中。 我们可以在未来的建模中使用这个表。
非SAP系统和SAP HANA间的SLT连接
SAP SLT Replication Server将所有元数据表定义从非ABAP源系统转换为SAP HANA的元数据表定义。
对于非SAP的源,SLT连接具有以下功能:
- 在复制表时,SAP SLT复制服务器将在源系统中创建日志表。
- 读取引擎在SAP SLT复制服务器中创建。
- SAP SLT和源系统/SAP HANA之间的连接基于数据库连接。
图 SAP SLT连接非SAP系统和SAP HANA数据库
SAP SLT只能进行最简单的转换(比如考勤机数据的同步等),对于复杂的转换,我们需要其它的ETL工具,如SAP Data Services(SAP DS)。
英文原文:SLT (SAP Landscape Transformation Replication Server) in SAP HANA
参考阅读:Introduction To SAP Landscape Transformation (SLT)
SAP中的读访问日志Read Access Logging(RAL)
定义
读取访问日志(以下简称RAL)用于监视并记录对敏感数据的读取访问。这里的数据是指会被法律、外部公司政策或公司内部政策归类为敏感信息的数据。以下典型问题可能会与使用读取访问日志的应用程序有关:
- 谁访问了某个商业实体的数据,例如银行账户?
- 谁访问了私人数据,例如商业伙伴的数据?
- 哪位员工访问过某些个人信息,例如宗教信仰?
- 有没有人搜索过,是否有VIP被送入医院?
- 哪些用户访问过哪些帐户或业务合作伙伴(BP)?
这些问题都可以使用“特定时间范围内、访问特定数据的人的信息"来回答。从技术上讲,这意味着必须启用所有(访问数据的)远程API和UI基础设施以进行日志记录。但是,目前仅限于以下渠道可以使用RAL:
- Remote Function Calls (sRFC, aRFC, tRFC, qRFC, bgFRC)
- Dynpro
- Web Dynpro
- Web services
有关每种渠道可以记录的对象的更多信息,可以访问: Channel-Specific Information.
RAL的主要目的
RAL通常需要符合法律法规或公共标准(如数据隐私政策),比如在银行或医疗保健应用程序中。数据隐私即是对个人数据的访问保护和限制。在一些国家,数据隐私法规甚至要求报告对某些个人数据的访问行为。此外,公司和公共机构们,出于其自身的原因,也可能希望监视对其保密数据或其他敏感数据的访问。如果没有跟踪或记录访问数据行为,则很难跟踪到需要对数据泄漏事件负责的人员。RAL提供了这些信息。
日志记录的目的(purpose)是根据组织的需求自由定义的(例如,数据隐私),而RAL总是基于该目的。日志记录目的会作为属性被分配给每个日志条目,从而允许根据日志记录目的对日志数据进行分类和组织。例如,可以基于记录目的创建各种归档规则或报告。
因此,阅读访问记录框架可用于履行法律或其他法规、检测欺诈或数据盗窃、审计或用于任何其他内部目的。
RAL架构的背景信息
当应用程序启动时,会读取RAL配置。 根据RAL配置识别当前启用远程的功能模块、Web服务操作或Web Dynpro UI元素是否与日志相关、以及相关程度如何。 例如,应该只有访问行为本身被记录,还是包括访问内容? 日志条目可以根据它们的语义进行结构化。
SAP应用程序可能包含预定义配置。但是,客户的管理员通常必须根据自己的需求来调整配置,以满足其组织的法律要求——SAP并不了解全部的需求。 客户也可以创建自己的配置。
注意:注意与所有日志记录功能一样,您的对日志数据的需求,必须与记录日志对系统性能的影响保持平衡。 系统的性能取决于您记录的数据量以及您为记录数据指定的条件的复杂程度。
活动
配置工作
1. 确定在哪些情况下必须记录哪些数据。
组织必须定义要应用哪些法律或安全要求以及哪些数据必须在语义级别上进行记录。例如,法律部门可能确定必须记录对社会保障号码(SSN)的访问。
2. 为读取访问记录定义目的( purposes )。
根据日志记录的目的以及必须满足的法律法规,应用程序可以定义报告和保存和处理数据的规则。有关更多信息,请参阅Defining Logging Purposes。
3. 确定可以访问数据的渠道。
例如: RFC, Dynpro, Web Dynpro, 或者 Web services.
4. 定义日志域。
日志域是需要记录的语义相关数据字段组。例如,总薪水和净薪水可能会被分组到薪酬日志域中。日志域捆绑了相同语义实体的不同技术表示。日志域是独立于渠道的。有关更多信息,请参阅Defining Log Domains。
5. 定义规则以描述必须适用于读取访问记录的条件。
您可以定义需要记录哪些数据以及是仅记录访问还是内容。有关更多信息,请参阅Configuring Read Access Logging。
运营期间的工作
1. 为读取访问日志配置定义用户排除列表。
如果您想从读访问日志记录中排除某些用户,请将其添加到用户排除列表中。 这对于没有用户交互的自动处理很有用,例如后台作业。 有关更多信息,请参阅Defining a User Exclusion List。
2. 启用当前client的读取访问日志
读取访问日志必须在当前client中启用。 否则,配置将被忽略。 有关更多信息,请参阅Enabling Read Access Logging in Current Client。
3. 显示对RAL配置所做的更改,并评估错误和警告。
请参阅:Working with the Administrative Log
4. 使用信息生命周期管理( Information Lifecycle Management, ILM)和归档开发工具包( Archive Development Kit, ADK)归档和删除读取访问记录数据。
请参阅:Archiving Read Access Logging Data
5. 为档案创建信息结构
监控
您可以使用Read Access Logging监控器查看所有日志条目。 有关更多信息,请参阅Monitoring the Read Access Log。
事务代码
相关的3个事务代码:SRALMANAGER,SRALMONITOR,SRALCONFIG。
事务代码 | 描述 |
---|---|
SRALMANAGER | RAL记录管理器。显示Read Access Logging Manager中的监控和管理标签。 |
SRALMONITOR | RAL记录监控器。只显示Read Access Logging Manager中的监控标签。 |
SRALCONFIG | RAL日志记录配置。只显示Read Access Logging Manager中的管理标签。 |
参考阅读:How to Configure Read Access Logging in SAP
System Security for SAP NetWeaver AS for ABAP Only- Read Access Logging
Read Access Logging (RAL) Configuration
1969086 – Availability of Read Access Logging and prerequisites (kernel and SAP GUI version)