- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
GenerationContext und Skript mit Datensatzmodifikation
Folgender Hintergrund. Eine zentrale Datenquelle soll Dokumente (aus den Mediastores verschiedener Projekte) mit File-Reference und Metadaten enthalten, die dann mittels Integration in den Projekten รผbergreifend zur Verfรผgung gestellt werden. Es mรผsste jeweils ein Link in das Ursprungsprojekt zur verfรผgung gestellt werden. Dieser Link kann weder bei der Erstellung des Datensatzes (kein GenerationContext) noch bei der Filterung mittels Integration erstellt werden (ebenfalls kein GenerationContext). Die Idee ist, im Rahmen einer Generierung per Skript die URLs zu erzeugen und in die Datenquelle zu รผbernehmen. Die รbergabe des GenerationContext an das eigentliche Skript erfolgt mittels
$CMS_SET(void, #global.scheduleContext.setProperty("generation_context",#global.generationContext))$
innerhalb einer Teilgenerierung.
Nun ist aber die Session nicht schreibbar (UnsupportedOperationException auf Operationen wie commit(). รhnliches wird ja bereits in https://community.e-spirit.com/message/2241 und https://community.e-spirit.com/message/2250 festgestellt. Grund ist, dass wรคhrend der Generierung auf einen Revisionsstand zugegriffen wird und nichts mehr schreibbar sein soll.
Welche Optionen gibt es?
- kann man sich ohne GenerationContext einen entsprechenden UrlCreator erzeugen?
- kann man einen GenerationContext bekommen und trotzdem eine schreibbare Session erhalten?
- andere?
Grรผรe aus Hamburg
Michael
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Michael Schmidt schrieb:
Danke fรผr die Bemรผhungen. Aber es reicht fรผr mich noch nicht, um hier wirklich Fortschritt zu erzielen.
Wie genau habe ich denn das Interface "Connection"?
- connection.getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor$ScriptTaskServerConnection'
- context.getConnection().getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$ScheduleRunnable$1'
Und noch zur Klarstellung:
> Vor einem Generierungstask wird keine eigene Verbindung benรถtigt.
Mein Generierungstask braucht doch auch keine eigene Verbindung? Doch erst der nachfolgende, der die Verรคnderungen an der DB machen soll, oder?
Den Userservice gibt es so:
userservice = connection.getProjectById(context.getProject().getId()).getUserService();
Hierbei wird eine Verbindung mit dem Benutzer geรถffnet, dessen Zugangsdaten unter Eigenschaften in der entsprechenden Skript-Aktion des Aufrags hinterkegt wurden.
Ein generieurngstask benรถtigt keine eigene Verbindung, das ist korrekt.
Viele Grรผsse aus Dortmund,
Holger
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Einen UrlCreator gibt es nur im GenerationContext.
Sie kรถnnen sich aber wรคhrend der Generierung Informationen in den ScheduleContext schreiben und nach der Generierung einen Skripttask ausfรผhren, der diese Informationen dann in die Datenbank schreibt. Alternativ kรถnnte man auch einen Service implementieren, mit dem wรคhrend der Generierung kommuniziert werd. Dieser Service kann dann die Modifikationen an der Datenquelle vornehmen.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Vielen Dank erstmal fรผr die Antwort. Meinen Sie mit "Service" eine FirstSpirit-Sache oder etwas komplett eigenstรคndiges. Wenn ersteres; gibt es dafรผr irgendwo Dokumentation?
Das mit dem "in den ScheduleContext schreiben" ist mir nicht ganz klar. Wenn mein Task zu Ende ist, besteht doch der ScheduleContext nicht mehr? Wenn ich dann den nรคchsten Task starte, finde ich dort doch die im Vorgรคngertask geschriebenen Informationen nicht mehr, oder?
Grรผรe
M
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mit Service ist eine FirstSpirit-Komponente gemeint, in der Entwicklerdokumentation gibt es nรคhere Informationen dazu.
Der ScheduleContext besteht fรผr den gesamten Auftrag, der aus mehreren Tasks bestehen davon. Ein Task ist die Generierung, die einen GenerationContext hat. Der ScheduleContext ist also der รผbergeordnete Kontext, der fรผr alle Tasks zur Verfรผgung steht.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hatte hier die Begriffe durcheinandergebracht, Auftrag war fรผr mich Task, woraus dieser besteht dann Aktionen/Actions. Aber genau hier liegt ja das Problem.
Nachdem mein erster Task/Action den GenerationContext in den ScheduleContext geschrieben hat, damit ich ihn spรคter verwenden kann, ist im nachfolgenden Skript-Task die Session, die ich auf folgendem Wege erlange, nicht mehr schreibbar.
contentStore = context.getUserService().getStore(Store.CONTENT_STORE, false);
contentSource = contentStore.getContent2ByName("i_document");
schemaTable = contentSource.getSchema();
Session updateSession = schemaTable.getSession();
Hier irgendwas falsch?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Modifikationen aus einem Auftragsskript kรถnnen nur bei aktivierter "eigener Verbindung" (Auftragsplanung / Aktionen / Skript / Eigenschaften) vorgenommen werden. รbrigens ist "context.getUserService()" in Tasks nach einer Generierung auf den generierten Stand "eingefroren".
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
> Modifikationen aus einem Auftragsskript kรถnnen nur bei aktivierter
> "eigener Verbindung" (Auftragsplanung / Aktionen / Skript / Eigenschaften)
> vorgenommen werden.
Kann ich nicht nachvollziehen, ich verรคndere und release Datensรคtze auch ohne eigene Verbindung aus einem Auftragsskript.
> รbrigens ist "context.getUserService()" in Tasks nach einer Generierung auf den
> generierten Stand "eingefroren".
Weil das so ist, war doch genau meine Frage: wie bekomme service, source, schema oder letztlich einfach nur eine Session, in der ich Datensรคtze schreiben kann, nachdem eine Generierung durchgefรผhrt wurde?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Modifikationen aus einem Auftragsskript, nachdem eine Generierungtask ausgefรผhrt wurde, sind nur รผber eine eigene Verbindung mรถglich. Vor einem Generierungstask wird keine eigene Verbindung benรถtigt.
Die Antwort auf die zweite Frage lautet somit: Sie verwenden die "eigene Verbindung" und haben damit das Interface "Connection". Von dort aus haben sie Zugriff auf den UserService und alles andere.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Danke fรผr die Bemรผhungen. Aber es reicht fรผr mich noch nicht, um hier wirklich Fortschritt zu erzielen.
Wie genau habe ich denn das Interface "Connection"?
- connection.getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor$ScriptTaskServerConnection'
- context.getConnection().getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$ScheduleRunnable$1'
Und noch zur Klarstellung:
> Vor einem Generierungstask wird keine eigene Verbindung benรถtigt.
Mein Generierungstask braucht doch auch keine eigene Verbindung? Doch erst der nachfolgende, der die Verรคnderungen an der DB machen soll, oder?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Michael Schmidt schrieb:
Danke fรผr die Bemรผhungen. Aber es reicht fรผr mich noch nicht, um hier wirklich Fortschritt zu erzielen.
Wie genau habe ich denn das Interface "Connection"?
- connection.getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor$ScriptTaskServerConnection'
- context.getConnection().getUserService() -> getUserService() not found in class'de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$ScheduleRunnable$1'
Und noch zur Klarstellung:
> Vor einem Generierungstask wird keine eigene Verbindung benรถtigt.
Mein Generierungstask braucht doch auch keine eigene Verbindung? Doch erst der nachfolgende, der die Verรคnderungen an der DB machen soll, oder?
Den Userservice gibt es so:
userservice = connection.getProjectById(context.getProject().getId()).getUserService();
Hierbei wird eine Verbindung mit dem Benutzer geรถffnet, dessen Zugangsdaten unter Eigenschaften in der entsprechenden Skript-Aktion des Aufrags hinterkegt wurden.
Ein generieurngstask benรถtigt keine eigene Verbindung, das ist korrekt.
Viele Grรผsse aus Dortmund,
Holger

