SAP Hana CDS 开发简介

  • 一、CDS简介
  • 二、CDS VIEW 创建模板
    • 1、定义单数据源的简单视图
    • 2、定义两个数据源的JOIN视图
    • 3、定义具有关联关系的视图
    • 4、定义父类关联关系的视图
    • 5、定义单个入参的视图
    • 6、定义简单的投影视图实体
    • 7、定义继承的视图
    • 8、定义带有入参的表函数
    • 9、定义带有入参的抽象实体
    • 10、定义父子层次视图
    • 11、定义单个入参的客户实体
  • 三、CDS VIEW ENTITY 创建模板
    • 12、定义单数据源的简单视图实体
    • 13、定义根视图实体
    • 14、定义关联父实体的视图实体
    • 15、继承投影视图实体
    • 16、继承抽象实体
    • 17、继承客户实体

一、CDS简介

为了利用SAP HANA进行应用程序开发,SAP引入了一个新的基础数据建模,称为核心数据服务(CDS)。使用CDS,数据模型是在数据库服务器上定义和使用的,而不是在应用程序服务器上。CDS还提供了超越传统数据建模工具的功能,包括对概念建模和关系定义、内置函数和扩展的支持。

最初,CDS仅在SAP HANA的设计时和运行时环境中可用。现在,CDS概念在SAP NetWeaver中为ABAP也得到了充分的实现,使开发人员能够在将代码执行下推到数据库的同时,使用ABAP开发工具在ABAP层工作。

CDS简化和统一了定义和使用数据模型的方式,不管你用的是哪种消费技术。从技术上讲,它是对SQL的增强,为您提供了一种数据定义语言(DDL),用于定义语义丰富的数据库表/视图(CDS实体)和数据库中的用户定义类型。

包括:

  • 用于数据模型中的计算和查询的表达式
  • 概念层次上的关联,在查询中使用简单的路径表达式代替连接
  • 使用附加的(domain specific特殊域)元数据来丰富数据模型的注解。[元数据是“描述数据的数据”。元数据可以为数据说明其元素或属性(名称、大小、数据类型等),或结构(长度、字段、数据列),或其相关数据(位于何处、如何联系、拥有者)。]

CDS版本变更历史:

二、CDS VIEW 创建模板

1、定义单数据源的简单视图

模板:

/*
template 1: Define ViewDefines a simple CDS view with one data source.
*/
@AbapCatalog.sqlViewName: '${sql_view_name}'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '${ddl_source_description}'
define view ${ddl_source_name_editable} as select from ${data_source_name} {${cursor}
}

实例(CDS标准写法):

@AbapCatalog.sqlViewName: 'YV_DEMO01_SCARR'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO01_SCARR'
define view YCDS_DEMO01_SCARR as
select from scarr
{--key mandt,   -- CDS会自动添加key carrid,carrname,url
};

或者(传统SQL写法):

@AbapCatalog.sqlViewName: 'YV_DEMO01_SCARR'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO01_SCARR'
define view YCDS_DEMO01_SCARR as
select
--key mandt,    -- CDS会自动添加
key carrid,carrname,url
from scarr;


ABAP程序调用(Open SQL):

REPORT yz_cds_demo.
SELECT *
FROM ycds_demo01_scarr
INTO TABLE @DATA(itab).
cl_demo_output=>display( itab ).


ABAP程序调用(SALV IDA):

REPORT YZ_IDA_DEMO.
CL_SALV_GUI_TABLE_IDA=>CREATE_FOR_CDS_VIEW( iv_cds_view_name = 'YCDS_DEMO01_SCARR' )->FULLSCREEN( )->DISPLAY( ).


实例(定义字段别名):

@AbapCatalog.sqlViewName: 'YV_DEMO01_SCARR2'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO01_SCARR2'
define view YCDS_DEMO02_SCARR
(id, name, url) --field alias
as
select from scarr
{--key mandt,key carrid as id,   --aliascarrname,url
};

2、定义两个数据源的JOIN视图

模板:

/*
template 2: Define View with JoinDefines a CDS view which combines two data sources using a left outer join.The join conditions are specified in the on clause.
*/
@AbapCatalog.sqlViewName: '${sql_view_name}'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '${ddl_source_description}'
define view ${ddl_source_name_editable} as select from ${data_source_name}
left outer join ${joined_data_source_name}on ${data_source_name}.${element_name} = ${joined_data_source_name}.${joined_element_name} {${cursor}
}

实例:

