关于 SAP AMDP 调用错误消息 restricts access to a client

近日一个朋友做 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。

你可能感兴趣的:(关于 SAP AMDP 调用错误消息 restricts access to a client)