gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:31:22 32 4
gpt4 key购买 nike

我为 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com