J'utilise Plone 5.0 avec l'addon plone.app.iterate pour l'option de paiement et un flux de travail intranet/extranet. Pour fusionner ces deux concepts, mon idée est la suivante: Après chaque transition de workflow, un gestionnaire d'événements vérifie si la page est une copie de travail et s'il s'agit d'une page publiée. . Dans ce cas la page doit être vérifié automatiquement Ainsi, après l'examen d'une copie de travail, il est vérifié dans Pour y parvenir, j'ai écrit le gestionnaire d'événement suivant:.Redirection HTTP après l'événement d'enregistrement
from Acquisition import aq_inner
from plone import api
from plone.app.iterate.interfaces import IWorkingCopy, ICheckinCheckoutPolicy
from plone.app.iterate import PloneMessageFactory as _
from Products.CMFCore.utils import getToolByName
from Products.statusmessages.interfaces import IStatusMessage
def checkInIfNeeded(document, event):
context = aq_inner(document)
workflowTool = getToolByName(context, "portal_workflow")
status = workflowTool.getStatusOf("intranet_workflow", document)
if IWorkingCopy.providedBy(context) and status["review_state"] == "internally_published":
policy = ICheckinCheckoutPolicy(context)
baseline = policy.checkin("")
IStatusMessage(context.REQUEST).addStatusMessage(
_("Checked in"), type='info')
view_url = baseline.restrictedTraverse("@@plone_context_state").view_url()
context.request.response.redirect(view_url)
Le code pour le check-in est à peu près du source of the interface Cela fonctionne bien jusqu'à la dernière ligne où l'utilisateur qui déclenche l'événement devrait être redirigé vers la branche principale de la page maintenant archivée. L'utilisateur est redirigé vers une page de la copie de travail (qui n'existe plus), indiquant à l'utilisateur que la page n'est pas disponible. Qu'ai-je fait de mal?
Cela fonctionne bien et 'transaction.commit()' est nécessaire. – Waynebird