Fórumok

Query CalendarBookings

Hiran Chaudhuri, módosítva 9 év-val korábban

Query CalendarBookings

Regular Member Bejegyzések: 188 Csatlakozás dátuma: 2010.09.01. Legújabb bejegyzések
Hi there.

Using the nice calendar portlet I create CalendarBookings through API code. Now I need to detect whether other events are on the calendar at a given time already. This code retrieves the already existing events starting at the same time as my new event would:

		String servletContextName = "calendar-portlet";
		ClassLoader classLoader = (ClassLoader)com.liferay.portal.kernel.bean.PortletBeanLocatorUtil.locate(servletContextName, "portletClassLoader");

		com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery = com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil.forClass(com.liferay.calendar.model.CalendarBooking.class, classLoader);
		dynamicQuery.add(com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil.forName("calendarId").eq(calendarId));
		dynamicQuery.add(com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil.forName("startTime").eq(start.getTime()));
		List<com.liferay.calendar.model.calendarbooking> bookings = com.liferay.calendar.service.CalendarBookingLocalServiceUtil.dynamicQuery(dynamicQuery);
		for(com.liferay.calendar.model.CalendarBooking cb: bookings) {
			log.info("Found CalendarBooking "+cb);
		}
</com.liferay.calendar.model.calendarbooking>


The difficulty is that this code seems to display also CalendarBookings that were deleted via the Calendar Portlet (GUI).
So how can I strip off all the deleted events?
Hiran Chaudhuri, módosítva 9 év-val korábban

RE: Query CalendarBookings (Válasz)

Regular Member Bejegyzések: 188 Csatlakozás dátuma: 2010.09.01. Legújabb bejegyzések
I found that Liferay sets the CalendarBooking's status to 0 when an event is created, and sets it to 8 when an event is deleted.
That means events never get deleted from the table, and the query just needs to filter them out. With that I ended up on

		com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery = com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil.forClass(com.liferay.calendar.model.CalendarBooking.class, classLoader);
		dynamicQuery.add(com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil.forName("calendarId").eq(calendarId));
		dynamicQuery.add(com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil.forName("startTime").eq(start.getTime()));
		dynamicQuery.add(com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil.forName("status").ne(8));
		List<com.liferay.calendar.model.calendarbooking> bookings = com.liferay.calendar.service.CalendarBookingLocalServiceUtil.dynamicQuery(dynamicQuery);
</com.liferay.calendar.model.calendarbooking>