quinta-feira, 14 de março de 2013

Tarefas agendadas OpenERP

O OpenERP nos permite criar tarefas para executar periodicamente como: enviar emails, processar arquivos, buscar modificações.

Se você estiver desenvolvendo um módulo e precisar dessa funcionalidade, você vai precisar duas coisas

Primeira: Dentro do xml de seu módulo criar um record do modelo ir.cron, abaixo disponibilizei um exemplo. Você deve especificar o model, e a função que vai ser executada.
Com interval_number e interval_type você configura a frequência de execução da sua tarefa. O type pode ser: (minutes, hours, days, weeks, months, years)
Pode utilizar também o parâmetro args para passar parâmetros  ou seja pode criar vários registros que chamam o mesmo método mas passar parâmetros diferentes. Ex: <field name="args" eval="'(1,False,)'" />


<?xml version="1.0" encoding="UTF-8"?>

<openerp>
    <data>
        <record forcecreate='True' id='ir_cron_send_changes_to_message_queue' model='ir.cron'>
            <field name="name">Run Schedule to get changes in ERP and send to MQ</field>
            <field name="active" eval='True' />
            <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 name="doall" eval='False' />
            <field name="model" eval="'modulo.times'" />
            <field name="function" eval="'send_changes_to_rabbitmq'" />
            <field name="args" eval="'()'" />
        </record>
    </data>
</openerp>


O Segundo é definir dentro do seu objeto o evento com o mesmo nome que você definiu no xml. A assinatura dele deve ter no minimo 3 parâmetros (self, cr, uid), caso você passe no args do xml algum parâmetro  lembre-se de acrescentar o parâmetro ao método, pois como é um método que roda no servidor, você não terá indicação de que ocorreu erro, apenas olhando no log.
cr - cursor usado para conectar ao banco de dados
uid - Id do usuário atual - configurado no xml.

def send_changes_to_rabbitmq(self, cr, uid, ids=None):  
     pass


É isso, no lugar do pass você coloca seu código do que precisa ser feito.



Nenhum comentário:

Postar um comentário