FIORI ELement list report 细节开发,设置过滤器,搜索帮助object page跳转等

目录

1、默认过滤器

2、初始化显示列

3、搜索帮助

3.1 F4搜索帮助

3.2 下拉列表

        3.3日期的搜索帮助

4、自定义按钮

5、Object page跳转

5.1  菜单导航 UI.FieldGroup,UI.ReferenceFacet

5.2  行项目UI.LineItem

5.2.1 新建EntitySet

5.2.2 添加Annotations

5.2.3 在manifest配置pages


1、默认过滤器

    在没有初始化过滤的时候每次进来都需要手动去调整过滤器,初始化后,每次都会把默认的过滤器显示出来,使用Annotation的UI.SelectionFields 属性    

<Annotation Term="UI.SelectionFields">
    <Collection>
	  <PropertyPath>Vbeln</PropertyPath>
	  <PropertyPath>ernam</PropertyPath>
	  <PropertyPath>Erdat</PropertyPath>
	</Collection>
</Annotation>

是否支持过滤,需要在Entity上去指定

2、初始化显示列

        列的初始化也是在annotation里面去设置,可以写代码,也可以用annotation Modeler,如果不去初始化列,进去直接执行的时候会报一个,没有显示列的错误。

 还是直接复制代码比较快一点,效果是一样的

	<Annotation Term="UI.LineItem">
		<Collection>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Vbeln"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Erdat"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Ernam"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Netwr"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Waerk"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Vtweg"/>
			</Record>
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Vkorg"/>
			</Record>
		</Collection>
	</Annotation>

3、搜索帮助

3.1 F4搜索帮助

        搜索帮助需要分几步去做,首先需要导入一个F4搜索帮助的entity(tcode: segw),右击Data Model导入search help

   

导入搜索帮助后把搜索帮助的entityset 和对应字段绑定

<Annotations Target="ZSALESORDERSLISTS_SRV.SaleslLists/Vbeln"> <!--绑定到对应搜索帮助的字段-->
	<Annotation Term="com.sap.vocabularies.Common.v1.ValueList">
		<Record>
			<PropertyValue Property="Label" String="Sales Order Type"/>
              <!--绑定导入的搜索帮助-->
			<PropertyValue Property="CollectionPath" String="ZshvbelnSet"/> 
			<PropertyValue Property="SearchSupported" Bool="true"/>
			<PropertyValue Property="Parameters">
				<Collection> 
                     <!--相当于指定主键,搜索帮助的返回值-->
					<Record Type="com.sap.vocabularies.Common.v1.ValueListParameterOut">
						<PropertyValue Property="LocalDataProperty" PropertyPath="Vbeln"/>
						<PropertyValue Property="ValueListProperty" String="Vbeln"/>
					</Record>
                     <!--搜索帮助其它列,描述什么的在这里设置-->
					<!--<Record Type="com.sap.vocabularies.Common.v1.ValueListParameterDisplayOnly">-->
					<!--	<PropertyValue Property="ValueListProperty" String="Netwr"/>-->
					<!--</Record>-->
				</Collection>
			</PropertyValue>
		</Record>
	</Annotation>
</Annotations>

 实现效果如下:

3.2 下拉列表

      如果需要把搜索帮助改成下拉框的形式,需要在Odata 的类ZCL_ZSALESORDERSLISTS_MPC_EXT重定义DEFINE方法

    "搜索帮助,下拉框显示
    "Method-local declarations:
    DATA lo_entity_type   TYPE REF TO /iwbep/if_mgw_odata_entity_typ.
    DATA lo_property      TYPE REF TO /iwbep/if_mgw_odata_property.
    DATA lo_annotation    TYPE REF TO /iwbep/if_mgw_odata_annotation.
    DATA lo_odata_model   TYPE REF TO /iwbep/if_mgw_odata_model.
    DATA lv_entitytype    TYPE /iwbep/if_mgw_med_odata_types=>ty_e_med_entity_name.

    "Call parent:
    super->define( ).

    "Set the appropriate annotations for each property of the Contract entity:
    lo_entity_type = model->get_entity_type( 'SaleslLists' ).

    IF lo_entity_type IS NOT INITIAL.

      "Set ContractType as fixed-value list:
      lo_property = lo_entity_type->get_property( iv_property_name = 'Vbeln' ).
      IF lo_property IS NOT INITIAL.

        lo_annotation = lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( /iwbep/if_mgw_med_odata_types=>gc_sap_namespace ).
        lo_annotation->add( iv_key = 'value-list' iv_value = 'fixed-values' ).

      ENDIF.
    ENDIF.

实现效果如下:

 同样,下拉框是可以多选的,如果想要把下拉框改成单选,同样的位置,添加如下代码

