odoo web window title config app

ODOO浏览器窗口标题配置模块
前文odoo custom web window title已经讲解了基础原理,虽然代码很简洁易懂,但对非开发出身的odoo玩家使用还是有一些难度,而且不同版本可能还会有一些实施细节上的差异

整体开箱即用、细节精益求精是我毕生追求的odoo一体化目标,周末趁这个小机会将其一步到位适配成8、9、10三大主流版本全覆盖的模块,并已发布到odoo官方应用市场,支持在线自动安装,也可以下载相应的版本到本地进行传统手动安装

https://apps.odoo.com/apps/modules/8.0/web_window_title/
https://apps.odoo.com/apps/modules/9.0/web_window_title/
https://apps.odoo.com/apps/modules/10.0/web_window_title/

odoo-web-window-title-app

odoo form view document directory upload

ODOO表单视图文档目录上传
关于附件上传的可行性体验优化,目前国际上最多最成熟的方案都是扩展支持多选和拖拽两种方式,也能极大的改善ODOO原生的单附件上传模式
但是如果追求极致的话还可以扩展支持文档目录直接上传,一次选择操作就可以将目录里的所有文件全部上传,无论目录有多少层级多少子目录全部一网打尽

基础结构:file元素添加html5新特性

PS:一堆浏览器私有前缀属性仿佛又回到了IE多版本称霸年代:)

事件支持:odoo form view document multi upload
居然上次多选上传的代码直接支持,可见写的一手兼容未来代码的重要性

有图有真相:Linux都兼容,Win、Mac理论不在话下。。。

目录上传

目录上传选择

目录上传结果

参考资料:
https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/html5/folder-upload
https://developer.mozilla.org/en-US/Firefox/Releases/50

odoo model import data ignore error

ODOO模块导入数据忽略错误
经常遇到大量的数据导入,不仅耗时很长,如果其中有一条数据有异常产生错误,就会导致整个过程回滚,这是非常悲剧的,其中相关源码如下:

明白核心代码处理逻辑后,就可以在外层拦截并过滤错误数据继续提交干净数据以实现自动纠错导入,实现源码如下:

odoo tree view link text url widget

原生列表视图的url组件会将链接也显式的填充到字段列,如果遇到该字段的链接特别长且参数众多,表格就会撑的很难看,这就需要量身为其定制一种纯显示链接文字的widget:

之后就可以在列表视图中直接使用诸如<field name=”content_url” widget=”link”/>形式的链接文字字段组件

odoo notify and warning client action

odoo后台接口如果出现错误可以简单抛出一个UserError异常给前端进行处理
但是有些时候可能只是一个通知或者警告给用户,不需要错误这么重的模态强交互,也不用影响主流程

从odoo8的addons/web/static/src/js/chrome.js源码中可以发现这个功能曾经拥有

本次以notify通知为例,其对应到odoo9之后的移植代码为:

相对应后台调用统一封装方法:

 

odoo form view document multi upload

odoo表单相关的附件文档如果过多,逐个本地选择上传也是一种负担,比较好的方式是适配现代H5浏览器文件选择对话框原生的多选功能,这可以大大提高多文件操作效率

基础结构:file元素添加multiple属性

事件支持:

odoo custom web window title

odoo窗口标题的修改方法有很多,但最灵活的还是后台开发者模式动态修改视图里的title,这就需要先搭一座便桥先:

上述是桥接视图方便随时修改,接着还需要将原生前端硬编码优雅的架构到一起

如果还想追求到极致的话,下一步就是再将其整合到res_config通用设置里,特别适合SAAS运营的场景:)

odoo form view pic url widget

原生表单视图的image组件只能使用binary类型字段存储本地图片,而互联网应用一般都使用cdn,如第三方的七牛云存储,其在odoo中的表现形式其实是一个char类型的url,并不会占用自身服务器的存储,这就需要量身为其定制一种外链图片的widget:

之后就可以在表单视图中直接使用诸如<field name=”pic_url” widget=”pic”/>形式的网络图片字段组件

odoo res model document multi download

odoo表单相关的附件文档如果过多,逐个下载到本地也是一种负担,比较好的方式是提供一种打包下载的可选功能,既可以提高操作效率也可以减少网络下载流量

打包下载路径举例:
http://renjie.me/web/binary/download_attachment?model=project.task&id=1983

odoo views client reload action

odoo原生常用的reload动作,是整个框架的刷新,源码如下:

还有一个reload_context动作,整体刷新前会先刷新session上下文是否正常,源码如下:

现在需要对一些轻量级的通用场景进行视图层级的数据重载刷新支持,以提高用户体验的舒适度,核心代码如下:

之后就可以在odoo任何层级应用代码里跟调用reload和reload_context一样快捷方便的使用reload_view动作