Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

工作流trigger问题求助(已改用subflow方式,已补充流程说明)



  • 此问题已经参考此页面http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85%B8%E5%9E%8B%E8%87%AA%E5%8A%A8%E8%A7%A6%E5%8F%91%E5%99%A8trigger_model/<br /><br />问题描述:我希望实现的功能是,在sale.order流程中,progress状态下,当发票状态为paid,同时合同(自定义类)状态为done时,sale.order状态自动变为done。<br />参考上述页面,首先实现一个状态的trigger,代码实现如下:<br />workflow.xml<br />[code]<br />        <!--活动定义--><br />        <record id="act_progress" model="workflow.activity"><br />            <field name="wkf_id" ref="wkf_sale"/><br />            <field name="name">progress</field><br />            <field name="kind">function</field><br />            <field name="action">action_validate()</field><br />        </record><br />        <record id="act_done" model="workflow.activity"><br />            <field name="wkf_id" ref="wkf_sale"/><br />            <field name="name">done</field><br />            <field name="flow_stop">True</field><br />            <field name="kind">function</field><br />            <field name="action">action_done()</field><br />        </record><br />  <br />            <!--迁移--><br />        <record id="trans_progress_done" model="workflow.transition"><br />            <field name="act_from" ref="act_progress"/><br />            <field name="act_to" ref="act_done"/><br />            <field name="condition">check_progress_state('done')</field><br />            <field name="trigger_model">account.invoice</field><br />            <field name="trigger_expr_id">invoice_id and [invoice_id.id] or []</field><br />        </record><br />[/code]<br /><br />sale.py<br />[code]<br /> #字段定义<br />  'invoice_id': fields.many2one('account.invoice', '关联付款'),<br /> <br /> #函数定义<br /> def action_done(self, cr, uid, ids, context=None):<br />        wf_service = netsvc.LocalService("workflow")<br />        for o_id in ids:<br />            wf_service.trg_trigger(uid, 'sale.order', o_id, cr)<br />        self.write(cr, uid, ids, {'state': 'done'})<br />        return True<br />[/code]<br /><br />现在的问题还是,trigger执行了一次就不在执行第二次了,请问应该是哪里的问题呢?<br />另外,如果我想实现两个状态的trigger,应该怎么做呢?<br />谢谢!



  • 此问题已经参考此页面http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85%B8%E5%9E%8B%E8%87%AA%E5%8A%A8%E8%A7%A6%E5%8F%91%E5%99%A8trigger_model/<br /><br />问题描述:我希望实现的功能是,在sale.order流程中,progress状态下,当发票状态为paid,同时合同(自定义类)状态为done时,sale.order状态自动变为done。<br />参考上述页面,首先实现一个状态的trigger,代码实现如下:<br />workflow.xml<br />[code]<br />        <!--活动定义--><br />        <record id="act_progress" model="workflow.activity"><br />            <field name="wkf_id" ref="wkf_sale"/><br />            <field name="name">progress</field><br />            <field name="kind">function</field><br />            <field name="action">action_validate()</field><br />        </record><br />        <record id="act_done" model="workflow.activity"><br />            <field name="wkf_id" ref="wkf_sale"/><br />            <field name="name">done</field><br />            <field name="flow_stop">True</field><br />            <field name="kind">function</field><br />            <field name="action">action_done()</field><br />        </record><br />  <br />            <!--迁移--><br />        <record id="trans_progress_done" model="workflow.transition"><br />            <field name="act_from" ref="act_progress"/><br />            <field name="act_to" ref="act_done"/><br />            <field name="condition">check_progress_state('done')</field><br />            <field name="trigger_model">account.invoice</field><br />            <field name="trigger_expr_id">invoice_id and [invoice_id.id] or []</field><br />        </record><br />[/code]<br /><br />sale.py<br />[code]<br /> #字段定义<br />  'invoice_id': fields.many2one('account.invoice', '关联付款'),<br /> <br /> #函数定义<br /> def action_done(self, cr, uid, ids, context=None):<br />        wf_service = netsvc.LocalService("workflow")<br />        for o_id in ids:<br />            wf_service.trg_trigger(uid, 'sale.order', o_id, cr)<br />        self.write(cr, uid, ids, {'state': 'done'})<br />        return True<br />[/code]<br /><br />现在的问题还是,trigger执行了一次就不在执行第二次了,请问应该是哪里的问题呢?<br />另外,如果我想实现两个状态的trigger,应该怎么做呢?<br />谢谢!



  • 楼主为何要执迷用trg_trigger这个方法来做触发器呢,在sale.order的工作中被关联的对象account.invoice中有定义subflow,通过信号subflow.pad和sale.orde通信,你可以修改sale.order.basic这个工作流来完成你的要求,楼主可以一试



  • 非常感谢,使用subflow的方式成功实现了,而且思路和方法非常清晰。<br />trgger的思路理论上应该更简单,但是实现上确实有迷惑的地方。



  • [quote author=jerry79 link=topic=12684.msg23044#msg23044 date=1382261337]<br />非常感谢,使用subflow的方式成功实现了,而且思路和方法非常清晰。<br />trgger的思路理论上应该更简单,但是实现上确实有迷惑的地方。<br />[/quote]<br /><br />能分享一下 结果吗?



  • [quote author=jerry79 link=topic=12684.msg22995#msg22995 date=1381995871]<br />问题描述:我希望实现的功能是,在sale.order流程中,progress状态下,当发票状态为paid,同时合同(自定义类)状态为done时,sale.order状态自动变为done。<br />[/quote]<br /><br />LZ 你描述的这个问题不够清楚合同(自定义类)状态为done时,请问这个合同是什么?在sale.order.basic中,sale.order状态自动变为done的这个节点中定义了Join Mode 为and ,也就是说这个and就是判断了只有在Delivered和发票状态为paid时候sale.order状态自动变为done。望解释一下你自定义的合同(自定义类)是什么,我们一起探讨一下怎么使用workflow.wkf_service的方法来实现,<br />[url=http://members.hellug.gr/xrg/openerp-doc/html/api_reference/workflow/wkf_service.html]顺便给个workflow.wkf_service文档的地址[/url]



  • 因时间关系,现在才完成流程的说明文字,放在我的博客:http://www.cnblogs.com/jerry2005/p/3392302.html ,欢迎拍砖。



  • [quote author=baggiow link=topic=12684.msg23050#msg23050 date=1382322465]<br />[quote author=jerry79 link=topic=12684.msg22995#msg22995 date=1381995871]<br />问题描述:我希望实现的功能是,在sale.order流程中,progress状态下,当发票状态为paid,同时合同(自定义类)状态为done时,sale.order状态自动变为done。<br />[/quote]<br /><br />LZ 你描述的这个问题不够清楚合同(自定义类)状态为done时,请问这个合同是什么?在sale.order.basic中,sale.order状态自动变为done的这个节点中定义了Join Mode 为and ,也就是说这个and就是判断了只有在Delivered和发票状态为paid时候sale.order状态自动变为done。望解释一下你自定义的合同(自定义类)是什么,我们一起探讨一下怎么使用workflow.wkf_service的方法来实现,<br />[url=http://members.hellug.gr/xrg/openerp-doc/html/api_reference/workflow/wkf_service.html]顺便给个workflow.wkf_service文档的地址[/url]<br />[/quote]<br /><br />我补充了我的流程的简化版,我想实现的也是希望合同和发票都完成后,订单才变为done,请参考我的博客的说明。<br />另外,经过两种方法的比较,我现在觉得subflow模式更加清晰明了,而trigger方式还需要修改py文件,比较麻烦。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待