CALL METHOD CL_FIS_FILTER_ANNOTATION=>SINGLE_VALUE"获取单一值
  EXPORTING
    IO_MODEL       = model
    IV_ENTITY_TYPE = 'SaleslLists'
    IV_PROPERTY    = 'Vbeln'
    .

3.3日期的搜索帮助

"调整日期
cl_fis_filter_annotation=>is_date(
   io_model       = model
   iv_entity_type = 'SaleslLists'
   iv_property    = 'Erdat' ).

CALL METHOD CL_FIS_FILTER_ANNOTATION=>SINGLE_VALUE
  EXPORTING
    IO_MODEL       = model
    IV_ENTITY_TYPE = 'SaleslLists'
    IV_PROPERTY    = 'Erdat'
    .
=

4、自定义按钮

     自定义的按钮在 manifest.json里的    "extends": 下扩展,这里是一个MVC的结构,事件逻辑需要写在,controller里面

		"extends": {
			"extensions": {
				"sap.ui.controllerExtensions": {
					"sap.suite.ui.generic.template.ListReport.view.ListReport": {
						"controllerName": "zsalesorderzsalesorder.controller.Message",
						"sap.ui.generic.app": {
							"SaleslListsSet": {
								"EntitySet": "SaleslListsSet",
								"Actions": {
									"onMessage": {
										"id": "messageID",
										"text": "Message",
										"press": "onMessage"
									}
								}
							}
						}
					}
				}
			}
		}

 controller这里要保证格式和路径正确

项目结构

sap.ui.controller( "zsalesorderzsalesorder.controller.Message", {
	onInit: function() {},
	onExit: function() {},
	onBeforeRendering: function() {},
	onAfterRendering: function() {},
	onMessage: function(oEvent){
		sap.m.MessageToast.show("OK!");
	}
});

如果message报错的话在component里面引用一下

jQuery.sap.require("sap.m.MessageToast");

5、Object page跳转

        object page是对某一个单个对象的详细信息的展示页面,List Report的每一条数据的详细信息,默认是object page显示的。

5.1  菜单导航 UI.FieldGroup,UI.ReferenceFacet

     它的实现方式大概是这样:所有Header部分的内容都放在UI.Facets里面,然后在通过引用Field Group引进数据源。UI.CollectionFacet 会把多个group放入一个Section里面,用UI.ReferenceFacet,会直接新增一个Section,一个Section对应 一个导航

使用UI.HeaderInfo,UI.HeaderFacets 把相关数据放在表头

<Annotation Term="UI.HeaderInfo">
	<Record Type="UI.HeaderInfoType">
		<PropertyValue Property="TypeName" String="object page title"/>
		<PropertyValue Property="TypeNamePlural" String="list title"/>
		<PropertyValue Property="Title">
			<Record Type="UI.DataField">
				<PropertyValue Property="Value" Path="Vbeln"/>
			</Record>
		</PropertyValue>
	</Record>
</Annotation>
<Annotation Term="UI.HeaderFacets">
	<Collection>
		<Record Type="UI.ReferenceFacet">
			<PropertyValue Property="Label" String="基本信息"/>
			<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#PlainText"/>
		</Record>
	</Collection>
</Annotation>

 添加主体内容,生成三个导航

	<Annotation Term="UI.FieldGroup" Qualifier="PlainText">
		<Record Type="UI.FieldGroupType">
			<PropertyValue Property="Data">
				<Collection>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Vbeln"/>
					</Record>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Erdat"/>
					</Record>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Ernam"/>
					</Record>
				</Collection>
			</PropertyValue>
		</Record>
	</Annotation>
	<Annotation Term="UI.FieldGroup" Qualifier="NetValue">
		<Record Type="UI.FieldGroupType">
			<PropertyValue Property="Data">
				<Collection>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Netwr"/>
					</Record>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Waerk"/>
					</Record>
				</Collection>
			</PropertyValue>
		</Record>
	</Annotation>
	<Annotation Term="UI.FieldGroup" Qualifier="SalesInfo">
		<Record Type="UI.FieldGroupType">
			<PropertyValue Property="Data">
				<Collection>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Vkorg"/>
					</Record>
					<Record Type="UI.DataField">
						<PropertyValue Property="Value" Path="Vtweg"/>
					</Record>
				</Collection>
			</PropertyValue>
		</Record>
	</Annotation>
	<Annotation Term="UI.Facets">
		<Collection>
			<Record Type="UI.CollectionFacet">
				<PropertyValue Property="Facets">
					<Collection>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#PlainText"/>
							<PropertyValue Property="Label" String="创建信息"/>
						</Record>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#NetValue"/>
							<PropertyValue Property="Label" String="净值"/>
						</Record>
					</Collection>
				</PropertyValue>
				<PropertyValue Property="Label" String="一般信息"/>
			</Record>
			<Record Type="UI.ReferenceFacet">
				<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#SalesInfo"/>
				<PropertyValue Property="Label" String="销售信息"/>
			</Record>
			<Record Type="UI.ReferenceFacet">
				<PropertyValue Property="Target" AnnotationPath= "SalesOrderItemsSet/@UI.LineItem"/>
				<PropertyValue Property="Label" String="销售订单行项目"/>
			</Record>
		</Collection>
	</Annotation>

 效果如下所示:

