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を明確に指定しない場合でも、一緒です。
@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 News for Release 7.51 – ABAP CDS Client Handling的更多相关文章

  1. 如何使用ABAP代码反序列化JSON字符串成ABAP结构

    假设我有这个JSON字符串如下图所示: 我的任务是解析出上图黑色方框里的几个字段,比如ObjectID, ETag, BuyerID, DateTime, ID, Name等等,把它们的值存储到对应A ...

  2. 【ABAP系列】SAP 如何用ABAP实现自动发送外部邮件

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 如何用ABAP实现自动发 ...

  3. ABAP开发顾问必备:SAP ABAP开发技术总结

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. ABAP程序执行效率和优化 ABAP Performance Examples

    一.             SQL Interface1.         Select ... Where vs. Select + Check用Select … Where语句效率比Select ...

  5. ABAP开发顾问必备:SAP ABAP开发技术总结[转载]

    转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...

  6. ABAP中的枚举对象

    枚举对象是枚举类型的数据对象.枚举对象只能包含类型为枚举类型的枚举值.ABAP从版本7.51开始支持它们. 这是一种常见的模式.在ABAP 7.51之前,人们通常用如下方式实现类似的功能: CLASS ...

  7. CDS测试框架介绍:如何为ABAP CDS Entities写测试

    动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到A ...

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

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

  9. HANA CDS与ABAP CDS

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

随机推荐

  1. iframe跨域上传图片

    方案一:用jquery的$.post异步提交,然后把返回来的值用jquery填充到隐藏域中.可是$.post不支持跨域. jQuery.ajax()支持get方式的跨域,这其实是采用jsonp的方式来 ...

  2. vue打包后CSS中引用的背景图片不显示问题

    vue项目中,在css样式中引用了一张背景图片,开发环境下是可以正常显示,build之后背景图片不显示. 解决方法: 找到build/utils.js文件 修改成为如下所示内容:  添加红框中的内容即 ...

  3. <Android 基础(六)> ActionBar

    介绍 Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作.界面导航等功能.使用ActionBar的好 ...

  4. SSL--Windows下生成OpenSSL自签证书

    :OPenSSL下载地址:https://www.openssl.org/source/ 编译好的OpenSSL下载地址: http://slproweb.com/products/Win32Open ...

  5. mysql的三种索引

    MySQL中的索引分为3种: 1,主键索引:即用主键当唯一索引 2,常规索引:实现方式为B树和哈希表 3,全文索引:实现原理类似倒排索引,常用来查询字段中包含关键字 下面复习下B-TREE和hash- ...

  6. 前端必须要掌握的几个CSS3的属性

    随着Css3和html5的风靡,越来越多的前端人员开始学习Css3,今天的文章就是来说说前端应该掌握10个Css3属性. 1. Border-radius Border-radius是一大堆CSS3属 ...

  7. 【JavaScript 封装库】BETA 1.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  8. POST信息模拟登录获取页面内容

    最近项目里有一个是要模拟登录后,访问固定页面获取内容的要求,一开始用JQ AJAX好像不支持跨域请求.后使用.net中HttpWebRequest对象来获取.一开始访问总是无法在第二个页面正常访问,好 ...

  9. 阿里云主机ss

    https://promotion.aliyun.com/ntms/act/vm/aliyun-group/buy.html?group=HdcwGIaf6i

  10. #WPF的3D开发技术基础梳理

    原文:#WPF的3D开发技术基础梳理 自学WPF已经有半年有余了,一遍用,一边学.但是一直没有去触摸WPF的3D开发相关技术,因为总觉得在内心是一座大山,觉得自己没有能力去逾越.最近因为一个项目的相关 ...