OpenERP开发演练 - review

【OpenERP 7.0 开发教程】3 OpenERP开发演练:原文教程地址


目录

  1. 教程review
  2. 新建1个模型 x_qingjd,4个字段 x_kaisrq x_shenqr x_shiyou
  3. 新建2个视图
  4. 创建3个菜单项(模型 → 请假单 → 创建菜单)
  5. Action,不需要手动创建
  6. 问题分析
  7. 关于 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. 创建3个菜单项(模型 → 请假单 → 创建菜单)
  • ir_ui_menu 多三条记录
    ir_ui_menu
4. Action,不需要手动创建
  • ir_act_window 多两条记录
  • ir_act_window_view 理论上这张表要有数据生成,然而却没有数据
  • ir_values 多两条记录,
    ir_act_window

    ir_values

二、疑问

如果完全按照教材里面的做,功能肯定是能用,但是有几点要说明:

  1. 使用界面开发模块,不要指望在本地代码中找到痕迹,xml也好,py也好,都找不到相关代码。
  2. 教程第二步中:序列号是什么用?
  3. 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']

通过打印日志,发现执行的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默默的在补了很多工作,即使是用户遗漏了某些数据,还是能比较顺利的处理!

你可能感兴趣的:(OpenERP开发演练 - review)