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

See the new Odoo user documentation.

See the new Odoo technical documentation.

操作

简介

actions定义系统的行为来响应用户的动作;登录的新用户,双击invoice,点击动作按钮,...

简单的动作也有很多类型:

  • Window: 打开一个新窗口

  • Report: 打印报表

    o Custom Report: The personalized reports o RML Report: The XSL:RML reports

  • Wizard: 开始向导

  • Execute: server端方法的执行。

  • Group: 在一个组中集合多个动作

发生动作的以下事件:

  • 用户连接,

  • 用户双击菜单项,

  • 用户点击图标’print’和’action’.

Example of events

在OpenERP中,所有的动作都被描述了而没有配置。两个例子:

  • 双击菜单项时打开窗口

  • 用户连接

Opening of the menu

当用户打开菜单选择“Operations > Partners > Partners Contact”,下一步是给用户该动作承诺的信息。

  1. 在IR中查询动作

  2. 执行动作
    1. 如果这个动作类型是打开新窗口,它显示给用户:必须对选定的对象打开这个新窗口,并且它显示视图(form or list)和使用的文件。

    2. 用户要求这个对象返回必要的信息来显示在表单视图中,字段的描述和XML视图

用户连接

当一个新用户连接到服务器端时,客户端会搜索用于显示给该用户的首页动作。一般情况下,这个动作是:在‘Operations’部分打开菜单。

步骤是:

  1. 阅读用户文件来获取ACTION_ID

  2. 读取这个动作并且执行它

字段

Action Name

The action name

Action Type

一直是’ir.action.act_window’

View Ref

用于显示对象的视图

Model

对象公布的model

Type of View

视图类型(Tree/Form)

Domain Value

在视图中减少可视数据的domain

The view

view描述表单视图或是数据列表如何显示在屏幕上。视图可以是Form类型或是Tree类型,这个取决于他们显示一个表单来编辑还是列表来看所有数据。

有动作打开‘Tree’模式时,一个表单就会被调用。表单视图可以从列表形式中打开。

The domain

这个参数让你可以控制在搜索视图中,哪些资源可以显示。

例如,在invoice这个实例中,你可以定义一个动作,这个动作用于打开发票没有付费的视图。

domain用Python写的,是元组的列表。这个元组有三个元素:

  • 测试必须完成的字段

  • 用于测试的运算符(<, >, =, like)

  • 已测试的值

如果你想要获得‘Draft’发票,使用以下的domain:[(‘state’,’=’,’draft’)]。

在简单的视图中,domain定义了资源,这个资源是树根(the roots of the tree)。而对于其他的资源,如果用户开发树的分支,那么即使他们不在domain中,也会被显示出来。

Window Action

Actions are explained in more detail in section "Administration Modules - Actions". Here's the template of an action XML record :

<record model="ir.actions.act_window" id="action_id_1">
    <field name="name">action.name</field>
    <field name="view_id" ref="view_id_1"/>
    <field name="domain">["list of 3-tuples (max 250 characters)"]</field>
    <field name="context">{"context dictionary (max 250 characters)"}</field>
    <field name="res_model">Open.object</field>
    <field name="view_type">form|tree</field>
    <field name="view_mode">form,tree|tree,form|form|tree</field>
    <field name="usage">menu</field>
    <field name="target">new</field>
</record>

这里的

  • id是动作在表格“ir.actions.act_window”中的标识符。它必须是唯一的。

  • name是动作的名称(这个字段是必须的)

  • view_id是当动作被激活时要显示的视图的名称。如果这个字段没有定义,拥有最高优先级的(如果两个视图有相同的优先级,那么先定义的一类视图就会被使用。),并且与对象res_model相关的一类视图就会被使用。

  • domain是约束条件的列表,用于筛选搜索结果使更少的记录显示在视图上。约束条件列表用AND连接在一起:当所有的约束条件都满足时,表格记录就会显示在视图上。

  • context是显示在视图中的上下文字典,当动作被激活时它就会打开。在XML文件中上下文字典的声明和Python字典一样有相同的语法。想要知道更多关于上下文字典的信息可以看” The context Dictionary”这个章节。

  • res_model是这个动作发生的对象的名称。

  • view_type当某个动作必须打开一个新的表单视图时,这个字段的值是form,当某个动作必须打开一个新的列表视图时,这个字段的值是tree。

  • view_mode仅在view_type值是form时起作用,忽略其他的情况。四种可能的值是:
    • form,tree: 这个视图开始时显示为表单视图,当点击“alternate view button”时,列表视图就会显示。

    • tree,form: 这个视图开始时显示为列表视图,当点击“alternate view button”时,表单视图就会显示。

    • form: 这个视图显示为表单视图,不可能显示为列表视图。

    • tree: 这个视图显示为列表视图,不可能显示为表单视图。

