Plone 签入事件后的HTTP重定向

Plone 签入事件后的HTTP重定向,plone,plone-5.x,Plone,Plone 5.x,我正在使用Plone 5.0和Plone.app.iterate插件作为签出选项和intranet/extranet工作流。要融合这两个概念,我的想法是: 在每个工作流转换之后,事件处理程序都会检查页面是否为工作副本以及是否为已发布页面。如果是这样,则应自动签入页面。 因此,在审查工作副本后,将签入该副本。 为了实现这一点,我编写了以下事件处理程序: from Acquisition import aq_inner from plone import api from plone.app.ite

我正在使用Plone 5.0和Plone.app.iterate插件作为签出选项和intranet/extranet工作流。要融合这两个概念,我的想法是: 在每个工作流转换之后,事件处理程序都会检查页面是否为工作副本以及是否为已发布页面。如果是这样,则应自动签入页面。 因此,在审查工作副本后,将签入该副本。 为了实现这一点,我编写了以下事件处理程序:

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)
签入的代码基本上来自
在触发事件的用户应该重定向到页面的现在已签入的主分支的最后一行之前,这一切都很正常。用户被重定向到工作副本的某个页面(该页面现在已不存在),告知用户该页面不可用。我做错了什么?

纯重定向调用在任何地方都不起作用,因为以后可以调用其他重定向(它们在事件处理程序中永远不起作用)

尝试添加以下内容:

from zExceptions import Redirect
并将最后一行更改为:

raise Redirect(view_url)

我不确定您是否还必须在重定向调用之前从
transaction
模块添加
transaction.commit()

它工作正常,并且需要
transaction.commit()