如何在Odoo 10上创建自动化任务?

时间:2017-11-10 21:19:39

标签: python python-2.7 odoo-10 odoo

我正在尝试创建一个定期运行的任务。

我在名为' 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')

但它似乎不起作用,不会在记录器上打印。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  1. 添加文件xml <field eval="True" name="active" />
  2. 添加代码python
  3. @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。