【OpenERP 7.0 開發(fā)教程】3 OpenERP開發(fā)演練:原文教程地址
目錄
- 教程review
- 新建1個模型
x_qingjd
焦蘑,4個字段x_kaisrq
x_shenqr
x_shiyou
- 新建2個視圖
- 創(chuàng)建3個菜單項(模型 → 請假單 → 創(chuàng)建菜單)
- Action缰盏,不需要手動創(chuàng)建
- 問題分析
- 關于
ir_act_window_view
無新記錄的分析
一、教程review
1. 新建1個模型 x_qingjd
,4個字段 x_kaisrq
x_shenqr
x_shiyou
x_tians
- 多一張
x_qingjd
單 -
ir_model
多一條記錄鲫懒,表示新表 -
ir_model_fields
多四條記錄因悲,表示新的四個字段
x_qingjd
ir_model
ir_model_fields
2. 新建2個視圖(PS:序列號是什么用?)
-
ir_ui_view
多兩條記錄厚者,xml保存在arch
中
ir_ui_view
3. 創(chuàng)建3個菜單項(模型 → 請假單 → 創(chuàng)建菜單)
-
ir_ui_menu
多三條記錄
ir_ui_menu
4. Action,不需要手動創(chuàng)建
-
ir_act_window
多兩條記錄 -
ir_act_window_view
理論上這張表要有數據生成迫吐,然而卻沒有數據 -
ir_values
多兩條記錄库菲,
ir_act_window
ir_values
二、疑問
如果完全按照教材里面的做志膀,功能肯定是能用熙宇,但是有幾點要說明:
- 使用界面開發(fā)模塊鳖擒,不要指望在本地代碼中找到痕跡,xml也好烫止,py也好蒋荚,都找不到相關代碼。
- 教程第二步中:序列號是什么用馆蠕?
-
ir_act_window_view
表壓根就沒有新記錄生成期升,真奇怪這個功能為什么還能用?互躬?播赁?關于這一點,原教程也沒有提及吼渡。
三容为、關于 ir_act_window_view
無新記錄的分析
沒有新記錄肯定是操作上的問題,有可能是遺漏了步驟寺酪,因為我也是初學者坎背,就不分析。
我分析看為什么請假單這個例子沒有 ir_act_window_view
記錄寄雀,仍然可以工作沼瘫。
其實從點擊菜單到后臺orm代碼,最關鍵的無非就是要找到view。
見 osv.orm.BaseModel.fields_view_get
中關鍵代碼
if view_ref and not view_id:
if '.' in view_ref:
module, view_ref = view_ref.split('.', 1)
cr.execute("SELECT res_id FROM ir_model_data WHERE model='ir.ui.view' AND module=%s AND name=%s", (module, view_ref))
view_ref_res = cr.fetchone()
if view_ref_res:
view_id = view_ref_res[0]
if view_id:
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
FROM ir_ui_view
WHERE id=%s""", (view_id,))
else: # 請假單這個例子進的是這個分支
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
FROM ir_ui_view
WHERE model=%s AND type=%s AND inherit_id IS NULL
ORDER BY priority""", (self._name, view_type))
sql_res = cr.dictfetchone()
if not sql_res:
break
view_id = sql_res['inherit_id'] or sql_res['id']
通過打印日志,發(fā)現執(zhí)行的SQL如下
SELECT arch, name, field_parent, id, type
, inherit_id, model
FROM ir_ui_view
WHERE model = x_qingjd
AND type = tree
AND inherit_id IS NULL
ORDER BY priority
換句話說纺腊,OpenERP默默的在補了很多工作既穆,即使是用戶遺漏了某些數據,還是能比較順利的處理螟深!