我将 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)
签入的代码几乎来自界面的源代码 这工作正常,直到用户触发事件的最后一行被重定向到页面的现在签入的主分支。用户被重定向到工作副本的页面(现在不再存在),告诉用户该页面不可用。我做错什么了?