在傳統(tǒng)的ECC系統(tǒng)中ABAP程序可以使用OpenSQL來操作關系型數(shù)據(jù)庫,那么在HANA時代,程序是怎么操作HANA數(shù)據(jù)庫,尤其是實現(xiàn)HANA的特性的呢?其中很重要的一個功能就是CDS,S/4HANA大量應用都采用CDS來實現(xiàn)數(shù)據(jù)讀取。 什么是CDS呢? CDS是Core data services的簡寫,通過使用數(shù)據(jù)定義語言DDL,查詢語言QL,表達式語言EL,來實現(xiàn)對HANA數(shù)據(jù)庫的操作。 CDS提供了遠遠超出傳統(tǒng)數(shù)據(jù)建模工具的功能,CDS提供了概念建模、關聯(lián)定義、內(nèi)嵌方法、和可擴展性等功能。起初CDS只是在SAP HANA數(shù)據(jù)庫的建模和運行時使用,現(xiàn)在CDS也實施于SAP NetWeaver AS ABAP層面,讓開發(fā)人員可以在ABAP層面使用ABAP開發(fā)工具創(chuàng)建CDS,然后運行時把業(yè)務邏輯放到數(shù)據(jù)庫層面來運行。 CDS是定義語義層面上的富數(shù)據(jù)模型,可以解釋為CDS視圖。CDS簡單的說可以讓開發(fā)者定義實體類型和它們之間的語義關系,比如在傳統(tǒng)實體關系模型中的外鍵關聯(lián),CDS通過基于SQL語句的DDL(數(shù)據(jù)定義語言)和其他一些概念比如associations關聯(lián),annotation注釋等。 類似于傳統(tǒng)ABAP世界里的DDIC(數(shù)據(jù)字典)的角色,基于CDS的數(shù)據(jù)模型是集中定義然后可以在不同領域使用,比如CDS既可以在事務性應用中使用,也可以在分析型應用中使用,可以通過統(tǒng)一的方式和數(shù)據(jù)庫進行交互。但是,CDS數(shù)據(jù)模型超出了DDIC的能力,DDIC一般是供事務型應用使用,CDS可以通過分層來聚合和分析數(shù)據(jù),比如開始的時候可以創(chuàng)建一個簡單的CDS視圖,然后基于這個CDS視圖再創(chuàng)建強大的CDS視圖。另外CDS提供UNION的特性,可以把多個SELECT語句的返回結(jié)果聚合到一個結(jié)果集中。 根據(jù)SAP的描述,CDS帶來了概念和實現(xiàn)兩個層面的集成。這是什么意思呢?我們舉個例子,比如我們打算查詢部門代碼是4711的部門所有員工的ID,姓名,家庭住址的郵政編碼。為了達到這個目的,我們可以使用下面的SQL語句來實現(xiàn)。 嗯。。。問題是,代碼邏輯和語義之間的差距,也就是業(yè)務顧問和程序員之間的技術差距。如果不是一個經(jīng)驗豐富的SQL程序員是很難理解這段SQL語句的,更不要是寫出來了。其實這個是很多IT公司招聘程序員的面試題??!這也就是CDS提出的初衷,怎么簡化這種程序語言和現(xiàn)實語義之間的差別。 好了,作為ABAP程序員,可以用OpenSQL改寫上面復雜的SQL語句,開發(fā)如下: 由于SQL代碼邏輯有點復雜,我們可以看到ABAP語句里面是一層循環(huán)套著一層循環(huán),顯而易見存在性能問題,這就引來了怎么優(yōu)化代碼,提升性能。這也是CDS創(chuàng)建初衷之一,優(yōu)化性能。 現(xiàn)在讓我們看看同樣的需求,在CDS中怎么實現(xiàn)。 用了CDS,不存在SQL的言不達意,也不存在ABAP的效率低下。 還不夠?這不足以打動你?你說,我們SE11同樣可以創(chuàng)建View啊,你CDS有啥了不起的?。磕悄阏娴男∏莆覀僀DS了,其實CDS遠遠強大于我上面提的兩點,CDS遠遠不止于創(chuàng)建一個視圖,而且是通過DDL來表達包括數(shù)據(jù)庫表、數(shù)據(jù)庫視圖和方法、數(shù)據(jù)類型的元模型庫。CDS其實是為了適應HANA數(shù)據(jù)庫而產(chǎn)生的,CDS包括兩種類型,HANA CDS和ABAP CDS,其中HANA CDS是在SAP HANA Studio中創(chuàng)建,運行于HANA數(shù)據(jù)庫,而ABAP CDS在ABAP應用服務器,HANA CDS只能運行于HANA數(shù)據(jù)庫,ABAP CDS不限于HANA數(shù)據(jù)庫。CDS還可以分為有參數(shù)CDS和無參數(shù)CDS。 HANA CDS和ABAP CDS的不同點。 HANA CDS 和ABAP CDS在視圖定義上有一些小的差異,他們都是基于DDIC(數(shù)據(jù)字典)在數(shù)據(jù)庫上創(chuàng)建的視圖,HANA CDS創(chuàng)建的實體類型必須基于數(shù)據(jù)庫表的DDIC定義,而 ABAP CDS可以引用數(shù)據(jù)庫表、視圖或者其他CDS視圖中的類型定義。 什么時候使用HANACDS什么時候選擇ABAP CDS? 當然如果項目中只是使用SAP HANA數(shù)據(jù)庫進行開發(fā),而不使用ABAP程序,那就理所當然的使用HANA CDS了。 如果想通過ABAP像使用數(shù)據(jù)字典中的數(shù)據(jù)類型一樣調(diào)用CDS或者用Open SQL來調(diào)用CDS,并且在ABAP層面解析CDS注釋的話,那么必須使用ABAP CDS; 如果不通過ABAP調(diào)用CDS,但是想要像ABAP代碼庫一樣管理CDS,比如transport和升級,那么也需要使用ABAP CDS; 排除上面兩種條件,不使用ABAP直接調(diào)用,那么最好用HANA CDS,畢竟原生態(tài),更好的集成于HANA數(shù)據(jù)庫,當然ABAP也可以調(diào)用,比如通過原生SQL語句(ADBC, AMDP)。 那么在SAP系統(tǒng)中怎么查看有哪些CDS視圖呢? 我們可以通過事務碼SE16查看表 TADIR 參數(shù): PGMID = ‘R3TR’, OBJECT = ‘DDLS’。然后知道了包名,我們就可以在ADT中查看ABAP CDS的源代碼了。 可以看到包名是:FINS_FIS_APAR_APPS 查看表DDLDEPENDENCY ,這里包含DDL源代碼的名稱,對象名稱也就是CDS的名稱。 在ADT中查看C_APMANUALPAYMENTS, 為了方便查看我們使用可視化界面: CDS都有哪些元素呢?首先我們看一下開發(fā)環(huán)境的目錄結(jié)構: 可以看到CDS有兩部分:Access Control和Data Definition。Access Control相當于CDS的權限認證,CDS的權限管理具有自己的特點,如下圖: 定義角色來檢驗用戶是否有權限訪問對應的CDS View,如果沒有權限,也不會在SU53看到error message。 @EndUserText.label:'Auto assigned mapping role for P_Arbsitmonacc' @MappingRole:true 這種標簽的注釋語言,不是沒有意義的,在編譯過程中會翻譯成對應的程序語言,達到對應的功能。 CDS包括兩部分DDL SQL View 和CDS View Entity,其中DDL SQL View是ABAP的數(shù)據(jù)字典,在SE11可以只讀;CDS View Entity是DDL的源文件,他是一個數(shù)據(jù)庫對象,在Eclipse, ADT或者SAP HANA Studio中創(chuàng)建和編輯,如下圖: 本文只是對CDS進行簡單的介紹,如果各位看官對CDS比較感興趣,可以自己查查資料,使用ADT或者HANA Studio進行開發(fā)嘗試。 |
|