我正在尝试创建一个定期运行的任务。
我在名为' Data'的目录上创建了这个文件。并将其添加到清单文件中:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="ir_cron_scheduler_action" model="ir.cron">
<field name="name">scheduler</field>
<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 eval="False" name="doall"/>
<field eval="'res.company'" name="model"/>
<field eval="'refresh'" name="function"/>
</record>
</data>
我在该模型上有以下方法
def refresh(self):
_logger.info(' This is a test')
但它似乎不起作用,不会在记录器上打印。 有什么想法吗?
答案 0 :(得分:2)
<field eval="True" name="active" />
@api.model
def refresh(self):
_logger.info(' This is a test')
答案 1 :(得分:1)
正如@Karaka Mohamed所说,你应该为你的方法添加@api.model
。然后,我会向XML添加一些属性,如args
,以指定空参数,或nextcall
,您必须在其中指明第一次执行cron任务的日期。它应该是未来的日期,除非您将属性doall
设置为 True (这将运行过去未执行的cron任务)。
从nextcall
日期开始,您的cron任务将永远每分钟执行一次(正如您在定义中指定的那样)。
例如,使用此行,您的任务将在生成后五分钟内首次执行:
<field name="args" eval="'()'"/>
<field name="nextcall" eval="(DateTime.now() + timedelta(minutes=5)).strftime('%Y-%m-%d 00:00:00')" />
警告:由于您已在XML文档的顶部设置了<data noupdate="1">
,因此此处所做的更改不会在数据库中更新。因此,您可以直接在ir_cron
表中的PostgreSQL中设置这些更改,或者您可以修改cron任务的XML ID,以便在下次升级模块时创建一个新ID。