Alle Jahre wieder kommen die entsprechenden Anfragen bei uns im helpdesk an (und leider habe ich es nichtgeschafft, diesen Blogeintrag vor der ersten Anfrage zu verfassen 😞
Über zeitgesteuerte Verknüpfungen, Gültigkeitszeiträume von Absätzen oder entsprechenden Gültigkeitszeiträumen von Datensätzen soll ein Adventskalender erzeugt werden, bei dem automatisch jeden Tag ein neues Türchen geöffnet wird.
Leider stellt man dabei häufig fest, dass am nächsten Morgen der Livestand zwar alle Änderungen des Vortages umfasst, aber noch das "Törchen" von gestern geöffnet ist, obwohl die Generierung extra so gelegt wurde, dass Sie erst am nächsten Tag durchgeführt wird {z.B. um 2 Uhr nachts}
Um zu erklären, warum das so ist, muss ich etwas weiter ausholen:
FirstSpirit erlaubt es, einen beliebigen historischen Stand eines Projektes zu generieren. Weiterhin werden Änderungen, die während einer Generierung durchgeführt werden, für laufende Generierungen nicht berücksichtigt.
Um dies zu gewährleisten, wird nicht der aktuelle Stand des Projektes veröffentlicht, sondern der Stand, der zu dem Zeitpunkt der letzten Änderung in dem Projektes gültig war.
In der Praxis unterscheidet sich der Stand der letzten Änderung normalerweise nicht vom Stand, der zum Zeitpunkt des Generierungsbeginns freigegeben war. Wenn Sie allerdings zeitgesteuerte Verknüpfungen, Gültigkeitszeiträume oder temporale Datenbanken [Standard für interne Datenbanken von FirstSpirit] benutzen, so kann es einen gravierenden Unterschied geben:
Bei diesen temporalen Datenbanken ist ein Datensatz für eine bestimmte Zeitspanne gültig [vom Zeitpunkt der Erzeugung/Freigabe bis zum Zeitpunkt der nächsten Änderung/Freigabe].
Dies kann zu dem von Ihnen beschriebenen Problem führen:
Beispiel: Die letzte Änderung in dem Projekt A war am 1.12.2010 [z.B. Änderung an einem Datensatz, einer Seite, Medium, Template...].
Bei einer Generierung des Projektes wird der Zeitpunkt der Generierung nun auf den Zeitpunkt der letzten Änderung im Projekt gesetzt, also z.B. den 1.12.2010, 16:54:32.1233 Uhr.
Da der Gültigkeitszeitraum des neuen "Törchens" erst um Mitternacht beginnt, wird der "alte" Gültigkeitszeitraum berücksichtigt und es bleibt weiterhin das "erste" Türchen geöffnet und nicht wie gewünscht das Zweite.
Lösung: Sorgen Sie dafür, dass die Generierung einen Stand veröffentlicht, der jetzt gültig ist. Dazu gehen Sie folgendermaßen vor:
- Öffnen Sie die Server- und Projektkonfiguration
- Öffnen Sie die Projekteigenschaften
- Wechseln Sie zur Auftragsverwaltung
- bearbeiten Sie alle Aufträge, die das Projekt veröffentlichen [oder exakter, die Teile des Projektes mit dem Adventskalender]
- Fügen Sie vor der [ersten] Generierungsaktion eine Skriptaktion hinzu
- Fügen Sie als Quelltext die folgenden Zeilen in das Skript ein:
context.getProject().createTag("Generation","needed for external database content",null);
context.setStartTime(new Date());
Erklärung:
Die erste Zeile erzeugt eine neue Revision. Im Prinzip hat dies exakt dieselbe Wirkung wie eine beliebige Änderung im Projekt.
Die zweite Zeile setzt den Ausführungszeitpunkt des Auftrags auf die aktuell Zeit. [Ansonsten würde die Generierung die neu erzeugte Revision nicht berücksichtigen, da Sie ja erst nach dem Start des Auftrags erzeugt wurde {siehe oben: "Weiterhin werden Änderungen, die während einer Generierung durchgeführt werden, für laufende Generierungen nicht berücksichtigt"}]
Fazit: Wenn man weiß, worauf man achten muss, ist es nicht schwer mit dem Adventskalendar. Wenn man es nicht weiß, bekommt man schnell graue Haare und kann nach einer knappen Woche als Nikolaus auftreten
Viel Spaß,
Holger