企业 Map 框架

Odoo 企业版 Map View 为什么不是“多一个前端组件”而已:view_mode 注册、默认 arch 与 RNG 校验讲透

Map View 能进 Odoo 视图体系,依赖的不是前端 Leaflet,而是 action 层 view_mode 扩展、模型默认 map arch

企业 框架
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

很多人看到企业版 Map View,会自然把注意力放在地图渲染上:是不是 Leaflet、能不能打点、路线怎么画。但如果只看前端,你会错过它真正有价值的地方:Map 视图被纳入 Odoo 通用视图框架的方式

主要参考:

  • enterprise/web_map/models/ir_action.py
  • enterprise/web_map/models/models.py
  • enterprise/web_map/validation.py

一、第一步不是画地图,而是把 map 注册成合法的 view_mode

ir.actions.act_window.view 通过 selection_addmap 注册进 view_mode。这一步看似很小,实际意义很大:只有进入 action 体系后,Map View 才能像 list、form、kanban 一样被菜单、窗口动作和切换器正式调度。

换句话说,企业版地图不是一个外置页面,而是 Odoo 视图体系内的原生成员。

二、默认 arch 生成,说明它支持“从模型倒推视图”

_get_default_map_view() 在模型层提供了一个默认 map arch 生成器。如果模型存在 partner_id,系统就能自动生成 <map res_partner="partner_id"/> 这样的最小视图骨架;没有则明确报错。

这体现了 Odoo 典型的框架思路:不是先要求你手写完整 XML,而是先尝试从模型结构推导一个可运行最小值。

三、服务器端 RNG 校验,是 Map View 进入正式框架的关键门槛

validation.py 用 RelaxNG 校验 map arch。很多人会以为地图视图只要前端能解析就行,但官方并不满足于此。它要在服务器端就保证:

  • 视图结构合法
  • 属性位置正确
  • 非法 arch 尽早失败

这会大幅降低“数据库里存了一段前端勉强能跑但后期会炸”的视图脏数据风险。

四、为什么这比“前端有地图组件”更重要

如果没有上述三层,Map View 只是一个地图页面;有了它们,Map 才成为:

  • 可以挂在 action 里的标准视图
  • 可以由模型自动生成的默认骨架
  • 可以被服务端校验并安全持久化的 XML 视图

这才叫框架级能力,而不是 UI 级能力。

五、实战建议

当你自定义地图视图时,最应该尊重的不是某个前端属性,而是这套框架边界:

  • action 层必须认可 map
  • arch 结构必须满足 RNG
  • 默认模型前提通常是存在可定位的联系人字段

别把它当成“普通自定义组件塞进页面”——那样最后最容易在视图保存与 action 打开阶段出问题。

六、结论

Map View 的真正价值,在于它通过 view_mode 注册、默认 arch 推导和 RNG 校验,被纳入了 Odoo 的标准视图栈。

所以它不是“地图功能接进来”这么简单,而是一种被框架正式承认的企业版视图类型。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。