我有mynamespace.myproduct
和mynamespace.myproduct2
。
mynamespace.myproduct2
被定义为mynamespace.myproduct
的{{1}}中的依赖项。 metadata.xml
包含一些我想覆盖的工作流程,而无需自定义mynamespace.myproduct2
。
我知道我可以使用ZMI上的mynamespace.myproduct2
进行更改,但在portal_workflow
重新安装mynamespace.myproduct
和mynamespace.myproduct2
的情况下,我需要保留这些更改
工作流程名称相同,但我的自定义工作流程会有不同的状态,我需要portal_quickinstaller
来覆盖mynamespace.myproduct
的工作流程。总结:我需要从产品中更改工作流程(保留内容类型等),但不想自定义整个包。
我讨论了overrides.zcml(一个example),但这完全覆盖了配置文件,我只想覆盖工作流程(甚至不知道这种方法是否有效。添加此文件将是总是使用而不是原始配置文件?我如何正确测试它?)。根据{{3}}:
注意ZCML和GenericSetup之间的区别ZCML更改会影响 在Zope和GenericSetup XML中的所有站点中加载了Python代码 文件只影响一个Plone站点及其数据库。 GenericSetup XML 文件始终是数据库更改。 ZCML与ZCML的关系 特定于站点的行为通常使用图层完成。 ZCML指令, 像viewlets和views一样,注册为某个特定的活动 图层仅使用图层属性。导入GenericSetup XML时 通过portal_setup,或运行产品附加安装程序 Plone站点,该层仅针对特定站点激活, 启用为此图层注册的所有视图。
我不希望这会影响所有Plone网站,只有一个。
那么,这是可行的/可行的,还是我必须做一个fork并编辑原始工作流中的xml文件才能工作?
答案 0 :(得分:4)
要覆盖mynamespace.myproduct2
中定义的任何工作流程,您必须在mynamespace.myproduct
中添加新的工作流程定义,并将其绑定到所需的内容类型。
所以你必须添加这个结构:
<myproduct>/
|-- ...
`-- profiles/
`-- default/
|-- ...
|-- workflows.xml
`-- workflows/
`-- mycustom_workflow/
`-- definition.xml
并在workflows.xml
中您将拥有:
<?xml version="1.0"?>
<object name="portal_workflow" meta_type="Plone Workflow Tool">
<!-- This registers the new workflow -->
<object name="mycustom_workflow" meta_type="Workflow"/>
<!-- This binds the new wf with MyContent content type -->
<bindings>
<type type_id="MyContent">
<bound-workflow workflow_id="mycustom_workflow"/>
</type>
</bindings>
</object>
这将仅影响安装产品的网站。 最后记得重新启动zope并重新安装产品以应用新的genericsetup配置。