【问题标题】:Activate a workflow transition from wizard in OpenERP 7.0从 OpenERP 7.0 中的向导激活工作流转换
【发布时间】:2014-05-16 19:50:51
【问题描述】:

我在 OpenERP 7.0 中设置了一个向导,它可以正确更新字段并且一切正常。但我想在用户提交信息后从该向导向工作流发送一个信号,以检查是否需要进行任何转换。

我的向导代码如下:

from openerp.osv import osv
from openerp.osv import fields
from openerp.tools.translate import _

class ref_generic_request(osv.osv_memory):
    _name='ref.generic.request'

    _columns = {
        'reformulation_info': fields.text('Reformulation instructions', help='Instructions for the requestor justification the reformulation needs'),
            }


    def save_info(self, cr, uid, ids, context=None):
        if 'active_id' in context:
            info=self.browse(cr,uid,ids)[0].reformulation_info
            self.pool.get('generic.request').write(cr,uid,context['active_id'],{'reformulation_info' : info, 'needs_reformulation': 1})
        return {
                'type': 'ir.actions.act_window_close',
         }
ref_generic_request()

在这种特殊情况下,我想在我的 generic.request 对象中发出这个函数的信号:

def req_reformulate_request(self, cr, uid, ids, context=None):
    req = self.browse(cr, uid, ids, context=context)
    goto = req[0].state
    if goto:
        self.write(cr, uid, ids, {'goto': goto, 'state': 'req_reformulation', 'needs_reformulation': True} )
    else:
        self.write(cr, uid, ids, {'state': 'req_reformulation', 'needs_reformulation': True})
    self.insert_trace(cr, uid, ids, context)
    return True

我该怎么做?

我必须调用def save_info() 中的函数吗? (我试过这个电话self.pool.get('generic.request').req_reformulate_request(cr, uid, context['active_id'], context),但它会抛出很多错误,我很快就放弃了这种方法)

我必须返回 'signal': 'generic.request.req_reformulate_request' 之类的东西吗? 由于我没有找到任何有关这方面的信息,我完全迷失在这里,所以任何帮助将不胜感激!

谢谢!

这是工作流定义:

<?xml version="1.0"?>
<openerp>
    <data>
        <record model="workflow" id="wkf_request">
            <field name="name">request.wkf</field>
            <field name="osv">generic.request</field>
            <field name="on_create">True</field>
        </record>

        <!-- actividades -->
        <record model="workflow.activity" id="act_draft">
            <field name="wkf_id" ref="wkf_request" />
            <field name="flow_start">True</field>
            <field name="name">request_draft</field>
            <field name="kind">function</field>
            <field name="action">request_draft()</field>
        </record>

        <record model="workflow.activity" id="act_submit">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_submitted</field>
            <field name="kind">function</field>
            <field name="action">submit_request()</field>
        </record>

        <record model="workflow.activity" id="act_confirm">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_confirmed</field>
            <field name="kind">function</field>
            <field name="action">confirm_request()</field>
        </record>

        <record model="workflow.activity" id="act_closed_nconf">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_closed_nconf</field>
            <field name="action_id" ref="ir_actions_server_send_email_when_closed_nconf"/>
            <field name="kind">function</field>
            <field name="action">close_nconf_request()</field>
            <field name="flow_stop">True</field>
        </record>

        <record model="workflow.activity" id="act_req_reformulate">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_reformulation</field>
            <field name="kind">function</field>
            <field name="action">req_reformulate_request()</field>
        </record>

        <record model="workflow.activity" id="act_treatment">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_treatment</field>
            <field name="kind">function</field>
            <field name="action">treat_request()</field>
        </record>

        <record model="workflow.activity" id="act_taken">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_take</field>
            <field name="kind">function</field>
            <field name="action">take_request()</field>
        </record>

        <record model="workflow.activity" id="act_given">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_give</field>
            <field name="kind">function</field>
            <field name="action">give_request()</field>
        </record>

        <record model="workflow.activity" id="act_closed">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_closed</field>
            <field name="kind">function</field>
            <field name="action">close_request()</field>
            <field name="flow_stop">True</field>
        </record>

        <record model="workflow.activity" id="act_awaiting_auth">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_awaiting_authorization</field>
            <field name="kind">function</field>
            <field name="action">wait_auth_request()</field>
        </record>

        <record model="workflow.activity" id="act_closed_ref">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_closed_ref</field>
            <field name="kind">function</field>
            <field name="action">close_ref_request()</field>
            <field name="flow_stop">True</field>
        </record>

        <record model="workflow.activity" id="act_awaiting_appr">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_awainting_approval</field>
            <field name="kind">function</field>
            <field name="action">wait_appr_request()</field>
        </record>

        <record model="workflow.activity" id="act_closed_disappr">
            <field name="wkf_id" ref="wkf_request" />
            <field name="name">request_closed_disappr</field>
            <field name="kind">function</field>
            <field name="action">close_disappr_request()</field>
            <field name="flow_stop">True</field>
        </record>
        <!-- transições -->
        <record model="workflow.transition" id="request_t1">
            <field name="act_from" ref="act_draft" />
            <field name="act_to" ref="act_submit" />
            <field name="signal">submit_request</field>
        </record>
        <!--
        <record model="workflow.transition" id="request_t101">
            <field name="act_from" ref="act_draft" />
            <field name="act_to" ref="act_confirm" />
            <field name="signal">submit_request</field>
            <field name="condition">check_responsible()</field>
        </record>
        -->

        <record model="workflow.transition" id="request_t102">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_confirm" />
            <field name="condition">check_responsible()</field>
        </record>

        <record model="workflow.transition" id="request_t2">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_req_reformulate" />
            <field name="signal">req_reformulate_request</field>
        </record>

        <record model="workflow.transition" id="request_t3">
            <field name="act_from" ref="act_req_reformulate" />
            <field name="act_to" ref="act_submit" />
            <field name="signal">submit_request</field>
        </record>

        <record model="workflow.transition" id="request_t1001">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_confirm" />
            <field name="condition">ref_goto_confirmed()</field>
        </record>

        <record model="workflow.transition" id="request_t1002">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_treatment" />
            <field name="condition">ref_goto_treatment()</field>
        </record>


        <record model="workflow.transition" id="request_t4">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_confirm" />
            <field name="signal">confirm_request</field>
        </record>

        <record model="workflow.transition" id="request_t5">
            <field name="act_from" ref="act_submit" />
            <field name="act_to" ref="act_closed_nconf" />
            <field name="signal">close_nconf_request</field>
        </record>

        <record model="workflow.transition" id="request_t6">
            <field name="act_from" ref="act_confirm" />
            <field name="act_to" ref="act_treatment" />
            <field name="signal">treat_request</field>
        </record>

        <record model="workflow.transition" id="request_t7">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_closed" />
            <field name="signal">close_request</field>
        </record>

        <record model="workflow.transition" id="request_t7011">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_taken" />
            <field name="signal">take_request</field>
        </record>

        <record model="workflow.transition" id="request_t7012">
            <field name="act_from" ref="act_taken" />
            <field name="act_to" ref="act_treatment" />
        </record>

        <record model="workflow.transition" id="request_t7021">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_given" />
            <field name="signal">give_request</field>
        </record>

        <record model="workflow.transition" id="request_t7022">
            <field name="act_from" ref="act_given" />
            <field name="act_to" ref="act_treatment" />
        </record>

        <record model="workflow.transition" id="request_t8">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_awaiting_auth" />
            <field name="signal">wait_auth_request</field>
        </record>

        <record model="workflow.transition" id="request_t9">
            <field name="act_from" ref="act_awaiting_auth" />
            <field name="act_to" ref="act_closed_ref" />
            <field name="signal">close_ref_request</field>
        </record>

        <record model="workflow.transition" id="request_t10">
            <field name="act_from" ref="act_awaiting_auth" />
            <field name="act_to" ref="act_treatment" />
            <field name="signal">auth_send_processing</field>
        </record>

        <record model="workflow.transition" id="request_t11">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_req_reformulate" />
            <field name="signal">req_reformulate_request</field>
        </record>

        <record model="workflow.transition" id="request_t12">
            <field name="act_from" ref="act_treatment" />
            <field name="act_to" ref="act_awaiting_appr" />
            <field name="signal">wait_appr_request</field>
        </record>

        <record model="workflow.transition" id="request_t13">
            <field name="act_from" ref="act_awaiting_appr" />
            <field name="act_to" ref="act_closed_disappr" />
            <field name="signal">close_disappr_request</field>
        </record>

        <record model="workflow.transition" id="request_t14">
            <field name="act_from" ref="act_awaiting_appr" />
            <field name="act_to" ref="act_treatment" />
            <field name="signal">appr_send_processing</field>
        </record>

    </data>
</openerp>

在这种特殊情况下,我想触发的转换是 id="request_t2"

<record model="workflow.transition" id="request_t2">
    <field name="act_from" ref="act_submit" />
    <field name="act_to" ref="act_req_reformulate" />
    <field name="signal">req_reformulate_request</field>
</record>

这是工作流程的屏幕截图,突出显示的过渡是我要触发的过渡。

【问题讨论】:

  • 您是否使用真实的工作流程(活动、交易等)?如果是这样,请向我们提供工作流程的 xml 代码 :-)
  • 嗨,我刚刚添加了工作流定义。并指出我想发出信号的过渡。谢谢! (我也会打印工作流程并添加它)
  • 刚刚添加的工作流截图
  • 啊好的谢谢,我的意思是转换而不是转换^^
  • 在 OpenERP 社区的一位用户的帮助下才开始工作。无论如何,感谢您的宝贵时间!

标签: workflow signals openerp wizard openerp-7


【解决方案1】:

我终于找到了答案。我将把修改后的python代码留在这里!

from openerp.osv import osv
from openerp.osv import fields
from openerp.tools.translate import _
import netsvc

class ref_generic_request(osv.osv_memory):
    _name='ref.generic.request'

    _columns = {
        'reformulation_info': fields.text('Reformulation instructions', help='Instructions for the requestor justification the reformulation needs'),
            }


    def save_info(self, cr, uid, ids, context=None):
        if 'active_id' in context:
            info=self.browse(cr,uid,ids)[0].reformulation_info
            self.pool.get('generic.request').write(cr,uid,context['active_id'],{'reformulation_info' : info, 'needs_reformulation': 1})
            wf_service = netsvc.LocalService('workflow')
            wf_service.trg_validate(uid,'generic.request',context['active_id'],'req_reformulate_request',cr)    
        return {
                'type': 'ir.actions.act_window_close',

         }

ref_generic_request()

所以,恢复,我不得不在我的代码中添加 3 行: import netsvc

并且,在保存我的信息后,使用这两个调用工作流:

wf_service = netsvc.LocalService('workflow')
wf_service.trg_validate(uid,'generic.request',context['active_id'],'req_reformulate_request',cr)

希望这会对某人有所帮助! :)

【讨论】:

  • 似乎是对的,现在我看到您使用的是名为 ref.generic.model 的瞬态模型,所以我的回答并不正确。我已经删除了,你的已经足够了:-)
【解决方案2】:

odoo8 上使用signal_workflow 方法。

@api.multi
def confirm_multi_payslips(self):
    for payslip in self:
        payslip.signal_workflow('hr_verify_sheet')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多