Openerp 为什么工作流会调用函数两次&;如何克服它?

Openerp 为什么工作流会调用函数两次&;如何克服它?,openerp,Openerp,我已经创建了一个工作流程,它工作得非常完美。 工作流活动调用的函数如下 def employee_confirm(self, cr, uid, ids, context=None): print "Entering >>>employee_confirm" return self.write(cr, uid, ids, {'state':'confirm'}) 我的问题是print语句执行了两次。 这意味着函数将执行两次 这没关系 self.write

我已经创建了一个工作流程,它工作得非常完美。 工作流活动调用的函数如下

  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'})
因为这是一个

对于任何其他语句,我们不能允许对同一记录执行两次


为什么会发生这种情况以及如何覆盖这种情况?

在构建新的OpenERP模块时,理解和调试工作流代码是最困难的任务之一。我发现这是唯一能看到发生了什么的方法,但是花了很长时间

下面是我编写的一个SQL查询,用于总结工作流转换。我打印出了工作流程图,然后将这些数据复制到图上。据我所知,您只能从GTK客户端打印图表。打开包含所需工作流的屏幕,然后从“插件”菜单中选择“执行插件”,然后双击“打印工作流”

    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

我有问题,但我可以说清楚,没有看到您的代码,您在哪里触发工作流触发器,因为它们可能是工作流服务和按钮或其他代码触发相同的功能,所以为什么您得到两次打印,或者他们的工作流可能是自定义错误的。您可以使用python pdb模块并全部调试,或者您可以在可疑位置打印语句,查看谁对双重触发负责。谢谢。我发现问题出在工作流活动中。它有一些旧代码中的“或”行。啊,好吧,太好了,工作流非常敏感,也很重要,需要时间来跟踪所有点,做得好