(version 5 introduced graph and calendar views)

  • usage is used [+ TODO +]

  • target:视图会在新窗口打开,就像wizard似的。

  • context会传递给动作本身,并加入到全局上下文中。

    <record model="ir.actions.act_window" id="a">
        <field name="name">account.account.tree1</field>
        <field name="res_model">account.account</field>
        <field name="view_type">tree</field>
        <field name="view_mode">form,tree</field>
        <field name="view_id" ref="v"/>
        <field name="domain">[('code','=','0')]</field>
        <field name="context">{'project_id': active_id}</field>
    </record>
    

他们想要告知用户的是,用户可以在新‘tab’打开一个新窗口.

Administration > Custom > Low Level > Base > Action > Window Actions

/doc_static/6.0/_images/module_base_action_window.png

Examples of actions

This action is declared in server/bin/addons/project/project_view.xml.

<record model="ir.actions.act_window" id="open_view_my_project">
    <field name="name">project.project</field>
    <field name="res_model">project.project</field>
    <field name="view_type">tree</field>
    <field name="domain">[('parent_id','=',False), ('manager', '=', uid)]</field>
    <field name="view_id" ref="view_my_project" />
</record>

This action is declared in server/bin/addons/stock/stock_view.xml.

<record model="ir.actions.act_window" id="action_picking_form">
    <field name="name">stock.picking</field>
    <field name="res_model">stock.picking</field>
    <field name="type">ir.actions.act_window</field>
    <field name="view_type">form</field>
    <field name="view_id" ref="view_picking_form"/>
    <field name="context">{'contact_display': 'partner'}</field>
</record>

Url Action

Wizard Action

下面是个显示wizard的.XML文件。

<?xml version="1.0"?>
<openerp>
    <data>
         <wizard string="Employee Info"
                 model="hr.employee"
                 name="employee.info.wizard"
                 id="wizard_employee_info"/>
    </data>
</openerp>

wizard用wizard标签来声明。想要知道更多关于wizard XML的信息可以查看“Add A New Wizard”这个章节。

你也可以使用一下的xml entry在menu中加wizard。

<?xml version="1.0"?>
<openerp>
     <data>
     <wizard string="Employee Info"
             model="hr.employee"
             name="employee.info.wizard"
             id="wizard_employee_info"/>
     <menuitem
             name="Human Resource/Employee Info"
             action="wizard_employee_info"
             type="wizard"
             id="menu_wizard_employee_info"/>
     </data>
</openerp>

Report Action

Report declaration

报表的解释在“Reports Reporting”章节。这有一个RML报表声明的XML文件。

<?xml version="1.0"?>
<openerp>
    <data>
    <report id="sale_category_print"
            string="Sales Orders By Categories"
            model="sale.order"
            name="sale_category.print"
            rml="sale_category/report/sale_category_report.rml"
            menu="True"
            auto="False"/>
     </data>
</openerp>

报表使用report标签在“data”块中声明。报表标签中的不同参数有:

  • id : 一个标识符,必须是唯一的

  • string : 菜单文字用来调用报表

  • model : 报表会渲染的OpenERP对象

  • rml : the .RML report model. Important Note : Path is relative to addons/ directory.

  • menu : 不管报表是否通过客户端直接调用。如果报表通过wizard来调用,设置menu为False。

  • auto : 确定.RML文件是否必须使用默认的解析器解析。使用客户解析器可以为你的报表定义额外的功能。