下一代的数据库视图。比DDIC view能干。
也就是S4上了之后就用这个CDS view了。
目录
1. 软件安装
2. CDS view 是啥
3. 怎么去建CDS view
4. 如何修改一个CDS view,添加association关联
5. 一些有用的功能
6. 基础语法
6.1 Case
6.2 Cast
6.3 String
6.4 Numeric 功能/数学计算
7. Annotations 注释
7.1 注释的类型
7.2 怎么加注释
8. Union 和 Join
9. 货币和单位转换
10. Client的处理
11. Access Control
12. VDM Virtual Data Model
13. 扩展CDS VIEW
14. AMDP
15. oData Services和 UI5 (Smart Template)
去网站 https://tools.hana.ondemand.com/#abap
里面有详细步骤
先装个Eclipse
装好了之后去在eclipse里面install new software 就复制上面步骤里给你提供的网址。
接下来装ADT就行了。
然后就新建ABAP project就可以了,连接到后台系统。
CDS view之所以比之前的DDIC view要强。就强在它有自己独特的语法功能,可以加一些注释。注释就是一些给数据库的指令。也就是这些注释能让它的功能扩展。
其次能把可以在数据库层执行的代码下推。(不是所有代码都能下推)
数据密集型的计算会下推到数据库层。比如在行上的计算。就不用先把数据拉到应用层计算了。就像SQL的count。
首先肯定要指定相关的数据库表。还有要被用到view里面的字段。
CDS view可以基于数据库表和视图建,也可基于已有的CDS view来建。
这些CDS view可以直接用在ABAP程序里。
选择Data Definition.
注释上第一行写了要加SQL view的名字。这个就是你的CDS view在数据库里的代表。
这个模板是DDIC-based view,所以要在GUI里能看到的话,得给个SQL view的名字。
在select from后加个表,表里面的哪些字段要用到呢。可以直接在表名上右键,navigate to查看。
或者直接点击Ctrl键,然后把鼠标移到自己的表上,就能直接点到表里。
建完后保存加激活。
F8来查看数据。后者按下面的来执行。
就能看到结果了。 这个列名就是写的别名了。
同时,在CDS view里右键Show SQL create statement:
能直接看到转换的SQL语句,在数据库里建了的DDIC view。那么当我删掉了这个CDS view的时候,其实DDIC 的view也就不见了。
打开一个CDS view.
从以下这两个地方来找。
要给CDS view添加一些新字段就直接添加在下面。
那association关联其实和join很像。
假设有个头文件表和行项目表,1对多的关系。分别建CDSview之后。
那么我们就可以用association来关联这两个CDS view:
通过下面这个特定的association语句就可以把另一个view关联过来。
这个语句很简单。从header到item就用0..*一对多的关系,关联字段写在$projection后面。
因为是把另一个表当做child给关联过来,所以加个注释:[#TO_COMPOSITION_CHILD]
把另一个view完全关联过来。F8之后follow association能直接跳转到你选中的字段值的关联的view。这个有点像BW里面的jump query了。
同理,从Item到Header的跳转也可以用association关联:
不加注释也能跳。
右键 依赖性分析。
能看到这个 CDS view是基于哪些table和CDS view的。这里能看出来association是个左外连接。
换成图形就比较直观一点。还有最后一个complexity metircs,能看到什么join,数据从哪里来的。
还可以查看where used list。选中你的CDS view名字,或者字段名,查看where used list.避免改了对其他对象有影响。
查看active annotations,活动的注释:
条件。
这个很简单。
key ebeln as Order,
case (bsart)
when 'UB' then 'ST order'
when 'TS' then 'External'
else 'others'
end as OrderType,
ekgrp as Group
格式转换。
netpr 转换成abap.fltp(16)格式。然后*0.01添加一个Tax字段。
werks as plant,
cast( netpr as abap.fltp(16) ) * 0.01 as Tax
Cast可以用来切换所有的data element格式。或者是ABAP数据字典里的内置的数据类型,比如abap.fltp(16)。
类似的可以自己去找:
比如abap.clnt[(3)]/abap.int1[(3)]
abap.raw(len)/abap.sstring(len)/abap.dats[(8)]......
也是代码下推到数据库,其实很多在BW的转换里面做的这里也就能先做了。
length 取长度 |
Instr 查找位置 |
concatenate 关联两个string |
concatenate with space 中间加空格 |
left 取左边多少位 |
lower 小写转换 |
upper 大写转换 |
Ltrim & Rtrim ( 字段,要被移除的字段) |
replace( 字段,要被替代的,替代成啥) |
substring (字段,从哪个位置开始,取多少位) |
Lpad&Rpad(字段,补充后的长度,要被补充的string):如果原来的字段已经是补充后的长度了,就不会再补充了 |
这里有延伸一个,concat_with_space是中间加了四个空格。但是如果我想连接两个字段,这两个字段的长度不固定,但是最后得到一个固定长度的值怎么办呢?
ABS(arg)绝对值 | abs(-5) = 5 |
MOD(arg1,arg2)取余 | mod(10,3) = 1 |
DIV(arg1,arg2)取除 | div(18,4) = 4 |
DIVISION(arg1,arg2,dec) 取除,确定小数位 | div(20,6,2) = 3.33 |
CEIL(arg) 比arg大的最小整数 | ceil(4.5) = 5/ceil(-5.5) = -5 |
FLOOR(arg)比arg小的最大整数 | floor(3.5) = 3 |
ROUND(arg,pos) 四舍五入舍小数位 | round(1.46,1) = 1.5 |
以下就是典型的代码下推到数据库。
define view ZCDS_Function
as select from vbak
{
vbak.vbeln as Doc,
vbak.netwr as Price,
round(vbak.netwr,1) as round_Pri,
ceil(vbak.netwr) as ceil_pri,
floor(vbak.netwr) as floor_pri,
div(vbak.netwr,2) as div_pri,
division(vbak.netwr,3,5) as div2_pri, //除3取带有5位小数的结果
mod(10,3) as modop,
abs(-1) as para
}
对于数学计算来讲就是加减乘除,乘除法只能用于floating的数字。 要先cast到abap.fltp(16)上。不然会报错。
举个例子:
define view ZI_Sales
as select from vbap
{
key vbeln as SalesDo,
min(netwr) as MinAmount,
max(netwr) as MaxAmount,
avg(netwr) as AvgAmount,
count(*) as Count,
count(distinct matnr) as DistinctMat,
}
group by vbeln
对于Having就是必须在Group by之后才能用的。加强限制。
define view ZI_Sales
as select from vbap
{
key vbeln as SalesDo,
min(netwr) as MinAmount,
max(netwr) as MaxAmount,
avg(netwr) as AvgAmount,
count(*) as Count,
count(distinct matnr) as DistinctMat,
}
group by vbeln
having pstyv = 'TAN'
简单来说注释就是来丰富这个CDS view的功能的。
这些注释要被不同的framework来编译。在运行的时候可能通过SADL,BOPF,或者其他的Analytics啊,Enterprise Search这些framework来编译。
view 注释,就是你还没开始编辑这个view的时候,抬头的那些,对应到DDIC里的view的名字和描述。
元素注释,对特定字段的注释。
扩展注释,当你去extend 这个view的时候,它旁边的注释就是扩展注释。
参数注释,参数旁边的注释。
这些乱七八糟的注释类型,其实可以按类来分。
Analytics类:分析性的数据模型和应用 @Analytics.dataExtraction.enabled 是否可被用于数据赋值
Consumption类: CDS内容怎么被消费 @Consumption.defaultValue 参数默认值
Enterprise Search类:是否可被Enterprise搜索。这个目前没有对客户开放。@EnterpriseSearch.enabled
oData类:发布到Odata,@OData.publish,然后可以在UI5里用
UI类:独立定义,比如说顺序:@UI.identification.position,谁在谁后面展示啥的
VDM类:@VDM.ViewType 定义一个VDM view的类型,比如BASIC,COMPOSITE,CONSUMPTION
下一篇。。。