公众号:SAP Technical
本文作者:matinal
 

前言部分

在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中的系统信息的更多相关文章

  1. ABAP CDS-介绍(ABAP CDS视图)

    前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...

  2. HANA CDS与ABAP CDS

    如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义 ...

  3. ABAP on HANA之CDS Association和Path Expression

    本文阐述了ABAP CDS association的概念,并且展示了在CDS视图中和SQL语句中写路径表达式(Path Expression)代码的方法.我也会解释如何在CDS asociation中 ...

  4. ABAP CDS-Part 1(ABAP CDS实体)

    文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 目录 预备条件 一.概述 二.ABAP CDS实体(CDS Entity) a.定义ABAP CDS Views b.ABAP C ...

  5. 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单

    原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...

  6. 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx EF 6 Code-First ...

  7. 8.翻译系列: EF 6中配置领域类(EF 6 Code-First 系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/configure-classes-in-code-first.aspx EF 6 Cod ...

  8. 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 ...

  9. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

随机推荐

  1. Python机器学习笔记:XgBoost算法

    前言 1,Xgboost简介 Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器.因为Xgboost是一种提升树模型,所以它是将许多 ...

  2. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  3. Perl:undef类型和defined()函数

    undef和defined()函数 undef表示的像是数据库中的"null".它表示空,啥也没有,是完全未定义的.这不等于字符串的空,不等于数值0,它是另一种类型. 在某些时候, ...

  4. Python网络编程之Socket的简单实现

    一.引入 关于Python的网络编程,最基础莫过于socket了. socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket. py ...

  5. [PHP]算法-拼接最小字典序的实现

    拼接最小字典序: 给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的并放回这个大字符串. 思路: 1.字典序,12345这五个数, ...

  6. 大数据Spark与Storm技术选型

    先做一个对比:   对比点 Storm Spark Streaming 实时计算模型 纯实时,来一条数据,处理一条数据 准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理 实时计算延迟度 毫 ...

  7. 汇编语言--微机CPU的指令系统(五)(位操作指令)

    (6) 位操作指令 1.位扫描指令(Bit Scan Instruction) 指令的格式:BSF/BSR Reg, Reg/Mem ;80386+ 受影响的标志位:ZF 位扫描指令是在第二个操作数中 ...

  8. mvc中查询字符串请求过长

    最近在mvc中做导出Excel功能,通过页面把字段id和对应的中文名称通过a标签传给控制器的过程中,总是报错. 1.第一次错误截图 具体解决方案: 可以配置 IIS 服务器以拒绝查询字符串长度大于指定 ...

  9. hive函数应用之操作json

    1.创建表 createtable.sql中存放的创建表语句如下 create external table adt.jsontest ( appKey string comment "AP ...

  10. Html5、css、JavaScript基础

    一.HTML学习 HTML样式Css 内联样式- 在HTML元素中使用"style" 属性 内部样式表 -在HTML文档头部 <head> 区域使用<style& ...