@AbapCatalog.sqlViewName: 'YV_DEMO02_JOIN'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO02_JOIN'
define view YCDS_DEMO02_JOIN as
select from spfli
left outer join scarron scarr.carrid = spfli.carrid
{key spfli.carrid,key spfli.connid,scarr.carrname
};


ABAP调用程序:

REPORT yz_cds_demo.
SELECT *
FROM ycds_demo02_join
INTO TABLE @DATA(itab).
cl_demo_output=>display( itab ).

3、定义具有关联关系的视图

模板:

/*
template 3: Define View with AssociationDefines a CDS view with a public association to another data source.The association can be used in the select list as well as by other CDS views which use this CDS view as a data source.
*/
@AbapCatalog.sqlViewName: '${sql_view_name}'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '${ddl_source_description}'
define view ${ddl_source_name_editable} as select from ${data_source_name}
association [${1}] to ${target_data_source_name} as ${_association_name}on $$projection.${element_name} = ${_association_name}.${target_element_name} {${cursor}${_association_name} // Make association public
}

实例:

@AbapCatalog.sqlViewName: 'YV_DEMO03_ASSOCI'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO03_ASSOCIATION'
define view YCDS_DEMO03_ASSOCIATION as
select from spfli
association to scarr as _scarron $projection.carrid = _scarr.carrid
{key spfli.carrid,key spfli.connid,--_scarr.carrname,_scarr // Make association public, joined on demand
}

在HanaStudio中预览数据:




HANA访问数据:

select * from YV_DEMO03_ASSOCI;  -- 未访问关联

ABAP访问数据:

REPORT yz_cds_demo.
PARAMETERS: p_carrid TYPE scarr-carrid.
SELECT carrid, connid, \_scarr-carrname AS flightname   "访问关联
FROM YCDS_DEMO03_ASSOCIATION
where carrid = @p_carrid
INTO TABLE @DATA(itab).
cl_demo_output=>display( itab ).

4、定义父类关联关系的视图

模板:

/*
template 4: Define View with To-Parent AssociationDefines a CDS view with a specialized association to its parent CDS entity.Compositions and to-parent associations are used to define the structure of a business object which can be used in the ABAP RESTful Programming Model.
*/
@AbapCatalog.sqlViewName: '${sql_view_name}'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '${ddl_source_description}'
define view ${ddl_source_name_editable} as select from ${data_source_name}
association to parent ${target_data_source_name} as ${_association_name}on $$projection.${element_name} = ${_association_name}.${target_element_name} {${cursor}${_association_name} // Make association public
}

实例:

@AbapCatalog.sqlViewName: 'YV_DEMO04_TOPARE'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO04_TOPARENT'
define view YCDS_DEMO04_TOPARENT as
select from spfli
association to parent YCDS_DEMO01_SCARR as _scarron $projection.carrid = _scarr.id {key spfli.carrid,key spfli.connid,_scarr.id, // Make association public_scarr
}

5、定义单个入参的视图

模板:

/*
template 5: Define View with ParametersDefines a CDS view with a single input parameter.The input parameter can be used as an element in the select list or as an operand in conditional or arithmetic expressions.
*/
@AbapCatalog.sqlViewName: '${sql_view_name}'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '${ddl_source_description}'
define view ${ddl_source_name_editable}with parameters ${parameter_name} : ${parameter_type}
as select from ${data_source_name} {${cursor}
}

实例:

@AbapCatalog.sqlViewName: 'YV_DEMO05_PARAM'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO05_PARAMETERS'
define view YCDS_DEMO05_PARAMETERSwith parameters p_carrid : s_carr_id
as select from spfli {key connid,cityfrom,cityto
}
where carrid = $parameters.p_carrid;

SE11图(不支持查看表数据):

SE16N图(可以执行,需要输入参数):

ABAP程序调用:

REPORT yz_cds_demo.
PARAMETERS: p_carrid TYPE scarr-carrid.
SELECT *
FROM ycds_demo05_parameters( p_carrid = @p_carrid )
INTO TABLE @DATA(itab).
cl_demo_output=>display( itab ).


HANA 查询数据:

select * from YV_DEMO05_PARAM('AA') where mandt = 200;
--或者
select * from YV_DEMO05_PARAM( p_carrid => 'AA' ) where mandt = 200;

6、定义简单的投影视图实体

模板:用于屏蔽一些字段(一般用于保护数据时使用)。

