XML 数据序列化

4.2版本之后, OpenERP 提供基于XML的数据序列化格式.

基本的 OpenERP XML 文件格式如下:

  1. <?xml version="1.0"?>
  2. <openerp>
  3. <data>
  4. <record model="model.name_1" id="id_name_1">
  5. <field name="field1">
  6. field1 content
  7. </field>
  8. <field name="field2">
  9. field2 content
  10. </field>
  11. (...)
  12. </record>
  13. <record model="model.name_2" id="id_name_2">
  14. (...)
  15. </record>
  16. (...)
  17. </data>
  18. </openerp>

Fields 内容是 strings 类型,保存在以 UTF-8 编码的 XML 格式的文件中.

下面是一个来自 OpenERP 的源码的例子 (base_demo.xml 在 base 模块中):

  1. <record model="res.company" id="main_company">
  2. <field name="name">OpenERP SA</field>
  3. <field name="partner_id" ref="main_partner"/>
  4. <field name="currency_id" ref="EUR"/>
  5. </record>
  6. <record model="res.users" id="user_admin">
  7. <field name="login">admin</field>
  8. <field name="password">admin</field>
  9. <field name="name">Administrator</field>
  10. <field name="signature">Administrator</field>
  11. <field name="action_id" ref="action_menu_admin"/>
  12. <field name="menu_id" ref="action_menu_admin"/>
  13. <field name="address_id" ref="main_address"/>
  14. <field name="groups_id" eval="[(6,0,[group_admin])]"/>
  15. <field name="company_id" ref="main_company"/>
  16. </record>

最后的字段定义的 admin user :

  • 登录,密码等字段比较直接.

  • ref 属性用于填充两个记录之间的关系 :

  1. <field name="company_id" ref="main_company"/>

company_id 字段是一个多对一(many2one) 从USER对象到 COMPANY 对象, main_company 是关系的 id.

  • eval 属性允许将一些 python 代码放进 xml 中: 这里 groups_id 字段是一个多对多(many2many)的关系. 对于这样一个字段, “[(6,0,[group_admin])]“ 的意思为 : 删除所有与当前用户相关的组,并使用 [group_admin] 作为新的关联组 (and group_admin 是另一个记录的 id ).

  • search 属性允许你在不指定 xml id 的情况下. 查找相关的记录. 你可以指定一个搜索条目来寻找想要查询的字段. 条目是一个 tuple 的 lists 用于预定义的搜索方法, 如果有多个结果, 通常选中(第一个):

只是 search 在演示数据的一个经典的例子:这里我们并不关心用哪一个 partner 来进行测试,所以我们给出一个空的 list . 注意 model 属性是必须的.

一些典型的 XML 元素描述如下.

记录标签

通过 record 标签来实现新数据的添加. 这里 : model 属性是必须的. Model 是插入数据的对象名. 它还有一个可选的属性: id. 如果给出该属性, 在同一个文件中, 这个名字对应的变量将在以后使用, 以便生成新产生资源 ID 的引用.

一个 record 标签可以包含多个 field 标签. 他们指定了记录的 fields 值. 如果不指定一个 field 默认值将会被使用.

例子

  1. <record model="ir.actions.report.xml" id="l0">
  2. <field name="model">account.invoice</field>
  3. <field name="name">Invoices List</field>
  4. <field name="report_name">account.invoice.list</field>
  5. <field name="report_xsl">account/report/invoice.xsl</field>
  6. <field name="report_xml">account/report/invoice.xml</field>
  7. </record>

field tag

对应的属性如下:

  • name

    o 必须的属性,用于指定字段名称

  • eval

    o 用于指定添加值的 python 语句

  • ref

    o 定义在此文件中的 id 的引用

function tag

  • model:

  • name:

  • eval

    o 用于评价将被调用的方法的属性列表,包括 cr 和 uid

例子

  1. <function
  2. model="ir.ui.menu"
  3. name="search"
  4. eval="[[('name','=','Operations')]]"/>

getitem tag

采用标签最后一个子节点的子集.

  • type

    • int 或 list
  • index

  • int or string

例子

节点返回的一个 ids 的列表的第一个元素:

  1. <getitem index="0" type="list">
  2. <function
  3. model="ir.ui.menu"
  4. name="search"
  5. eval="[[('name','=','Operations')]]"/>
  6. </getitem>