天天看點

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

最近,我在玩ABAP CDS視圖,并且遇到了一些權限方面的挑戰。我在網上沒看到有多少有關CDS開發的文檔,因為它是個相當新的東西。是以,我決定寫下這篇部落格,也許我的想法可以幫助到一些人。

和你已經意識到的一樣,ABAP CDS視圖跑在ABAP層,而且不受限于SAP HANA(也就是不存在這樣的資料庫依賴)。ABAP CDS有它自己的、基于角色的權限概念。角色通過DCL源代碼中的DEFINE ROLE定義。

這裡是一個基本的CDS視圖,它有資料目錄“dimension”:

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

當我在HANA STUDIO中運作CDS視圖的時候,我觀察到這個查詢沒有抓取到成本中心資料。為什麼?

每個CDS視圖都在SE11中有它相對應的SQL視圖。在上面的例子中。IFICostCenter是DDL I_CostCenter的SQL視圖。

這裡有一個找到這些對象定義所在的包的簡單方法,

前往SE11輸入視圖,IFICostCenter >顯示:

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

你可以在這裡找到包名(上圖高亮的部分)。

現在打開HANA Studio,把這個包添加到你的包收藏夾檔案夾。

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

一旦添加到了你的收藏夾,展開Core Data Services然後你就可以在資料定義檔案夾看到DDL源代碼,以及在通路控制檔案夾看到DCL源。

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

這裡是一個成本中心CDS視圖的DCL源的例子。

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

注意:DDL和DCL的名字必須一緻。

權限在DCL源中執行了。我們應該確定權限對象K_CSKS在後端被配置設定到使用者(在我使用的S/4 HANA 1511中是這樣的)。

将權限檢查對象授予給使用者之後,可以看到成本中心資料了,Bingo!

注意:actvt 是操作代碼。在該情況下,應該是03——顯示。

注釋@AccessControl.authorizationCheck: #CHECK 會強制進行權限檢查。

如果使用 #NOT_REQUIRED 或 #NOT_ALLOWED,權限檢查會被忽略。

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

希望本文對你有幫助。

本文連結:http://www.cnblogs.com/hhelibeb/p/6647178.html

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