/*
template 6: Define Projection ViewDefines a simple CDS projection view.
*/
@EndUserText.label: '${ddl_source_description}'
@AccessControl.authorizationCheck: #CHECK
define view entity ${ddl_source_name_editable} as projection on ${data_source_name} {${cursor}
}

实例:

@EndUserText.label: 'CDS_DEMO06_PROJECTION'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view entity YCDS_DEMO06_PROJECTION
as projection on YCDS_DEMO04_TOPARENT {key carrid,key connid
}

7、定义继承的视图

/*
template 7: Extend ViewExtends an existing CDS view by adding the specified elements to the select list of the CDS view using a view enhancement.
*/
@AbapCatalog.sqlViewAppendName: '${sql_view_append_name}'
@EndUserText.label: '${ddl_source_description}'
extend view ${view_name} with ${ddl_source_name_editable} {${data_source_name}.${element_name}
}

实例:

@AbapCatalog.sqlViewAppendName: 'YV_DEMO07_EXTEND'
@EndUserText.label: 'CDS_DEMO07_EXTEND'
extend view YCDS_DEMO02_JOIN            //原CDS,有三个字段with YCDS_DEMO07_EXTEND          //新CDS,追加一个字段
{scarr.currcode
}

8、定义带有入参的表函数

模板:AMDP FUNCTION实现。

/*
template 8: Define Table Function with ParametersDefines the type signature of a client dependent CDS table function with importing parameters. The CDS table function is implemented in the specified ABAP method.The CDS table function can be used in Open SQL and as a data source in other CDS view definitions.
*/
@EndUserText.label: '${ddl_source_description}'
define table function ${ddl_source_name_editable}
with parameters ${parameter_name} : ${parameter_type}
returns {${client_element_name} : abap.clnt;${element_name} : ${element_type};${cursor}
}
implemented by method ${class_name}=>${method_name};

实例:

@EndUserText.label: 'ADMP_DEMO_SCARR'
define table function YCDS_ADMP_DEMO_SCARR
with parameters @Environment.systemField: #CLIENTp_clnt  : abap.clnt
returns {mandt     : abap.clnt;carrid    : s_carr_id;carrname  : s_carrname;url       : s_carrurl;
}
implemented by method ycl_amdp_hdb_demo=>get_scarr_for_cds;

具体参考:X档案:SAP ABAP 中 AMDP 简介及实现方法

9、定义带有入参的抽象实体

模板:仅描述类型属性且未实例化任何数据库对象的 CDS 实体。

/*
template 9: Define Abastract Entity with ParametersDefines an abstract CDS entity with a single input parameter.
*/
@EndUserText.label: '${ddl_source_description}'
define abstract entity ${ddl_source_name_editable} with parameters ${parameter_name} : ${parameter_type} {${element_name} : ${element_type};${cursor}
}

实例:

@EndUserText.label: 'CDS_DEMO09_ABSTRACT'
define abstract entity YCDS_DEMO09_ABSTRACT with parameters p_carrid : s_carr_id
{connid : s_conn_id;cityfrom : s_from_cit;cityto : s_to_city;
}

10、定义父子层次视图

模板:

/*
template 10: Define Parent Child HierarchyDefines a simple CDS parent child hierarchy.
*/
define hierarchy ${ddl_source_name_editable} as parent child hierarchy (source ${data_source_name}child to parent association ${_association_name}start where ${element_name} = ${value}siblings order by ${order_by_element_name})
{${element_name}${cursor}
}

定义父子层次表:YTB_DEMO_HIER

插入数据:

CREATE COLUMN TABLE "SAPHANADB"."YTB_DEMO_HIER"
("MANDT" NVARCHAR(3)  DEFAULT '000' NOT NULL ,"ID"    INTEGER CS_INT  DEFAULT 0 NOT NULL ,"PID"     INTEGER CS_INT  DEFAULT 0 NOT NULL ,"NAME"    NVARCHAR(20)    DEFAULT '' NOT NULL ,CONSTRAINT "YTB_DEMO_HIER~0" PRIMARY KEY ("MANDT","ID")
);
insert into YTB_DEMO_HIER values('200', 1, 0, '图书');
insert into YTB_DEMO_HIER values('200', 2, 1, '教材类');
insert into YTB_DEMO_HIER values('200', 3, 1, '计算机类');
insert into YTB_DEMO_HIER values('200', 4, 3, 'Java');
insert into YTB_DEMO_HIER values('200', 5, 3, '.Net');
insert into YTB_DEMO_HIER values('200', 6, 3, 'SAP');
insert into YTB_DEMO_HIER values('200', 7, 1, '文学类');
insert into YTB_DEMO_HIER values('200', 8, 1, '科幻类');
insert into YTB_DEMO_HIER values('200', 9, 8, '三体');
insert into YTB_DEMO_HIER values('200', 10, 8, '流浪地球');

