云计算数据中心_如何选_人工智能及应用

产品 虚拟云 浏览

小编:Lars Breddemann在博客中发表了一篇关于在不使用动态SQLScript的情况下将业务逻辑从底层数据库表中分离出来的文章。这个问题在SAP BW/4HANA中也一再出现:AMDP转换例程中逻辑的重用。 在本

云计算数据中心_如何选_人工智能及应用

Lars Breddemann在博客中发表了一篇关于在不使用动态SQLScript的情况下将业务逻辑从底层数据库表中分离出来的文章。这个问题在SAP BW/4HANA中也一再出现:AMDP转换例程中逻辑的重用。

在本文中,我想基于我在过去的一个项目中经历过的场景过去。在另外,我想展示一种更优雅的方式来调用这种外包函数,这将简化应用程序。问题是:

问题是-在不同的表上总是相同的逻辑

一个客户在几个国家有分支机构。数据模型按国家严格分开,即每个国家重复使用。ADSO的名称由国家的ISO代码组成,位于第4位。和5。职位:

利润中心会计示例:

PCADE01–德国,余额PCADE02–德国,统计关键数据PCAFR01–法国,余额PCAFR02–法国,统计数字PCAUK01–英国,余额,PCAUK02–英国,统计数字…

对于主数据,所有信息对象都与源系统特征相结合,这些特征明显对应于一个国家。

DE100–德国主数据FR100–法国主数据…

当然,还有其他方法来处理几个国家的数据。但我不想在本文中讨论这里选择的模型是否如此优化。该项目的目标是为未来20多个国家提供数据模型。

作为一名开发人员,我现在特别感兴趣的是,在不同的转换例程中,业务逻辑应该完全相同。当然,云服务服务器,在法国对数据模型的查找应该只转到法语表,在德国对德语表的查找应该是相同的。同时,主数据也应限制在源系统法国或德国,以便最佳访问。在ABAP中,这是一个小问题,因为在SELECT语句中只能动态指定表名。

解决方法

在Lars的例子中,SQLScript解决这个问题的方式是:

因此业务逻辑被封装在最早的\u CUSTOMER \u事务函数中,数据通过表变量传递。调用者从适当的DB表中进行选择。这很有效,但可以简化。当然,如前所述,我将构建一个更复杂的示例,说明如何在AMDP转换例程中重用业务逻辑。当然函数也是如此,但我不想一直提到它们。表参数定义了一个结构:哪些字段需要哪些数据类型。这是很有用的,这样程序代码就可以在程序中静态检查了。

但这不是强制性的。由于HANA 2.0 SPS04,您也可以不键入表参数:

但是,这些未键入的表参数只有在您希望动态访问数据时才有意义。也就是说,如果列名在运行时之前是未知的。但是,我们不想在本文中考虑动态编码,正如在引言中所写的那样。

经常被忽略的是,作为过程的调用者,您不必精确地命中表参数的结构。列的顺序在这里并不重要(乔·塞尔科的《在集合中思考》一书很好地描述了这一点。列序列仅与应用程序层相关。在内部,它们并不重要)。类似地,额外的列是不相关的,它们被系统忽略,然后被优化器删除。

另一个有趣的方面是,您不仅可以将表变量传递到表参数中。数据库表、视图或表函数的名称也是有效的表表达式,可以在SQLScript中使用。通过直接指定表名,租用云服务器,我们可以优化上面的示例:

不幸的是,AMDP中有一个限制,所以您必须始终使用表变量。

在Lars的文章中,我喜欢透视数据作为表定义的实例。他写道:

"表/视图是开发人员使用的数据类型,而记录(行)是数据类型的实例。"

如果我们停留在这个图像中,表内参数只描述与面向对象编程语言中的接口概念相对应的内容:它决定了哪些属性至少必须具有传递的数据。也可能有额外的列。

过程的OUT table参数,而不是table函数的返回值,也可以取消类型化。但是,只有通过SQL接口直接从应用层调用此过程时,才能使用此方法。

尝试在匿名块或其他过程中调用此过程会导致此错误消息:

这意味着返回表必须是完全类型的。返回的列不能多于定义的列。这意味着在具有200个InfoObjects的AMDP转换例程中需要做大量的工作。因为在这样一个过程结束时,必须对预期的输出格式进行投影。

重用AMDP转换例程中的逻辑

如果我们现在将这些发现转移到重用具有上述问题的AMDP转换例程中的逻辑,那么一个解决方案可能如下:

所有人都应该遵循相同的业务逻辑国家。这是在一个AMDP过程中定义的。数据作为表参数从外部传递到此过程。每个表参数只定义实际使用的列。

如果所有DB表都传递给过程,这有一个巨大的优势:过程中不必进行数据库访问。所有数据都来自外部。在面向对象的世界中,我们有一种叫做依赖注入的东西:依赖从外部传递。这使我们能够通过单元测试轻松地从ABAP测试业务逻辑。当你问ABAP开发人员ABAP转换例程的单元测试时,你经常被嘲笑!(这已经发生在我身上了。)这现在很简单。

因此,如果需要,我们还应该传递标准表和主数据表。

当前网址:http://www.vmchk.com/app/52022.html

 
你可能喜欢的: