Ich habe einen benutzerdefinierten Ordner-Dexterity-Inhaltstyp in Plone. Es kann nur Dokumente als Kinder haben. Ich möchte, dass diese Dokumente direkt bei ihrer Erstellung veröffentlicht werden.
Ich kann dies leicht erreichen, indem ich einen geeigneten Workflow für den Dokumenttyp einstelle, aber das würde jedes Dokument in meiner Site betreffen. Ich möchte nur die innerhalb meines Containertyps direkt veröffentlichen.
Zwei Möglichkeiten kommen mir in den Sinn:
Erstellen Sie im Grunde genommen nur eine Kopie des ursprünglichen Dokumenttyps und legen Sie seinen Arbeitsablauf auf etwas fest, das nur den Status published hat.
Fügen Sie das IObjectAdded-Ereignis für Dokumente hinzu und prüfen Sie, ob das übergeordnete Element des neuen Dokuments mein Containertyp ist, und führen Sie eine manuelle Veröffentlichung im Python-Code durch.
Weder klingt zu schön. Habe ich andere Möglichkeiten?
Erstellen Sie einen neuen automatischen Übergang in dem von Ihnen verwendeten Arbeitsablauf mit dem Schutz:
python:container.meta_type == 'ATFolder'
Dies wird nur dann ausgelöst, wenn das übergeordnete Objekt vom Standardtyp "Ordner" ist (beachten Sie, dass der Meta-Typ und der Typname nicht identisch sind).
Der Nachteil davon ist, dass es relativ früh im Erstellungsprozess ausgelöst wird, so dass der Benutzer eine Fehlermeldung sehen wird, wenn er nicht genug Berechtigungen hat, um die Erstellung für das veröffentlichte Objekt abzuschließen.
Wenn dies nicht dem entspricht, was du willst, denke ich, dass das Event deine nächste Wette ist.
Verwenden Sie einen Ereignis-Abonnenten, um einen automatischen Workflow-Übergang auszulösen (z. B. indem Sie IObjectInitializedEvent
abonnieren und auf IYourDexterityFolderishType.providedBy(aq_parent(obj))
prüfen - siehe plone community developer docs )