Verbesserung
Top-Thema
Detail
Wichtig
Detail
Mit dem Interface CalendarMarker (siehe #23465) ist eine Implementierung eines Algorithmus möglich, der bestimmte Tage eines DatePickers hervorhebt/markiert. Die Implementierung des CalendarMarkers soll nun auch im Model bestimmt werden können, indem eine Factory, die die entsprechende Implementierung produziert, an das Property Feld annotiert wird.
Umsetzung
Die Factory, die zur Annotation des CalendarMarkers benötigt wird, wurde als MarkerFactory Interface implementiert. Es enthält die Funktion getCalendarMarker(TLTypePart attribute, TLObject object, ComplexField field), die den CalendarMarker konfiguriert und zurück gibt. \\ Die Annotation für eine MarkerFactory ist im Interface com.top_logic.model.annotate.ui.MarkerFactoryAnnotation definiert. In com.top_logic.demo.webapp.WEB-INF.model.DemoTypes.model.xml ist ein Beispiel einer Annotation mit einer com.top_logic.demo.model.annotations.DemoMarkerFactory an DemoTypes.C.All.dependentDate einsehbar. \\ Um eine MarkerFactory im Model annotieren und dabei Parameter übergeben zu können, existiert nun die Implementierung der MarkerFactory com.top_logic.model.search.providers.MarkerFactoryByExpression. Wird diese an ein Datumsfeld annotiert, kann der User Start und Endzeitpunkt eines zu markierenden Zeitraumes durch eine TL-Script Funktion festlegen. Außerdem kann er die CSS-Klassen für Kalenderfelder innerhalb bzw. außerhalb des Zeitraums festlegen, definieren, wie überlappende Zeiträume bewertet werden und ob Felder außerhalb des Zeitraums nicht auswählbar gemacht werden sollen. Es existiert bereits eine default Implementierung com.top_logic.layout.form.control.DefaultCalendarMarker des Interfaces CalendarMarker, die mit diesen Werten berechnet, wie Felder in einem DatePicker markiert werden sollen.
Test
Im Demo ist bei Objekten vom Typ C` das Attribut `dependentDate damit annotiert: Die Grenzen der Markierung sind die Werte date und date2 des Oberknotens. Es muss eine rote, bzw. grüne Markierung sichtbar sein.