日历禁用具有来自 XSODATA 绑定 SAPUI5 的数据的日期



我使用 XSODATA 服务设置了一个 HANA ddbb,并且能够正确使用聚合绑定来显示数据。

我有一张包含用户、部门和访问日期的表格。

我正在尝试将我的日历绑定到view.xml中,即sap.ui.unified.Calendar和禁用日期,从 HANA 访问日期中检索数据并禁用存储在数据库中的日历上的日期

例如;我有表 访问: 用户1 部门2 2018-08-13; 用户2 部门2 2018-09-21;

我想禁用这些特定日期和相应的星期(在我弄清楚如何做这一天之后,我将在稍后做一周的部分(

是否有可能获取该数据,使用 odata 禁用日期并使用控制器对其进行操作?

还是有其他更简单的方法?目前我只能对其进行硬编码

((controller.js))
disableDate:function(){
var oModel2 = new JSONModel("DisableDate");
oModel2.setData({
minDate: new Date(2018, 0, 1), 
maxDate: new Date(2050, 11, 31),
disabled: [{start: new Date(2018, 0, 4), end: new Date(2018, 0, 18)},
{start: new Date(2016, 0, 15)}
]
//change this last part to variables  start and end dates and add info            
});
this.getView().setModel(oModel2, "DisableDate") ;

((in xml.view)
<u:Calendar
id="calendar"
select="handleCalendarSelect"
minDate="{path: 'DisableDate>/minDate'}"
maxDate="{path: 'DisableDate>/maxDate'}"
disabledDates="{path: 'DisableDate>/disabled'}">
<u:disabledDates>
<u:DateRange
startDate="{DisableDate>start}"
endDate="{DisableDate>end}"/>
</u:disabledDates>
</u:Calendar>

提前感谢,我已经尝试弄清楚这个问题几天了

通过使用绑定连接数据(模型(和视图,您正朝着正确的方向前进。 但是,您可以手动创建(本地(JSON 视图。尝试将其连接到来自后端的模型(在您的情况下为 xsodata(

  1. 您需要提供数据。例如 Odata 实体Visit,每个条目如下所示:

    名称:用户 1(键入 Edm.String( 部门:dep2(类型Edm.String( 访问日期: 2018-08-13 (键入 Edm.DateTime(

  2. 假设 OData 模型VisitModel由此 odata 服务提供服务

  3. 像这样绑定视图:

<u:Calendar
...
disabledDates="{VisitModel>/VisitSet}">
<u:disabledDates>
<u:DateRange startDate="{VisitModel>DateOfVisit}" />
</u:disabledDates>
</u:Calendar>

(如果您的实体上有StartDateOfVisitEndDateOfVisit,则可能需要在 DateRange 对象上使用startDateendDate(

更新:要禁用整周,请使用

<u:Calendar
...
disabledDates="{VisitModel>/VisitSet}">
<u:disabledDates>
<u:DateRange 
startDate="{path: 'VisitModel>DateOfVisit', formatter: '.formatStartOfWeek'}" 
endDate="{path: 'VisitModel>DateOfVisit', formatter: '.formatEndOfWeek'}" 
/>
</u:disabledDates>
</u:Calendar>

并在您的控制器中

...
formatStartOfWeek: function(oDate) {
if (oDate && oDate.getTime) {
// compute Monday
return new Date(oDate.getTime() - (oDate.getDay()-1)*24*60*60*1000 );
} else {
return oDate;
}
},
formatEndOfWeek: function(oDate) {
// compute and return Sunday
},
...

最新更新