odoo开发教程十六:定时任务


一:定义定时器数据模型

模型中定义需要用到的字段、定时方法

from odoo import models, fields, api, exceptions
import logging
from datetime import datetime
_logger = logging.getLogger(__name__)

class scheduler(models.Model):
    _name = 'scheduler.demo'
   
    #需要用到的字段
    name = fields.Char(required=True)
    numberOfUpdates = fields.Integer('Number of updates')
    lastModified = fields.Datetime('Last updated')
    #定时方法
    def process_demo_scheduler_queue(self):
        scheduler_line_ids = self.env['scheduler.demo'].search([])
        for scheduler_line in scheduler_line_ids:
            _logger.info('line:' + scheduler_line.name)
            scheduler_line.numberOfUpdates += 1
            scheduler_line.lastModified = datetime.utcnow()

二:创建定时器视图


    
        
        
            scheduler.demo.form
            scheduler.demo
            
                
scheduler.demo.tree scheduler.demo Demo scheduler 2 minutes -1 计划任务Demo scheduler.demo tree,form <!--定义菜单-->

其中,定义定时器任务的标签有以下重要字段:

name:
定时任务名称

user_id:
执行定时任务的用户,不同的用户是有不同权限的,为了保证能有足够权限执行定时任务,一般这里就是base.user_root

interval_number:
任务执行的频次,和interval_type字段一起决定了任务执行的间隔时间,比如这里为interval_number为2,interval_type为minutes,就是任务每2分钟执行一次。

interval_type:
任务执行频次的单位,可选项有: minutes,hours,days,work_days,weeks,months,意思很好理解,work_days是星期几执行。

numbercall:
循环运行的次数,比如你填10,那么任务执行10次后将不再执行,这里-1代表一直执行下去。

doall:
如果在服务器重启期间错过了执行时机,是否再次补充执行。

model:
任务方法所在模块

function:
任务方法,与model一起决定了任务时机到来时,调用哪个方法执行。

三:注册定时器

在init中import定时器模型;

在manifest中引入定时器视图文件

相关