其他深度

Odoo Mail Plugin 联系人为什么不是“搜不到就新建一下”:公司富化、域名缓存与访问边界讲透

Mail Plugin 在联系人侧真正复杂的,不是“有没有搜到人”,而是它会不会按邮箱域名复用公司、何时调用 IAP 富化、没权限时返回什么,以及通知邮箱这类特殊地址怎么处理。

其他
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

先说结论

一个邮箱插件要好用,关键不只是能不能创建联系人,而是它能不能在“联系人、公司、富化资料、权限边界”之间做出像样判断。Mail Plugin 在这方面其实相当克制。

第一层:为什么先找公司,而不是先盲建联系人

res_partner_get() 在查不到联系人时,不会立刻催你新建,而是先尝试 _find_existing_company()。这说明官方认为:插件场景里,联系人往往只是一个入口,更重要的是能不能把他挂回正确公司。如果先乱建联系人,后面数据很容易碎成孤岛。

第二层:域名缓存为什么比实时富化更重要

_find_existing_company() 会先看 res.partner.iap 缓存,再找现有公司,而不是每次都直接打 IAP。因为真正昂贵的不是“搜公司”这个动作,而是外部富化调用的成本和不确定性。缓存优先,说明系统在把插件体验和外部依赖成本一起考虑。

第三层:什么情况下才会新建并富化公司

当数据库里没有现成公司、当前用户又有创建权限时,系统才会 _create_company_from_iap()。它会把公司名、地址、电话、网站、国家州信息甚至 logo 一起带回来,再把原始富化信息写到 iap_enrich_info。这说明官方并不把富化当成“补个 logo”,而是把它视作主数据初始化过程的一部分。

第四层:为什么无权限时也要返回最小信息

_get_company_data() 在没有读取权限时不会直接报错,而是返回 {id, name: No Access}。这很有产品感:插件端至少需要知道“这个公司存在但你看不到细节”,否则用户会误以为系统里压根没有对应记录。

第五层:通知邮箱为什么被特殊处理

源码会把 notification address 单独拦出来,不允许直接当联系人绑定。这其实是在避免“系统回执邮箱”“别名邮箱”混入真实业务联系人。很多集成失败并不是接口报错,而是数据边界没分清。Mail Plugin 在这里专门踩了刹车。

最容易误解的三个点

  • 误区一:联系人查不到就应该立刻新建。对邮件场景来说,先找公司归属往往更重要。
  • 误区二:IAP 富化越频繁越智能。实际里缓存优先往往更稳、更省。
  • 误区三:权限不足就直接报错最安全。插件体验上,适度返回“存在但不可读”更有帮助。

实战上怎么用更稳

  • 做类似邮箱集成时,先想清楚公司复用规则,再谈联系人创建规则。
  • 富化服务最好有缓存层,否则插件首次体验会抖得很厉害。
  • 如果用户说“为什么插件搜不到”,检查通知邮箱和访问权限边界。

最后总结

Mail Plugin 之所以像样,不是因为它会“自动建联系人”,而是因为它在自动化之前,先认真处理了公司归属、缓存、权限和异常邮箱这几条边界。

DISCUSSION

评论区

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