【ABAP CDS系列】ABAP CDS中的系统信息

前言部分
在ABAP语言中,我们习惯于系统字段,如sy-mandt,sy-uname,sy-langu以获取系统信息。对于日期和时间,我们使用sy-uzeit和sy-datum,或使用时间戳(GET TIME STAMP)。ABAP CDS现在也提供了一些更方便的技巧。
session变量
如果SAP HANA数据库充当AS ABAP的数据库,那么我们可以访问以下三个全局会话变量:
1、CLIENT
2、APPLICATIONUSER
3、LOCALE_SAP
ABAP运行时环境使用与上述系统字段的内容相对应的值填充这些数据库变量。我们可以使用内置函数SESSION_CONTEXT本机访问会话变量,即EXEC SQL,ADBC和AMDP 。AMDP示例:
METHOD get_session_variables_amdp
BY DATABASE PROCEDURE FOR HDB
LANGUAGE SQLSCRIPT.
clnt := session_context(‘CLIENT’);
unam := session_context(‘APPLICATIONUSER’);
lang := session_context(‘LOCALE_SAP’);
ENDMETHOD.
我们知道ABAP 7.50有很多新功能:
我们可以在ABAP CDS视图中访问这些会话变量。不仅适用于SAP HANA数据库,还适用于所有受支持的数据库!语法是如下:
1、$ session.user
2、$ session.client
3、$ session.system_language
我来举个具体的例子看一下:
@AbapCatalog.sqlViewName: ‘DEMO_CDS_SESSVAR’ @AccessControl.authorizationCheck: #NOT_REQUIRED define view demo_cds_session_variables
as
select
from demo_expressions
{ id,
$session.user as system_user,
$session.client as system_client,
$session.system_language as system_language }
请注意,对于除SAP HANA之外的其他数据库,仅在使用Open SQL访问CDS视图时才定义这些变量的内容。
隐式参数
会话变量是访问其中包含的信息的便捷方式 - 全局变量。我们知道全局变量的不要轻易使用。将AS ABAP中的信息传递给CDS视图和CDS表函数的适当参数。为了方便我们使用ABAP 7.50 为CDS视图和函数参数引入了新的ABAP注释@ Environment.systemField 我们来看一下:
1、#CLIENT
2、#SYSTEM_DATE
3、#SYSTEM_TIME
4、#SYSTEM_LANGUAGE
5、#USER
如果我们在Open SQL中使用带注释的参数访问CDS视图或CDS表函数,则可以(对于#CLIENT)放弃显式参数传递。Open SQL隐式传递相应系统字段的内容。
我来举个栗子:
@AbapCatalog.sqlViewName: ‘DEMO_CDS_SYST’
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view demo_cds_system_fields
with parameters
@Environment.systemField : #CLIENT
p_mandt : syst_mandt,
@Environment.systemField : #SYSTEM_DATE
p_datum : syst_datum,
@Environment.systemField : #SYSTEM_TIME
p_uzeit : syst_uzeit,
p_langu : syst_langu
@<Environment.systemField : #SYSTEM_LANGUAGE,
p_uname : syst_uname
@<Environment.systemField : #USER
as select from demo_expressions
{ :p_mandt as client,
:p_datum as datum,
:p_uzeit as uzeit,
:p_langu as langu,
:p_uname as uname }
where id = ‘1’;
使用OPEN SQL访问,我也举个栗子:
SELECT *
FROM demo_cds_system_fields( )
INTO TABLE @DATA(result).
可见参数是隐式传递的
SELECT * FROM demo_cds_system_fields( p_datum = @sy-datum,
p_uzeit = @sy-uzeit,
p_langu = @sy-langu,
p_uname = @sy-uname )
INTO TABLE @DATA(result).
p_mandt的值不能再显式传递。
隐式参数传递是为了方便起见,仅在Open SQL中可用。如果在CDS实体中使用带参数的CDS实体,则必须再次显式传递参数。我们可以传递上面提到的会话变量。
时间和日期
不知道你是否注意到我们可以隐式地将系统日期和时间的值从AS ABAP传递到CDS实体,但是没有那些会话变量(至少在版本7.50中没有)
相反,使用ABAP 7.50 ,ABAP CDS中提供了一组新的内置日期和时间功能。
重要的是TSTMP_CURRENT_UTCTIMESTAMP(),它返回当前时间戳。
以下示例显示如何使用字符串函数从时间戳中提取当前日期和时间:
substring(cast(tstmp_current_utctimestamp()as abap.char(17)),1,8) substring(cast(tstmp_current_utctimestamp()as abap.char(17)),9,6)
【ABAP CDS系列】ABAP CDS中的系统信息的更多相关文章
- ABAP CDS-介绍(ABAP CDS视图)
前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...
- HANA CDS与ABAP CDS
如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义 ...
- ABAP on HANA之CDS Association和Path Expression
本文阐述了ABAP CDS association的概念,并且展示了在CDS视图中和SQL语句中写路径表达式(Path Expression)代码的方法.我也会解释如何在CDS asociation中 ...
- ABAP CDS-Part 1(ABAP CDS实体)
文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 目录 预备条件 一.概述 二.ABAP CDS实体(CDS Entity) a.定义ABAP CDS Views b.ABAP C ...
- 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单
原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...
- 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx EF 6 Code-First ...
- 8.翻译系列: EF 6中配置领域类(EF 6 Code-First 系列)
原文地址:http://www.entityframeworktutorial.net/code-first/configure-classes-in-code-first.aspx EF 6 Cod ...
- 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...
- python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...
随机推荐
- 字体反爬--css+svg反爬
这个验证码很恶心,手速非常快才能通过.. 地址:http://www.dianping.com/shop/9964442 检查一下看到好多字没有了,替代的是<x class="xxx& ...
- Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
第一章,第一节 用泛型替换Framework 1.X版本的API类. 说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习 ...
- Linux命令-设置免密码登录
设置免密码登陆:[root@Redis01 test]# cd /install/[root@Redis01 install]# rm -rf test/[root@Redis01 install]# ...
- javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数
别怪我是一个闷葫芦,没那么多花哨的语言,废话不多说,先说说小实例的要求: 编写一个方法,实现从n-m个数中随机选出一个整数,要求:传递的参数不足两个或者不是有效数字,返回[0-1]之间的随机数,需要解 ...
- C# 输出字符串到文本文件中
写个博客记录下,方便以后使用: public class WriteHelper { public static void WriteFile(object data) { try { string ...
- sql server 行转列存储过程
if object_id('[P_GetPriceTableBuy]','P') is not null drop procedure P_GetPriceTableBuy SET ANSI_NULL ...
- npm 安装 卸载 模块(转载)
来源 https://blog.csdn.net/yihanzhi/article/details/75665959 利用npm 安装删除模块 npm安装模块 [npm install xxx]利用 ...
- Java学习笔记之——接口
接口(interface)和抽象类 为何要定义接口?------>实现不同的方法 Java的设计思想是单继承和多实现 类:属性和方法的集合,方法围绕着属性转,可以理解为自定义的类型 接口:与类是 ...
- 向Spring容器中注册组件的方法汇总小结
1.通过xml定义 <bean class=""> <property name="" value=""></ ...
- Hibernate入门(十二)离线条件检索
Hibernate——离线条件检索DetachedCriteria DetachedCriteria翻译为离线条件查询,因为它是可以脱离Session来使用的一种条件查询对象,我们都知道Criteri ...