我正在创建一个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
通常,我希望这从我从后端检索到的结果集中排除类别为“笔记本”和“智能手机”的项目。
答案 0 :(得分:1)
如果(click)="clickOperator(operators.allClear)"
中存在一个错误,使其无法处理同一组件的多个aggregate(warpbreaks$breaks,list(warpbreaks$wool,warpbreaks$tension),length)
Group.1 Group.2 x
1 A L 9
2 B L 9
3 A M 9
4 B M 9
5 A H 9
6 B H 9
过滤器,则您无法等待OSS。我建议将其包装在一个新的静态方法中,该方法将产生以下逻辑(如果您对ABAP的实现感到困惑,我会在有空的时候尝试至少部分地实现它):
/iwcor/cl_odata_expr_utils=>get_filter_select_options
内的NE
的所有实例。<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
的结果。答案 1 :(得分:1)
我找不到源,但是我记得不支持多个“ ne”。当您在SE16中执行多个负片时,会显示一些警告,这不是同一件事吗?
我找到了Business ByDesign的摘录:
不能使用OR运算符排除两个值(例如:$ filter = CACCDOCTYPE ne'1000'或CACCDOCTYPE ne'4000')。
我看到的解决方法是选择您想要的类别,而不是UI5应用程序中不需要的类别。
我还可以确认我使用了很长时间的代码段也存在相同的问题...
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_MGW_ABS_DATA->FILTERING
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_TECH_REQUEST_CONTEXT TYPE REF TO /IWBEP/IF_MGW_REQ_ENTITYSET
* | [<-->] CR_ENTITYSET TYPE REF TO DATA
* | [!CX!] /IWBEP/CX_MGW_BUSI_EXCEPTION
* | [!CX!] /IWBEP/CX_MGW_TECH_EXCEPTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD FILTERING.
FIELD-SYMBOLS <lt_entityset> TYPE STANDARD TABLE.
ASSIGN cr_entityset->* TO <lt_entityset>.
CHECK: cr_entityset IS BOUND,
<lt_entityset> IS ASSIGNED.
DATA(lo_filter) = io_tech_request_context->get_filter( ).
/iwbep/cl_mgw_data_util=>filtering(
exporting it_select_options = lo_filter->get_filter_select_options( )
changing ct_data = <lt_entityset> ).
ENDMETHOD.