Was Plone bringt? Graue Haare!
Plone mag toll sein, wenn man daran nicht weiter entwickeln muss, aber wenn dann mal eine Funktion gewünscht ist, die nicht über die Oberfläche umgesetzt werden kann, dann wird's ekelig. Ich habe manchmal eine Woche lang an einem einzigen Fehler gesessen, weil die Fehlermeldungen oft recht kryptisch sind, und die Dokumentation zu wünschen übrig lässt.
Beiträge von ruby--
-
-
Hallo, ich hoffe, ihr könnt mir helfen! Ich muss mein Plone-Projekt jetzt auf einen anderen Server portieren, aber die Konfiguration hat mir einen Strich durch die Rechnung gemacht (happy Friday 13th )
Das Problem ist:
Ich arbeite in Workflow-Skripten mit den Werten aus dem "title"-Feld, also der ID des Artikels. Aber auf dem anderen Server überschreibt es beim Erstellen eines Dokuments die von mir ins ID-Feld eingetragene ID, und generiert stattdessen eine eigene ID aus allen anderen Feldern des Inhaltselements (archetypes-basiert).Ich hab schon ein wenig herumgesucht und dabei auf den Tipp gestoßen, den Kurznamen anzeigen zu lassen:
Kurzname der Artikel anzeigen?Zeigt den Kurznamen des Artikels und erlaubt dem Benutzer, diesen zu ändern. Der Kurzname ist ein Teil der Webadresse (URL) der Artikel. Sobald diese Option global erlaubt wurde, können Benutzer diese Funktion in ihren Einstellungen aktivieren.
* Ja
NeinBeim Admin habe ich dann das Häkchen hier reingemacht:
* Das Bearbeiten der Kurznamen erlauben.
Bestimmt, ob Kurznamen (auch bekannt als IDs) beim Bearbeiten eines Artikels geändert werden können. Sollten die Kurznamen nicht angezeigt werden, werden diese aus dem Titel automatisch generiert.Das hat aber nur ein weiteres Feld angezeigt, welches das Label "Kurzname" hatte. Ich möchte aber meine eigene ID im ID-Feld, und nicht im Kurznamenfeld.
Der Server hat die gleichen Daten wie meine eigene Installation:Plone-Versionsübersicht
Plone 2.5.5,
CMF-1.6.4,
Zope (Zope 2.9.8-final, python 2.4.4, win32),
Five 1.3.10,
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)],
PIL 1.1.5Bitte helft mir, jeder Kommentar ist willkommen!
-
Danke für die schnelle und informative Antwort!
Weil also kein Weg daran vorbei geht, habe ich die Inhalte der Kopie ins Original kopiert und die Kopie gelöscht, sodass das Original mit seiner Referenz erhalten bleibt.
Dies war (hoffentlich) mein letzter Hilferuf wegen Plone -
Hallo Pumukel!
Ich hätte da noch mal eine Frage: Du hast internen Referenzen erwähnt - was ist der Unterschied zur ID?
Ich habe nämlich jetzt das Modul in einem anderen Dokument gelinkt, und wenn ich das gelinkte Modul mit dem neuen Modul ersetze, dann verschwindet der Link aus dem anderen Dokument.
Ist das eine Art GarbageCollector, der alle toten Referenzen entfernt? Und kann man das irgendwie abschalten? Die URL zu dem Modul bleibt ja die gleiche, deswegen ist es in meinem Fall unerwünscht, dass diese Referenz entfernt wird. (Es wird durch mein System ja nie zu einem 404er Fehler kommen)
Danke für's Lesen und (hoffentlich) eine Antwort! -
Hallo! Ihr habt mir vorher so toll geholfen, da hätte ich jetzt noch eine Frage, auf die ihr vielleicht eine Antwort wisst:
Kann man irgendwie die Statusmeldung verändern, die erscheint, wenn ein Workflow-Schritt erfolgreich ausgeführt wurde? ("Der Status des Inhalts wurde verändert.")
Und dann gibt es ja noch diese Meldungen, die Plone wirft, wenn ein Skript einen Fehler raushaut - kann man die irgendwie abfangen und einen eigenen Text dem Benutzer anzeigen?
Im speziellen wäre es bei mir die Meldung "No workflow provides the 'show' action".Vielen Dank!
Edit: am einfachsten gehen Fehlermeldungen mit
-
Danke für den Tipp!
-
Hallo, ich hoffe, ihr könnt mir wieder helfen.
Ich möchte in einem Workflow-Skript herausfinden, wer im aktuellen Dokument die lokale Rolle xyz hat.
Bisher habe ich das nur beim Löschen von allen lokalen Rollen im Dokument gebraucht, und da hatte ich nur die Lösung, alle Members durchzugehen:
Codeobj = state_change.object mship = context.portal_membership for user in mship.listMembers(): memberID = mship.getMemberById(user.id) obj.manage_delLocalRoles([str(memberID)])
Das wird aber bei zunehmender Mitgliederzahl ziemlich ineffizient.
Deswegen würde ich gerne wissen, ob es eine Funktion gibt, die eine ähnliche Ausgabe hat wie im ZMI localhost/dokument/manage_listLocalRoles?
Wenn man diese Funktion im Skript aufruft, erhält man nur den Quellcode für diese Seite.Vielen Dank für's Lesen!
-
Gut zu wissen, aber Upgrading kommt für mich leider nicht in Frage, weil ich dazu erst einmal zum Kampf gegen das Rechenzentrum ziehen müsste
Später soll allerdings ein Versionierungs-Zusatzprodukt installiert werden.Übrigens habe ich herausgefunden, woran der Fehler wirklich gelegen haben könnte: Wenn ein Dokument kopiert wurde, während das gleiche Dokument vorher schon mal dort reinkopiert wurde und noch immer in diesem Ordner liegt, bricht der Workflow zusammen. Intern legt Plone das Dokument als "Kopie von xyz" an, und das Skript versucht, von dem bereits im "visible"-Zustand liegenden Dokument den Zustand zu "visible" zu ändern... Ohmann, jetzt habe ich Kopfschmerzen
-
Hallo und danke!
Ich hab mir deinen Ratschlag zu Herzen genommen und den Workflow noch mal neu aufgebaut. Vielleicht liegt es daran, dass ich nun vordefinierte actions verwende, oder daran, dass ich an einer anderen Stelle eine Rolle setze - aber es funktioniert.
Und wozu das Kopieren dient: Wenn ein Dokument bearbeitet wird, muss die alte Version so lange bestehen bleiben, bis die neue Version durch mehrere Redakteure abgesegnet wurde. So lange liegt die alte Version im öffentlichen Ordner bestehen. (War nicht meine Idee... :-() -
Erst einmal recht herzlichen Dank für dein Bemühen.
Jedoch ist mir noch derzeit noch einiges unklar. Das Kopieren und Einfügen funktioniert ohne Probleme. Da die lokale Rolle zugewiesen ist, ist das kein Problem. Kopiere ich das Dokument geht das originale Dokument in den Folgestatus jedoch die Kopie geht in den Anfangsstatus (private). Das Rechteproblem tritt also dann nur ein wenn ich den Status ändern will. Liegt dies dennoch an Schreibrechten? Und wie gesagt, als Admin angemeldet trat das Problem auch auf, bis ich die Transition in den Anfangstatus mit einfügte als mögliche Übergänge. Das verwirrt mich ein bisschen.Zitat...oder aber du must das Skript ausserhalb des ProcetedPython laufen lassen.
Bedeutet die ein externes Skript schreiben und dann vom Workflow aufrufen? -
Hallo und danke für die rasche Antwort!
Ich hab den aktuellen Workflow angehangen.
"Privat" ist der Ausgangszustand, wenn der Übergang "einreichen" gewählt wurde, kopiert es das aktuelle Dokument in den home-Ordner des Nutzers mit der Rolle "Modulverantwortlicher". Dabei wird ein neuer Anfangsstatus gesetzt ("wartend"). Und genau dieser Schritt funktioniert nur, wenn ich ihn als Admin ausführe.
In den nächsten Schritten wird das Dokument nicht mehr verschoben, sondern nur noch von berechtigten Personen der Status geändert.
Nur an den gestrichelten Linien wird jeweils ein Dokument kopiert, und dort schlägt es fehl. Es scheint, dass nur ein Manager dazu berechtigt ist. Ich hab schon probiert, dem Skript die Proxy-Rolle Manager zu geben, und der Rolle Member weitere Einzelrechte.Vielen Dank für deine Hilfe!
-
Guten Abend,
nach langem Suchen und kein Finden der passenden Antwort bin ich nun hier gelandet. Ich bilde mit Plone einen Workfow ab. In diesem Workflow sollen Dokuments von öffentlichen Ordnern in die privaten Nutzerordner verschoben werden und der Status des Dokuments angepasst werden.Als ich zu Beginn das ganze als Administrator versuchte kam die folgende Fehlermeldung:
No workflow provides the "einreichen" action. Daraufhin habe ich in meinen Intitialstatus (private) die einreichen-Transition hinzugefügt und ich konnte das Workflowskript ausführen.Nun jedoch habe ich mich als normaler Nutzer angemeldet. Dieser Nutzer hat eine lokale Rolle für das Objekt, welches ich verschieben möchte. Wenn ich nun allerdings das Skript wieder ausführe, kommt wieder die Meldung:
No workflow provides the "einreichen" action. Mein Skript sieht wie folgt aus:Code
Alles anzeigenobj = state_change.object id = obj.getId() wf_tool = context.portal_workflow nutzerID = obj.getModulverantwortlichen().getId() nutzerOrdner = context.portal_membership.getHomeFolder(nutzerID) quellOrdner = obj.aq_parent nutzerOrdner.manage_pasteObjects(quellOrdner.manage_copyObjects([id,])) new_obj = nutzerOrdner[id] context.portal_workflow.doActionFor(new_obj,'einreichen', comment='') #Fehlermeldung hier ...
Das Traceback sieht so aus:
Code
Alles anzeigenTraceback (innermost last): Module ZPublisher.Publish, line 115, in publish Module ZPublisher.mapply, line 88, in mapply Module ZPublisher.Publish, line 41, in call_object Module Products.CMFFormController.FSControllerPythonScript, line 104, in __call__ Module Products.CMFFormController.Script, line 145, in __call__ Module Products.CMFCore.FSPythonScript, line 108, in __call__ Module Shared.DC.Scripts.Bindings, line 311, in __call__ Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec Module Products.CMFCore.FSPythonScript, line 164, in _exec Module None, line 42, in content_status_modify - <FSControllerPythonScript at /Plone/content_status_modify used for /Plone/ModulFolder/pti114-bier> - Line 42 Module Products.CMFCore.WorkflowTool, line 302, in doActionFor Module Products.CMFCore.WorkflowTool, line 620, in _invokeWithNotification Module Products.DCWorkflow.DCWorkflow, line 291, in doActionFor Module Products.DCWorkflow.DCWorkflow, line 476, in _changeStateOf Module Products.DCWorkflow.DCWorkflow, line 579, in _executeTransition Module Shared.DC.Scripts.Bindings, line 311, in __call__ Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec Module Products.PythonScripts.PythonScript, line 326, in _exec Module None, line 19, in lock_and_edit - <PythonScript at /Plone/portal_workflow/Modulworkflow/scripts/lock_and_edit> - Line 19 Module Products.CMFCore.WorkflowTool, line 295, in doActionFor WorkflowException: No workflow provides the "einreichen" action.
Wäre schön wenn mir jemand helfen könnte und mir Hinweise oder Tipps geben könnte um diesen Fehler zu beseitigen.
Schon mal recht herzlichen Dank im voraus.