odoo中实现点击菜单后弹出Form视图并显示已存在的记录

admin 2019-9-18 6604

有个需求:在odoo中点击菜单弹出Form视图,显示已存在的某一条记录,若记录不存在,则新建一条记录并显示。


该需求用Server Action来实现。具体如下:


1、创建一个model

class CFPrintServerMapping(models.Model):
    _name = 'cf.print.server.user.mapping'
    _description = _("Print Server and User Mapping")
    @api.model
    def _current_user_domain(self):
        return [('id', '=', self.env.user.id)]
    user_id = fields.Many2one("res.users", string="User", default=lambda self: self.env.user.id, domain=_current_user_domain)
    prn_server_ip = fields.Char(string="Print Server IP")
    prn_server_port = fields.Integer(string="Print Server Port", default=9999)
    @api.model
    def create_or_show(self):
        mapping = self.search([('user_id.id','=',self.env.user.id)], limit=1)
        if not mapping:
            mapping = self.create({"prn_server_ip": "127.0.0.1", "prn_server_port": 9999})
        action = {
            'type': 'ir.actions.act_window',
            'name': _('Print Server Address'),
            'view_mode': 'form',
            'view_type': 'form',
            'res_model': 'cf.print.server.user.mapping',
            'nodestroy': 'true',
            'res_id': mapping.id,
            'views': [(False, 'form')],
            'view_id': self.env.ref("cfprint.cf_print_server_mapping_form"),
            'target': 'new',
        }
        #这里一定要返回action,否则无法跳转到Form视图
        return action

2、创建Server Action动作

<record id="act_cf_print_svr_ip" model="ir.actions.server">
  <field name="name">Print Server Address</field>
  <field name="type">ir.actions.server</field>
  <field name="model_id" ref="model_cf_print_server_user_mapping"/>
  <field name="binding_model_id" ref="model_cf_print_server_user_mapping"/>
  <field name="state">code</field>
  
  <!-- 下面这行一定要用action接收函数返回的结果,否则无法跳转到Form视图 -->
  <field name="code">action = model.create_or_show()</field>
</record>

3、创建菜单

<menuitem id="menu_prn_server_addr" name="Print Server Address" parent="menu_root" action="act_cf_print_svr_ip" sequence="1"/>


在odoo12中,创建或更新Server Action时,有时会报错:

null value in column “activity_user_type" violats not-null constraint

解决方法参考:

http://www.khcloud.net:4082/?thread-463.htm

最新回复 (0)
返回