ABAP News for Release 7.51 – ABAP CDS Client Handling
Open SQLは自動的クライアント処理をサポートしています。 Open SQLでクライアント依存のデータソースにアクセスする時、デフォルトでは現在のクライアントのデータだけが考慮されます。
クライアント依存のデータソースとは何でしょうか?
- 最初の列が組み込みディクショナリタイプCLNTのクライアント列である場合、ABAPディクショナリで定義されたデータベーステーブルまたはクラシックビューはクライアント依存です。
- CDSエンティティ(CDSビューおよびCDSテーブル関数)のクライアント依存関係およびクライアント処理は、注釈によって定義されます。 リリース7.51では、そのための新しいアノテーション@CLientHandlingが導入されています。 以前のアノテーション@ClientDependentは廃止されました。
CDS ビュー
CDSビューでは、クライアントの依存関係とクライアント処理が内部的に行われる方法を定義するためにアノテーション@CLientHandlingを使用します。 そのためには、次の2つのサブアノテーションを指定できます:
@ClientHandling.type: #INHERITED | #CLIENT_DEPENDENT | #CLIENT_INDEPENDENT
- #INHERITED(デフォルト)を使用すると、ビューのクライアント依存性は使用されるデータソースによって決まります。 ビューで使用されているデータソースの1つがクライアント依存の場合、ビューはクライアント依存です。 ビューで使用されているデータソースがクライアントに依存していない場合、ビューはクライアントに依存しません。
- が#CLIENT_DEPENDENTの場合、ビューはクライアントに依存します。 少なくとも1つのデータソースはクライアントに依存する必要があります。
- #CLIENT_INDEPENDENTを指定すると、ビューはクライアントに依存しません。 どのデータソースもクライアントに依存することはできません。
@ClientHandling.algorithm #AUTOMATED | #SESSION_VARIABLE | #NONE
- #AUTOMATED(クライアント依存ビューのデフォルト)が指定されている場合、ビューのON conditions およびその他の条件は、基礎となるデータソースのクライアント列の条件によって暗黙的に拡張されます。左側の外部結合の左側のクライアント非依存データソースが右側のクライアント依存データソースと結合されている場合、左側はすべて独立したデータベーステーブルT000を持つクライアント非依存データソースのクロス結合に置き換えられます。クライアントこれにより、左側のクライアントが人為的に依存するようになり、NULL値が回避されます。
- #SESSION_VARIABLEが指定されている場合は、上記の拡張機能に加えて、暗黙のWHERE条件が追加され、セッション変数$ session.clientに現在格納されているクライアントが選択されます。 Open SQLアクセス中、このセッション変数には現在のクライアント、またはUSING CLIENTオプションで設定されたクライアントが含まれます。結果は#AUTOMATEDと同じですが、パフォーマンスは向上します。
- #NONEは、クライアントに依存しないビューに対してのみ可能であり、それがデフォルトです。
@ClientHandling.type:#INHERITED
@ClientHandling.algorithm:#AUTOMATED
クライアント固有のCDSビューにはクライアントカラムがありません。 Open SQLのSELECTを使用してクライアント固有のCDSビューにアクセスすると、現在のクライアントまたは追加のUSING CLIENTで指定されたクライアントのデータが暗黙的に読み取られます。
以下は、単純なクライアント依存の投影ビューの例です。
@AbapCatalog.sqlViewName: 'DEMO_CDS_PRJCTN0'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientHandling.type: #CLIENT_DEPENDENT
@ClientHandling.algorithm: #AUTOMATED
define view demo_cds_spfli_client_0
as select from
spfli
{
key spfli.carrid,
key spfli.connid,
spfli.cityfrom,
spfli.cityto
}
このクライアント依存CDSビューの構造は、クライアント列を構成しません。 そのビューのOpen SQL SELECTは現在のクライアントからデータを読み取りますが、結果セットにクライアントフィールドは含まれません。
CDSテーブル関数
@ClientHandling.type: #CLIENT_DEPENDENT
クライアントの依存関係をOn(デフォルト)
@ClientHandling.type: #CLIENT_INDEPENDENT
クライアントの依存関係をOff
- クライアント依存テーブル関数の場合、要素リストには最初の要素として明示的なクライアントフィールドが必要です。このフィールドは、関連するAMDP関数実装の戻り値の列ですが、CDSエンティティの構造化データ型の構成要素ではありません。 Open SQLのSELECTを使用してクライアント固有のCDSテーブル関数にアクセスすると、現在のクライアントまたは追加のUSING CLIENTで指定されたクライアントに属する結果セットからそれらの行だけが選択されます。 AMDP関数のネイティブSQLScript実装は、必要なすべてのデータが利用可能になるようにする必要があります。
- クライアント非依存テーブル機能では、組み込みディクショナリタイプCLNTの明示的なクライアント項目を持つ必要はありません。最初の要素の型がCLNTの場合、クライアントフィールドとしては機能しません。代わりに、関連するAMDP関数実装の戻り値の通常の列であり、CDSエンティティの構造化データ型の通常の構成要素でもあります。クライアントに依存しないCDSテーブル関数がOpen SQL SELECTを使ってアクセスされるとき、タイプCLNTのカラムは特別な意味を持たず、他の要素のように扱われます。
以下は、クライアント依存のCDSテーブルの関数の例です。
lientHandling.type: #CLIENT_DEPENDENT
define table function DEMO_CDS_GET_SCARR_SPFLI_INPCL
with parameters
@Environment.systemField: #CLIENT
clnt :abap.clnt,
carrid :s_carr_id
returns
{
client :s_mandt;
carrname :s_carrname;
connid :s_conn_id;
cityfrom :s_from_cit;
cityto :s_to_city;
}
implemented by method
CL_DEMO_AMDP_FUNCTIONS_INPCL=>GET_SCARR_SPFLI_FOR_CDS;
アノテーション@ Environment.systemField:#CLIENTを持つタイプCLNTの入力パラメータCLNTがあります。 現在のクライアントは、Open SQL SELECTで暗黙的にこのパラメータに渡されます。 関連するAMDPクラスCL_DEMO_AMDP_FUNCTIONS_INPCLのAMDPメソッドGET_SCARR_SPFLI_FOR_CDSの実装では、この入力パラメータを使用して結果セットを現在のクライアントに制限できます。
@ClientDependent : true | false
CDSビューの場合、trueの場合
@ClientHandling.type:#INHERITED
@ClientHandling.algorithm:#AUTOMATED
falseの場合
@ClientHandling.type:#CLIENT_INDEPENDENT
@ClientHandling.algorithm:#NONE
CDSテーブル関数の場合、trueとfalseの値は次のように
@ClientHandling.type: #CLIENT_DEPENDENT | #CLIENT_INDEPENDENT
サブアノテーション付きの新しいアノテーション@CLientHandlingは、それが置き換えられる@ClientDependentと比較してより多くの可能性を提供するので導入されました。 CDSビューについてのみ、小さな違いがあります。@ClientDependent:falseを使用して、クライアント依存のデータソースを含むクライアント非依存のビューを定義できます。 しかし、これは通常そんなに良い考えではありません。 特にCDSエンティティーの代わりにCDSデータベースビューにアクセスすると、予期しない動作が発生する可能性があります。 したがって、新しい注釈の制限はクリーンアップと見なすことができます。
原文は:
ABAP News for Release 7.51 – ABAP CDS Client Handling的更多相关文章
- 如何使用ABAP代码反序列化JSON字符串成ABAP结构
假设我有这个JSON字符串如下图所示: 我的任务是解析出上图黑色方框里的几个字段,比如ObjectID, ETag, BuyerID, DateTime, ID, Name等等,把它们的值存储到对应A ...
- 【ABAP系列】SAP 如何用ABAP实现自动发送外部邮件
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 如何用ABAP实现自动发 ...
- ABAP开发顾问必备:SAP ABAP开发技术总结
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ABAP程序执行效率和优化 ABAP Performance Examples
一. SQL Interface1. Select ... Where vs. Select + Check用Select … Where语句效率比Select ...
- ABAP开发顾问必备:SAP ABAP开发技术总结[转载]
转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...
- ABAP中的枚举对象
枚举对象是枚举类型的数据对象.枚举对象只能包含类型为枚举类型的枚举值.ABAP从版本7.51开始支持它们. 这是一种常见的模式.在ABAP 7.51之前,人们通常用如下方式实现类似的功能: CLASS ...
- CDS测试框架介绍:如何为ABAP CDS Entities写测试
动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到A ...
- 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中用于定义和消费富语义 ...
随机推荐
- 【起航计划 009】2015 起航计划 Android APIDemo的魔鬼步伐 08 App->Activity->QuickContactsDemo 联系人 ResourceCursorAdapter使用 QuickContactBadge使用
QuickContactsDemo示例介绍了如何使用Content Provider来访问Android系统的Contacts 数据库. Content Provider为不同应用之间共享数据提供了统 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...
- 检测浏览器中是否有Flash插件
由于IE和非IE浏览器检测方式不同,所以代码如下 function hasPlugin(name){ debugger; name = name.toLowerCase(); for(var i=0; ...
- http协议的发展历史
在最早的时候,第一个定稿的http协议是http/0.9版本,在这个版本里面,http协议,它的内容,非常非常的简单 只有一个命令,就是GET 对应的就是我们现在经常用到的get请求,post请求,这 ...
- php中的脚本加速扩展opcache
今儿在azure里装php5.5.4,发现原先php5.4.php5.3中的zend guard laoder以及php5.2中的Zend Optimizer均不能再用,一直很喜欢用的eacceler ...
- xrdp 安装后 WINDOWS远程登录出错
xrdp需要vnc作为基础服务, sudo apt-get install tightvncserver 树莓派上这个命令运行下再连就好了
- lasagne保存网络参数
# Optionally, you could now dump the network weights to a file like this: # np.savez('model.npz', *l ...
- failed to bind pixmap to texture
问题描述:我用的是Ubuntue的操作系统,终端突然挂了.我重启了一下电脑,就进不去系统了. 日志信息: failed to bind pixmap to texture 原因: 界面管理工具坏了, ...
- 使用筛法在 O(logN) 的时间内查询多组数的素数因子
Prime Factorization using Sieve O(log n) for multiple queries 使用筛法在 O(logN) 的时间内查询多组数的素数因子 前言 通常, 我们 ...
- git常用命令图解