python - Odoo 11 : get cron id or name inside the called method for ir. 手动创建的 cron 不仅仅是从 XML 创建的

标签 python cron odoo odoo-11

我为 my_object 分配了 (m2o) 一个 cron(自动化 -> 计划操作)。 cron 执行(Python 代码)一个方法。 我需要有 cron 的 id(或名称)来调用方法内部的方法,以便对分配给 cron 的对象执行一些操作。

我认为 cron-object 在方法执行时没有定义,但可以在调用方法时定义。所以我认为方法是将 id 作为参数传递,但我不知道该怎么做。我尝试使用“env”但没有成功。

Cron Python 代码

<record id="myobject_cron_task" forcecreate='True' model="ir.cron">
    <field name="name">MyModel Task</field>
    <field name="active" eval="True" />
    <field name="user_id" ref="base.user_root"/>
    <field name="interval_number">1</field>
    <field name="interval_type">minutes</field>
    <field name="numbercall">-1</field>
    <field name="model_id" ref="model_my_object"/>
    <field name="state">code</field>
    <field name="code">model.my_method(cron_id)</field>
</record>

方法

def my_method(self, active_cron_id):
    sel_objec = self.env['my.object'].search([('cron_id', '=', active_cron_id)])
    print(sel_objec)

注意:同样的问题asked here无解

最佳答案

检索从设置菜单创建的crons的数据库id(无xml_id)

事实证明,odoo 也将相同的 context 传递给了执行,因此您添加到 context 的任何内容都将在 context 中找到它方法中的self,因此只需在上下文中添加cronId即可code> 只需重写两个 方法:

from odoo import models, api

class IrCron(models.Model):
    _inherit = 'ir.cron'

    @api.model
    def _callback(self, cron_name, server_action_id, job_id):
        """ to handle cron thread executed by Odoo."""
        self = self.with_context(cron_id=job_id)
        return super(IrCron, self)._callback(cron_name,server_action_id, job_id)

    @api.multi
    def method_direct_trigger(self):
        """ to handle manual execution using the button."""
        for rec in self:
            # rec = rec.with_context(cron_id=rec.id)
            super(IrCron, rec).method_direct_trigger()
        return True

在你的方法中:

def my_method(self):
    cron_id = self.env.context.get('cron_id', False)
    if cron_id:
        cron = self['ir.cron'].browse(cron_id)
        print(cron)

我对此进行了测试,它可以工作,希望它对您来说很容易,并且不需要在 cron 中传递任何参数或任何内容。希望这就是您正在寻找的。 默认情况下,Odoo 逻辑不提供此信息,因此您需要更改此行为。没有简单的方法可以做到这一点。

关于python - Odoo 11 : get cron id or name inside the called method for ir. 手动创建的 cron 不仅仅是从 XML 创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157779/

相关文章:

python - APScheduler 在上次运行完成后重复作业

python - 更改 Tensorflow 中新分配变量的形状

linux - 简单——使用 cronjob 运行 shell 脚本

linux - Linux 程序如何知道它是如何启动 : from command line? 或由 cron 或其他东西启动的?

python - 当我尝试运行 Odoo 时,为什么会出现错误 "Name node can' t be use with 'None' Constant”?

python - 无法使用 pyodbc 连接到 Azure SQL Server

python - 如何将具有 numpy 数组值的 Pandas 系列转换为数据框

Jenkins DSL 插件 – 未生成 cron 触发

python-2.7 - 创建记录 odoo 时出错

python - 如何设置 Odoo 智能按钮的顺序?