sapui5中的日期过滤器

时间:2014-07-29 05:11:29

标签: sapui5

我使用了两个日期控件来过滤行转发器,

                oF_cell5 = new sap.ui.commons.layout.MatrixLayoutCell({id:"F05",colSpan : 2});
                var oCreateFrom = new sap.ui.commons.DatePicker("EV_AE_DATE1",
                        {width:"150px",placeholder:"Created From",

                            change:function(oEvent){
                                 oController.onChangeFilterValue(oEvent);}

                        })

                oF_cell51 = new sap.ui.commons.layout.MatrixLayoutCell({id:"F051",colSpan : 2});
                var oCreateTill = new sap.ui.commons.DatePicker("EV_AE_DATE2",
                        {width:"150px",placeholder:"Created Till",

                        change:function(oEvent){
                            oController.onChangeFilterValue(oEvent);}
                        });

现在我有一个rowrepeater,其中一列是CreatedOn日期,如.. ,,

                  new sap.m.HBox({
                   items:[new sap.ui.commons.TextView({text:"Created on:"}),
                          new sap.ui.commons.TextView("TV11")
                            .bindProperty("text",
                                    {
                                path: "CM_EventList>CREATEDON",
                                type: new sap.ui.model.type.Date({pattern:"MMM dd, yyyy",
                                    source : {pattern : "dd.MM.yyyy"}})
                       })]
                   }),

在控制器中我把这段代码写成...... ,,

                     onInit: function() {

    var model = new sap.ui.model.json.JSONModel("eventlist.json");
    model.setData();
    sap.ui.getCore().setModel(model,"CM_EventList");

                     },


                   onChangeCmFilterValue : function(oEvent){


     var CM_FDATEVAL = sap.ui.getCore().byId("EV_AE_DATE1").getValue();
     var CM_TDATEVAL = sap.ui.getCore().byId("EV_AE_DATE2").getValue();

     var CM_Date = new sap.ui.model.Filter('CM_EventList>CREATEDON',
             sap.ui.model.FilterOperator.BT,CM_FDATEVAL,CM_TDATEVAL);


     var oCM_VBOX1 = sap.ui.getCore().byId("EV_CM_VBOX");
     var oCM_RR1 = sap.ui.getCore().byId("EV_AE_ROWREPEATER");

     oCM_RR1.bindRows('CM_EventList>/eventlist',oCM_VBOX1,null,[CM_Date]);

     },

事件列表是我的单独json文件,其日期值为

                             {
                 "eventlist": [
                       {

                 "CREATEDON": "10.07.2014",
                        },
                       {

                 "CREATEDON": "10.08.2014",
                        },
                        .......
                         and so on..........

现在,如果从我的日期控件中选择一个日期范围,那么行转发器应该显示在我的json中日期范围之间的记录。

但过滤器无效。 请帮帮我。

由于 Sathish所在

2 个答案:

答案 0 :(得分:0)

我认为您应该检查以下内容的值。格式应不同于您的json值“CREATEDON”:“10.08.2014”。

 var CM_FDATEVAL = sap.ui.getCore().byId("EV_AE_DATE1").getValue();
 var CM_TDATEVAL = sap.ui.getCore().byId("EV_AE_DATE2").getValue();

请尝试使用以下命令创建DatePicker:

 type: new sap.ui.model.type.Date({pattern: ""yyyy-MM-dd""})

编辑:使用日期作为过滤器

var CM_FDATEVAL_DATE = new Date(sap.ui.getCore().byId("EV_AE_DATE1").getValue());
 var CM_TDATEVAL_DATE = new Date(sap.ui.getCore().byId("EV_AE_DATE2").getValue());

此致 阿伦

答案 1 :(得分:0)

首先,如果尚未使用DatePicker Control作为视图中的日期字段。

您可以使用方法GetDateValue()将日期选择器的值作为Date对象获得。然后,您可以使用这些日期对象为数据模型的datetime字段创建过滤器。

var dateFrom = this.getView().byId("filterDateFrom").getDateValue();
var dateTo = this.getView().byId("filterDateTo").getDateValue();

if (dateFrom != null && dateTo != null) {
    filter = new sap.ui.model.Filter(
        "CM_EventList>CREATEDON", 
        sap.ui.model.FilterOperator.BT, 
        dateFrom,
        dateTo
    );
}

顺便说一句:请注意,两个日期对象实际上都代表一天中开始的时刻(0:00:00),而数据库中的时间戳通常是一天中的某个时间点。因此,当您要在两个日期之间(包括两个日期)进行搜索时,您需要在dateTo上添加一天:

dateTo.setDate(dateTo.getDate() + 1);

您可能需要或不必解决的另一个问题是时区……当然还有all the other falsehoods programmers believe about time