2013-09-13 3 views
1

У меня есть модуль приложения, загруженного сотрудников для инициализации базы данных с пользовательских данных в предыдущей версии модуля:Удаление записей на обновления модуля на OpenERP

<?xml version="1.0"?> 
<openerp> 
    <data> 
     .... 
     <!-- John Smith --> 
     <record id="emp_john_smith" model="hr.employee"> 
      <field name="name">John Smith</field> 
      <field name="company_id" ref="base.main_company"/> 
      <field name="department_id" ref="dp_production"/> 
      <field name="job_id" ref="jb_production_officer"/> 
      <field name="work_email">[email protected]</field> 
      <field name="begin_date">2012-01-01</field> 
      <field name="gender">male</field> 
      <field name="work_location">Madrid</field> 
      <field name="lang">es_ES</field>    
     </record> 
    .... 
    <record id="ctr_john_smith_hr" model="hr.contract"> 
     <field name="name">John Smith Production Contract</field> 
     <field name="employee_id" ref="emp_john_smith"/> 
     <field name="job_id" ref="jb_production_officer"/> 
     <field name="email">[email protected]</field> 
     <field name="date_start">2012-01-01</field> 
     <field name="wage">0</field> 
     <field name="percent_working_hours">15</field> 
     <field name="working_hours" ref="spain_calendar"/> 
    </record> 
    </data> 
</openerp> 

Но эти записи должны быть удалены на следующем выпуске этот модуль. Какой элемент записи я должен использовать в файле данных XML следующей версии для удаления этих записей?

ответ

4

Вы можете использовать тег удаления в XML. Не удаляйте записи данных xml, созданные в XML-файле. В новой версии просто добавьте тег delete в конец файла.

<delete id="module_name.xml_record_id" model="hr.employee"/> 

или вы можете использовать функцию бирку Yucer сказал

+0

Почему не удалить его из файла XML? – yucer

+0

Удаление xml-файла будет иметь эффект только в новой базе данных. Таким образом, удаление записи xml с помощью тега delete также удалит запись, добавленную в базу данных. – OmaL

1

Этот код должен работать:

<?xml version="1.0"?> 
<openerp> 
    .... 
    <data> 
     <!-- removes John Smith--> 
     <function model="hr.contract" name="unlink"> 
      <function eval="[[('employee_id', '=', ref('emp_john_smith'))]]" model="hr.contract" name="search"/> 
     </function> 
     <function model="hr.employee" name="unlink"> 
      <!-- ids = --> <value eval="[ref('emp_john_smith')]"/> 
     </function> 
    </data> 
</openerp> 

Но его немного рискованный удалить hr.employee, потому что он имеет много связанных сущностей. Может быть, лучше «отключить» их так:

<?xml version="1.0"?> 
<openerp> 
    .... 
    <data noupdate="1"> 
     <!-- deactivates John Smith --> 
     <function model="hr.employee" name="deactivate"> 
      <!-- ids = --> <value eval="[ref('emp_john_smith')]"/> 
     </function> 
    </data> 
</openerp> 

где Деактивировать является метод так:

class hr_employee(Model): 
    _name = str('hr.employee') 
    _inherit = str('hr.employee') 

    def deactivate(self, cr, uid, ids, context=None): 
     if isinstance(ids, (int, long)): 
      ids = [ids] 
     vals = {'active': False} 
     res = super(hr_employee, self).write(cr, uid, ids, vals, context) 
     return res 
Смежные вопросы