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

ABAP 0 次阅读
【SAP Abap】关于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脚本语法规则。