python – Plone:拦截工作流转换并以编程方式将其更改为另一个

我们有一个实用程序(collective.contentalerts),它检查对象(比如一篇文章)的内容是否足够(不包含坏词).

到目前为止,我们一直在与plone.app.contentrules一起使用它来发送电子邮件.

现在我们想更进一步:

普通用户仍然可以创建他们的文章,但是当他们试图将其公开时,如果该实用程序在其上发现可疑内容,则应将它们置于另一状态(即,改为进行另一个工作流转换).

所以问题是:有没有办法拦截工作流转换,并且给定一些逻辑(我们的实用程序)将预期的工作流转换到另一个?

额外的好处是,常规用户不应该在工作流转换下拉列表中看到这种向审核状态的转换.

最佳答案
我认为没有必要拦截转换:向用户显示转换“发布”,将对象发送到状态“needs_review”

使用从状态“needs_review”到“public”的自动转换,该视图通过视图检查文章是否正常(不包含黑名单中的单词等)

这样用户就可以看到“发布”转换(而不是“发送到审核”).

有关如何配置保护表达式的示例,请参见Poi add-on.

想想这样的事情:

<guard-expression>here/@@myview</guard-expression>

myview可以是一个公共视图,执行所有需要的检查并返回True / False.

转换的触发类型必须是自动的,而不是“由用户启动”(参见屏幕截图)

screenshot of transition configuration

如果您按照表达式字段旁边的[?] questionmark链接,则可以获得有关可用变量的更多信息.

转载注明原文:python – Plone:拦截工作流转换并以编程方式将其更改为另一个 - 代码日志