Workflow 新及;使用现有内容重命名工作流
我有一个自定义内容类型为Workflow 新及;使用现有内容重命名工作流,workflow,plone,Workflow,Plone,我有一个自定义内容类型为content的网站,它最初附加了一个工作流content\u workflow。现有数千个内容的实例 我现在需要为这种类型添加第二个工作流,content\u beta\u workflow。如何将所有现有内容更新为新工作流的一部分 另请注意:如果我想将初始工作流重命名为content\u alpha\u workflow,如何更新所有现有内容以反映此更改?如果您只是从一个工作流更改为另一个工作流,请执行以下步骤: 转到站点设置>类型 从下拉菜单中选择自定义内容类型,页
content
的网站,它最初附加了一个工作流content\u workflow
。现有数千个内容的实例
我现在需要为这种类型添加第二个工作流,content\u beta\u workflow
。如何将所有现有内容更新为新工作流的一部分
另请注意:如果我想将初始工作流重命名为
content\u alpha\u workflow
,如何更新所有现有内容以反映此更改?如果您只是从一个工作流更改为另一个工作流,请执行以下步骤:
my_type = 'Content' # This is your content portal_type name
my_wf = 'content_workflow_beta'
wf_chain = list(wf_tool.getChainForPortalType(my_type))
if my_wf not in wf_chain:
wf_chain.append(my_wf)
wf_tool.setChainForPortalTypes([my_type], wf_chain)
您可以将此代码添加到定义内容类型和工作流的包的中。在工作流工具上添加对updateRoleMappings
的调用,您将被设置为在原始工作流的基础上通过标准Plone UI使用新工作流
正如您已经发现的那样,您还可以手动更新所有对象的工作流历史记录以重命名工作流ID,但这是一个非常具有侵入性的步骤。如果您只是从一个工作流更改为另一个工作流,请遵循以下步骤:
my_type = 'Content' # This is your content portal_type name
my_wf = 'content_workflow_beta'
wf_chain = list(wf_tool.getChainForPortalType(my_type))
if my_wf not in wf_chain:
wf_chain.append(my_wf)
wf_tool.setChainForPortalTypes([my_type], wf_chain)
您可以将此代码添加到定义内容类型和工作流的包的中。在工作流工具上添加对updateRoleMappings
的调用,您将被设置为在原始工作流的基础上通过标准Plone UI使用新工作流
正如您已经发现的那样,您还可以手动更新所有对象的工作流历史记录以重命名工作流ID,但这是一个非常具有侵入性的步骤。由于
工作流历史记录是每个内容项上的dict
属性,因此需要根据需要添加或更新合适的项。首先,我将content\u工作流
的常规设置复制到content\u alpha\u工作流
。接下来,我创建了content\u beta\u工作流
,并将其添加到配置文件中。然后我编写了以下升级步骤:
导入日志
从日期时间导入日期时间
def修改内容工作流历史记录(上下文,记录器=无):
如果logger为None:logger=logging.getLogger('my.product')
#导入新工作流
context.portal\u setup.runImportStepFromProfile('profile-my.product:default','workflow')
#为新记录设置一些默认值
_历史默认值=dict(
行动=无,
actor='admin',
注释='由更新v2自动创建',
时间=日期时间(),
)
_alpha\u默认值=dict(查看\u状态='alpha\u状态\u 1',**u历史\u默认值)
_beta\u默认值=dict(查看状态='beta\u状态\u 1',**u历史\u默认值)
对于context.parents.values()中的父对象:
对于parent.content.values()中的内容:
#不要获取家长的历史记录
如果content.workflow\u历史记录中有“父工作流”:
content.workflow_history={}
#将内容\u工作流复制到内容\u alpha\u工作流
如果content.workflow\u历史记录中有“content\u workflow”:
alpha\u默认值=上下文.工作流\u历史记录['content\u workflow']
del content.workflow_history['content_workflow']
其他:
alpha_defaults=(_alpha_defaults,)#必须是元组
content.workflow_history['ctcc_content_alpha_workflow']=alpha_默认值
#使用修改后的参与者创建beta工作流
beta\u默认值=dict(**\u beta\u默认值)
beta_默认值['actor']=u'%suser'%parent.id
content.workflow_history['ctcc_content_beta_workflow']=(beta_默认值,)
logger.info('内容工作流历史记录已更新')
作为工作流\u历史记录
是一个dic