Loading

Odoo ir actions 分析

源代码位置:openerp/addons/base/ir/ir_actions.py

根类型:ir.actions.actions

 1 class actions(osv.osv):
 2     _name = 'ir.actions.actions'
 3     _table = 'ir_actions'
 4     _order = 'name'
 5     _columns = {
 6         'name': fields.char('Name', required=True),
 7         'type': fields.char('Action Type', required=True),
 8         'usage': fields.char('Action Usage'),
 9         'help': fields.text('Action description',
10             help='Optional help text for the users with a description of the target view, such as its usage and purpose.',
11             translate=True),
12     }

继承自ir.actions.actions 的类型有:ir.actions.report.xml,ir.actions.act_window,ir.actions.act_window_close,ir.actions.act_url,ir.actions.server,ir.actions.client 6种

1 .ir.actions.report.xml :用于打印报表的动作 在定义中可知,8.0中支持的报表类型有以下几种:

1 'report_type': fields.selection([('qweb-pdf', 'PDF'),
2                     ('qweb-html', 'HTML'),
3                     ('controller', 'Controller'),
4                     ('pdf', 'RML pdf (deprecated)'),
5                     ('sxw', 'RML sxw (deprecated)'),
6                     ('webkit', 'Webkit (deprecated)'),
7                     ],

2.ir.actions.act_window:用于展现页面的动作 

 1 'name': fields.char('Action Name', required=True, translate=True),
 2         'type': fields.char('Action Type', required=True),
 3         'view_id': fields.many2one('ir.ui.view', 'View Ref.', ondelete='set null'),
 4         'domain': fields.char('Domain Value',
 5             help="Optional domain filtering of the destination data, as a Python expression"),
 6         'context': fields.char('Context Value', required=True,
 7             help="Context dictionary as Python expression, empty by default (Default: {})"),
 8         'res_id': fields.integer('Record ID', help="Database ID of record to open in form view, when ``view_mode`` is set to 'form' only"),
 9         'res_model': fields.char('Destination Model', required=True,
10             help="Model name of the object to open in the view window"),
11         'src_model': fields.char('Source Model',
12             help="Optional model name of the objects on which this action should be visible"),
13         'target': fields.selection([('current','Current Window'),('new','New Window'),('inline','Inline Edit'),('inlineview','Inline View')], 'Target Window'),
14         'view_mode': fields.char('View Mode', required=True,
15             help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)"),
16         'view_type': fields.selection((('tree','Tree'),('form','Form')), string='View Type', required=True,
17             help="View type: Tree type to use for the tree view, set to 'tree' for a hierarchical tree view, or 'form' for a regular list view"),
18         'usage': fields.char('Action Usage',
19             help="Used to filter menu and home actions from the user form."),
20         'view_ids': fields.one2many('ir.actions.act_window.view', 'act_window_id', 'Views'),
21         'views': fields.function(_views_get_fnc, type='binary', string='Views',
22                help="This function field computes the ordered list of views that should be enabled " \
23                     "when displaying the result of an action, federating view mode, views and " \
24                     "reference view. The result is returned as an ordered list of pairs (view_id,view_mode)."),
25         'limit': fields.integer('Limit', help='Default limit for the list view'),
26         'auto_refresh': fields.integer('Auto-Refresh',
27             help='Add an auto-refresh on the view'),
28         'groups_id': fields.many2many('res.groups', 'ir_act_window_group_rel',
29             'act_id', 'gid', 'Groups'),
30         'search_view_id': fields.many2one('ir.ui.view', 'Search View Ref.'),
31         'filter': fields.boolean('Filter'),
32         'auto_search':fields.boolean('Auto Search'),
33         'search_view' : fields.function(_search_view, type='text', string='Search View'),
34         'multi': fields.boolean('Restrict to lists', help="If checked and the action is bound to a model, it will only appear in the More menu on list views"),
35     }

比较重要的列:

target:current(在当前页面显示),new(在新页面中显示,即弹窗方式),inline(内嵌),inlineview(内嵌视图).

view_mode:视图模式 可选值:tree,form,graph,calendar,gantt,kanban

view_type:视图类型 可选值:tree,form tree是指分层的树形视图,form是传统的列表类型

view_ids:指定绑定的视图id

limit:指定默认列表视图的显示行数

