odoo10學習筆記十六:定時任務

 

轉載請註明原文地址:http://www.javashuo.com/article/p-volpoqnj-me.html html

 

一:定義定時器數據模型api

模型中定義須要用到的字段、定時方法服務器

複製代碼
複製代碼
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>
複製代碼
複製代碼

其中,定義定時器任務的標籤有如下重要字段:ui

複製代碼
複製代碼
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一塊兒決定了任務時機到來時,調用哪一個方法執行。
複製代碼
複製代碼

 

三:註冊定時器spa

在init中import定時器模型;code

在manifest中引入定時器視圖文件orm

相關文章
相關標籤/搜索