我正在创建一个 SAPUI5 应用程序。此应用程序通过 OData 连接到后端 SAP 系统。在 SAPUI5 应用程序中,我使用了智能图表控件。开箱即用的智能图表允许用户为基础数据创建过滤器。这工作正常 - 除非您尝试对一个属性使用多个“不等于”。有没有办法做到这一点?
我发现“and_expression”(包括嵌套的 or_expressions)中的所有属性都必须具有唯一名称。
The reason why two parameters with the same property don't get parsed into the select options:
/IWCOR/CL_ODATA_EXPR_UTILS=>GET_FILTER_SELECT_OPTIONS
takes the expression you pass and parses it into a table of select options.The select option table returned is of type
/IWCOR/IF_ODATA_TYPES=>EDM_SELECT_OPTION_T
which is aHASHED TABLE .. WITH UNIQUE KEY
property.
发件人: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
通常我希望这从我从后端检索的结果集中排除类别为“笔记本”和“智能手机”的项目。
最佳答案
如果内部有bug /iwcor/cl_odata_expr_utils=>get_filter_select_options
这使得它无法处理多个 NE
相同组件的过滤器,您不能等待OSS。我建议将它包装在一个新的静态方法中,该方法将产生以下逻辑(如果您坚持使用 ABAP 实现,我会尝试在我有时间时至少部分实现它):
<COMPONENT> ne '<VALUE>'
的所有实例里面()
(使用正则表达式)。 <COMPONENT>
与 <COMPONENT>_<i>
所以会有( <COMPONENT>_1 ne '<VALUE_1>' and <COMPONENT>_2 ne '<VALUE_2>' and... <COMPONENT>_<n> ne '<VALUE_n>'
)。 /iwcor/cl_odata_expr_utils=>get_filter_select_options
使用修改后的查询。 rt_select_options
更改结果 COMPONENT_<i>
至 <COMPONENT>
再次。 关于odata - 如何在 OData 调用中排除多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647473/