近日一个敌人做 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。