Fork me on GitHub

在CDS(Core Data Services)中使用DCL(Data Control Language)

 

最近,我在玩ABAP CDS视图,并且遇到了一些权限方面的挑战。我在网上没看到有多少有关CDS开发的文档,因为它是个相当新的东西。因此,我决定写下这篇博客,也许我的想法可以帮助到一些人。

 

和你已经意识到的一样,ABAP CDS视图跑在ABAP层,而且不受限于SAP HANA(也就是不存在这样的数据库依赖)。ABAP CDS有它自己的、基于角色的权限概念。角色通过DCL源代码中的DEFINE ROLE定义。

 

这里是一个基本的CDS视图,它有数据目录“dimension”

 

当我在HANA STUDIO中运行CDS视图的时候,我观察到这个查询没有抓取到成本中心数据。为什么?

 

每个CDS视图都在SE11中有它相对应的SQL视图。在上面的例子中。IFICostCenter是DDL I_CostCenter的SQL视图。

 

这里有一个找到这些对象定义所在的包的简单方法,

前往SE11输入视图,IFICostCenter >显示:

 

你可以在这里找到包名(上图高亮的部分)。

 

现在打开HANA Studio,把这个包添加到你的包收藏夹文件夹。

 

一旦添加到了你的收藏夹,展开Core Data Services然后你就可以在数据定义文件夹看到DDL源代码,以及在访问控制文件夹看到DCL源。

 

这里是一个成本中心CDS视图的DCL源的例子。

注意:DDL和DCL的名字必须一致。

 

权限在DCL源中执行了。我们应该确保权限对象K_CSKS在后端被分配到用户(在我使用的S/4 HANA 1511中是这样的)。

 

将权限检查对象授予给用户之后,可以看到成本中心数据了,Bingo!

 

注意:actvt 是操作代码。在该情况下,应该是03——显示。

 

注释@AccessControl.authorizationCheck: #CHECK 会强制进行权限检查。

如果使用 #NOT_REQUIRED 或 #NOT_ALLOWED,权限检查会被忽略。

 

 

希望本文对你有帮助。

 

本文链接:http://www.cnblogs.com/hhelibeb/p/6647178.html

英文原文:Wonder how Data Control Language (DCL) works with ABAP Core Data Services (CDS)?

 

posted @ 2017-03-30 17:20  氢氦  阅读(3366)  评论(2编辑  收藏  举报