【发布时间】:2019-02-14 01:31:28
【问题描述】:
我正在创建一个 SAPUI5 应用程序。此应用程序通过 OData 连接到后端 SAP 系统。在 SAPUI5 应用程序中,我使用了智能图表控件。开箱即用的智能图表允许用户为基础数据创建过滤器。这很好用——除非您尝试对一个属性使用多个“不等于”。有没有办法做到这一点?
我发现“and_expression”中的所有属性(包括嵌套的 or_expressions)都必须具有唯一名称。
具有相同属性的两个参数没有被解析到选择选项的原因:
/IWCOR/CL_ODATA_EXPR_UTILS=>GET_FILTER_SELECT_OPTIONS获取您传递的表达式并将其解析为选择选项表。返回的选择选项表是
/IWCOR/IF_ODATA_TYPES=>EDM_SELECT_OPTION_T类型,它是HASHED TABLE .. WITH UNIQUE KEY属性。
发件人:https://archive.sap.com/discussions/thread/3170195
问题是您不能将NE 术语与OR 结合使用。因为NE之后的两个参数都不应该出现在结果集中。
所以最后it_filter_select_options 是空的,只有iv_filter_string 被填充。
是否有解决此问题的手动方法(评估iv_filter_string)来处理多个NE 术语?
这是一个示例请求:
XYZ/SmartChartSet?$filter=(Category%20ne%20%27Smartphone%27%20and%20Category%20ne%20%27Notebook%27)%20and%20Purchaser%20eq%20%27CompanyABC%27%20and%20BuyDate%20eq%20datetime%272018-10-12T02%3a00%3a00%27&$inlinecount=allpages
通常我希望这从我从后端检索的结果集中排除具有“笔记本”和“智能手机”类别的项目。
【问题讨论】:
-
你能分享一下构建过滤器的客户端代码吗?
-
我没有修改将请求分成过滤器(it_filter_select_options)。这是一个标准的 sap gw 功能(方法) - 不确定这是在哪里完成的。稍后您可以访问 DPC EXT 方法中的过滤器表。
-
好的。您说“智能图表让用户创建过滤器”。这是怎么做到的?
-
link - 使用智能图表时,您有一个开箱即用的设置按钮。如果你按下它,你可以做一些排序和过滤东西。可排序和可过滤的内容来自元数据。元数据是在事务 SEGW 中创建的服务之外创建的。
-
另外,您说“您不能将 'NE' 术语与 'OR' 结合使用”。查询为:
(Category ne 'Smartphone' and Category ne 'Notebook') and Purchaser eq 'CompanyABC' and BuyDate eq datetime'2018-10-12T02:00:00'。您提到的变量名称也令人困惑。/iwcor/cl_odata_expr_utils=>get_filter_select_options接收iv_expression并返回rt_select_options。我现在发布一个可能的答案。如果我没有得到你,请修复我。