在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)?