2012-07-19 23 views
0

我已經創建了一個工作流程,並且其工作完美。 由工作流活動調用的函數是這樣的爲什麼工作流會兩次調用該函數以及如何忽略它?

def employee_confirm(self, cr, uid, ids, context=None): 
    print "Entering >>>employee_confirm" 
    return self.write(cr, uid, ids, {'state':'confirm'}) 

我的問題是print語句是執行兩次。 這意味着該功能正在執行兩次。

這是確定這個

self.write(cr, uid, ids, {'state':'confirm'}) 

因爲它是一個write

對於任何其他聲明,我們不能允許它在相同的記錄兩次。

爲什麼發生這種情況&如何覆蓋這個?

+0

我得到了這個問題,但我可以不看你的代碼,你在哪裏觸發流程觸發導致他們能夠可能性工作流服務和按鈕或一些其他的代碼被觸發相同的功能,所以,爲什麼你讓說清楚兩次打印,否則他們的可能性工作流程定製錯誤。 – 2012-07-19 09:04:46

+0

我該如何調試? – Jibin 2012-07-19 09:32:08

+0

要麼你可以使用python的pdb模塊和調試所有,或者你可以在可疑的地方出打印語句,看看誰是負責雙觸發。 – 2012-07-19 09:44:01

回答

0

瞭解和調試工作流代碼是構建新的OpenERP模塊時最困難的任務之一。我發現tracing the code in Eclipse是查看正在發生的唯一方法,但花了很長時間。

這是我寫的一個SQL查詢來總結工作流轉換。我打印出工作流程圖,然後將這些數據複製到圖表中。據我所知,您只能打印來自GTK客戶端not the web client的圖表。用所需的工作流程打開屏幕,然後從插件菜單中選擇執行插件並雙擊打印工作流程。

select wkf.name, 
      f.name || '(' || f.id || ')' as src, 
      f.kind, 
      f.action as from_action, 
      f.split_mode, 
      f.flow_start, 
      t.name || '(' || t.id || ')' as dest, 
      t.kind as dest_kind, 
      t.action as dest_action, 
      t.join_mode, 
      t.flow_stop, 
      tr.* 
    from wkf_transition tr 
    join wkf_activity f 
    on tr.act_from = f.id 
    join wkf_activity t 
    on tr.act_to = t.id 
    join wkf 
    on f.wkf_id = wkf.id 
    order by wkf.name, f.name, t.name 
相關問題