最近有朋友在做SAPAMDP开发时,遇到如下错误信息:XXXisclient-specificandrestrictsaccesstoaclient。调用AMDP方法XX也必须允许此限制。本文将与该错误信息相关的背景知识记录如下。发生问题的场景是在基于ABAPTestCockpitATC和S4/HANA系统的CVA检查的代码增强期间,决定将OpenSQLSelect语句移动到通过HANA数据库上的AMDP存储过程访问的CDS视图中。创建一个CDS视图,在其中使用WHERE子句中的会话参数$session.client根据MA??NDT列上的会话客户端值过滤数据,如以下SELECT代码所示:select*fromvbrkwherevbrk.mandt=$session.客户;当我尝试在我的AMDP类方法(HANA数据库上的存储过程)中使用此CDS视图时,出现以下错误,阻止AMDP成功编译和激活。xxx是特定于客户端的,并且限制对客户端的访问。调用AMDP方法“AMDP_METHOD”也必须允许此限制。在下面的代码行中,ABAP开发人员可以看到我是如何在AMDP中调用CDS视图并使用APPLY_FILTER命令来应用WHERE子句的。lt_vbrk=apply_filter("Z_CDS_VIEW",:iv_where);搜索官网后发现存储过程需要在AMDP类方法声明中定义其他AMDP选项。AMDP方法定义需要修改如下:该方法的实现体不需要任何修改。如果指定了READ-ONLY选项,则在执行数据库过程或数据库函数时只允许读取数据库表。只有可以调用其他也标记为只读的AMDP方法的数据库过程或数据库函数。这是通过语法检查或在运行时检查的。在使用METHODmethBYDATABASEPROCEDURE|FUNCTION的AMDP方法的实现中,也可以使用附加选项指定此属性。它适用于在声明或方法的实现或两者中指定的情况。在AMDP函数或L过程的实现中,必须至少指定一次READ-ONLY选项。如果在带有RETURNING参数的方法声明中使用附加的AMDPOPTIONS,则必须在声明中指定选项READ-ONLY。
