Необходимо в эвенте календаря хранить дополнительное поле, отображаться на календаре оно не должно, но должна быть возможность его извлечения. Не пойму какой класс необходимо экстендить?
Дополнительное поле должно храниться в базе?
Тогда расширяйте тот класс, который является источником данных для календаря и хранит данные в БД.
Класс который дает данные для календаря имеет гораздо больше полей чем необходимо календарю, вот к этим полям мне и нужно получить доступ при манипуляции с эвентами.
Тогда явно надо больше информации о том, при каких именно “манипуляциях с эвентами” нужно получить доступ к исходным данным.
И то том, как реализовано использование календаря: через CalendarEventProvider
или EntityCalendarEventProvider
?
При использовании последнего, с виду, во всех событиях календаря можно добраться до экземпляра исходной сущности через event.getEntity()
.
Похоже мне нужно воспользоваться EntityCalendarEventProvider, но как его установить для календаря? В документации очень скудно на этот счет написано. Если так делать:
EntityCalendarEventProvider entityCalendarEventProvider = new EntityCalendarEventProvider(???);
calendar.setEventProvider(entityCalendarEventProvider);
То EntityCalendarEventProvider хочет в качестве аргумента
CollectionDatasource а программное создание CollectionDatasource признано устаревшим.
В документации просто приведен фрагмент кода для legacy экрана.
Посмотрите sampler, там на новом API, с использованием dataContainer:
<calendar id="calendar"
captionProperty="caption"
dataContainer="calendarEventsDc"
descriptionProperty="description"
endDate="2016-10-31"
endDateProperty="endDate"
height="100%"
startDate="2016-10-01"
startDateProperty="startDate"
stylenameProperty="stylename"
width="100%"/>
Да, я делаю так же как в примере. Но в событиях календаря у меня нет event.getEntity().
calendar.addEventClickListener(event ->{
event.getEntity(); //Отдает экз. сущности, отображенной в календаре
});
Да, действительно… при клике на эвент event.getEntity() отдает экземпляр сущности, а вот при перетаскивании addEventMoveListener() нет.
Да, в событии Calendar.CalendarEventMoveEvent
под рукой почему-то нет доступа к экземпляру сущности источника данных календаря.
Но там можно через event.getCalendarEvent())
, а дальше через приведение.
Примерно так:
Entity entity = ((EntityCalendarEvent) event.getCalendarEvent()).getEntity();
Order movedOrder = (Order)entity;
Андрей, огромное Вам спасибо! Все получилось.