定义父子层次数据源:CDS View

@AbapCatalog.sqlViewName: 'YTB_DEMO_HIER_S'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO10_HIERARCHY_SOURCE'
define view YCDS_DEMO10_HIERARCHY_SOURCE
as select from ytb_demo_hier
association[1..1] to YCDS_DEMO10_HIERARCHY_SOURCE as _tree on $projection.parent= _tree.id
{_tree,key id,pid as parent,name
}

或者:CDS View 实体

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO10_HIERARCHY_VIEW'
define view entity YCDS_DEMO10_HIERARCHY_VIEW
as select from ytb_demo_hier
association[1..1] to YCDS_DEMO10_HIERARCHY_VIEW as _treeon $projection.parent= _tree.id
{_tree,key id,pid as parent,name
}

定义父子层次关系视图:

define hierarchy YCDS_DEMO10_HIERARCHYwith parametersp_id : abap.int4as parent child hierarchy (source --YCDS_DEMO10_HIERARCHY_SOURCE        --两者都可以YCDS_DEMO10_HIERARCHY_VIEW           --两者都可以child to parent association _treestart where id = :p_idsiblings order by id ascending
)
{id, parent, name
}

在Hana中预览数据:


在Hana SQL中查询数据:

select * from YTB_DEMO_HIER_S;                   --sql view,可以访问,有数据
select * from YCDS_DEMO10_HIERARCHY_SOURCE;     --cds view,无法访问
select * from YCDS_DEMO10_HIERARCHY_VIEW;       --cds view entity,可以访问,没有数据
select * from YCDS_DEMO10_HIERARCHY( p_id => 3 );   --可以访问,没有数据

在ABAP中访问:

REPORT YZ_CDS_DEMO.
PARAMETERS: p_id type YCDS_DEMO10_HIERARCHY_VIEW-id.
SELECT FROM YCDS_DEMO10_HIERARCHY( p_id = @p_id )FIELDS id,parent,name,hierarchy_rank,hierarchy_tree_size,hierarchy_parent_rank,hierarchy_level,hierarchy_is_cycle,hierarchy_is_orphan,node_id,parent_idINTO TABLE @DATA( cds_result ).
cl_demo_output=>display( cds_result ).


11、定义单个入参的客户实体

模板:

/*
template 11: Define Custom Entity with ParametersDefines a custom CDS entity with a single input parameter.
*/
@EndUserText.label: '${ddl_source_description}'
define custom entity ${ddl_source_name_editable} with parameters ${parameter_name} : ${parameter_type} {key ${key_element_name} : ${key_element_type};${element_name} : ${element_type};${cursor}
}

实例:
(1)定义CDS客户实体:YCDS_DEMO11_CUSTOM_ENTITY

@ObjectModel.query.implementedBy  : 'ABAP:YCL_CUSTOM_ENTITY'
@EndUserText.label: 'CDS_DEMO11_CUSTOM_ENTITY'
define custom entity YCDS_DEMO11_CUSTOM_ENTITYwith parameters p_id : abap.char(3)
{key   carrid      :   abap.char(3);       // Returning fields are mentioned between {} just like ordinary CDS carrname    :   abap.char(20);      // Returning field set must contain a key or key combination url         :   abap.char(255);
}

(2)定义ABAP实现类:YCL_CUSTOM_ENTITY

