(30)odoo中的快捷标签
* 快捷标签
提供快捷标签是为了简化代码的编码,把复杂的工作封装化
* 找到封装化的源码:
openerp/tools/convert.py xml_import
self._tags = {
'record': self._tag_record,
'delete': self._tag_delete,
'function': self._tag_function,
'menuitem': self._tag_menuitem,
'template': self._tag_template,
'workflow': self._tag_workflow,
'report': self._tag_report,
'ir_set': self._tag_ir_set,
'act_window': self._tag_act_window,
'url': self._tag_url,
'assert': self._tag_assert,
}
可以看到系统常用到的快捷标签
# record 对应模型 ir.model.data
# delete 删除指定模型满足一定条件的记录
# function 执行指定模型中方法
# menuitem 对应模型 ir.ui.menu 定义菜单
# template 对应模型 ir.ui.view 定义视图
# workflow 触发工作流
# report 对应模型 ir.actions.report.xml
# ir_set
# act_window 对应模型 ir.actions.act_window
# url 对应模型 ir.actions.act_url
# assert
使用权限是 标签用 groups ,模型确用 groups_id
* record标签是定义数据最基础的一个
<record ...>
<field >....</field>
.....
</record>
* delete
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<delete model="ir.rule" search="[('id', '=',
ref('todo_app.todo_task_user_rule'))]" />
<record id="todo_task_per_user_rule" model="ir.rule">
<field name="name">ToDo Tasks only for owner</field>
<field name="model_id" ref="model_todo_task"/>
<field name="groups"
eval="[(4, ref('base.group_user'))]"/>
<field name="domain_force">
['|',('user_id','in', [user.id,False]),
('message_follower_ids','in',[user.partner_id.id])]
</field>
</record>
</data>
</openerp>
常用于规则覆盖重定义
# model 指定要删除记录的模型
# id 外标识id
# search domain的表达式,定义哪些记录要删除
* function
<function
model="res.partner"
name="create_membership_invoice"
eval="(ref('base.res_partner_2'),
ref('membership_0'),
{'amount':180})"
/>
常用于设置示例数据
#model:指定要用到的模型
#name:指定模型中的方法名
#eval: 给指定的方法把参数传过去
* menuitem
<menuitem id="menu_todo_task_stage"
name="To-Do Stages"
parent="menu_todo_task_main"
sequence="20"
groups=""
action="action_todo_stage" />
# id 菜单的唯一id用于父子级别和调用
# name 在视图中显示的名字 如果定义的 action,这个可以省略,会用对应action
的name值
# sequence 显示排序
# parent 本菜单的父菜单,子菜单都要指定,只有顶级菜单不要指定
# action 本菜单的连接动作
# groups 指定权限组,用户组的extraID
<record id="todo_app.menu_todo_task" model="ir.ui.menu">
<field name="name">To-Do Stages</field>
<field name="parent">menu_todo_task_main</field>
<field name="sequence">20</field>
<field name="action">action_todo_stage</field>
<field name="groups_id" ref="" />
</record>
* template
<template id="assets_backend"
inherit_id="web.assets_backend"
name="Todo Kanban Assets" >
<xpath expr="." position="inside">
<link rel="stylesheet"
href="/todo_kanban/static/src/css/todo_kanban.css"
/>
<script type="text/javascript"
src="/todo_kanban/static/src/js/todo_kanban.js">
</script>
</xpath>
</template>
<record id="assets_backend" model="ir.ui.view">
<field name="name">Todo Kanban Assets</field>
<field name="inherit_id">web.assets_backend</field>
<field name="arch" type="xml">
<xpath expr="." position="inside">
<link rel="stylesheet"
href="/todo_kanban/static/src/css/todo_kanban.css"
/>
<script type="text/javascript"
src="/todo_kanban/static/src/js/todo_kanban.js">
</script>
</xpath>
</field>
</record>
template 重点指明是 Qweb引擎
* workflow
<workflow model="sale.order"
ref="sale_order_4"
action="order_confirm" />
对应订单改变状态
这个类似可以<button>
<button name=”order_confirm” type=”workflow” states=”draft”
string=”确认” class=”oe_highlight” />
* report
<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')"
/>
#name 显示名称
#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 权限组
#attachment_use (bool)第二次打开还是前一次打开的结果
#attachment 附件的名称
<record id="account_invoices"
model="ir.actions.report.xml">
<field name="name">account.report_invoice</field>
<field name="model">todo.task</field>
<field name="report_type">qweb-pdf</field>
<field name="attachment_use">true</field>
<field name="attachment">(object.state in ('open','paid')) and
('INV'+(object.number or '').replace('/','')+'.pdf'</field>
</record>
* ir_set
* act_window
<act_window id="action_todo_stage"
name="To-Do Task Stages"
res_model="todo.task.stage"
view_mode="tree,form" />
# name 显示的标题
# 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:权限组
# search_view_id 指定响应的搜索视图(id,name) 元组对
# filter:列表视图显示过滤器(bool)
# auto_search: 加载默认视图后,自动搜索
# src_model 指定可以启动视图的更多按钮
# multi 设为True, 更多按钮显示在列表视图,否则显示在表单视图
<record model="ir.actions.act_window" id="action_todo_stage">
<field name="name">To-Do Task Stages</field>
<field name="res_model">todo.task.stage</field>
<field name="view_mode">tree,form</field>
</record>
* url
<url
"string":"Back Home",
"url": "http://",
"target": "self" />
# string: 显示名称
# url:网址
# target: new 新开 self 本窗口
<record model="ir.actions.act_url" id="test_home">
<field name="name">Back Home</field>
<field name="type">ir.actions.act_url</field>
<field name="url">http://</field>
<field name="target">self</field>
</record>
* assert
(30)odoo中的快捷标签的更多相关文章
- (20)odoo中的action
---------更新时间18:06 2016-09-18 星期日15:05 2016-03-14 星期一18:07 2016-02-19 星期五---------* 窗口动作 <?xml ...
- (19)odoo中的javascript
-----------更新日期15:17 2016-02-16 星期二-----------* 用到的js库 我们可以打开 addons/web/views/webclient_template. ...
- Odoo中的模型继承、视图继承、Qweb模板继承详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826114.html 在实际开发过程中,经常会遇到需要修改Odoo原生逻辑的情况.然而,直接修改Odoo底 ...
- Django自定义模型(model)中的字段标签
方法一: 在编辑页面中,每个字段的标签都是从模块的字段名称生成的. 规则很简单: 用空格替换下划线:首字母大写.例如:Book模块中publication_date的标签是Publication da ...
- JAVA中的break[标签]continue[标签]用法
原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...
- HTML 5 中的textarea标签
HTML 5 中的textarea标签 定义和用法 定义一个文本区域 (text-area) (一个多行的文本输入区域).用户可在此文本区域中写文本.在一个文本区中,您可输入无限数量的文本.文本区中的 ...
- Python odoo中嵌入html简单的分页功能
在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染 html页面分页内容,这里写了判断逻辑 <!-- 分页 -->< ...
- Odoo中的Widget
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826144.html 一:Widget是什么 Odoo中定义了字段的显示形式,不同字段类型的字段都有其不同 ...
- Odoo中Qweb使用入门
参考 可参考官网例子https://doc.odoo.com/trunk/web/qweb/或 http://thierry-godin.developpez.com/openerp/tutorial ...
随机推荐
- HTML基础 整理
HTML:超文本传输协议 (Hyper Markup Language) CSS:网页美化 (Cascading Style Sheets) JS:java-scipt 脚本语言 Dreamweave ...
- 目前比较全的CSS重设(reset)方法总结
在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是 重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的 ...
- linux的计划任务crontab
crontab(全称cron table计划任务列表)是一个用于周期性被执行的任的工具. 相关指令: usage: crontab [-u user] file crontab [ -u user ...
- 线程入门之yield
package com.thread; /** * <yiedl:把cpu让给其他线程> * <功能详细描述> * * @author 95Yang */ public cla ...
- hdu 4123 Bob’s Race 树的直径+rmq+尺取
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- FLASH CC 2015 CANVAS (一) 与AS3的写法区别
注意 此贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新 AS3 JS stop() this.stop(); mc.stop() this.mc.stop( ...
- git学习笔记02-创建一个仓库提交一个文件-原来就是这么简单
打开安装好的git bash,设置你的git信息 (这个随便写就行) 初始化一个Git仓库,分三步.(创建文件夹也可以手动创建,也可以命令行创建) 第一步,进到一个目录 cd e: 第二步,创建一 ...
- 对称加密DES和TripleDES
一. 对称加密 对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码).因此,通信双方都必 ...
- nodePPT 这可能是迄今为止最好的网页版PPT
demo例子为:http://qdemo.sinaapp.com/#0 下载地址为:https://github.com/ksky521/nodeppt/
- 关于mysql的基础知识
一.数据库的简介 什么是数据库? 数据的仓库,如:在atm的实例中我们创建一个db目录称之为数据库 什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 他们 ...