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

2020-08-13 23:15发布

         点击此处--->   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

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

欢迎您提出想法和建议。

         点击此处--->   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条回答
何必丶何苦呢
1楼-- · 2020-08-14 00:00

嗨,

对于OData V2,我会看到创建函数导入的选项,例如

GetSalesOrderByMaterial?filter = * 1234 *

在OData V4中(但是至少需要SAP_GWFND 751 SP09),您将找到以下示例

/sap/opu/odata4/iwbep/tea/default/iwbep/tea_busi/0001/Departments?$ filter = DEPARTMENT_2_TEAMS/任何(d:d/预算 gt 4000和d/BudgetCurrency eq'JPY')&sap-statistics = true

但是,这需要" any"运算符的基于代码的实现,这非常棘手。

最好的问候 ,

安德烈

spaceman01
2楼-- · 2020-08-13 23:57

嗨安德烈,

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

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

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

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

亲切的问候

Che

N-Moskvin
3楼-- · 2020-08-13 23:43

"网关为什么要通过在 前端直接连接到后端CDS。"?

是否正在使用OData.publish:是?

如果要在SEGW中创建参考数据源项目,则可以添加函数import

最好的问候,

安德烈

ZJXianG
4楼-- · 2020-08-14 00:03

嗨安德烈,

我们最初使用的是OData.publish, 随着事情变得越来越复杂,我们改为在SEGW中创建了一个引用。 因此,当前网关会自动从CDS提取数据,我们不必担心分页或聚合为您完成的所有工作。

我不确定我是否理解您的建议。 您是要手动编码将要进行数据选择的函数导入吗? 如果是这样,我们是否不会放松所有自动功能,而必须自己编写代码? 像分页和聚合一样?

还是您建议使用函数导入的另一种方式?

谢谢

一周热门 更多>