在分析列表页面(Fiori元素)中设置紧凑型过滤器默认值

2020-09-04 05:02发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


是否可以在"分析列表"页面的紧凑型过滤器上将过滤器默认值设置为"日期范围"?

使用 https://blogs.sap.com/2018/08/23/fiori-ovp-defaulting-values-into-global-filters /但我无法获得 适用于ALP的相同方法。 奎师那(Krishna Kishor Kammaje)已对 https://blogs.sap.com/2018/08/20/navigation-from-a -fiori-ovp /但我无法使其正常工作。

这是OVP正常工作。

(10.5 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


是否可以在"分析列表"页面的紧凑型过滤器上将过滤器默认值设置为"日期范围"?

使用 https://blogs.sap.com/2018/08/23/fiori-ovp-defaulting-values-into-global-filters /但我无法获得 适用于ALP的相同方法。 奎师那(Krishna Kishor Kammaje)已对 https://blogs.sap.com/2018/08/20/navigation-from-a -fiori-ovp /但我无法使其正常工作。

这是OVP正常工作。

(10.5 kB)
付费偷看设置
发送
9条回答
Climb_Ma
1楼 · 2020-09-04 05:43.采纳回答

已经检查了UI5代码,以下启用了此功能。

Manifest.json:

(其中文件名customMain.contoller.js放置在路径webapp> ext> controller的文件夹中)

"扩展":{
 "扩展名":{
 " sap.ui.controllerExtensions":{
 " sap.suite.ui.generic.template.AnalyticalListPage.view.AnalyticalListPage":{
 " controllerName":" [namespace.here] .ext.controller.customMain"
 }
 }
 }
 },
 

customMain.controller.js

 sap.ui.define([],function(){
 "使用严格";
 return sap.ui.controller(" [[YourProjectNamespace.here] .ext.controller.customMain",{

 onBeforeRendering:function(){

//获取对SmartFilterBar的引用
 var oSmartFilter = this.getView()。byId(" template :: SmartFilterBar");

//创建要默认的JSON数据
 var dateFormat = sap.ui.core.format.DateFormat.getDateInstance({
 模式:" yyyy-MM-dd"
 });
 var oToday = dateFormat.format(new Date());
 var o30DaysEarlier1 = new Date();
 o30DaysEarlier1.setDate(o30DaysEarlier1.getDate()-30);
 var o30DaysEarlier = dateFormat.format(new Date(o30DaysEarlier1));
 var oDefaultFilter = {
 工作日期:{
 最低:o30天之前,
 高:今天
 }
 };

//默认为全局过滤器值
 oSmartFilter.setFilterData(oDefaultFilter);
 }
 });
 });
 

在OData服务类定义中,如果要将过滤器字段设置为日期,还需要确保重新定义DEFINE方法。

方法定义。

 数据:lo_entity_type类型参考/iwbep/if_mgw_odata_entity_typ,

           lo_property类型参考/iwbep/cl_mgw_odata_property,
           lo_annotation类型参考/iwbep/if_mgw_odata_annotation。

     super-> define()。

     lo_entity_type =模型-> get_entity_type(iv_entity_name ='[ODataQueryTypeHere] Type')。

     lo_property?= lo_entity_type-> get_property(iv_property_name ='[FieldYouWantToFilterOn]')。

     呼叫方法lo_property->/iwbep/if_mgw_odata_annotatabl〜create_annotation

       出口
         iv_annotation_namespace =/iwbep/if_mgw_med_odata_types => gc_sap_namespace

       接收
         ro_annotation = lo_annotation。

     lo_annotation-> add(iv_key ='display-format'iv_value ='Date')。

     lo_annotation-> add(iv_key ='filter-restriction'iv_value ='interval')。

     呼叫方法lo_property->/iwbep/if_mgw_odata_property〜set_type_edm_datetime。

     调用方法lo_property->/iwbep/if_mgw_odata_property〜set_internal_type
       出口
         iv_type = cl_abap_typedescr => typekind_date。

   终止方法。

在OData服务元数据中给出以下定义

 <属性名称=" [FieldYouWantToFilterOn]" Type =" Edm.DateTime" Precision =" 0" sap:aggregation-role =" dimension" sap:creatable =" false" sap:display-format =" Date" sap  :filter-restriction =" interval" sap:semantics =" yearmonthday" sap:text =" [FieldYouWantToFilterOn] _T" sap:updatable =" false" sap:label =" [LabelOfFieldYouWantToFilterOn]"/> 

最终结果为

大道至简
2楼-- · 2020-09-04 05:39

嗨马克,

我对ALP遵循相同的步骤,但是无法实现默认过滤器。

 oSmartFilter.setFilterData(oDefaultFilter);  
上面的

声明不会以任何方式更改过滤器值。

通过命令oSmartFilter.getFilterData()在控制台中测试; 但是在调用oSmartFilter.setFilterData(oDefaultFilter)之后不会返回oDefaultFilter的值。

我想念什么吗? 唯一的不同是,我的odata服务是基于xsodata XSC的服务,而不是ABAP CDS。

谢谢

Tanveer

Nir深蓝
3楼-- · 2020-09-04 05:48

我认为应该相似。 获取对ALP的全局过滤器的引用,然后对其调用setFilterData。 您有什么?

悠然的二货
4楼-- · 2020-09-04 05:32

在ext文件夹中,您是否有一个控制器文件夹(下面的示例)?

清单中的ZBI_SALSANA是您的命名空间吗? 之后的部分

" sap.app":{" id":

第4行。

大概是控制器文件中的DATE

 var oDefaultFilter = {日期:{低:o30DaysEarlier,高:oToday}}; 

是您的过滤器字段。 日期是保留字,我想知道它是否有冲突。 您可以尝试使用其他字段名称,还是将DATE重命名为其他名称?

SKY徐
5楼-- · 2020-09-04 05:53

您好,克里希纳。 感谢您的回复。

我的控制器文件是:

 sap.ui.define([],function(){
 "使用严格";
 return sap.ui.controller(" [[namespace.here] .controller.customMain",{

 onBeforeRendering:function(){
//获取全局过滤器的参考
 var oSmartFilter = this.getView()。byId(" SmartFilterBar");

//创建要默认的JSON数据
 var oToday = new Date();
 var o90DaysEarlier = new Date();
 o90DaysEarlier.setDate(o90DaysEarlier.getDate()-90);
 var oDefaultFilter = {
 工作日期:{
 最低:o90DaysEarlier,
 高:今天
 }
 };


//默认Goabl过滤器值
 oSmartFilter.setFilterData(oDefaultFilter);
 }
 });
 });

 

我的Manifest.json包含:

"扩展":{
 "扩展名":{
 " sap.ui.controllerExtensions":{
 " sap.suite.ui.generic.template.AnalyticalListPage.controller.AnalyticalListPage":{
 " controllerName":" [namespace.here] .controller.customMain"
 }
 }
 }
 }
 

我的项目结构如下所示:

我要填充的WorkDate字段在我的本地注释中被注释为选择字段。

编辑-当我更改

 sap.suite.ui.generic.template.AnalyticalListPage.controller.AnalyticalListPage 

 sap.suite.ui.generic.template.AnalyticalListPage.view.AnalyticalListPage 

在manifest.json中,调用了customMain.js文件,我可以在Chrome中使用debug看到它。 但是这行:

 var oGlobalFilter = this.getView()。byId(" SmartFilterBar"); 

只返回'undefined'。

粗暴的香蕉
6楼-- · 2020-09-04 05:52

在CDS中的任何一个

}
 其中EmployeeName <>" John" 

或在注释文件的选择变体中

 UI.SelectionVariant 
N-Moskvin
7楼-- · 2020-09-04 05:27

Tanveer Shaikh -可以 您发布清单和控制器文件,然后看一下是否有明显的东西。

一周热门 更多>