This is the documentation for older versions of Odoo (formerly OpenERP).

See the new Odoo user documentation.

See the new Odoo technical documentation.

XML 数据序列化

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

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

<?xml version="1.0"?>
<openerp>
    <data>
    <record model="model.name_1" id="id_name_1">
        <field name="field1">
            field1 content
        </field>
        <field name="field2">
            field2 content
        </field>
        (...)
    </record>
    <record model="model.name_2" id="id_name_2">
        (...)
    </record>
    (...)
    </data>
</openerp>

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

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

<record model="res.company" id="main_company">
    <field name="name">OpenERP SA</field>
    <field name="partner_id" ref="main_partner"/>
    <field name="currency_id" ref="EUR"/>
</record>

<record model="res.users" id="user_admin">
    <field name="login">admin</field>
    <field name="password">admin</field>
    <field name="name">Administrator</field>
    <field name="signature">Administrator</field>
    <field name="action_id" ref="action_menu_admin"/>
    <field name="menu_id" ref="action_menu_admin"/>
    <field name="address_id" ref="main_address"/>
    <field name="groups_id" eval="[(6,0,[group_admin])]"/>
    <field name="company_id" ref="main_company"/>
</record>

最后的字段定义的 admin user :

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

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

<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 用于预定义的搜索方法, 如果有多个结果, 通常选中(第一个):

<field name="partner_id" search="[]" model="res.partner"/>

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

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

记录标签

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

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

例子

<record model="ir.actions.report.xml" id="l0">
     <field name="model">account.invoice</field>
     <field name="name">Invoices List</field>
     <field name="report_name">account.invoice.list</field>
     <field name="report_xsl">account/report/invoice.xsl</field>
     <field name="report_xml">account/report/invoice.xml</field>
</record>

field tag

对应的属性如下:

  • name

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

  • eval

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

  • ref

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

function tag

  • model:

  • name:

  • eval

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

例子

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

getitem tag

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

  • type
    • int 或 list

  • index

  • int or string

例子

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

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