OpenERP Server Developers Documentation (Openerp服务器开发文档)之 Menus and Actions(菜单和动作)

本文介绍了 OpenERP 中菜单项与动作的配置方法,包括菜单项的主要限制、动作的定义及其不同类型,如窗口动作、报表动作等。此外还详细讲解了视图的配置方式及如何将事件与动作进行绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 

Menus and Actions

Menus(菜单项)







使用menuitem的主要限制是菜单项动作必须是一个act_window动作。这个动作在OpenERP中是最常用的。然而对于其他的菜单项要其他的action。例如,有mail模块的Feeds页面时一个客户端action。对于这种菜单项,你可以联合两个声明,如同在mail模块中定义一样。


<!-- toplevel menu -->
<menuitem id="mail_feeds_main" name="Feeds" sequence="0"
    web_icon="static/src/img/feeds.png"
    web_icon_hover="static/src/img/feeds-hover.png" />
<record id="mail_feeds_main" model="ir.ui.menu">
    <field name="action" ref="action_mail_all_feeds"/>
</record>

Actions

这个action定义了系统响应用户action的行为:用户登录,双击放票,点击动作action。。。。


有许多不同类型的简单actions

  •      Window:打开一个新的窗口
  •     Report : 打印报表
  •     Custom Report : 定制化报表或者RML报表:XSL:RML报表
  •  Execute:业务端方法的执行
  •    Group : 采集一个分组中的一些actions

actions用于以下事件:

  •        用户连接
  •       用户点击一个菜单
  •      用户点击图标“icon”或者“action”

Openting of the menu(打开菜单)

当用户打开菜单选项“Operations > Partners > Partners Contact”,下一步要做的是给定这个action需要的用户信息

  1. 在IR中查找这个action
  2.  执行action          如果这个action是打开窗口的类型,其指明这个用户对于指定的对象必须打开一个新的窗口并且给定视图(表单或者列表)和使用的字段(只是形式发票) 。用户请求对象并接受必要信息来跟踪表单,字段信息和XML视图.      

User Connection(用户连接)

      当新用户连接服务器时,客户端必须查询到这个用户的第一个页面使用的action。一般的,这个action是:在“Operations”中打开菜单。

      步骤如下:

       1  从用户文件中获取ACTION_ID

       2  读这个action并且执行


The fields 字段

       Action name

      the action name


      Action type

      总是'ir.actions.act_window'


     View Ref

     显示对象的视图


    Type of  View

    视图类型(树形/表单)


    Domain Value(领域值)

    使用视图减少可视化数据的领域


    The view

    视图描述了如何在页面上显示编辑表单或者数据树形/列表。视图可以是表单或者树形,根据是代表编辑的表单或者全局数据视图的列表/树。

    在树模式中通过打开 一个action调用表单。表单视图通常从列表模式中打开。


    The domain

    这个参数允许你控制在所选的视图中哪个资源是可视的。(限制)

    例如,在发票模块中,你可以定义一个action来打开视图仅仅显示发票而没有支付。

    领域使用python写的;元组列表。其由三个参数

  •          必须测试的字段
  •          用于测试的操作(<,>,=,like)
  •          测试的数据

例如,如果只想获取'Draft' 发票,使用以下领域;[('state','=','draft')]


在一个简单的视图中,领域定义了资源,就是树的根部。其他资源,即使它们不是来自这个领域部分,也将显示,如果用户开发了树的分支。


Window Action (窗口动作)


Action详情参考“Adminstration Modules-Action”。这里是一个Action XML记录的模板:

<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“表的action的标示。必须唯一
  •        name是action的名字(必选)
  •        view_id  是当action调用时要显示的视图的名字。如果这个字段没有定义,就使用关联了对象res_model并有最高优先级字段的一类视图(表单/树)。如果两个视图有相同的优先级,就使用首先被定义的视图。
  • 领域是一列常量,用于细化选择的结果,并在视图中获取更少的显示结果。列表常量通过AND关联在一起:仅当所有的条件都满足了,表记录显示在视图中
  • context是上下文字典,当启动action时,将在视图中显示。上下文字典使用相同的语法声明,如同XML文件中Python字典语法一样。
  • res_model 是action操作的对象名
  • view_type被设置成表单,当action必须打开一个新的表单视图时。并且打开的是一个树视图时,设置为tree
  • view_mode仅仅当view_type为form时用到,并且忽略其他的。四种可能情况:form,tree:视图第一次以表单显示,通过点击”alternate view button“显示列表视图。tree,form:第一次以tree显示视图,点击”alternate view button“显示表单视图。form:仅仅以表单显示,点击上述button无效。tree:仅以tree显示视图,点击button无效
  • usage用于[+ *TODO* +]
  • target the view 将像wizard一样在一个新的窗口中打开
  • context将传递给action本身并且添加给它的全局上下文

           

<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


Example of actions

这个action声明在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>

这个action声明在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

Report Action


Report declaraction(报表声明)

下面的XML文件是一个例子,声明了一个RML报表

<?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 : RML报表模式。注意:Path与addons/目录是相对的
  • menu : 报表是否能够通过客户端直接调用。设置munu为false在由wiard调用表单时很有用
  • auto : 决定RML是否用默认的解析器解析。使用通用的解析器允许给报表添加更多的功能

Action creation


Linking events to action(将事件连接到action)

  • client_print_muti(从列表或者表单中打印)
  • client_action_muti(来自表单或者列表的action)
  • tree_but_open(双击树的条目,如同菜单一样)
  • tree_but_action(树形条目上的action)

映射一个事件到action

<record model="ir.values" id="ir_open_journal_period">
    <field name="key2">tree_but_open</field>
    <field name="model">account.journal.period</field>
    <field name="name">Open Journal</field>
    <field name="value" eval="'ir.actions.wizard,%d'%action_move_journal_line_form_select"/>
    <field name="object" eval="True"/>
</record>

如果双击在一个journal/period(对象:account.journal.period),将打开所选的向导。(id = ="action_move_journal_line_form_select")

可以使用一个res_id字段仅当用户点击在指定的对象上来认可这个action

<record model="ir.values" id="ir_open_journal_period">
    <field name="key2">tree_but_open</field>
    <field name="model">account.journal.period</field>
    <field name="name">Open Journal</field>
    <field name="value" eval="'ir.actions.wizard,%d'%action_move_journal_line_form_select"/>
    <field name="res_id" eval="3"/>
    <field name="object" eval="True"/>
</record>


如果用户点击在 account.journal.period n°3上,将触发这个action


当你声明向导,报表或者菜单项时, ir.values 自动由以下标签创建:

  • <menuitem... />
  • <report... />

所以通常你不需要自己添加映射。  

     




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值