转: http://www.lxway.com/12591444.htm
odoo里面有两种action: ir.actions.server,ir.actions.client_multi
1.Using ir.actions.server
XXX
ir.actions.server
code
self.do_somthing(cr,uid,ids,context)
2.Using ir.actions.act_window
xxxx
xxx.xxx
tree,form
form
new
ir.actions.server这种可以执行自己的python代码,写在服务器端 “code”对应的方法。
ir.actions.act_window 这种写在客户端
3.在“更多”里面增加按钮
xxxx
action
client_action_multi
可以通过action定位来触发复杂的服务端代码,需要两个与客户端相关的字段:
id -- 服务端action在数据库存储的id
context (可选) -- 执行服务端action的上下文环境
储存在数据库中的action可以基于state执行一些特别的动作,部分字段在state之间是相互共享的
model_id -- 与action相关联的model,在 evaluation contexts中可用
condition (可选) -- 使用服务端的 evaluation contexts 来执行python代码,如果是False则阻止action执行,默认值是True
动作类型是可以随意扩展的,默认的动作类型:
code -- 当调用action时执行的python代码,在code片段中可以定义一个action变量,会被返回给客户端用于指定下一个执行的action。
例: 执行完action_export_more方法后,执行action的动作
if context.get('active_model') == 'hr.amount.edcation' and context.get('active_ids'):
export_id =self.action_export_more(cr, uid, context['active_ids'], context=context)
action = {
'name': u'导出',
'view_type': 'form',
'view_mode': 'form',
'res_model': "hr.assessment.user.export",
'target':'new',
'domain': [],
'res_id': export_id,
'views': [(519 or False, 'form')],
'type': 'ir.actions.act_window',
}