zoukankan      html  css  js  c++  java
  • odoo10学习笔记十六:定时任务

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189382.html 

    一:定义定时器数据模型

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

    复制代码
    复制代码
    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()
    复制代码
    复制代码

    二:创建定时器视图

    复制代码
    复制代码
    <odoo>
        <data>
            <!--1:创建定时器表单-->
            <record model="ir.ui.view" id="view_scheduler_form">
                <field name="name">scheduler.demo.form</field>
                <field name="model">scheduler.demo</field>
                <field name="arch" type="xml">
                    <form string="Schedule Form">
                        <group>
                            <field name="name"/>
                            <field name="numberOfUpdates"/>
                            <field name="lastModified"/>
                        </group>
                    </form>
                </field>
            </record>
            <!--2:创建定时器列表视图-->
            <record model="ir.ui.view" id="view_scheduler_tree">
                <field name="name">scheduler.demo.tree</field>
                <field name="model">scheduler.demo</field>
                <field name="arch" type="xml">
                    <tree string="Schedule Tree">
                        <field name="name"/>
                        <field name="numberOfUpdates"/>
                        <field name="lastModified"/>
                    </tree>
                </field>
            </record>
            <!--最重要:定义定时动作,制定定时任务-->
            <record id="ir_cron_scheduler_demo_action" model="ir.cron">
                <field name="name">Demo scheduler</field>
                <field name="user_id" ref="base.user_root"/>
                <field name="interval_number">2</field>
                <field name="interval_type">minutes</field>
                <field name="numbercall">-1</field>
                <field eval="False" name="doall"/>
                <field eval="'scheduler.demo'" name="model"/>
                <field eval="'process_demo_scheduler_queue'" name="function"/>
            </record>
            <!--定义定时器视图展示动作-->
            <record model="ir.actions.act_window" id="scheduler_demo_list_action">
                <field name="name">计划任务Demo</field>
                <field name="res_model">scheduler.demo</field>
                <field name="view_mode">tree,form</field>
            </record>
            <!--定义菜单-->
            <menuitem id="scheduler_demo_menu" name="计划任务Demo"
              parent="top_menu"/>
            <menuitem id="scheduler_demo_list_menu" name="计划任务Demo"
              parent="scheduler_demo_menu"
              action="scheduler_demo_list_action"/>
        </data>
    </odoo>
    复制代码
    复制代码

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

    复制代码
    复制代码
    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中引入定时器视图文件

  • 相关阅读:
    线程实现的两种方式
    webhook功能概述
    Linux 常用高频命令
    Mac安装Homebrew的正确姿势
    Mac 环境变量配置
    详解k8s零停机滚动发布微服务
    详解k8s原生的集群监控方案(Heapster+InfluxDB+Grafana)
    白话kubernetes的十万个为什么(持续更新中...)
    一个典型的kubernetes工作流程
    k8s实战之从私有仓库拉取镜像
  • 原文地址:https://www.cnblogs.com/ygj0930/p/11189382.html
Copyright © 2011-2022 走看看