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. C++ Knowledge series Conversion & Constructor & Destructor

    Everything has its lifecycle, from being created to disappearing. Pass by reference instead of pass ...

  2. SQL获得连续的记录的统计

    SELECT TYEAR, MIN(TDATE) AS STARTDATE, MAX(TDATE), COUNT(TYEAR) AS ENDNUM --TYEAR年,STARTDATE连续记录的开始时 ...

  3. SharePoint 计时器作业

    本文将介绍 SharePoint 2010 的默认计时器作业,即我们通常说的Timer服务.计时器作业在 SharePoint Server 的特定 Windows 服务中运行.计时器作业还是执行定时 ...

  4. check_mk检测插件编写

    参考 Writing Checks (Introduction) Writing agent based checks The New Check API http://www2.steinkogle ...

  5. Linux改变文件属性与权限

    chgrp:改变文件所属用户组 chown:改变文件所有组 chmod:改变文件的权限 一.chgrp(change group的简称) 修改文件所属组:eg:chgrp users install. ...

  6. 如何在windows下安装配置pyspark notebook

    第一步:安装anaconda anaconda自带一系列科学计算包 下载链接:http://pan.baidu.com/s/1b4jWlg 密码:fqq3 接着配置环境变量:如我安装在D盘下   试一 ...

  7. nodejs封装的webget webpost方法

    在我之前的项目中,经常用到Nodejs通过post\get方法访问其它网站.webapi.下面是我封装的 Get.Post方法,很适合在一些web字符串收发场景使用(暂不支持文件.二进制流等传输). ...

  8. 从Java官网下载JDK1.6等低版本JDK

    今天在浏览Java官网的时候发现旧版本(1.8之前)的JDK安装包下载地址没有在下载页面明显的提供出来.个人通过在官网查看,发现oracle官方将旧版本的JDK全都放在Java Archive模块中了 ...

  9. 利用python的numpy创建矩阵并对其赋值

    创建一个3X3的矩阵并对其赋值: x = numpy.array([[1,2,3],[4,5,6],[7,8,9]]) print x print x.shape 运行结果: [[ ] [ ] [ ] ...

  10. ubuntu 报错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unav E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process us

    1.配置xshell,查看虚拟机中ubuntu中网络ip ifconfig 报错 Command 'ifconfig' not found, but can be installed with: su ...