Plone/Workflow- 是否可以在不需要转换的情况下设置工作流的状态?
Plone/Workflow- Is it possible to set the state of a workflow without needing a transition?
我有一个内容类型(批处理),它通过一个 ID 绑定到不同内容 (my_item) 的多个实例。 my_item 内容类型的工作流程包括草稿、待定和已批准。有一个表单可以创建批次和 "approves" my_item 内容类型实例,并将 my_item_instances' batch_id 设置为批次的批次 ID(在批次是创建)。已批准状态是最终状态,无法编辑或撤回。
我需要能够将 my_item 内容类型实例的状态改回草稿。由于在删除项目时(通过订户)没有从批准状态返回草稿的过渡,我需要以某种方式将 my_items 的状态设置回 "draft" 而不需要过渡。
我尝试了两种方法:
订阅者是 IObjectWillBeRemoved
def my_item_will_be_removed(obj,event)
my_items = catalog.searchResults('batch_id':obj.batch_id)
for i in my_items:
api.content.transition(obj=i,to_state='pending')
这会导致错误
InvalidParaemterError:找不到将状态设置为草稿的工作流
我也试过使用:
wf_tool = api.portal.get_tool(name='portal_workflow')
wf_tool.setStatusOf('item_workflow',i,'pending')
出于某种原因,最终 my_item 变成了一个字符串。
这不可能吗?如果可以,我该怎么做?
Offtopic,但我想我现在可以使用的解决方法是:
进行从批准状态到草案状态的转换 "retract_from_approval"
'can_retract_from_approval'需要分配给可以删除"batch"
的角色
在删除事件中,遍历my_items,将'can_retract_from_approval'权限分配给在当前迭代中负责在本地删除批处理的角色
my_items = catalog.searchResults('batch_id',obj.batch_id)
for m in my_items:
mi_obj = m.getObject()
mi_obj.manage_permission('retract_from_approval',['ARole'],obj=mi_obj)
然后使用工作流工具进行 'retract_from_approval' 转换,将 my_item 发送回草稿状态。然后去掉'can_retract_from_approval'权限。
这是我在 很多 年前用于从 Plone 2.5 迁移到 Plone 3 的旧迁移工具的片段。
wtool = getToolByName(obj, 'portal_workflow')
status = {'action': '',
'review_state': old_state,
'actor': 'admin',
'comments': 'Recovery state',
'time': DateTime() }
wtool.setStatusOf(workflow_id, obj, status)
- 不确定现在是否仍然有效
- 你可能需要
reindexObjectSecurity
我有一个内容类型(批处理),它通过一个 ID 绑定到不同内容 (my_item) 的多个实例。 my_item 内容类型的工作流程包括草稿、待定和已批准。有一个表单可以创建批次和 "approves" my_item 内容类型实例,并将 my_item_instances' batch_id 设置为批次的批次 ID(在批次是创建)。已批准状态是最终状态,无法编辑或撤回。
我需要能够将 my_item 内容类型实例的状态改回草稿。由于在删除项目时(通过订户)没有从批准状态返回草稿的过渡,我需要以某种方式将 my_items 的状态设置回 "draft" 而不需要过渡。
我尝试了两种方法:
订阅者是 IObjectWillBeRemoved
def my_item_will_be_removed(obj,event)
my_items = catalog.searchResults('batch_id':obj.batch_id)
for i in my_items:
api.content.transition(obj=i,to_state='pending')
这会导致错误 InvalidParaemterError:找不到将状态设置为草稿的工作流
我也试过使用:
wf_tool = api.portal.get_tool(name='portal_workflow')
wf_tool.setStatusOf('item_workflow',i,'pending')
出于某种原因,最终 my_item 变成了一个字符串。
这不可能吗?如果可以,我该怎么做?
Offtopic,但我想我现在可以使用的解决方法是: 进行从批准状态到草案状态的转换 "retract_from_approval"
'can_retract_from_approval'需要分配给可以删除"batch"
的角色在删除事件中,遍历my_items,将'can_retract_from_approval'权限分配给在当前迭代中负责在本地删除批处理的角色
my_items = catalog.searchResults('batch_id',obj.batch_id)
for m in my_items:
mi_obj = m.getObject()
mi_obj.manage_permission('retract_from_approval',['ARole'],obj=mi_obj)
然后使用工作流工具进行 'retract_from_approval' 转换,将 my_item 发送回草稿状态。然后去掉'can_retract_from_approval'权限。
这是我在 很多 年前用于从 Plone 2.5 迁移到 Plone 3 的旧迁移工具的片段。
wtool = getToolByName(obj, 'portal_workflow')
status = {'action': '',
'review_state': old_state,
'actor': 'admin',
'comments': 'Recovery state',
'time': DateTime() }
wtool.setStatusOf(workflow_id, obj, status)
- 不确定现在是否仍然有效
- 你可能需要
reindexObjectSecurity