5.2  行项目UI.LineItem

      添加行项目,首先需要在ODATA新增一个entity来获取行项目,关联两个entityset创建association,然后在Fiori端进行一些配置

5.2.1 新建EntitySet

创建新的entity,存储行项目

 右击data model创建association

 重写 SALESORDERITEMSS_GET_ENTITYSET获取行项目数据

  method SALESORDERITEMSS_GET_ENTITYSET.
**TRY.
*CALL METHOD SUPER->SALESORDERITEMSS_GET_ENTITYSET
*  EXPORTING
*    IV_ENTITY_NAME           =
*    IV_ENTITY_SET_NAME       =
*    IV_SOURCE_NAME           =
*    IT_FILTER_SELECT_OPTIONS =
*    IS_PAGING                =
*    IT_KEY_TAB               =
*    IT_NAVIGATION_PATH       =
*    IT_ORDER                 =
*    IV_FILTER_STRING         =
*    IV_SEARCH_STRING         =
**    IO_TECH_REQUEST_CONTEXT  =
**  IMPORTING
**    ET_ENTITYSET             =
**    ES_RESPONSE_CONTEXT      =
*    .
** CATCH /IWBEP/CX_MGW_BUSI_EXCEPTION .
** CATCH /IWBEP/CX_MGW_TECH_EXCEPTION .
**ENDTRY.
   DATA: LS_KEY LIKE LINE OF IT_KEY_TAB ,
         LV_VALUE TYPE vbak-VBELN .

    CLEAR LS_KEY.
    READ TABLE IT_KEY_TAB INTO LS_KEY WITH KEY NAME = 'Vbeln'.

    LV_VALUE = |{ LS_KEY-VALUE ALPHA = IN WIDTH = 10 }|.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE ET_ENTITYSET
      FROM ZVBAP
     WHERE VBELN = LV_VALUE .
  endmethod.

5.2.2 添加Annotations

这里注意一下Target路径是否正确,还有导航的AnnotationPath

			<Annotations Target="ZSALESORDERSLISTS_SRV.SalesOrderItems">
				<Annotation Term="UI.LineItem">
					<Collection>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="Vbeln"/>
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="Posnr"/>
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="Netwr"/>
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="Waerk"/>
						</Record>
					</Collection>
				</Annotation>
			</Annotations>

5.2.3 在manifest配置pages

 在manifest.json的节点 sap.ui.generic.app 里面配置object page,确保“navigationProperty”和“entityset”是正确的

	"sap.ui.generic.app": {
		"_version": "1.3.0",
		"pages": {
			"ListReport|SaleslListsSet": {
				"entitySet": "SaleslListsSet",
				"component": {
					"name": "sap.suite.ui.generic.template.ListReport",
					"list": true,
					"settings": {
						"gridTable": false,
						"multiSelect": true,
						"smartVariantManagement" : true
					}
				},
				"pages": {
					"ObjectPage|SaleslListsSet": {
						"entitySet": "SaleslListsSet",
						"component": {
							"name": "sap.suite.ui.generic.template.ObjectPage",
							"settings": {
								"showRelatedApps": true,
								"gridTable": false,
								"editableHeaderContent": true,
								"simpleHeaderFacets": true
							}
						},
						"pages": {
							"navigationProperty": "SalesOrderItemsSet",
							"entitySet": "SalesOrderItemsSet",
							"component": {
								"name": "sap.suite.ui.generic.template.ObjectPage"
							}
						}
					}
				}
			}
		}
	},

效果图:

