2

我在 Plone 4.2.4 中有一个敏捷内容类型。版本控制适用default workflow于这种内容类型,尽管它不是 plone 附带的工作流,而是定制的。

但是,当我为同一类型启用第二个工作流时,除了版本控制之外的所有内容都可以正常工作。

  • 由第二个工作流管理的其他权限正在运行
  • 状态变化正在起作用

区别:

  • 我为工作流使用了不同state_variable的名称,这似乎很有意义,以便为第二个工作流的状态提供一个可编目字段。

我尝试使用相同的状态变量名称,但这没有帮助。我review_history还在第二个工作流中设置了工作流变量,并在上下文中有足够的权限。我(大部分)很确定,我得到了权限概念,但是当涉及多个工作流时,我不知道权限是如何计算的。

知道吗,为什么第二个工作流程不会在我的内容类型历史记录中留下痕迹?

首先十分感谢。

乌馆

我已经按照 Ida Ebkes 的建议对工作流程进行了重新排序,并且确实看到了,来自第二个工作流程的所有转换都得到了正确存储。所以这似乎是历史视图的问题。

由于这些工作流确实描述了内容类型的并发行为,我真的很想坚持使用单独的工作流和理想的不同工作流状态变量和目录索引。

我现在认为需要做的是调整历史视图。

4

1 回答 1

3

这是我的做法。它至少适用于 plone 4.2.4。

由于问题是显示问题,我只需要调整我的 historyviewlet。因此,我创建了一个以viewlets我的产品根目录命名的文件夹并创建了一个__init__.py和一个configure.zcml文件。然后我将content_history.pt, history_view.pt,review_history.ptcontent.pyplone/app/layout/viewlets/(omelette) 复制到新创建的文件夹中。

configure.zcml包含两个视图注册:

<browser:view
    for="*"
    name="my-contenthistory"
    class=".content.ContentHistoryView"
    permission="zope2.View"
    />

<browser:page
    for="*"
    name="my-historyview"
    template="history_view.pt"
    permission="zope2.View"
    />

此外,我将整个WorkflowHistoryViewlet班级从复制content.py到不同的班级名称。TransferHistory在这种情况下。然后我主要更改了与工作流状态变量相对应的部分,它不是review_state,而是transfer_state。我进一步发现,第二个工作流程的初始使用还在第二个工作流程created的历史记录中创建了一个条目,我刚刚过滤了 .

transfer_history = [x for x in transfer_history if x['action'] != None]

我将视图名称更正history_view.pt为我的新视图名称。

<div tal:replace="structure here/@@my-contenthistory">Content History</div>

最后,我将我的班级作为父母添加到ContentHistoryViewlet班级中content.py

class ContentHistoryViewlet(WorkflowHistoryViewlet, TransferHistoryViewlet):

    index = ViewPageTemplateFile("content_history.pt")

    @memoize
    def getUserInfo(self, userid):

    [...]

    def fullHistory(self):
        history = self.workflowHistory() + self.revisionHistory() + self.transferHistory()
        if len(history) == 0:
            return None
        history.sort(key=lambda x: x["time"], reverse=True)
        return history

并在产品中注册了.zcmlconfigure.zcml

 <include package=".viewlets" />

然后我修改content_history.pt并更改了action_id文件上部的定义。

[...]
action_id python:item['action'] or item.get('review_state', False) or item.get('transfer_state', False);
[...]

重新启动怪物并重新安装产品后,两个工作流的所有状态更改都显示在 my-historyview 中。

于 2013-04-24T03:26:30.807 回答