-
自定義開發:如果沒有現成的模組,您可能需要進行一些自定義開發。這通常涉及到擴充套件Odoo的使用者模型,以跟蹤使用者的登入和登出活動。以下是一個基本的實現思路:
- 擴充套件使用者模型:在使用者模型(通常是
res.users
)中新增欄位來記錄使用者的最後活動時間。 - 更新最後活動時間:在使用者進行操作時更新這個欄位。這可以透過繼承並修改相應的控制器和方法來實現。
- 計算線上使用者:建立一個方法或計劃任務,定期檢查使用者的最後活動時間,並確定哪些使用者可以被視為“線上”。例如,您可以認為在過去幾分鐘內有活動的使用者是線上的。
- 擴充套件使用者模型:在使用者模型(通常是
-
檢視和報告:為了方便檢視線上使用者,您可以建立一個特定的檢視或報告,顯示當前線上的使用者列表。
-
安全性和效能考慮:在實現這樣的功能時,請確保考慮到資料的安全性和對系統效能的影響。例如,頻繁地更新使用者的最後活動時間可能會對資料庫效能產生影響。
這些只是基本的指導思路,具體實現會根據您的具體需求和Odoo環境的配置有所不同。如果您不熟悉Odoo的開發,建議諮詢專業的Odoo開發人員或者公司以獲得更具體的幫助。
為了在 Odoo 14 中監控線上人數,我們需要建立一個自定義模組。這個模組將擴充套件res.users
模型來記錄使用者的最後活動時間,並提供一個方法來計算當前線上的使用者數量。以下是實現這一功能的步驟和程式碼示例。步驟 1:建立模組結構
首先,您需要建立一個新的 Odoo 模組。這通常涉及到建立以下檔案和目錄:
__init__.py
:初始化檔案。__manifest__.py
:模組的後設資料檔案。models/
:包含模型擴充套件的目錄。models/__init__.py
:初始化模型目錄。models/res_users.py
:包含使用者模型擴充套件的檔案。
步驟 2:擴充套件res.users
模型
在models/res_users.py
檔案中,我們將擴充套件res.users
模型以新增一個欄位來記錄使用者的最後活動時間。
from odoo import fields, models class ResUsers(models.Model): _inherit = 'res.users' last_activity_time = fields.Datetime("Last Activity Time") def update_last_activity(self): """ 更新使用者的最後活動時間 """ self.sudo().write({'last_activity_time': fields.Datetime.now()})
步驟 3:建立一個計算線上使用者的方法
在同一個檔案中,我們可以新增一個方法來計算線上使用者的數量。這裡我們定義“線上”為在過去10分鐘內有活動的使用者。
from odoo import fields, models from datetime import timedelta class ResUsers(models.Model): _inherit = 'res.users' # ... [之前的程式碼] @classmethod def get_online_users_count(cls): """ 計算當前線上使用者的數量 """ last_10_minutes = fields.Datetime.now() - timedelta(minutes=10) return cls.search_count([('last_activity_time', '>=', last_10_minutes)])
步驟 4:更新使用者活動
您需要在使用者執行操作時更新last_activity_time
欄位。這可能涉及到修改多個地方,例如在登入時或者在執行特定操作時。這裡是一個簡化的例子,展示如何在使用者登入時更新:
from odoo import api, models class ResUsers(models.Model): _inherit = 'res.users' # ... [之前的程式碼] @api.model def _update_last_activity_after_login(self, db, login, password): """ 登入後更新使用者的最後活動時間 """ user = self.search([('login', '=', login)]) if user: user.update_last_activity()
步驟 5:__init__.py
檔案
確保在__init__.py
檔案中匯入擴充套件後的res.users
模型。
from . import models
步驟 6:__manifest__.py
檔案
在__manifest__.py
中定義模組的後設資料。
{ 'name': 'Online Users Monitoring', 'version': '1.0', 'summary': 'Monitor Online Users in Odoo', 'category': 'Tools', 'depends': ['base'], 'data': [], 'installable': True, }
好了,到此就可以構成odoo14的所有檔案,下面把上面的分析整合成一個完整的檔案
=====================================================================================================================================================
為了實現在 Odoo 14 中監控線上使用者的功能,我們需要建立一個自定義模組,該模組將會記錄使用者的最後活動時間,並提供一個檢視來展示當前線上的使用者。以下是整合的 Python 和 XML 檔案,這些檔案應該構成模組的主要部分。
1. __init__.py
檔案
這個檔案將匯入我們自定義的模型。
from . import models
2. __manifest__.py
檔案
這個檔案包含了模組的基本資訊。
{ 'name': 'Online Users Monitoring', 'version': '1.0', 'summary': 'Monitor Online Users in Odoo', 'category': 'Tools', 'depends': ['base', 'web'], 'data': [ 'views/online_users_view.xml', ], 'installable': True, 'application': True, }
3. models/__init__.py
檔案
這個檔案匯入了擴充套件後的使用者模型。
from . import res_users
4. models/res_users.py
檔案
這個檔案包含了擴充套件後的使用者模型和相關方法。
from odoo import api, fields, models, http from datetime import timedelta class ResUsers(models.Model): _inherit = 'res.users' last_activity_time = fields.Datetime("Last Activity Time") @api.model def update_last_activity(self): """ 更新使用者的最後活動時間 """ self.sudo().write({'last_activity_time': fields.Datetime.now()}) @classmethod def get_online_users_count(cls): """ 計算當前線上使用者的數量 """ last_10_minutes = fields.Datetime.now() - timedelta(minutes=10) return cls.search_count([('last_activity_time', '>=', last_10_minutes)]) class IrHttp(models.AbstractModel): _inherit = 'ir.http' @classmethod def _dispatch(cls): """ 攔截 HTTP 請求並更新使用者的最後活動時間 """ response = super(IrHttp, cls)._dispatch() current_user = http.request.env.user if current_user: current_user.update_last_activity() return response
5. views/online_users_view.xml
檔案
這個 XML 檔案包含了一個檢視,用於展示線上使用者。
<odoo> <record id="view_online_users_tree" model="ir.ui.view"> <field name="name">online.users.tree</field> <field name="model">res.users</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="login"/> <field name="last_activity_time"/> </tree> </field> </record> <record id="action_online_users" model="ir.actions.act_window"> <field name="name">Online Users</field> <field name="res_model">res.users</field> <field name="view_mode">tree</field> <field name="view_id" ref="view_online_users_tree"/> <field name="domain">[('last_activity_time','>=', (DateTime.now() - timedelta(minutes=10)).strftime('%Y-%m-%d %H:%M:%S'))]</field> </record> <menuitem id="menu_online_users" name="Online Users" action="action_online_users" parent="base.menu_management"/> </odoo>
使用說明
- 建立模組:您需要按照上述結構建立一個 Odoo 模組。這包括建立資料夾和相應的檔案。
- 安裝模組:在 Odoo 中安裝這個模組。
- 使用:安裝後,您可以在 Odoo 的介面上找到“線上使用者”的選單項,檢視當前線上的使用者。
注意事項
- 這個實現假定使用者在最後一次HTTP請求後的10分鐘內為線上。這不一定能完美地檢測瀏覽器關閉的情況,但它提供了一種近似的方法。
- 在實際部署之前,請在開發環境中進行充分的測試。
- 根據您的具體需求,您可能需要調整程式碼中的一些引數,