Odoo.live Odoo Implementation Log

做了一个钉钉扫码登入的模块分享到了apps.odoo.com

尝试做了Odoo13的钉钉登入模块,并发布到了odoo的应用商店。 整个过程蛮有意思的,找到合适的机会再发布一些有用的应用到odoo的应用商店。

另外把odoo.live这个很早注册的域名指向到了这个github pages上面,虽然可能墙内没法访问。

Odoo的三維輔助分析科目

Odoo上線來最讓人頭痛的一件事情就是分析科目只有一個維度,初期同事們用非常克難的方法來解決,就是建立了一個很長長長長的分科科目結構,這樣帶來了一個問題即當最前的那一階要調整的時候,其下附帶的全部子項都要調整,例如我們的部門放在了第一階,那麼要增加一個部門的時候呢?上千個子項調整……且不論那反人類的科目結構長度了。中間曾經有研究過那傳說中在8版本之後就不見了的預分配分析科目組,很遺憾并無法滿足需求。

讓Odoo也可以多維分析

  • 在需要的Model上增加新的欄位做為分析科目維度,例如我們是在Expense上增加了第二維度和第三維度
  • 為了在科目查詢的地方保持一致,原本預設維度應設為Project專用,這樣維度分析BI的地方看起來會比較一致
  • 修改Report的分析科目BI,將新的維度加入到其中
  • 一筆費用掛在不同維度的時候,各個維度都應呈現原金額(即金額會膨脹,取決於各公司預算管理方式,并不適合盲目套用)

NextCloud的一些做法

目前在幫公司Survey一些fileserver的解決方案,現在的傾向的方式為用S3作為資料存儲空間,并將其Mount至EC2上,并在EC2安裝NextCloud作為Private Cloud的前端。但因為內部需求,有需要這個fileserver能夠提供http的service將檔案可以外鏈至其他的系統或網站上呈現,這部分在NextCloud的原生做法中就無法Support,所以我在這邊有做出了一些調整記錄如下。

讓NextCloud可以外鏈

  • 因為NextCloud本身不能外鏈,所以要架設另外一個http server來進行外鏈
  • 為避免NextCloud所存資料皆被外鏈取走,因此只針對個別類型的文件開放外鏈,其他類型文件不可外鏈
  • NextCloud設定為在分享后,分享頁面下多增加一個Outter Link的textbox來放外鏈的URL
  • 修改nextcloud/apps/files_sharing/templates/public.php,尋找<div class="directLink">并在這個tag下增加
<div class="directLink">
	<label for="outterLink"><?php p($l->t('Outter link')) ?></label>
	<input id="outterLink" type="text" readonly value="<?php p('http://fileserver.bizcloud.xyz/'.$_['owner'].'/'.$_['filepath']) ?>">
</div>
  • 然而還有一個問題是在原始的NextCloud中并沒有將filepath開放出來,因此還要修改nextcloud/apps/files_sharing/lib/Controller/ShareController.php,尋找$shareTmpl[‘dir’] = ‘‘;在其下增加
$shareTmpl['filepath'] = $share->getNode()->getInternalPath();

Nginx的設定

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /home/ubuntu;

	server_name fileserver.bizcloud.xyz;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

	location ~* \.(pdf|html|html|xml|gif|jpg|png|js|css)$ {
		root /fileserver/nextcloud;
	}

}

更換Server后,用QWEB產生出來的PDF中文字及圖片大小有差異

最近執行了Odoo8的Server遷移,從Azure遷移到了Amazon,但是發現遷移后產出的PDF字體都變大,造成原本的版面被提早翻頁,使用者抱怨這樣會浪費紙張。

Odoo的QWEB產出的PDF尺寸問題

  • 首先檢查了wqy-microhei的字形文件,確認兩台Server的版本及文件大小完全一致
  • 再來檢查Odoo中的系統設定,確認使用的是相同字體(其實將資料庫匯出匯入,這裡應該是不會有差異的)
  • 正當一頭霧水找不到北的時候,印出了兩個版本的PDF來截圖準備求助的時候,發現除了文字大小之外圖片也有大小差異,因此確認可排除字形的問題
  • 因Odoo使用wkhtmltopdf來列印PDF,因此下指令wkhtmltopdf -V來比對兩台server的版本,果然發現差異,原因是舊的那台Server不是我安裝的,所以安裝的wkhtmltopdf版本有差異,分別是12.0.1和12.0.3,更換為相同版本后,再進行測試確認兩台Server印出的PDF大小已保持一致

一個微小的版本差異往往會很難找到原因,此問題一位同好也遇到過,當時他未找到此根因,因而修改所有的qweb來強制調整文字大小才解決掉。因此對這類基礎lib的版本差異應特別注意。

Odoo10的View中不可以設定row_number() over()流水號作為Key

最近在測試Odoo10的時候,發現Odoo8中的客制報表在Odoo10出現排序錯誤,Filter結果也出現錯誤,追查了很久,最終發現是Odoo10的效能優化所導致的異常。

Odoo10的查詢機制

  • Odoo10的Query分為了兩步
  • 首先使用查詢條件選出資料的ID欄位,其他任何搜尋結果欄位都不帶入
  • 然後真正的查詢需要的欄位,這個第二步的SQL條件為ID in 第一步查出的ID

這樣查詢效能有一些提升,但因為在Odoo8中使用的是流水號作為ID,這樣兩次查詢的結果排序可能就會有差異,因而造成Odoo10中作為第二次查詢條件的in會出現不同步,而導致了此錯誤產生。 因此在Odoo10中實際使用View的時候,需要依據View的邏輯來將組成不會變化的唯一ID作為Key來解決此問題。