class YCL_CUSTOM_ENTITY definitionpublicfinalcreate public .public section.interfaces IF_RAP_QUERY_PROVIDER .protected section.private section.
ENDCLASS.CLASS YCL_CUSTOM_ENTITY IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method YCL_CUSTOM_ENTITY->IF_RAP_QUERY_PROVIDER~SELECT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_REQUEST                     TYPE REF TO IF_RAP_QUERY_REQUEST
* | [--->] IO_RESPONSE                    TYPE REF TO IF_RAP_QUERY_RESPONSE
* | [!CX!] CX_RAP_QUERY_PROV_NOT_IMPL
* | [!CX!] CX_RAP_QUERY_PROVIDER
* +--------------------------------------------------------------------------------------</SIGNATURE>method IF_RAP_QUERY_PROVIDER~SELECT.data:IT_RESULT   type  table of YCDS_DEMO11_CUSTOM_ENTITY. "Internal table to be returned , easier to handle return if internal table is as same type of our data definitiondata: LV_PARAM    type STRING."Local variable to fetch and save parameter valuetry.try.if IO_REQUEST->IS_DATA_REQUESTED( ). "Fetching incoming dataIO_REQUEST->GET_PAGING( ).data(LT_FILTER_COND) = IO_REQUEST->GET_PARAMETERS( ). "Setting the filter condition, fetching parameter names from data definitionLV_PARAM = value #( LT_FILTER_COND[ PARAMETER_NAME   = 'p_id' ]-VALUE optional ). "Fetching the parameter value"Using the parameter we could do whatever we want , like selecting from a table , doing certain calculations etcselect * from scarr where carrID = @LV_PARAM into CORRESPONDING FIELDS OF TABLE @IT_RESULT.IO_RESPONSE->SET_TOTAL_NUMBER_OF_RECORDS( LINES( IT_RESULT  ) ). "setting the total number of records which will be sentIO_RESPONSE->SET_DATA( IT_RESULT  ). "returning the data as internal tableendif.catch CX_RAP_QUERY_PROVIDER into data(LX_EXC). "CX_A4C_RAP_QUERY_PROVIDER is now deprecated so use CX_RAP_QUERY_PROVIDERendtry.catch CX_RFC_DEST_PROVIDER_ERROR into data(LX_DEST).endtry.endmethod.
ENDCLASS.

(3)定义服务:

@EndUserText.label: 'SVS_EXPOSE_CUSTOM_ENTITY'
define service YSVS_EXPOSE_CUSTOM_ENTITY {expose YCDS_DEMO11_CUSTOM_ENTITY;
}

(4)服务如何使用(暂时还没研究到)

三、CDS VIEW ENTITY 创建模板

说明:
NW 7.55 以上引入。
CDS View Entity 对象,可以在ABAP中访问,但是不能在Hana Sql中访问(无数据)。

12、定义单数据源的简单视图实体

模板:

/*
template 12: Defines a simple CDS view entity with one data source.
*/
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '${ddl_source_description}'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{serviceQuality: #X,sizeCategory: #S,dataClass: #MIXED
}
define view entity ${ddl_source_name_editable} as select from ${data_source_name}
{${data_source_elements}${cursor}
}

实例:

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'CDS_DEMO12_VIEW_ENTITY'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{serviceQuality: #X,sizeCategory: #S,dataClass: #MIXED
}
define view entity YCDS_DEMO12_VIEW_ENTITY as select from scarr
{key carrid,carrname,url
}

13、定义根视图实体

模板:

/*
template 13: Defines a root CDS view entity with a specialized association to a child CDS entity.Root nodes, compositions and to-parent associations are used to define the structure of a business object which can be used in the ABAP RESTful programming model.
*/
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '${ddl_source_description}'
define root view entity ${ddl_source_name_editable} as select from ${data_source_name}
composition of ${target_data_source_name} as ${_association_name}
{${data_source_elements}${cursor}${_association_name} // Make association public
}

14、定义关联父实体的视图实体

模板:

/*
template 14: Defines a CDS view entity with a specialized association to its parent CDS entity.Compositions and to-parent associations are used to define the structure of a business object which can be used in the ABAP RESTful programming model.
*/
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '${ddl_source_description}'
define view entity ${ddl_source_name_editable} as select from ${data_source_name}
association to parent ${target_data_source_name} as ${_association_name}on $$projection.${element_name} = ${_association_name}.${target_element_name}
{${data_source_elements}${cursor}${_association_name} // Make association public
}

15、继承投影视图实体

模板:

/*
template 15: Extends an existing CDS projection view entity by adding the specified elements to its select list.
*/
extend view entity ${view_name} with {${base_data_source_name}.${element_name}
}

16、继承抽象实体

模板:

/*
template 16: Extends an abstract CDS entity by adding the specified elements to its select list.
*/
extend abstract entity ${entity_name} with
{${element_name} : ${element_type};
}

17、继承客户实体

模板:

/*
template 17: Extends a custom CDS entity by adding the specified elements to its select list.
*/
extend custom entity ${entity_name} with
{${element_name} : ${element_type};
}

created by xlevon on 20230206.
原创文章,转载请注明来源-X档案

参考文档:
ABAP CDS - Syntax
Working with Hierarchies in ABAP SQL
Custom Entities – Business Technology Platform (SAP Cloud Platform)

