2016-10-04 107 views
2

我試圖得到一個靈巧的內容類型的工作流狀態(my.product.my_object)Plone/Workflow-爲什麼portal_workflow工具的getStatusOf返回None?

我的工作流「my_object_workflow」有三種狀態: 草案批准

在我BrowserView中 PENDING_APPROVAL ,我正在嘗試獲取my_objects的狀態。 我查詢了my_objects的portal_catalog。

my_objects = api.portal.get_tool(name='portal_catalog').searchResults(
              {'portal_type':'my.product.my_object', 
              ... 
              }) 

我得到的大腦,然後遍歷列表,並嘗試與portal_workflow工具:

wf_tool = api.portal.get_tool(name='portal_workflow') 

for m_obj in my_objects: 
    print wf_tool.getStatusOf('my_object_workflow',m_obj.getObject()) 

打印狀態不幸的是,而不是打印對象的狀態,它打印無代替。

我可以使用m_obj ['review_state'],因爲m_obj是一個大腦,但我更願意使用portal_workflow工具。

什麼可能導致這種情況發生?我誤解了getStatusOf的實際用途嗎?

我使用的Plone 4.3

+0

我很抱歉,但我發現在我的迭代期間,我使用了錯誤的對象。我可以刪除這個問題嗎?我不相信這會起到任何作用。 –

+0

Nvm,這個問題可能出現時提供了一個冗長的答案。 –

+1

您可以刪除它,但我只是寫了一個答案,因爲很容易得到您偶然發現的問題。 – Mathias

回答

3

解決你的問題,你需要知道什麼getStatusOf實際上做的事情。 如果調用getStatusOf,有幾種可能的情況可以得到None

先來看看執行(Products.CMFCore.WorkflowTool):

def getStatusOf(self, wf_id, ob): 
    """ Get the last element of a workflow history for a given workflow. 
    """ 
    wfh = self.getHistoryOf(wf_id, ob) 
    if wfh: 
     return wfh[-1] 
    return None 

def getHistoryOf(self, wf_id, ob): 
    """ Get the history of an object for a given workflow. 
    """ 
    if hasattr(aq_base(ob), 'workflow_history'): 
     wfh = ob.workflow_history 
     return wfh.get(wf_id, None) 
    return() 

getStatusOf獲取存儲在workflow_history屬性列表中的最後一項。

workflow_history是一個持久的快譯通:

  • 的關鍵是工作流的ID - 在你的情況my_object_workflow
  • 的值是工作流程的轉換(轉換列表)

爲什麼你的大腦元數據有錯誤的價值?

如果您操作/更改工作流程並忘記更新目錄,通常會發生這種情況。


爲什麼叫getStatusOf是無?

如果您更改工作流程並且新工作流程的workflow_history存儲爲空或尚未初始化,通常會發生這種情況。


如果我更改我的類型的工作流配置,如何避免此問題?

恕我直言,這不是一件容易的事。你需要成爲好幾件事情。

我個人使用ftw.upgrade來爲我的類型引入一個新的工作流程。

我們將向您自述的Workflow Chain Updater部分或退房implementation

您必須手動執行以下步驟或使用ftw.upgrade如果你已經改變了工作流程的類型:

  • 套裝每個對象的新的工作流程
  • 的初始狀態的狀態從舊的遷移工作流歷史記錄,以新的工作流程
  • 如果從特定類型的刪除你的工作流程需要爲每個受影響的對象手動重置權限。
  • 保持目錄是最新的。
+2

謝謝提供深入的答案。這將涵蓋我在將來獲得工作流程狀態時可能遇到的任何問題。我很感激。 –

相關問題