【问题标题】:Plone 4 - History for second workflow won't show in @@historyviewPlone 4 - 第二个工作流程的历史不会显示在@@historyview
【发布时间】:2013-04-20 00:18:35
【问题描述】:

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

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

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

区别:

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

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

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

非常感谢。

Udate

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

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

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

【问题讨论】:

  • 我可以确认您的观察,在历史记录中只跟踪第一个分配的 wf 的转换。但这似乎只涉及历史形式。修改似乎完全存储,因为如果您切换 wf 的顺序,新的第一个 wf 的旧修改也是可见的。您想对您的用例提供更多见解吗?也许还有其他方法可以解决您的要求。
  • 非常感谢您的提示。我有一种感觉,它被存储了,但没有显示出来,但没有办法证实我对此的感觉。分配给我的类型的工作流重新排序表明这些转换已存储。
  • 更奇怪的是,如果你改变 wf 的顺序并且当前状态是现在 2nd-wf 之一,则无法显示该状态,而是显示新的 wf-states 之一!?无论如何,你写你的工作流“描述并发行为”,很难猜到,这到底是什么意思,但是任何机会,placeful-wf 可以帮助你吗?
  • @Ida Ebkes:术语“并发行为”实际上来自关于 plone WF 的教程,只是意味着需要多个状态链来描述对象的所有需要​​状态。
  • 嗯,好的,阅读有帮助;)文章还给出了一个用例:“例如,一个对象可能已发布,但需要翻译。您可以跟踪主工作流中的审阅状态和翻译状态在另一个。”

标签: workflow plone dexterity


【解决方案1】:

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

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

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>

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

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

并在产品configure.zcml注册了.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);
[...]

重启怪物并重新安装产品后,两个工作流的所有状态更改都会显示在我的历史视图中。

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2021-01-06
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多