odoo Many2one field create use custom view open

odoo联系人相关的信息全部存储在res.partner对象里,包括供应商、客户、员工等个人及公司相关的信息都可以归纳入内

二次开发经常会直接关联该对象可以少造很多轮子,但由于其新建联系人的默认视图view_partner_form是一个非常重且包含好多类型设置又被各种业务模块继承扩展过的大视图,这就需要为不同的应用场景开发对应业务信息的轻量级自定义视图

最开始我是从继承res.partner并重写其@api.model的fields_view_get方法来完成的

使用很简单view context新增一个view_name属性指定自定义视图名称即可

当后来对其它对象也有同样需求的时候就基本确定我悲剧的造了一个小轮子
因为这个需求是非常合理,如果要一个个对象去继承重写是非常不实现的,至少也要在共同的父类上做对接
根据这个思路从openerp.osv.Model一直寻找到openerp.models.Model的fields_view_get父级方法,其中有一段代码让人眼前一亮

这不就是传说中解决分类自选视图的相关代码:类型、模块名、视图ID确定一个视图
马上删除之前所有相关代码,view context按如下规则修改直接应用

至此,对odoo一切都是models的理念又有了进一步的理解

ECShop动静分离transport.js get jsonp跨域对接

ECShop transport.js定义了Ajax Transport

其中run方法实现了类似jQuery $.ajax的功能但缺少了对jsonp方式的支持

可以在第一个get方法判断入口前新增下列代码:

巧妙的将原来ajax get方法对接上jquery script jsonp实现
排除一些自制的特殊调用:比如callback的第二个参数以及this的深度使用
其它上层Ajax.call相关调用就不用一一更新了

Linux下反编译flash swf文件查看actionscript代码

今天有个需求参照物的关键代码封装在swf里
想了解下实现才想起来本地没有相应的反编译软件

虽说现在flash反编译软件多如牛毛,但支持多平台又免费开源的并不多
还好优秀软件不在多,让我发现了JPEXS Free Flash Decompiler

源码库:
https://github.com/jindrapetrik/jpexs-decompiler

官网:
https://www.free-decompiler.com/flash/
This product is completely FREE with no hidden fees. No premium version exists. No trial limitations. You get one version with all features included. No ads anywhere. You can look in app source code. That is fair, seriously. Don’t you think?

GitHub上可以看到,该软件更新维护非常活跃,今天下载的最新7.1.2版本是月初发布的,非常新鲜,就是国内下载好慢,最后去掉https后快了一些
http://www.free-decompiler.com/flash/download/ffdec_7.1.2.zip

Linux下依赖几乎没,就是对最新java1.8以上的版本要求稍稍高了些
下载完解压到/opt/ffdec,然后运行目录下的ffdec.sh即可,真正的开箱即用

JPEXS Free Flash Decompiler

原本以为就一命令行,没想到全程GUI操作还自带中文语言包切换下即可
那ActionScript都省的导出另外看,直接当作Linux下简易IDE,其基本的Run、Debug功能都集成好了

Odoo8、9打印中文字体配置分析详解

源码路径odoo/openerp/report/render/rml2pdf/customfonts.py

可见对于windows、mac及linux大部分发行版的默认系统字体路径都做了比较全面的配置

接着根据正则*.[Tt][Tt][FfCc]对所有配置路径下的文件扩展名做字体匹配以生成odoo可供配置选择的字体列表

一般Linux下使用最多的开源中文字体是文泉译系列,简称wqy,Centos下yum search wqy相关英文描述(中文笔者补充):

wqy-microhei-fonts.noarch : Compact Chinese fonts derived from Droid
文泉驿微米黑是一个”自由字体”。该字体包含了所有常用简体中文、繁体中文所需要的汉字(最新版本包含超过20932个汉字,完整覆盖GB2312/Big5以及GBK标准字符集)。该字体同时还包含了日文、韩文和其他几十种语言符号。以外,该字体还包含了高质量的Droid Sans拉丁符号和Droid Sans Mono等宽字体,并内置Hinting和Kerning信息。微米黑字体文件极小,特别使用于便携式电脑设备

wqy-unibit-fonts.noarch : WenQuanYi Unibit Bitmap Font
文泉驿Unibit是一款等宽的点阵字体,该字体包含了46,000多个unicode符号,超过27,000多个符合国家标准的汉字点阵字型,是已知的开源字体当中包含符号最完整的字体之一

wqy-zenhei-fonts.noarch : WenQuanYi Zen Hei CJK Font
黑体由于笔画略宽,显示对比度比宋体大,所以越来越得到桌面用户的青睐。文泉驿正黑体正是为这种目的设计的一款开源字体

据上描述可直接根据需要yum install对应的字体名称即可快速安装
当然也可以直接去文泉译官网http://wenq.org/获取最新版本及其它类型中文字体,如文泉驿点阵宋体

然后以优秀的文泉驿微米黑字体为例:

最后一行是字体文件物理位置,很不幸用了独立子目录wqy-microhei,这在官方配置列表里是没有的,不过好在扩展名正则已经支持ttc字体了,之前只有ttf字体才可匹配到,所以很多老教程都是直接在源码里加路径加扩展名匹配来解决

那不改源码最简单的方法就是从配置里与系统最低耦合的~/.fonts用户目录来存放可识别字体:

最后重启odoo,设置-配置-常规设置-报表字体-重载字体,字体下拉里就可以直接选择或者搜索到WenQuanYi Micro Hei选择并应用生效后即可完美使用中文打印各种报表了

