【SAP Abap】关于SAP汇率表 TCURR 的CDS开发实例

关于SAP汇率表 TCURR 的CDS开发实例

1、背景

SAP汇率表,有效日期(GDATU)比较特殊,如下表所示:
在这里插入图片描述
在实际使用时,需要利用转换例程,将其转换成正常的有效日期。
在这里插入图片描述
在写SQL语句批量查询时,不太友好,考虑写一个视图,对其进行转换,转换逻辑比较简单,定义正常的有效日期字段 ZGDATU = 99999999 - GDATU。

2、解决方案

(1)开发传统数据库视图

create view ZV_TCURR_BASE
as
select *, cast(99999999-GDATU as char) as ZGDATU from TCURR;

执行效果:

select * from ZV_TCURR_BASE;

在这里插入图片描述
优点:简单快速,无需激活,可以使用常规sql脚本语法编写;
缺点:ZV_TCURR_BASE 为非ABAP对象,OPENSQL无法使用,只能用于NATIVESQL。

(2)开发ABAP CDS视图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
贴入如下脚本,保存激活

@AbapCatalog.sqlViewName: 'ZV_TCURR'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '汇率有效期转换'
define view ZV_TCURR_DDL as 
select 
  kurst,
  fcurr,
  tcurr,
  gdatu,
  ukurs,
  ffact,
  tfact,
  @EndUserText.label: '有效日期'
  cast(left(cast((99999999-cast(cast(gdatu as abap.numc(8)) as abap.int4)) as abap.char(11)),8) as abap.dats) as ZGDATU 
from tcurr 

在SAP中 SE11 可以查看到该对象
在这里插入图片描述在这里插入图片描述
在SAP中ABAP中引用

SELECT * FROM ZV_TCURR UP TO 10 ROWS  INTO TABLE @DATA(LT_TCURR) .
CL_DEMO_OUTPUT=>DISPLAY( LT_TCURR ).

在这里插入图片描述
备注:代码检查,会报警告信息,建议使用“ZV_TCURR_DDL”。
实测发现简单语句场景可以使用“ZV_TCURR”,复杂语句场景需要使用“ZV_TCURR_DDL”,否则会报错误消息。
执行效果如下,自动识别日期类型,按日期格式显示
在这里插入图片描述
数据库执行效果如下:

select * from ZV_TCURR;		--备注:ZV_TCURR_DDL 是不可识别的

在这里插入图片描述
优点:CDS对象,ABAP OPENSQL可以识别,在数据库也可以使用,通用性较强。
缺点:需要使用 ABAP ADT工具进行开发,需要符合CDS脚本语法规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值