【转载】CDS相关资料整理(十五)定义CDS表函数功能

27cf65024e7d1b048cfe6a4bbe60e7f6.jpeg

路边随拍

原文地址:

https://www.ut163.com/fiori_learning_arrangement/sap-cds/define_cds_table_function_function/

定义CDS表函数功能

  • 创建CDS表功能

    • 为CDS表功能创建DDL源

    • 使用AMDP方法创建AMDP类

    • AMDP功能

    • 完成CDS表功能的定义

在创建CDS时,有一种是定义Define Table Function的CDS,使用此Table Function 的CDS,我觉得主要是使用在更为复杂的CDS中,比如不能简单使用表关联来取得数据时,可使用此定义CDS,通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function,并调用自定义类方法(此时的类方法,相当于在HANA DB 的存储过程),来处理生成DLL数据,然后再生成相关的其它CDS,以便于消费层(比如ODATA)使用。如图。

bb494fc7710f8f031d0c9e1467cd539b.png

模板定义带参数的表功能

此功能使用的是SAP 新AMDP(ABAP托管数据库过程)的基本功能,在这里可以查看AMDP更多介绍。

23f9b59077c0a7f63f114a060d79f317.png

CDS TABLE 功能的基本思想

上图说明了CDS表功能的基本思想:

  • CDS表功能通过关键字DEFINE TABLE FUNCTION在DDL源中定义。(就像CDS视图是通过关键字DEFINE VIEW在DDL Sources中定义的一样。)

  • CDS表函数的定义通过添加IMPLEMENTED BY来引用现有的AMDP函数。

  • ABAP程序(或CDS视图)可以在SELECT语句的from子句中将CDS表功能用作数据源,就像对CDS视图,数据库视图或透明表一样。

  • CDS框架通过在数据库上调用分配的函数来执行CDS表函数中的SELECT。

1.创建CDS表功能

开发CDS表功能时,以正确的顺序进行操作是最重要的。

1.1.为CDS表功能创建DDL源

  • 使用带有参数的模板定义表功能

  • 定义参数(可选)并返回值(不要忘记客户字段!)

  • 将IMPLEMENTED BY之后的信息保留为itis(未经语法检查检查)

  • 激活DDL源

  • b49b39ad4e90197bbd0c7fe2da49896a.png

  • CDS表功能的示例定义
  • 1.2.使用AMDP方法创建AMDP类

  • 创建一个全局类并实现接口IF_AMDP_MARKER_HDB

  • 定义带有添加的FOR TABLE FUNCTION的公共静态方法

  • 将方法实现为AMDP函数

  • 激活全局类

e2e827b7628c8c9806d93a2362605834.png

CDS的AMDP功能的定义

不带参数定义实现CDS表功能的AMDP方法。而是使用FOR FOR TABLE FUNCTION…。然后从CDS表函数获取AMDP方法的签名.

1.3.AMDP功能

  • AMDP函数使用AMDP类中Method语句的新增加的BY DATABASE FUNCTION。

  • 与AMDP过程实现不同,AMDP函数实现没有导出或更改参数。它们只有一个表格返回值。

  • ABAP程序不能直接调用AMDP函数实现。但是可以从其他AMDP函数或过程中调用它们。

  • 176c031330ae5c844387231998c13766.png

  • AMDP函数的示例定义
  • 上面的示例显示了AMDP类的定义。AMDP方法FUNCTION旨在由数据库功能实现。它被定义为一种功能方法,即,它仅具有一个表格返回参数,并且仅具有导入参数。

  • 注意:一旦数据库功能实现了此功能方法,就不能再在ABAP中调用它。

  • 6b4daa201c08900d84be4778c1a6b1b4.png

  • AMDP功能的示例实现
  • 上面的示例显示了AMDP函数的实现。

  • 使用BY DATABASE FUNCTION代替BY DATABASE PROCEDURE。其余的添加与数据库过程具有相同的含义和值。

  • 在数据库功能的脚本中,语句RETURN是必需的。RETURN语句定义return参数的值。

  • 1.4.完成CDS表功能的定义

  • 在IMPLEMENTED BY之后输入AMDP类和AMDP方法

  • 激活DDL源

  • 在数据预览中测试CDS表功能

  • 您必须先创建并激活DDL Source!

  • 这是因为在定义带有FOR TABLE FUNCTION的AMDP方法时,需要现有的,已激活的CDS Table Function。

  • 另一方面,在AMDP方法之前激活DDL Source没问题。语法检查在IMPLEMENTED BY之后接受不存在的类和/或方法。

  • 一旦完成了AMDP函数的实现,请返回CDS表函数定义并更新AMDP类的名称和AMDP方法。

  • 上面的示例显示了CDS表函数的定义。从外部看,它看起来像CDS视图的定义,带有输入参数name_in和具有三个字段mandt,id和name的元素列表。

推荐阅读:

ABAP新语法1

《ABAP新语法2》

《SM30添加按钮:批导,筛选,排序等完整demo 》

《关于 SM30/VIEW_MAINTENANCE_CALL锁整张表问题》

《Demo:弹出文本输入框》

《关于update task几个有意思的测试》

动态批量修改任意表任意字段的值

动态获取查询条件的一个小Demo

使用cl_gui_docking_container 实现多ALV》

VOFM 修改 组单开票时 会计凭拆分规则

DEMO SUBMIT 某程序并获取该程序ALV数据

DEMO:S/4 1809 FAGLL03H 增加字段增强

几个ABAP实用模板,体力活就别一行行敲了,复制粘贴得了

DEMO:BTE增强实现凭证创建检查

SAP Parallel Accounting(平行分类账业务)配置+操作手册+BAPI demo程序

CC02修改确认日期BAPI:Processing of change number  was canceled》《我是怎样调试BAPI的,以F-02为例

我是不是被代码给耽误了……不幸沦为一名程序员……

三亚自由行攻略(自己穷游总结)

苏州游记

记码农十周年(20110214--20210214)

不一样的SAP干货铺群:帅哥靓妹、红包、烤羊腿!

十年老码农搬砖习惯和技巧

我这个老码农是怎么debug标准程序的

我是怎样调试BAPI的,以F-02为例

杂谈:几种接口

Odata 增删改查详例

ODATA CREATE_DEEP_ENTITY 详例

RESTful DEMO 一:SAP 如何提供 RESTful Web 服务

RESTful DEMO 四 :增删改查及调用

DEMO  search help 增强 ( vl03n KO03 等)

录BDC时  弹出的公司代码框问题

《搜索帮助系列》

《增强相关》

Debug 系列

DEBUG  系列一:Dump debug
DEBUG  系列二:Configure Debugger Layer
DEBUG系列三:使用  F9 和 watch point
DEBUG系列四:第三方接口debug
DEBUG系列五:Update  模式下的function debug
DEBUG系列六:后台JOB  debug
DEBUG系列七:保存测试参数
DEBUG系列八:Debug弹出框
debug系列九:SM13查看update更新报错
DEBUG系列十:Smartforms  debug
DEBUG系列十一:GGB1  debug
Debug系列十二:QRFC  队列 debug
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值