2017-11-10 103 views
1

我试图创建一个运行periodicaly任务。如何在Odoo 10创建自动执行任务?

我做了一个名为“数据”目录中找到此文件,并将它添加到清单文件:

<?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') 

以下方法但它似乎不工作,不打印在记录器上。 任何想法?

回答

2
  1. 添加在您XML文件的<field eval="True" name="active" />
  2. 添加在你的代码的Python

@api.model def refresh(self): _logger.info(' This is a test')

1

正如@Karaka穆罕默德说,你应该添加@api.model到你的方法。然后,我将一些属性添加到XML像args,指定空参数,或nextcall,中,你必须要指出的cron任务的第一个执行日期。这应该是一个将来的日期,除非你的属性doall设置为(这将运行在过去的未执行的后台任务)。

从这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">,此处所做的更改不会在数据库中更新。所以,你可以在PostgreSQL中直接设置这些变化,在ir_cron表,或者你可以修改的cron任务的XML ID,以创建一个新的下列时间您升级模块。