点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,我在Fiori App中拥有一个母版和一个详细视图。 在主视图中,有用于主列表(EKKO)的服务器过滤器。 现在,我需要一个用于" Matnr"的附加过滤器(详细视图EKPO)。 我想根据关联表(EKKO到EKPO)中提供的字段在主视图中过滤列表。
我在OData Service中尝试了几种不同的实现,但没有成功。 我是OData和ABAP的新手。
我认为在控制器中,过滤器应如下所示:
如果(sQueryMatnr){ aFilters.push(new Filter({ 路径:" HeadToItemNav/Matnr", 运算符:"包含", 值1:sQueryMatnr })); }
我的用于主视图的OData服务显示列表:
METHOD POHEADERSET_GET_ENTITYSET。 数据: "需要逻辑系统。 LD_OWN_LOGICAL_SYSTEM类型TBDLS-LOGSYS, EKKO的GT_CONTRACT类型表, GS_CONTRACT TYPE EKKO, "显示来自EKKO和Filter Ebeln的数据 LR_EBELN类型的EBELN, LS_EBELN之类的LR_EBELN, "过滤日期有效自/日期 LR_KDATB KDATB的类型范围, LR_KDATB之类的LS_KDATB, "过滤日期有效期至/Kdate LR_KDATE KDATE的TYPE RANGE, LS_KDATE,例如LR_KDATE, "过滤器采购组/Ekgrp LR_EKGRP EKGRP的类型范围, LR_EKGRP之类的LS_EKGRP, "筛选器采购组织/Ekgrp LR_EKORG EKORG的类型范围, LS_EKORG像LR_EKORG的线一样, "过滤器采购供应商/Lifnr LIFNR的LR_LIFNR类型范围, LS_LIFNR像LR_LIFNR的线, "过滤器采购逻辑系统 LR_LOGSY LOGSYSTEM的类型范围, LS_LOGSY,例如LR_LOGSY, "过滤器EKPO Matnr LR_MATNR MATNR的类型范围, LR_MATNR之类的LS_MATNR, "筛选器已过期 "的LR_ISEXPIRED类型范围, " LR_ISEXPIRED之类的LS_ISEXPIRED, "订购desc/asc LT_ORDERBY类型/IWBEP/T_MGW_TECH_ORDER, LS_ORDERBY类型/IWBEP/S_MGW_TECH_ORDER。 "更新表EKKO中的逻辑系统。 "填写表格 从EKKO中选择*进入表GT_CONTRACT。 通话功能'OWN_LOGICAL_SYSTEM_GET' 输入 OWN_LOGICAL_SYSTEM = LD_OWN_LOGICAL_SYSTEM 例外情况 OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1。 如果SY-SUBRC EQ 0。 UPDATE EKKO SET LOGSY = LD_OWN_LOGICAL_SYSTEM WHERE BSTYP ='K'或BSTYP ='C'。 ELSEIF SY-SUBRC EQ 1."异常 写:"在这里添加例外代码"。 万一。 *筛选Ebeln: "显示ekko数据的逻辑。 使用键属性='Ebeln'将表IT_FILTER_SELECT_OPTIONS读入DATA(LS_FILTER)。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS循环到数据中(LS_OPTIONS)。 LS_EBELN-SIGN = LS_OPTIONS-SIGN。 LS_EBELN-OPTION = LS_OPTIONS-OPTION。 LS_EBELN-LOW = LS_OPTIONS-LOW。 LS_EBELN-HIGH = LS_OPTIONS-HIGH。 将LS_EBELN附加到LR_EBELN。 结局。 万一。 *过滤器Kdatb: "显示ekko数据的逻辑。 用键属性='Kdatb'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_KDATB-SIGN = LS_OPTIONS-SIGN。 LS_KDATB-OPTION = LS_OPTIONS-OPTION。 LS_KDATB-LOW = LS_OPTIONS-LOW。 LS_KDATB-HIGH = LS_OPTIONS-HIGH。 将LS_KDATB附加到LR_KDATB。 结局。 万一。 *过滤器Kdatb: "显示ekko数据的逻辑。 用键属性='Kdate'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_KDATE-SIGN = LS_OPTIONS-SIGN。 LS_KDATE-OPTION = LS_OPTIONS-OPTION。 LS_KDATE-LOW = LS_OPTIONS-LOW。 LS_KDATE-HIGH = LS_OPTIONS-HIGH。 APPEND LS_KDATE至LR_KDATE。 结局。 万一。 *过滤器Ekgrp: "显示ekko数据的逻辑。 使用键属性='Ekgrp'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_EKGRP-SIGN = LS_OPTIONS-SIGN。 LS_EKGRP-OPTION = LS_OPTIONS-OPTION。 LS_EKGRP-LOW = LS_OPTIONS-LOW。 LS_EKGRP-HIGH = LS_OPTIONS-HIGH。 将LS_EKGRP附加到LR_EKGRP。 结局。 万一。 *过滤器Ekorg: "显示ekko数据的逻辑。 使用键属性='Ekorg'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_EKORG-SIGN = LS_OPTIONS-SIGN。 LS_EKORG-OPTION = LS_OPTIONS-OPTION。 LS_EKORG-LOW = LS_OPTIONS-LOW。 LS_EKORG-HIGH = LS_OPTIONS-HIGH。 将LS_EKORG附加到LR_EKORG。 结局。 万一。 *过滤器Lifnr: "显示ekko数据的逻辑。 使用键属性='Lifnr'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_LIFNR-SIGN = LS_OPTIONS-SIGN。 LS_LIFNR-OPTION = LS_OPTIONS-OPTION。 LS_LIFNR-LOW = LS_OPTIONS-LOW。 LS_LIFNR-HIGH = LS_OPTIONS-HIGH。 将LS_LIFNR附加到LR_LIFNR。 结局。 万一。 *过滤器Logsy: "显示ekko数据的逻辑。 用键属性='Logsy'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_LOGSY-SIGN = LS_OPTIONS-SIGN。 LS_LOGSY-OPTION = LS_OPTIONS-OPTION。 LS_LOGSY-LOW = LS_OPTIONS-LOW。 LS_LOGSY-HIGH = LS_OPTIONS-HIGH。 将LS_LOGSY附加到LR_LOGSY。 结局。 万一。 *过滤器EKPO Matnr: "显示ekko数据的逻辑。 使用键属性='Matnr'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 LS_LOGSY-SIGN = LS_OPTIONS-SIGN。 LS_MATNR-OPTION = LS_OPTIONS-OPTION。 LS_MATNR-LOW = LS_OPTIONS-LOW。 LS_MATNR-HIGH = LS_OPTIONS-HIGH。 将LS_MATNR附加到LR_MATNR。 结局。 万一。 *过滤器已过期: "用于显示来自CCTRMAINTAIN的数据的逻辑。 *使用键属性='已过期'将表IT_FILTER_SELECT_OPTIONS读入LS_FILTER。 * *如果SY-SUBRC EQ 0。 * *将LS_FILTER-SELECT_OPTIONS放入LS_OPTIONS。 * LS_ISEXPIRED-SIGN = LS_OPTIONS-SIGN。 * LS_ISEXPIRED-OPTION = LS_OPTIONS-OPTION。 * LS_ISEXPIRED-LOW = LS_OPTIONS-LOW。 * LS_ISEXPIRED-HIGH = LS_OPTIONS-HIGH。 * *将LS_ISEXPIRED附加到LR_ISEXPIRED。 * ENDLOOP。 * * 万一。 选择*从EKKO〜Ebeln上的EKKO JOIN EKPO = EKPO〜Ebeln进入表ET_ENTITYSET的对应字段中,其中EKKO〜LOEKZ =''和EKKO〜EBELN在LR_EBELN和EKKO〜KDATB在LR_KDATB和EKKO〜KDATE和EKKO〜KDATE LR_EKGRP和EKKO〜EKORG IN LR_EKORG和EKKO〜LIFNR IN LR_LIFNR和EKKO〜LOGSY输入 LR_LOGSY中的LR_LOGSY和EKPO〜MATNR和 EKKO〜BSTYP ='K'或 EKKO〜BSTYP ='C'。 *按升序和降序排序?$ orderby = Ebeln asc LT_ORDERBY = IO_TECH_REQUEST_CONTEXT-> GET_ORDERBY()。 将LT_ORDERBY表读入LS_ORDERBY索引表1。 如果SY-SUBRC EQ 0。 如果LS_ORDERBY-ORDER EQ'desc'。 案例LS_ORDERBY-PROPERTY。 当" EBELN"。 依ESTELN降序排列,排序为ET_ENTITYSET。 当" KDATB"时。 依ESTELN降序排列,排序为ET_ENTITYSET。 当" KDATE"。 依ESTELN降序排列,排序为ET_ENTITYSET。 结束。 ELSEIF LS_ORDERBY-ORDER EQ'asc'。 案例LS_ORDERBY-PROPERTY。 当" EBELN"。 以埃伯恩升序排列,排序为ET_ENTITYSET。 当" KDATB"时。 以埃伯恩升序排列,排序为ET_ENTITYSET。 当" KDATE"。 以埃伯恩升序排列,排序为ET_ENTITYSET。 结束。 万一。 万一。 终结法。
与关联关联的第二张表:
方法POITEMSET_GET_ENTITYSET。 数据:LS_KEY_TAB TYPE/IWBEP/S_MGW_NAME_VALUE_PAIR, LV_EBELN TYPE EBELN。 *获取关键属性值 将具有键名='Ebeln'的表IT_KEY_TAB读入LS_KEY_TAB。 如果SY-SUBRC = 0。 LV_EBELN = LS_KEY_TAB-VALUE。 万一。 *这是用于过滤器选项 使用键属性='Ebeln'将表IT_FILTER_SELECT_OPTIONS读入DATA(LS_FILTER)。 如果SY-SUBRC EQ 0。 将LS_FILTER-SELECT_OPTIONS表读入DATA(LS_OPTION)索引1。 如果SY-SUBRC EQ 0。 LV_EBELN = LS_OPTION-LOW。 万一。 万一。 如果LV_EBELN不是INITIAL。 从EKPO中选择*到表ET_ENTITYSET的对应字段中 WHERE EBELN = LV_EBELN。 其他。 从EKPO中选择*到表ET_ENTITYSET的相应字段中。 万一。 ENDMETHOD。
方法POITEMSET_GET_ENTITY。 数据:LS_KEY_TAB TYPE/IWBEP/S_MGW_NAME_VALUE_PAIR, LV_EBELN TYPE EBELN, LV_EBELP TYPE EBELP。 *获取关键属性值 使用键名='Ebeln'将表IT_KEY_TAB读入LS_KEY_TAB。 如果SY-SUBRC = 0。 LV_EBELN = LS_KEY_TAB-VALUE。 万一。 *获取关键属性值 使用键名='Ebelp'将表IT_KEY_TAB读入LS_KEY_TAB。 如果SY-SUBRC = 0。 LV_EBELP = LS_KEY_TAB-VALUE。 万一。 *选择一行 从EKPO中选择单个*到ER_ENTITY的相应字段中 哪里EBELN = LV_EBELN AND EBELP = LV_EBELP。 ENDMETHOD。
就像这样,我有一个Duplikate,但来自EKPO的Matnr过滤无法正常工作。 我该如何实现?
显示带有EKKO条目的列表,并由EKPO的Matnr过滤此列表。
嗨,
当前在OData V2版本中,不支持具有1 ..许多基数的扩展过滤器。 所以,
POHeaderSet?$ expand = HeadToItemNav&$ filter = HeadToItemNav/Matnr eq'TG11'将不起作用,因为HeadToItemNav的基数为1..n。
OData V4版本支持此功能。 示例:
POHeaderSet?$ expand = HeadToItemNav($ filter = Matnr eq'TG11')
此致
Samson
谢谢,这是非常有用的信息。 我们正在使用OData V2
我实际上正在尝试执行以下操作:
POHeaderSet?$ expand = HeadToItemNav&$ filter = HeadToItemNav/Matnr eq'TG11'
或这个
POHeaderSet?$ expand = HeadToItemNav&$ filter = HeadToItemNav/all(Matnr eq'TG11')
都无法正常工作。
一周热门 更多>