是否有可能“覆盖”产品的工作流程?

时间:2011-09-22 22:22:55

标签: plone

我有mynamespace.myproductmynamespace.myproduct2

mynamespace.myproduct2被定义为mynamespace.myproduct的{​​{1}}中的依赖项。 metadata.xml包含一些我想覆盖的工作流程,而无需自定义mynamespace.myproduct2

我知道我可以使用ZMI上的mynamespace.myproduct2进行更改,但在portal_workflow重新安装mynamespace.myproductmynamespace.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文件才能工作?

1 个答案:

答案 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配置。