从ODATA服务前端将过滤器值作为参数传递给CDS视图

2020-08-13 23:15发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们有一个由ODATA服务引用的...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们有一个由ODATA服务引用的主CDS视图。 假设主CDS视图显示订单抬头信息。 主CDS与物料有关联(例如,订单可以有多种物料)。 所有这一切都很好并且有效。

要求是在物料编号上添加一个过滤器。 如果用户输入商品列表,则CDS仅应返回包含输入商品的订单。 由于主CDS不保存物料编号,因此将成为与物料CDS关联的过滤器。

我知道CDS可以具有输入参数,但是可以处理来自ODATA服务的过滤器值吗? 因此,用户可以输入过滤条件,例如{包含* 12345 *},{等于12345},{结束* 12345}或诸如{包含* 12345 *}或{等于11111}或{等于22222}等组合 等等

我看到的所有参数示例在CDS中都使用等于" ="运算符,而不使用" IN"运算符。 例如:

其中material =:in_material

我们可以使用:

其中材料IN:in_material

如果上述方法不可行,我们如何根据过滤器范围提交关联?

欢迎您提出想法和建议。

4条回答
spaceman01
2020-08-13 23:57

嗨安德烈,

感谢您的建议,我们正在使用SAP_GWFND 750 SP14。

当前 解决方案无法使用基于代码的实现。 网关将在前端输入的过滤器值直接传递到后端CDS。 筛选对于顶部CDS中可用的字段(例如订单号)工作正常,但不适用于仅在较低CDS中(通过关联)的字段,例如 材料编号。

我确实找到了一篇博客文章,其中解释了如何使用CDS虚拟元素对关联进行过滤。 当我实施该解决方案时,它似乎可行,但由于它不适用于分析性CDS,因此我并未对其进行进一步的研究。 在我们的CDS中,我们具有聚合注释,使其能够进行分析,因此不允许使用虚拟元素。

我的另一种解决方案是,如果用户输入的过滤元素是"以某种方式"在网关中 而不是放在顶部CDS(例如物料编号)中,然后捕获该过滤器并调用GET ENTITY确定给定物料的订单号列表,然后填充"订单号"过滤器。 然后"以某种方式"让原始进程继续调用CDS(如果可能的话)。 如果可以采用这种解决方案,那么我唯一担心的是,如果确定了10k +订单号,该问题会导致尝试通过具有10k +订单号的过滤器而引起问题吗? 网关会阻塞吗? 还是没有这样的限制,不必担心。

亲切的问候

Che

一周热门 更多>