(20)odoo中的action
---------
更新时间
18:06 2016-09-18 星期日
15:05 2016-03-14 星期一
18:07 2016-02-19 星期五
---------
* 窗口动作
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<data>
<act_window id="action_todo_stage"
name="To-Do Task Stages"
res_model="todo.task.stage"
view_mode="tree,form" />
<act_window id="todo_app.action_todo_task"
name="To-Do Task "
res_model="todo.task"
view_mode="tree,form,calendar,gantt,graph"
target="current"
context="{'default_user_id':uid}"
domain="[]"
limit="80" />
<act_window id="action_todo_task_stage"
name="To-Do Task Stages"
res_model="todo.task.stage"
src_model="todo.task"
multi="False" />
</data>
</openerp>
可以用ir.action.act_window 重新写上面的对象
<record id="action_todo_stage" model="ir.actions.act_window">
<field name="name">To-Do Task Stage</field>
<field name="type">ir.actions.act_window</field>
<field name="domain">["list of 3-tuples (max 250 characters)"]</field>
<field name="context">{"context dictionary (max 250 characters)"}</field>
<field name="res_model">todo.task.stage</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="todo_task_search"/>
<field name="view_id" ref="view_form_todo_task_ui" />
</record>
窗口的动作是存在 ir.actions.act_window 模型中的,我们可以在xml文件中用<act_window>来快捷定义
下面是部分属性说明,完整的可以在 openerp/addons/base/ir/ir_actions.py 中的 ir.actions.act_window
类中可以找到
# name 显示的标题
# type 动作类型 ,默认ir.actions.act_window
# view_id 中的 ref 值是对应视图对象的id 触发时用哪个视图
# context 设置目标视图的上下文
# domain 过滤记录按条件,如:[["customer", "=", true]]
# res_id: 当动作打开视图是表单视图时,要指定的加载记录id,只有‘view_mode’ 值为 form时才有效
否则就会新建一个记录 如:"res_id": a_product_id,
# res_model 动作响应的目标模型
# target 如果设置为new 就打开新窗口,默认是 current
# view_mode:列出允许使用的视图模式 如 form, tree, calendar,etc 默认是 tree,form
# view_type:设定tree时的列表是树状还是普通列表, tree-树状 form-普通列表 缺省是form
# usage: 过滤菜单和动作
# view_ids:
# views:是(view_id,view_type) 元组对列表,第一组是动作默认打开的视图
如:"views": [[False, "tree"], [False, "form"]]
# limit 指列表视图时,一页的记录数,默认是80
# auto_refresh: 在视图中添加一个刷新功能
# groups_id:权限组 用快捷标签则为 groups
# search_view_id 指定响应的搜索视图(id,name) 元组对
# filter:列表视图显示过滤器(bool)
# auto_search: 加载默认视图后,自动搜索
# src_model 指定可以启动视图的更多按钮
# multi 设为True, 更多按钮显示在列表视图,否则显示在表单视图
系统的默认值:
_defaults = {
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'tree,form',
'context': '{}',
'limit': 80,
'target': 'current',
'auto_refresh': 0,
'auto_search':True,
'multi': False,
}
* URL动作
ir.actions.act_url
{
"type": "ir.actions.act_url",
"url": "http://odoo.com",
"target": "self",
}
<record id="action_website_homepage" model="ir.actions.act_url">
<field name="name">Website Homepage</field>
<field name="url">/page/homepage</field>
<field name="target">self</field>
</record>
# name: 显示名称
# url:网址
# target: new 新开 self 本窗口
* 服务端动作(这个是非常强大,开专题讲)
ir.actions.server
<record model="ir.actions.server" id="print_instance">
<field name="name">Res Partner Server Action</field>
<field name="model_id" ref="model_res_partner"/>
<field name="code">
if object.some_condition():
action = {
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": object._name,
"res_id": object.id,
}
</field>
</record>
# id 服务端动作标识
# context 上下文
# model_id 链接响应的模型
# condition 条优
# code python代码设定,这里最灵活了
* 报表动作
ir.actions.report.xml
<record id="mc_crm_lead_demo_report" model="ir.actions.report.xml">
<field name="name">Marketing campaign demo report</field>
<field name="type">ir.actions.report.xml</field>
<field name="model">crm.lead</field>
<field name="report_name">crm.lead.demo</field>
<field name="report_rml">marketing_campaign_crm_demo/crm_lead_mc_demo_report.rml</field>
<field name="report_type">pdf</field>
</record>
#name 显示名称
#type 动作类型,固定为ir.actions.report.xml
#model 响应的模型
#report_type 报表类型 有 ('qweb-pdf', 'PDF'),
('qweb-html', 'HTML'),
('controller', 'Controller'),
('pdf', 'RML pdf (deprecated)'),
('sxw', 'RML sxw (deprecated)'),
('webkit', 'Webkit (deprecated)'),
#report_name 要用的报表模板
#groups_id 权限组
#paperformat_id
#attachment_use (bool)第二次打开还是前一次打开的结果
#attachment 附件的名称
# report_rml rml文件路径
快捷标签<report> 用的属性有一些不同,主要是 groups
<report
id="account_invoices"
model="account.invoice"
string="Invoices"
report_type="qweb-pdf"
name="account.report_invoice"
file="account.report_invoice"
attachment_use="True"
attachment="(object.state in ('open','paid')) and
('INV'+(object.number or '').replace('/','')+'.pdf')"
/>
* js调用action
在js中调用action 和直接在python 中调用action是一样的
但是有一个比较坑的区别是 views: [[false, 'list'],[false, 'form']],
这里与form对应的时list 而不是tree 然而在python 里边调用 action时 tree , 这个点是很难发现的。 是通过源码查找找到的。
instance.web_calendar.CalendarView.include({
open_event: function(id, title) {
var self = this;
console.log(self,"id:",id,"title:",title,'model:',self.model);
if (self.model=='crm.phonecall'){
this.do_action({
type: 'ir.actions.act_window',
res_model: "crm.phonecall",
view_mode: 'tree',
view_type: 'tree,form',
views: [[false, 'list'],[false, 'form']],
domain:'[("previous_contact_id","=",'+id+')]',
target: 'current',
context:"{'default_previous_contact_id':"+id+"}",
}, {
on_reverse_breadcrumb: function () {
self.reload();
}
});
}else{
this._super.apply(this, arguments);
}
}
});
* py文件调用action
知识点 1. "[('id','in',[" + ','.join(map(str, sale_order_ids)) + "])]"
在实际下情况下运用py的语法. 这操作就是 把sale_order_ids 的id列表 转换成 id字符串
就是odoo的domain的表达式是字符串
#这个是一个简单的一个方法
model_data_obj = self.pool.get('ir.model.data')
stock_picking_tree_ids = model_data_obj.xmlid_to_res_id(
cr, SUPERUSER_ID, 'dftg_stock_picking_tree')
view_picking_form_id = model_data_obj.xmlid_to_res_id(
cr, SUPERUSER_ID, 'stock.view_picking_form')
return {
'type': 'ir.actions.act_window',
'res_model': 'stock.picking',
'view_mode': 'tree,form',
'view_type': 'form',
'name': u'查看出/入库单',
'views': [(stock_picking_tree_ids, 'tree'), (view_picking_form_id, 'form')],
'view_id': stock_picking_tree_ids,
'domain': "[('so_id','='," + str(ids[0]) + "),('state','not in',['waiting'])]",
}
#这种方法是更常用更强大的 会动态的返回form 或者tree 很方便
适用各种需求
mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window')
result = mod_obj.get_object_reference(
cr, uid, 'dftg_ext', 'fake_sale_order_action')
id = result and result[1] or False
result = act_obj.read(cr, uid, [id], context=context)[0]
# compute the number of invoices to display
if len(sale_order_ids) > 1:
result[
'domain'] = "[('id','in',[" + ','.join(map(str, sale_order_ids)) + "])]"
else:
res = mod_obj.get_object_reference(
cr, uid, 'dftg_ext', 'fake_sale_order_form')
result['views'] = [(res and res[1] or False, 'form')]
result['res_id'] = sale_order_ids and sale_order_ids[0] or False
return result
* 客户端动作
openerp/addons/base/ir/ir_actions.py
ir.actions.client
<record id="action_client_sale_menu" model="ir.actions.client">
<field name="name">Open Sale Menu</field>
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('base.menu_base_partner')}"/>
</record>
#name 显示名称
#tag
#res_model 目标模型
#context 设置目标视图的上下文
#params 带上参数
#params_store
(20)odoo中的action的更多相关文章
- Odoo中的五种Action详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826232.html Odoo中的五种action都是继承自ir.actions.actions模型实现的 ...
- (19)odoo中的javascript
-----------更新日期15:17 2016-02-16 星期二-----------* 用到的js库 我们可以打开 addons/web/views/webclient_template. ...
- (30)odoo中的快捷标签
* 快捷标签 提供快捷标签是为了简化代码的编码,把复杂的工作封装化 * 找到封装化的源码: openerp/tools/convert.py xml_import self._ ...
- odoo中def init(self):
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. f ...
- Struts2不扫描jar包中的action
今天在做一个二开的项目,将struts打成jar包放在WEB-INF的目录下却扫描不到指定的路径,也就是http访问访问不到我们指定的action,其他代码可以正常使用,就是访问不到action.st ...
- C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数
C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...
- Odoo中Qweb使用入门
参考 可参考官网例子https://doc.odoo.com/trunk/web/qweb/或 http://thierry-godin.developpez.com/openerp/tutorial ...
- odoo13之在odoo中添加自定义页面
注: 本博文是阅读Ruter博客 在odoo中添加自定义页面 后所做的个人总结,以及博文搬迁,主要是便于自己的后期理解:大部分内容为搬运,当然也包括自己的一些总结和流程优化. 前言 首先展示效果:进入 ...
- 如何快速在odoo中创建自己的菜单
上一篇内容:如何快速创建odoo模块,使用脚手架快速创建自己的odoo应用app 前言 在上一个教程中,我们已经实现了对模块的创建,现在我们要对创建的模块添加内容,这个教程将教你如何在odoo菜单中创 ...
随机推荐
- Django基础-过滤器
1.可以通过过滤器来修改变量的显示,过滤器的形式是:{{ variable | filter }},管道符号'|'代表使用过滤器 2.过滤器能够采用链式的方式使用,例如:{{ text | escap ...
- [SAP ABAP开发技术总结]程序自己以JOB方式运行
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SQL Server 中 RAISERROR 的用法
From : http://www.cnblogs.com/xugang/archive/2011/04/09/2010216.html raiserror 是由单词 raise error 组 ...
- 利用[后台]->[类别管理]为文章前后台添加类别名称【转】
原网址:http://blog.csdn.net/yanhui_wei/article/details/7943176 1.给专题添加文章时,可以选择类别: 2.给文章模型.图片模型.下载模型的栏目下 ...
- C#生成JSON数据
protected void Page_Load(object sender, EventArgs e) { Response.Clear(); Response.ContentType = &quo ...
- iOS - OC NSLocale 本地化信息
前言 @interface NSLocale : NSObject <NSCopying, NSSecureCoding> NSLocale 类返回本地化信息,主要体现在"语言& ...
- mysql概要(三)having
1.运算符 2.模糊查询 3.where 后的判断基于表(表的直接内容),而不是基于结果(运算之后的别名)如: 可改成在where后再次重新计算判断: 或者使用having对结果判断: having多 ...
- 09 高效的PL/SQL程序设计
程序包 Package 断开了依赖链 实验依赖关系: <1> 首先不使用包 -- 创建表 CREATE table t (x int); -- 创建视图 create view v as ...
- Monkey学习(3)如何在Android模拟器中安装apk
1.运行SDK Manager,选择模拟器,并运行模拟器,我这里用的是已经配置好的模拟器“RedMI” 2.已启动好的模拟器“RedMI” 3.记住需要安装apk文件的位置,我这里放在了F盘的根目录下 ...
- phpmailer发送邮件 SMTP Error: Could not authenticate 错误
这个错误说明虚拟主机不支持PHPMailer默认调用的fsockopen函数,找到class.smtp.php文件,搜索fsockopen,就找到了这样一段代码: $this->smtp_con ...