<think>好的,我现在要处理用户关于Fiori List Report页面中tableSettings配置未生效的问题。首先,我需要回忆一下SAP Fiori Elements的相关知识,特别是List Report和表格配置的部分。用户提到的配置项包括multiSelect、selectAll和selectionBehavior,这些应该是在manifest.json文件中定义的。 首先,用户可能是在manifest.json的"tableSettings"部分设置了这些属性,但发现没有效果。常见的原因可能包括配置的位置不正确,或者语法错误。比如,是否将配置放在正确的控件或视图下?另外,Fiori Elements有时需要特定的属性名称或结构,如果拼写错误或者层级不对,配置就不会生效。 接下来,我需要考虑这些配置的具体用法。multiSelect启用多选,selectAll启用全选复选框,selectionBehavior设置为"Row"表示行选择模式。如果用户启用了multiSelect,但没有看到多选功能,可能需要检查是否同时启用了selectAll,或者是否有后端服务支持多选。此外,ODATA服务中的某些注解也可能影响前端的行为,比如是否允许操作。 另外,Fiori Elements的某些功能可能需要特定的UI5版本。用户可能使用的UI5版本较旧,不支持这些配置项。这时候需要检查UI5的版本是否符合要求。 还有可能存在自定义扩展覆盖了默认行为的情况。如果用户在控制器里写了自定义逻辑,可能会影响到表格的初始化配置,导致manifest的设置被覆盖。 此外,浏览器的缓存问题也可能导致配置没有及时生效,尝试清除缓存或使用隐身模式访问应用也是一个排查步骤。 总结起来,可能的解决步骤包括:检查manifest.json的结构是否正确,确认配置项拼写和位置,验证ODATA服务的注解,检查UI5版本,排查自定义代码干扰,清除浏览器缓存,以及启用调试工具查看是否有错误信息。 可能需要用户提供manifest.json相关部分的代码,以便更准确地定位问题。同时,建议用户使用SAP Fiori Tools的诊断工具,或者查看浏览器的控制台输出,寻找可能的错误或警告信息。</think>在SAP Fiori Elements的List Report页面中,`tableSettings`配置未生效通常涉及以下几个关键排查点,请按照以下步骤逐步分析: --- ### **一、配置位置验证** ```json "manifest.json"中必须将配置放在正确层级: "目标视图名称": { "type": "Component", "id": "listReport", "name": "sap.fe.templates.ListReport", "options": { "settings": { "tableSettings": { "multiSelect": true, "selectAll": true, "selectionBehavior": "Row" } } } } ``` - ✅ 确认配置位于对应视图的`settings`节点下 - ❌ 错误位置示例:误放在`controlConfiguration`或`contextPath`同级 --- ### **二、ODATA服务注解兼容性** 1. **检查EntitySet注解**: ```xml <Annotations Target="YourEntitySet"> <Annotation Term="UI.SelectionFields" Path="..."/> <Annotation Term="UI.LineItem" Qualifier="Table">...</Annotation> </Annotations> ``` - 确保后端未通过`UI.Hidden`或`UI.FieldControl`隐藏选择列 2. **多选依赖项**: - 如果启用`multiSelect: true`,需确保ODATA服务支持批量操作(HTTP方法`POST`/`DELETE`等) --- ### **三、UI5版本兼容性** - `selectionBehavior: "Row"`要求最低UI5版本**1.86+** - 检查应用依赖的UI5版本: ```json "sap.ui5": { "dependencies": { "minUI5Version": "1.86.0" } } ``` --- ### **四、自定义扩展冲突排查** 如果存在`ListReport.extensions.xml`或自定义控制器: 1. **检查是否覆盖表格类型**: ```xml <!-- extensions.xml --> <macros:Table metaPath="@com.sap.vocabularies.UI.v1.LineItem" id="yourTable"/> ``` - 避免手动定义`<Table>`控件覆盖默认行为 2. **控制器中是否重置选择模式**: ```javascript onBeforeRebindTable: function(oEvent) { oEvent.getParameter("bindingParams").table.getBinding("items").enableMultiSelect(true); } ``` - 此类代码会覆盖manifest配置 --- ### **五、浏览器缓存与调试** 1. **强制清除缓存**: - 按`Ctrl + Shift + R`(Windows)或`Cmd + Shift + R`(Mac)刷新页面 2. **启用调试日志**: ```url https://your.app.url?sap-ui-debug=true&sap-ui-xx-debugModuleLoading=true ``` - 在浏览器控制台搜索`tableSettings`相关警告 --- ### **六、完整配置示例** ```json { "sap.app": { "id": "your.application", "dataSources": { "mainService": { "uri": "/odata/v2/YourService/", "type": "OData" } } }, "sap.ui5": { "routing": { "targets": { "YourListReport": { "type": "Component", "id": "listReport", "name": "sap.fe.templates.ListReport", "options": { "settings": { "entitySet": "YourEntitySet", "tableSettings": { "multiSelect": true, "selectAll": true, "selectionBehavior": "Row" } } } } } } } } ``` --- ### **七、常见错误场景** | 现象 | 原因 | 解决方案 | |------|------|----------| | 多选按钮不显示 | `selectAll: true`但未启用`multiSelect` | 同时设置`"multiSelect": true` | | 行选择触发单元格点击 | `selectionBehavior`未配置或值错误 | 检查拼写`"Row"`(区分大小写) | | 配置生效但UI无变化 | 浏览器缓存未更新 | 强制刷新或禁用缓存 | 通过以上步骤排查,90%的配置问题可定位原因。若仍无效,建议提供完整的`manifest.json`片段及ODATA元数据以便进一步分析。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值