在plone中显示对象状态时出现“No workflow provides '${name}' information.”错误
我正在尝试用以下代码返回一个对象的状态:
workflow = getToolByName(context,'portal_workflow')
status = workflow.getInfoFor(obj,'review_state')
当我尝试用下面的代码输出这个状态时:
print "State: %s" % (status)
我遇到了以下错误:
异常类型:工作流
异常信息:没有工作流提供 '${name}' 的信息。
我在网上查了一些资料,但似乎没有找到明确的答案。
有人能帮忙吗?
补充说明
这个问题并不是因为对象没有工作流。我想获取状态的对象是使用自定义工作流的。不过,即使我切换到使用默认的 Plone 工作流,仍然会出现同样的错误。
解决了
我尝试了一个最简单的方法:
status = obj.review_state
这个方法有效!真是让人惊讶。无论如何,谢谢大家。
版主,如果你们愿意,可以删除这条帖子。
3 个回答
在你定义的变量选项卡中(也就是ZMI里的portal_workflow),在页面的底部,确保状态变量的名字是'review_state'——我记得这可能不是默认的名字。这可能是你问题的一个来源。
这是因为你试图获取一个没有关联工作流程的对象的状态(可能是一个文件或图片)。你可以在 zmi->portal_workflows 中查看所有内容类型和工作流程的对应关系。
其实,Giacomo的回答是对的。你试图传递给getInfoFor
方法的obj
是一个目录脑(catalog brain),而不是一个实际的内容对象。这就是为什么你直接请求它的review_state
能成功的原因。
在Plone中,内容对象并不知道自己的工作流状态。这些信息是由工作流工具来维护的,所以当你查看一个实际的内容对象时,必须使用workflow_tool.getInfoFor
。
在你的情况下,你拿到了一个目录搜索的结果,这个结果是一个叫做brain
的轻量级结构,然后你试图把它传递给工作流工具。目录脑没有工作流,所以你遇到的错误是完全正确的。但是,目录脑确实有一个review_state
属性,它对应于目录脑所代表的对象的审核状态。
简单来说,如果你有一个目录脑,就用brain.review_state
;如果你有一个内容对象,就用workflow_tool.getInfoFor(obj, 'review_state')
。