菜单和操作¶
菜单¶
这有一个菜单项的模板:
<menuitem id="menuitem_id"
name="Position/Of/The/Menu/Item/In/The/Tree"
action="action_id"
icon="NAME_FROM_LIST"
groups="groupname"
sequence="<integer>"/>
其中
- id用来在菜单项表中区别不同的菜单,这个标识符是唯一的,必须的字段。
- name定义了该菜单在menu层次中的位置。元素间通过斜杠“/”来划分。菜单名称中没有斜杠的是顶级菜单项。这个字段是必须的。
- action指定了动作的标识符,这个动作必须在action表(ir.actions.act_window)中定义过了。我们注意到这个字段不是必须的:你可以定义没有相应动作的菜单项。当我们为菜单项定义自制的按钮,就像文件夹的功能时,这个没有动作的菜单是有用的。
- icon指定了菜单项将会使用哪个按钮。默认的是STOCK_OPEN.
- 可用的按钮有: STOCK_ABOUT, STOCK_ADD, STOCK_APPLY, STOCK_BOLD, STOCK_CANCEL, STOCK_CDROM, STOCK_CLEAR, STOCK_CLOSE, STOCK_COLOR_PICKER, STOCK_CONNECT, STOCK_CONVERT, STOCK_COPY, STOCK_CUT, STOCK_DELETE, STOCK_DIALOG_AUTHENTICATION, STOCK_DIALOG_ERROR, STOCK_DIALOG_INFO, STOCK_DIALOG_QUESTION, STOCK_DIALOG_WARNING, STOCK_DIRECTORY, STOCK_DISCONNECT, STOCK_DND, STOCK_DND_MULTIPLE, STOCK_EDIT, STOCK_EXECUTE, STOCK_FILE, STOCK_FIND, STOCK_FIND_AND_REPLACE, STOCK_FLOPPY, STOCK_GOTO_BOTTOM, STOCK_GOTO_FIRST, STOCK_GOTO_LAST, STOCK_GOTO_TOP, STOCK_GO_BACK, STOCK_GO_DOWN, STOCK_GO_FORWARD, STOCK_GO_UP, STOCK_HARDDISK, STOCK_HELP, STOCK_HOME, STOCK_INDENT, STOCK_INDEX, STOCK_ITALIC, STOCK_JUMP_TO, STOCK_JUSTIFY_CENTER, STOCK_JUSTIFY_FILL, STOCK_JUSTIFY_LEFT, STOCK_JUSTIFY_RIGHT, STOCK_MEDIA_FORWARD, STOCK_MEDIA_NEXT, STOCK_MEDIA_PAUSE, STOCK_MEDIA_PLAY, STOCK_MEDIA_PREVIOUS, STOCK_MEDIA_RECORD, STOCK_MEDIA_REWIND, STOCK_MEDIA_STOP, STOCK_MISSING_IMAGE, STOCK_NETWORK, STOCK_NEW, STOCK_NO, STOCK_OK, STOCK_OPEN, STOCK_PASTE, STOCK_PREFERENCES, STOCK_PRINT, STOCK_PRINT_PREVIEW, STOCK_PROPERTIES, STOCK_QUIT,STOCK_REDO, STOCK_REFRESH, STOCK_REMOVE, STOCK_REVERT_TO_SAVED, STOCK_SAVE, STOCK_SAVE_AS, STOCK_SELECT_COLOR, STOCK_SELECT_FONT, STOCK_SORT_ASCENDING, STOCK_SORT_DESCENDING, STOCK_SPELL_CHECK, STOCK_STOP, STOCK_STRIKETHROUGH, STOCK_UNDELETE, STOCK_UNDERLINE, STOCK_UNDO, STOCK_UNINDENT, STOCK_YES, STOCK_ZOOM_100, STOCK_ZOOM_FIT, STOCK_ZOOM_IN, STOCK_ZOOM_OUT, terp-account, terp-crm, terp-mrp, terp-product, terp-purchase, terp-sale, terp-tools, terp-administration, terp-hr, terp-partner, terp-project, terp-report, terp-stock
- groups 指定哪个组的用户可以看到这个菜单(例如:groups=”admin”)。想要得到更多信息可以看“Management of Access Rights”。多个组的话可以用逗号分开(如:groups=”admin,user”)。
- sequence 是个整数类型,用于为菜单项中的菜单排序。更高的sequence number在菜单项的更下面。这个字段不是必须的:如果sequence没有指定值,菜单项将会得到一个默认的数值10。有相同数值的菜单项按照创建顺序来排序(_order = “sequence,id“)。
例如:¶
在server/bin/addons/sale/sale_view.xml中,我们有:
<menuitem name="Sales Management/Sales Order/Sales Order in Progress" id="menu_action_order_tree4" action="action_order_tree4"/>
想要更改菜单项的图标:
* Highlight the menu with the icon you want to change.
* Select the "Switch to list/form" option from the "Form" menu. This will take you to the Menu editor.
* From here you can change the icon of the selected menu.
动作¶
介绍¶
actions定义系统的行为来响应用户的动作;登录的新用户,双击invoice,点击动作按钮,...
简单的动作也有很多类型:
- Window: 打开一个新窗口
- Report: 打印报表
- o Custom Report: 自定义报表 o RML Report: XSL:RML 报表
- Wizard: 开始向导
- Execute: server端方法的执行。
- Group: 在一个组中集合多个动作
发生动作的以下事件:
- 用户连接,
- 用户双击菜单项,
- 用户点击图标’print’和’action’.
事件样例¶
在OpenERP中,所有的动作都被描述了而没有配置。两个例子:
- 双击菜单项时打开窗口
- 用户连接
打开菜单¶
当用户打开菜单选择 “Operations > Partners > Partners Contact”,下一步是给用户该动作承诺的信息。
- 在IR中查询动作
- 执行动作
- 1.如果这个动作类型是打开新窗口,它显示给用户:必须对选定的对象打开这个新窗口,并且它显示视图(form or list)和使用的文件。 2. 用户要求这个对象返回必要的信息来显示在表单视图中,字段的描述和XML视图
用户登陆¶
当一个新用户连接到服务器端时,客户端会搜索用于显示给该用户的首页动作。一般情况下,这个动作是:在‘Operations’部分打开菜单。
步骤是:
- 阅读用户文件来获取ACTION_ID
- 读取这个动作并且执行它
The fields¶
- 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¶
动作在 Client 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”中的标识符。它必须是唯一的。
- 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
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文件是否必须使用默认的解析器解析。使用客户解析器可以为你的报表定义额外的功能。
Security¶
在OpenERP中三个概念要区分一下:
1.The users:通过login/password来鉴定的person 2.The groups:定义资源的访问权限 3.The roles:确定用户的roles/duties
The users
他们代表物理人类。他们通过登录和密码来鉴别。一个用户可以属于多个groups,可以有多个roles。
一个用户有开始action。当用户登录和输入密码时,action执行。比如一个动作是打开菜单‘Operations’。
用户可用选择图标选择不同的参数选择。例如,你可以使用这些参数选择来决定工作语言。默认为英语。
当你使用OpenERP时,可以修改自己的参数选择。你可以点击菜单:User > Preferences。OpenERP管理员可以修改很多参数选择和每个用户的参数选择。
The groups
groups决定对不同资源的访问权限。这有三种权限:
- 写权限:写入和创建
- 读权限:读取一个文件
- 执行权限:工作流或向导的按钮
一个用户可以属于多个groups。如果他属于多个groups,我们将总是用有最高权限的组来对选定的资源。
The roles
roles在tree上定义了一个层次结构。他在公司内部代表着不同的jobs/roles。最大的role对所有的下级roles有自动的权限。
Example:
CEO
- Technical manager
- Chief of projects
- Developers
- Testers
- Commercial manager
- Salesmen
- ...
如果我们想要验证一段程序(=role Testers)的测试,一个用户会有以下roles中的一个:Testers,Chief of the project,Technical manager,CEO。
roles用于将工作流动作转换为确认,选择或是验证动作。他们的含义在Workflow章节有详细的介绍。