hillterence007
I'm new here

Datum der ersten Freigabe bei Datenquellen

Hallo,

wir möchten bei einer Newsliste(Datenquelle) das Datum der ersten Freigabe/Veröffentlichung anzeigen.

"validFrom" scheint immer das Datum der letzten Freigabe zu beinhalten.

Welche Möglichkeit gäbe es dies umzusetzten? Hat hier schon jemand Erfahrungen sammeln können?

Mit freundlichen Grüßen

0 Kudos
5 Replies
bIT_sosswald
Returning Responder

Hallo,

ein Datensatz müsste implizit auch ein HistoryProvider sein. Auf diesem kann man dann diverse Abfragen mit Filtern absetzen.

Z.B. auch etwas wie "Gebe mir alle Freigaben zwischen dem Anfang der Zeitrechnung und jetzt."

Wenn man sich dann aus diesem Ergebnis die Revision mit dem kleinsten Datum nimmt, sollte man die erste Freigabe des Datensatzes haben.

Details dazu sind an der entsprechenden Stelle der JavaDoc zu finden. Ein guter Einstieg ist sicherlich die Methode getHistory(Date before, Date after, int maxCount, Filter<Revision> filter)

Beispiel:

import de.espirit.firstspirit.storage.HistoryProvider;

import de.espirit.firstspirit.storage.RevisionFilter;

List<Revision> revisions = dataSet.getHistory(HistoryProvider.UNTIL_NOW, HistoryProvider.EVER_SINCE, HistoryProvider.ALL_REVISIONS, RevisionFilter.RELEASE_FILTER);

Beispiel aus der BeanShell Konsole mit Ergebnis:

bsh % e.getHistory(HistoryProvider.UNTIL_NOW, HistoryProvider.EVER_SINCE, HistoryProvider.ALL_REVISIONS, RevisionFilter.RELEASE_FILTER);

<[Revision [id=21775, editor=Admin [ID=1], state=0, change=1458813136124, comment=cs release], Revision [id=19563, editor=Admin (Admin) [ID=1], state=0, change=1327675886625, comment=cs release]]>

Mit dieser Abfrage bekommt man eine Liste von allen Freigabe-Revisionen.

Wenn man diese Liste nun nach dem kleinsten Datum filtert, hat man die erste Freigabe.

Grüße

Sandro

0 Kudos

Hallo,

einen Versuch in die Richtung hatten wir bereits gestartet - unklar ist uns aber noch wie wir (im Template) aus der aktuellen Entity ein Objekt bekommen das HistoryProvider implementiert. Im Template selbst bekommt man z. B. mit

$CMS_VALUE(#row)$

ja ein Objekt vom Typ Entity - das ist soweit ich das erkennen kann allerdings kein HistoryProvider und kennt damit auch getHistory() nicht. Folgendes geht daher scheinbar nicht:

$CMS_VALUE(#row.getHistory())$

Wahrscheinlich fehlt hier nur die eine Verbindung wie wir aus #row einen HistoryProvider bekommen... Hat jemand einen Tipp?

Vielen Dank & viele Grüße

Mona

0 Kudos

Hi Mona,

laut Doku liefert #row ein Objekt vom Typ Entity zurück. Von diesem Objekt aus kann man (zumindest über die Java API, da aich aus der Modulwelt komme) mit Hilfe der passenden Tabellenvorlage ein Dataset bekommen.

Evtl. hilft dir aber auch dieser Post hier weiter: https://community.e-spirit.com/message/21875#21875

Ohne es jetzt ausprobiert zu haben geht es evtl. in die Richtung:

// Use DatasetContainer.Factory to create a new DatasetContainer with the entity we've obtained earlier

DatasetContainer.Factory datasetContainerFactory = new DatasetContainer.Factory();

DatasetContainer newDatasetContainer = datasetContainerFactory.create(entity, tableTemplate, projectLanguage);

Hier de Stelle in der JavaDoc zum Umwandeln einer Entity in ein Dataset über das Tabletemplate (welches ein Datasetprovider ist): http://www.e-spirit.com/odfs51/access/de/espirit/firstspirit/access/store/contentstore/DatasetProvid...

Evtl. hilft das ja nochmal ein Stück weiter.

Grüße

Sandro

0 Kudos

Hallo Sandro,

vielen Dank, das war ein guter Tipp!

Den DatasetContainer habe ich im Template dann nach einigen Versuchen doch gar nicht gebraucht - über TableTemplate und Entity komme ich sowieso direkt an das dataset an der Stelle (Ausgabe in einer Tabellenvorlage und damit Content2Section). Ist noch nicht wirklich getestet, aber grob scheint folgendes zu funktionieren (noch ohne Sicherheitsabfragen und doppelten Boden...):

$CMS_SET(_historyProvider, class("de.espirit.firstspirit.storage.HistoryProvider"))$

$CMS_SET(_revisionFilter, class("de.espirit.firstspirit.storage.RevisionFilter"))$

$CMS_SET(_tableTemplate, #this.getTableTemplate())$

$CMS_SET(_entity, #row)$

$CMS_SET(_history, _tableTemplate.getDataset(_entity).getHistory(_historyProvider._untilNow, _historyProvider.EVER_SINCE, _historyProvider.ALL_REVISIONS, _revisionFilter.RELEASE_FILTER))$

$CMS_SET(_firstRelease, _history.reverse.get(0))$

$CMS_VALUE(_firstRelease.getCommitOrCreationTime().toDate.format("dd.MM.yyyy"))$

Mit etwas Feinschliff hoffe ich dass es damit klappt, auch wenn es natürlich im Template hier etwas unelegant ist.

Wie es aber so ist, kommt dann noch eine andere Anforderung hinzu, weshalb wir es so konkret wohl doch nicht verwenden werden... ich habe es trotzdem gepostet falls es jemand anderem weiterhilft.

Wir möchten das ganze nun nicht nur ausgeben in der Newsliste, sondern auch nach dem ersten Freigabedatum sortieren (Contentprojektion auf Basis der Datenquelle => Datenreiter bei Seite im Sitestore). Während wir mithilfe HistoryProvider das Datum nun im Template ausgeben können, können wir in der QUERY für die Contentprojektion nur nach Attributen/Tabellenspalten sortieren, da kommen wir dann wieder nur an validfrom der aktuellsten (bzw. neueste freigegebene) Revision des Datenquelleneintrags.

Wir tendieren daher aktuell dazu, eher eine eigene Tabellenspalte anzulegen und das im Rahmen des Workflows / der Freigabe zu befüllen mit dem ersten Freigabedatum. In der Ausgabe könnte man dann natürlich auch einfach die Tabellenspalte ausgeben und sich getHistory(...) sparen.

Vielen Dank für die Hilfe nochmals und viele Grüße

Mona

0 Kudos

Hallo Mona,

ist dieses Posting noch offen? Benötigst du noch weitere Hilfe oder haben dir die bisherigen Antworten bereits geholfen? In diesem Fall wäre es super, wenn du die "richtige Antwort" entsprechend markierst.

Viele Grüße

Michaela

0 Kudos