nginx log.io websocket config

将nginx部署到log.io前端后发现功能虽然正常,但控制台有错误记录

接着就是刷屏式的如下请求了

猜测肯定遇到降级处理了,找到了其依赖的socket.io源码确认果然如此

那问题基本归根与nginx对于websocket这种新协议的代理问题,简单优化配置如下

可见不用新开端口服务,直接在现有的http端口通道上进行改造即可
同时附上websocket握手协议的相关记录以方便日后进行深入研究

 

首次ionic build android下载repo1.maven.org/maven2资源卡死

原来ionic platform add android时
只自动创建了gradle wrapper及配置(gradle-wrapper.properties)
首次构建时在根据其distributionUrl项指定的Gradle版本地址进行下载安装

开始一切都很顺利,遇到什么下载什么
直到bcprov-jdk15on-1.48.jar时就卡死了,几个小时什么提示都没也不退出
wget重现一下发现刚开始下载很顺利,然后越来越慢,最后超时重试
不过由于默认会不断重试,最终还是成功下载回来的
以前还真没有遇到过一个仓库大部分可以顺利下载小部分艰难下载的情况
也许是刚好遇到网络不顺畅导致的假象?

还好开源中国提供了http://maven.oschina.net/content/groups/public/镜像

测试一切良好

修改./platforms/android/build.gradle文件替换mavenCentral()为
maven { url “http://maven.oschina.net/content/groups/public/” }
后运行build可以顺利通过卡死点,不过不知道为什么,接下来的其它依赖总是下载推进几个就报Could not GET错误退出

要反复运行才可以抵达终点,难道是中国的镜像选择太少,大家一起用同一个服务器有些稳不住的缘故?

本机同时部署odoo8和odoo9等多套开发环境注意事项

自从odoo9正式发布后,odoo8就意味着迟早要跟odoo7一样进入历史
但在一段时间的过渡期内
开发者可能要维持两套版本环境方便快速调式自己的代码能否多版本兼容运行
特别是插件开发,经常一个修改就需要到两个系统更新应用测试
以下记载各个共存环节需要注意的事项

安装方式:
因为安装包是互斥冲突的,所以必须源码安装

依赖库:
相同部分(python)或特有部分(nodejs)可以全局安装,不同部分则用上篇python-virtualenv虚拟环境隔离

数据库:
最简单一个本机帐号同名的超级账户共享使用,odoo缺省配置就能连接上了
不过最好先安装8在安装9,因为9能认识8创建的数据库而忽略,但8不太认识9创建的数据库自动连接会报错
共存之后8的控制台会例行报如下警告,要洁癖只能分别配置两个数据库帐号

版本库:
odoo8和odoo9两目录分别clone对应官方git版本库的8.0和9.0分支,独立各自日常更新

插件库:
比较灵活,我的方式是与odoo目录同级,然后配置文件共同指向

配置文件:
启动时分别指定各自独立配置,各自用不同的端口

浏览器:
虽然分属不同的端口提供服务,但因为登录标识必须要写用户本地浏览器cookie如session_id,或者犹如website_lang网站默认语言这种个性化设置。但由于cookie只匹配域名及路径就是不区分端口,所以同一个浏览器只能固定某个版本调式,如果同时使用就会发生各种意想不到的混乱错误。
当然解决方案也很简单,就是将本机127.0.0.1多设置几个如localhost这种别名来给不同的odoo版本独立访问即可

 

用python-virtualenv统一管理odoo python依赖库

odoo有些python依赖库官方yum源里没有
或者有可能版本不兼容
这就需要根据版本指定安装,默认是安装到
/usr/lib/python2.7/site-packages/
主要是本机开发环境,各种基于python的系统部署一起
长期下来感觉又回到windows时代dll库混乱的悲剧
更何况odoo8和odoo9所依赖的库和版本都不尽相同
非常需要根据应用来独立管理所对应的依赖环境

安装python-virtualenv:

创建虚拟环境:

进入虚拟环境:

进入odoo目录直接安装:

也可以直接通过pip来安装(可用阿里云等提供的国内镜像快速下载):

可能会遇到一些库对virtualenv默认的setuptools的版本有要求,根据提示升级下(Centos目前yum源python-virtualenv-1.10.1-2自带的是0.9.8版本有些低):

同时附上pip、easy_install及setup.py安装获取依赖库的阿里云镜像源配置:

以后每次使用都要先通过source命令指定对应环境下的activate初始化进入
离开则直接使用deactivate命令即可回到原生环境
当然也可以通过修改odoo.py头直接指定虚拟环境的python路径来快捷运行:

 

Odoo Bootswatch Theme fonts.googleapis.com访问速度慢

Odoo8的website模块自带Bootswatch系列主题集
Odoo9则将其独立为一个theme_bootswatch主题,可见将来主题也跟应用一样市场化了

其中某些子主题依赖谷歌fonts.googleapis.com字体,国内用户全天候访问不一定友好,可以选用360网站卫士提供的CDN服务替换以达到安全或加速的效果

360网站卫士官方说明http://libs.useso.com/

主题路径
odoo8/addons/website/static/src/css/bootswatch
odoo9/addons/theme_bootswatch

全局搜索“fonts.googleapis.com”替换成“fonts.useso.com”即可解决不稳定问题
也可以举一反三直接在odoo主目录暴力搜索替换以解决其它第三方应用或主题可能存在同样的问题