繁体   English   中英

$expand 实体上的 SAP 网关 $filter

[英]SAP Gateway $filter on $expand Entity

我看过两篇关于 URL 约定的帖子,但我的问题是针对 OData Web 服务假设的 SAP 网关实现的。 当尝试将$filter$expand结合使用时,我们会收到错误消息:

Left hand expression of memberaccess operation has wrong cardinality

假设我有两个简单的实体:

Foo
 * Key
 - Value

Bar
 * Key
 * Id
 - Value

Foo 与Bar有 1:n 关联。 以下 URL 按预期工作。

/sap/opu/odata/sap/ZTEST_SRV/Foo?$expand=Bar

就像

/sap/opu/odata/sap/ZTEST_SRV/Foo?$filter=Key gt 10&$expand=Bar

尝试在实体Bar属性Id上使用$filter ,我们收到错误消息。

/sap/opu/odata/sap/ZTEST_SRV/Foo?$filter=Key gt 10 and Bar/Id gt 2&$expand=Bar

是否可以在 SAP 中以这种方式使用$filter 相关文章如下。

ODATA / SAP Gateway:关于同时使用 $filter 和 $expand 进行查询

筛选 OData 中的扩展实体

我也面临类似的问题,有这个sap说明: https : //apps.support.sap.com/sap/support/knowledge/en/3008698

笔记详细信息的副本:


开始注意


症状

添加过滤器后

$filter = To_Employees/Name eq 'Hugo' 到 Odata 服务,出现错误:

“memberaccess 运算符的左手表达式具有错误的基数(许多不允许)”


环境

SAP_GWFND 750


重现问题

Access the odata service: /sap/opu/odata/sap/API_XXX_SRV/Orgnization$select=Orgnization,to_Employees/Name&$expand=to_Employees&$filter=to_Employees/Name eq 'Hugo' 
There is an error: "Left hand expression of memberaccess operator has wrong cardinality (to many not allowed)"

原因

“memberaccess 运算符的左手表达式具有错误的基数(不允许很多)”表示“to_Employees”是一对多导航,并且不支持与过滤器表达式结合使用(例如

$filter = To_Employees/Name eq 'Hugo',

当“To_Employees”指向多个员工时)。

因此,整个请求无效。


分辨率

删除过滤器,不要用过滤器 eq 组合到很多结果


笔记结束

我不喜欢提出的解决方案:)

我实施的解决方法是创建一个基数为 1:1 的实体,仅用于过滤。 在您的示例中,我假设您需要从 Foo 到 Bar 的关系的基数为 1:n,以便能够为找到的每个 Foo 接收多个 Bar 记录。 如果 Foo 与 Bar 的关系为 1:1,您只需更改基数即可。 如果您需要基数 1:n,您可以创建一个像 BarFilter 这样的实体,它与具有 1:1 基数的 Foo 相关。 然后,您将能够毫无错误地执行此请求,并且可以接收过滤器以在您的后端系统上进行相应的查询。 请求将类似于:

新的简单实体:

条形过滤器

  • 钥匙
  • 身份证
  • 价值

Foo 与新实体 BarFilter 具有 1:1 关联。

请求:

/sap/opu/odata/sap/ZTEST_SRV/Foo?$filter=Key gt 10 and BarFilter/Id gt 2&$expand=Bar

我希望这很清楚并且对您有所帮助。 我对这个话题很感兴趣,所以如果你发现一些有趣的东西,请分享它。

祝你周末愉快。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM