如何在cron调用的方法中将cron id作为arg传递

时间:2018-06-21 06:07:01

标签: python xml cron odoo odoo-11

我有很多cron在不同时间调用同一方法,并且该方法需要找到哪个cron调用了该方法,以基于该cron查找其他记录。

args不能固定。最终用户会在odoo的前端侧创建大量的cron,因此,只要cron执行并调用该方法,cron就会将其自己的id传递给该方法,因此它应该是动态的。

由cron调用的Python方法:

@api.model
def send_feedback_email_cron(self,id):
    #id is needed to find global channel in which this cron is set.
    global_channel = self.global_channel_id.search([('cron_id','=',id)])
    for rule in global_channel.email_rule_ids:
        rule.send_customer_review_email()
    return True

验证码:

<record id="ir_cron_send_customer_feedback_email_job" model="ir.cron">
    <field name="name">Send Feedback Email to customer</field>
    <field eval="False" name="active"/>
    <field name="user_id" ref="base.user_root"/>
    <field name="interval_number">4</field>
    <field name="interval_type">hours</field>
    <field name="numbercall">-1</field>
    <field eval="False" name="doall"/>
    <field eval="ref('customer_review_global_channel_ept.model_email_global_channel_rule_ept')" name="model_id" />
    <field name="state">code</field>
    <field name="code">model.send_feedback_email_cron()</field>
</record>

1 个答案:

答案 0 :(得分:0)

使用ir.cron functionargs字段:

<record id="ir_cron_send_customer_feedback_email_job" model="ir.cron">
    <field name="name">Send Feedback Email to customer</field>
    <field eval="False" name="active"/>
    <field name="user_id" ref="base.user_root"/>
    <field name="interval_number">4</field>
    <field name="interval_type">hours</field>
    <field name="numbercall">-1</field>
    <field eval="False" name="doall"/>
    <field eval="ref('customer_review_global_channel_ept.model_email_global_channel_rule_ept')" name="model_id" />
    <field name="function" eval="'send_feedback_email_cron'"/>
    <field name="args" eval="'(...your args...)'"/>
</record>