【SAP Hana】X-DOC:SAP Hana CDS 开发简介相关推荐

  1. 浅谈SAP公有云:S4 HANA Cloud

    近年来,SAP在云产品方面,屡屡有动作,这些动作都基于曾经在SAP 行业声名大噪的S4 Hana Cloud公有云产品.今天我们就来简单聊一聊SAP S4 HANA Cloud,希望能给大家带来一些新 ...

  2. 在 SAP BTP 上体验 SAP HANA Cloud 试用版本

    这是 Jerry 2021 年的第 58 篇文章,也是汪子熙公众号总共第 335 篇原创文章. 我们在 SAP 官方网站 help.sap.com 输入关键字 SAP HANA 之后: 会看到很多搜索 ...

  3. 在 SAP BTP 里使用 SAP HANA Cloud 试用版 Trial Version 的一些限制

    Start Using an SAP HANA Cloud Trial in SAP BTP Cockpit 您可以使用免费试用帐户来测试 SAP HANA Cloud.SAP HANA 数据库和 S ...

  4. 以HANA为核心 SAP实时数据平台详解

    文章讲的是以HANA为核心 SAP实时数据平台详解,在收购Sybase之前,SAP还不算是个数据库厂商,但其在ERP市场的地位举足轻重.那时的SAP只能通过与其他厂商合作来满足其商务套件的数据库需求, ...

  5. 【HANA系列】SAP HANA XS使用JavaScript编程详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  6. 【HANA系列】SAP HANA 2.0简介

    公众号: SAP Technical 本文作者: matinal 原文出处: http://www.cnblogs.com/SAPmatinal/ 原文链接: [HANA系列]SAP HANA 2.0 ...

  7. 如何在SAP WebClient UI里使用HANA Live report

    (1) Log on WebUI with role ANALYTICSPRO. create a new HANA live report: report type choose "SHL ...

  8. 使用Eclipse连接SAP云平台上的HANA数据库实例

    SAP云平台(Cloud Platform)上的HANA数据库实例有两种方式访问: 1. 通过SAP云平台的基于网页版的Development Tool:SAP HANA Web-Based Deve ...

  9. SAP HANA解读-2012 SAP商业同略会分享

    7月26日和27日,我受邀参加了SAP在国家会议中心举办的"蕴韬略促转变共发展"为主题的中国商业同略会,下面就参会的一些感想和大家分享一下. SAP中国商业同略会是第二次在北京举办 ...

最新文章

  1. 【Linux基础】文件处理实例
  2. oracle在日期区间分页查询,Oracle 日期分页
  3. elementUI树状图竖向滚动条和横向滚动条问题
  4. zabbix监控深信服_Zabbix 远程代码执行漏洞CVE202011800
  5. android 组件路由框架,XRouter:组件化路由框架
  6. Eclipse jetty和plugin 的结合使用
  7. 干货!操作系统基础知识汇总!转给要面试的同学吧
  8. jupyter notebook如何打开其他文件夹下的iqynb文件
  9. 华为新款旗舰P20发布,售价5000元起,首次搭载刷脸解锁
  10. 分布式事务及分布式系统一致性解决方案
  11. [推荐算法]基于用户的协同过滤算法
  12. 一些值得学习的Unity教程
  13. Office Web Add-in的技术原理和开发常见问题剖析
  14. 影片相继撤档“520”,在线票务平台等待下一个“黄金档”
  15. Groovy学习(二):GDK初探
  16. 执行cmd命令提示不是内部或外部命令
  17. java:Cassandra入门与实战——上
  18. 儒家、道家、佛家不同思想文化!
  19. Java枚举类与注解——一篇文章读懂枚举类与注解
  20. CSS - 左右摇曳摆动动画(无限循环)

热门文章

  1. iOS 流量监控分析
  2. 【前端初学者】【CSS笔记】之定位:相对定位、绝对定位、固定定位、静态定位及粘性定位(上)
  3. Python 操作数据库之 records
  4. java-net-php-python-jspm足球队信息管理系统计算机毕业设计程序
  5. Pytorch训练Bilinear CNN模型笔记
  6. tray 计算机英语,计算机与网络英语词汇(S5)
  7. tf.image.resize_bilinear
  8. Python自学记录——返回函数、匿名函数、装饰器与偏函数
  9. 怎样写工作报告和汇报材料?
  10. linux下安装Jenkins(centos7,另附使用docker安装)