近日一个朋友做 SAP AMDP 开发时,遇到如下错误消息:XXX is client-specific and restricts access to a client. The calling AMDP method XX must also allow this restriction.
本文将这个错误消息相关的背景知识记录如下。
发生问题的场景是在基于 S4/HANA 系统的 ABAP Test Cockpit ATC 和 CVA 检查的代码增强过程中,决定将 OpenSQL Select 语句移动到通过 HANA 数据库上的 AMDP 存储过程访问的 CDS 视图中。
创建 CDS 视图,在其中使用 WHERE 子句中的会话参数 $session.client 根据 MANDT 列上的会话客户端值过滤数据,如下面的 SELECT 代码所示:
select * from vbrk where vbrk.mandt = $session.client;
当我尝试在我的 AMDP 类方法(HANA 数据库上的存储过程)中使用此 CDS 视图时,我遇到了以下错误,导致 AMDP 无法成功编译和激活。
xxx is client-specific and restricts access to a client. The calling AMDP method "AMDP_METHOD" must also allow this restriction.
在以下代码行中,ABAP 开发人员可以看到我如何在 AMDP 中调用 CDS 视图并使用 APPLY_FILTER 命令应用 WHERE 子句。
lt_vbrk = apply_filter ("Z_CDS_VIEW", :iv_where);
经过官网的搜索,我发现存储过程需要在 AMDP 类方法声明中定义其他 AMDP 选项。
需要修改 AMDP 方法定义如下:
class-methods AMDP_METHOD
AMDP OPTIONS READ-ONLY
CDS SESSION CLIENT current
importing
value(iv_where) type string
exporting
value(et_invoicelist_xl) type ZSOM_INF_INV_VBRK_TT
raising cx_amdp_error .
方法的实现体无需进行任何修改。
如果指定了选项 READ-ONLY,则在数据库过程或数据库函数的实现中只允许读取数据库表。 只能调用也标记为只读的其他 AMDP 方法的数据库过程或数据库函数。 这通过语法检查或在运行时进行检查。
此属性也可以在使用 METHOD meth BY DATABASE PROCEDURE|FUNCTION 的 AMDP 方法的实现中使用附加选项来指定。 它适用于在声明或方法的实现中指定时,或两者兼而有之。
在 AMDP 函数或 L 过程的实现中,选项 READ-ONLY 必须至少指定一次。 如果在带有 RETURNING 参数的方法声明中使用了附加的 AMDP OPTIONS,则必须已在声明中指定选项 READ-ONLY。
网友评论