我有一个内容类型(批处理),它通过id绑定到不同内容(my_item)的多个实例。 my_item内容类型具有由草稿,待处理和已批准的工作流。有一个表单可以创建批处理并“批准”my_item内容类型实例,并将my_item_instances的batch_id设置为批处理的批处理ID(在创建批处理时设置)。批准的州是最终状态,无法编辑或撤消。
我需要能够将my_item内容类型实例的状态更改回草稿。由于在删除项目时(通过订阅者)没有从批准状态转回到草稿的过渡,我需要以某种方式将my_items的状态设置回“草稿”而不需要转换。
我尝试了两种方法:
订阅者是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'需要分配给可以删除“批处理”的角色
在删除事件中,遍历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'权限。
答案 0 :(得分:4)
这是几年前用于从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