multi:True 如果绑定了model,将只在列表视图的more按钮列表中显示.

3.ir.actions.act_window_close

关闭窗口的动作

4.ir.actions.act_url

 1 _name = 'ir.actions.act_url'
 2     _table = 'ir_act_url'
 3     _inherit = 'ir.actions.actions'
 4     _sequence = 'ir_actions_id_seq'
 5     _order = 'name'
 6     _columns = {
 7         'name': fields.char('Action Name', required=True, translate=True),
 8         'type': fields.char('Action Type', required=True),
 9         'url': fields.text('Action URL',required=True),
10         'target': fields.selection((
11             ('new', 'New Window'),
12             ('self', 'This Window')),
13             'Action Target', required=True
14         )
15     }
16     _defaults = {
17         'type': 'ir.actions.act_url',
18         'target': 'new'
19     }

暂不清楚,还没遇见过,应该是指定URL跳转之类的动作

5.ir.actions.server

执行服务器动作:可用的动作包括

执行python代码块,触发工作流,执行客户端动作,创建并复制一条新记录,修改记录,执行多个服务器动作等.

可以利用ir.actions.server在视图的more加入自定义按钮.

  1  'name': fields.char('Action Name', required=True, translate=True),
  2         'condition': fields.char('Condition',
  3                                  help="Condition verified before executing the server action. If it "
  4                                  "is not verified, the action will not be executed. The condition is "
  5                                  "a Python expression, like 'object.list_price > 5000'. A void "
  6                                  "condition is considered as always True. Help about python expression "
  7                                  "is given in the help tab."),
  8         'state': fields.selection(_get_states_wrapper, 'Action To Do', required=True,
  9                                   help="Type of server action. The following values are available:\n"
 10                                   "- 'Execute Python Code': a block of python code that will be executed\n"
 11                                   "- 'Trigger a Workflow Signal': send a signal to a workflow\n"
 12                                   "- 'Run a Client Action': choose a client action to launch\n"
 13                                   "- 'Create or Copy a new Record': create a new record with new values, or copy an existing record in your database\n"
 14                                   "- 'Write on a Record': update the values of a record\n"
 15                                   "- 'Execute several actions': define an action that triggers several other server actions\n"
 16                                   "- 'Send Email': automatically send an email (available in email_template)"),
 17         'usage': fields.char('Action Usage'),
 18         'type': fields.char('Action Type', required=True),
 19         # Generic
 20         'sequence': fields.integer('Sequence',
 21                                    help="When dealing with multiple actions, the execution order is "
 22                                    "based on the sequence. Low number means high priority."),
 23         'model_id': fields.many2one('ir.model', 'Base Model', required=True, ondelete='cascade',
 24                                     help="Base model on which the server action runs."),
 25         'model_name': fields.related('model_id', 'model', type='char',
 26                                      string='Model Name', readonly=True),
 27         'menu_ir_values_id': fields.many2one('ir.values', 'More Menu entry', readonly=True,
 28                                              help='More menu entry.', copy=False),
 29         # Client Action
 30         'action_id': fields.many2one('ir.actions.actions', 'Client Action',
 31                                      help="Select the client action that has to be executed."),
 32         # Python code
 33         'code': fields.text('Python Code',
 34                             help="Write Python code that the action will execute. Some variables are "
 35                             "available for use; help about pyhon expression is given in the help tab."),
 36         # Workflow signal
 37         'use_relational_model': fields.selection([('base', 'Use the base model of the action'),
 38                                                   ('relational', 'Use a relation field on the base model')],
 39                                                  string='Target Model', required=True),
 40         'wkf_transition_id': fields.many2one('workflow.transition', string='Signal to Trigger',
 41                                              help="Select the workflow signal to trigger."),
 42         'wkf_model_id': fields.many2one('ir.model', 'Target Model',
 43                                         help="The model that will receive the workflow signal. Note that it should have a workflow associated with it."),
 44         'wkf_model_name': fields.related('wkf_model_id', 'model', type='char', string='Target Model Name', store=True, readonly=True),
 45         'wkf_field_id': fields.many2one('ir.model.fields', string='Relation Field',
 46                                         oldname='trigger_obj_id',
 47                                         help="The field on the current object that links to the target object record (must be a many2one, or an integer field with the record ID)"),
 48         # Multi
 49         'child_ids': fields.many2many('ir.actions.server', 'rel_server_actions',
 50                                       'server_id', 'action_id',
 51                                       string='Child Actions',
 52                                       help='Child server actions that will be executed. Note that the last return returned action value will be used as global return value.'),
 53         # Create/Copy/Write
 54         'use_create': fields.selection([('new', 'Create a new record in the Base Model'),
 55                                         ('new_other', 'Create a new record in another model'),
 56                                         ('copy_current', 'Copy the current record'),
 57                                         ('copy_other', 'Choose and copy a record in the database')],
 58                                        string="Creation Policy", required=True,
 59                                        help=""),
 60         'crud_model_id': fields.many2one('ir.model', 'Target Model',
 61                                          oldname='srcmodel_id',
 62                                          help="Model for record creation / update. Set this field only to specify a different model than the base model."),
 63         'crud_model_name': fields.related('crud_model_id', 'model', type='char',
 64                                           string='Create/Write Target Model Name',
 65                                           store=True, readonly=True),
 66         'ref_object': fields.reference('Reference record', selection=_select_objects, size=128,
 67                                        oldname='copy_object'),
 68         'link_new_record': fields.boolean('Attach the new record',
 69                                           help="Check this if you want to link the newly-created record "
 70                                           "to the current record on which the server action runs."),
 71         'link_field_id': fields.many2one('ir.model.fields', 'Link using field',
 72                                          oldname='record_id',
 73                                          help="Provide the field where the record id is stored after the operations."),
 74         'use_write': fields.selection([('current', 'Update the current record'),
 75                                        ('expression', 'Update a record linked to the current record using python'),
 76                                        ('other', 'Choose and Update a record in the database')],
 77                                       string='Update Policy', required=True,
 78                                       help=""),
 79         'write_expression': fields.char('Expression',
 80                                         oldname='write_id',
 81                                         help="Provide an expression that, applied on the current record, gives the field to update."),
 82         'fields_lines': fields.one2many('ir.server.object.lines', 'server_id',
 83                                         string='Value Mapping',
 84                                         copy=True),
 85 
 86         # Fake fields used to implement the placeholder assistant
 87         'model_object_field': fields.many2one('ir.model.fields', string="Field",
 88                                               help="Select target field from the related document model.\n"
 89                                                    "If it is a relationship field you will be able to select "
 90                                                    "a target field at the destination of the relationship."),
 91         'sub_object': fields.many2one('ir.model', 'Sub-model', readonly=True,
 92                                       help="When a relationship field is selected as first field, "
 93                                            "this field shows the document model the relationship goes to."),
 94         'sub_model_object_field': fields.many2one('ir.model.fields', 'Sub-field',
 95                                                   help="When a relationship field is selected as first field, "
 96                                                        "this field lets you select the target field within the "
 97                                                        "destination document model (sub-model)."),
 98         'copyvalue': fields.char('Placeholder Expression', help="Final placeholder expression, to be copy-pasted in the desired template field."),
 99         # Fake fields used to implement the ID finding assistant
100         'id_object': fields.reference('Record', selection=_select_objects, size=128),
101         'id_value': fields.char('Record ID'),
102     }

 

6.ir.actions.client

 1 _columns = {
 2         'name': fields.char('Action Name', required=True, translate=True),
 3         'tag': fields.char('Client action tag', required=True,
 4                            help="An arbitrary string, interpreted by the client"
 5                                 " according to its own needs and wishes. There "
 6                                 "is no central tag repository across clients."),
 7         'res_model': fields.char('Destination Model', 
 8             help="Optional model, mostly used for needactions."),
 9         'context': fields.char('Context Value', required=True,
10             help="Context dictionary as Python expression, empty by default (Default: {})"),
11         'params': fields.function(_get_params, fnct_inv=_set_params,
12                                   type='binary', 
13                                   string="Supplementary arguments",
14                                   help="Arguments sent to the client along with"
15                                        "the view tag"),
16         'params_store': fields.binary("Params storage", readonly=True)
17     }
18     _defaults = {
19         'type': 'ir.actions.client',
20         'context': '{}',
21 
22     }

客户端动作

posted @ 2015-03-14 15:48  青岛欧姆网络科技  阅读(5002)  评论(0编辑  收藏  举报