1. 程式人生 > >openERP筆記,自定義開發模塊

openERP筆記,自定義開發模塊

客戶 自己 作者 開發 模式 desc 模塊開發 encoding 自動安裝

##目標

  • OpenERP模塊基本結構
  • 使用模塊添加額外的字段(Date Required和Rush Order)
  • 擴展視圖, 讓OpenERP能夠顯示新的字段
  • 修改用於OpenERP工作流的可用狀態

##創建第一個OpenERP模塊
不修改OE源碼情況下寫自己的模塊擴展OE是OpenERP框架一個很好的特性. 我們所做的所有修改都放在我們自己的目錄, 自己的文件中.

每個OE模塊能夠被OE框架正確認識並安裝, 一旦成功安裝了我們的模塊, OE框架將會用該模塊的功能擴展OE.

##指定一個目錄保存我們的OE模塊

兩種方式:

  • 在OE的addons目錄下保存我們的模塊;
  • 創建一個獨立的目錄保存我們的模塊, 這種方式的有點是能夠將OE標準模塊與我們的模塊分開.

對於第二種方式, 需要修改OE的配置文件:

[options]
admin_passwd = admin
db_user = jeff
db_password = greater
addons_path = /home/openerp/server/addons,/home/mymodules

這樣, home目錄下的mymodules目錄中保存我們定制的OE模塊.

##模塊目錄內容

在OE的addos目錄下(addons_path中設定)創建一個目錄silkworm保存我們的silkworm模塊. 在silkworm目錄下創建兩個文件:

  • __init__.py
  • __openerp__.py

__init__.py文件的目的是指定該模塊中想要包含的Python文件(不用管文件的擴展名).

import silkworm

__openerp__.py文件是OE模塊的清單文件, 向OE框架說明該模塊的一些屬性. 這個文件有時也被稱為模塊描述文件, 用Python中的字典(dictionary)描述.

{
       ‘name‘: ‘Screen Printing‘,
       ‘version‘: ‘1.0‘,
       ‘description‘: """
       This module adds functionality for
            screen printing companies
       """,
       ‘author‘: ‘Greg Moss‘,
       ‘depends‘: [‘base‘,‘sale‘],
       ‘data‘: [‘silkworm_view.xml‘],
       ‘demo‘: [],
       ‘installable‘: True,
       ‘auto_install‘: False,
}

在安裝OpenERP模塊時, __openerp__.py文件給出框架配置該模塊所需的各種信息.

  • name: 顯示在OpenERP模塊列表中;
  • version: 模塊版本號;
  • description: 安裝模塊時顯示;
  • author: 作者;
  • depends: 前面幾項(name, version等)是用於文檔的說明性的元素, depends告訴框架這個模塊是建構在哪些其他模塊基礎上的. 至少要依賴於base, 本例中因為擴展了sales order系統, 所以也要依賴於sale模塊;
  • data: 指定模塊的xml視圖文件. 如果希望改變OE的forms或UI, 創建一個視圖文件. 其他類型的數據文件也可以在這裏指定, 例如包含初始化數據或訪問權限的數據. 本例中只有一個文件silkworm_view.xml文件;
  • demo: OE提供了一種方便的方式來包含定制模塊的說明數據, 本例中留空, 但是如果希望在模塊安裝時可以添加一些說明數據, 用這項指定;
  • installable: 使用此項可以臨時禁止一個模塊的安裝;
  • auto_install: 如果此項為True, OE將會在該模塊的所有依賴項安裝好之後自動安裝這個模塊, 大部分情況下不會指定自動安裝.

##silkworm.py中擴展OpenERP模型

為了向我們的sales order添加Date Required和Rush Order字段, 首先創建silkworm.py文件, 然後添加下面的代碼到silkworm.py文件中:

from openerp.osv import osv, fields

class silkworm_sale_order(osv.Model):
    _inherit = ‘sale.order‘
    _columns = {
       ‘x_daterequired‘: fields.date(‘Date Required‘, required=True),
       ‘x_rush‘: fields.boolean(‘Rush Order‘),
        }

###繼承sales order

代碼中, 創建了一個silkworm_sale_order類, 派生自osv.Model, Python的OO繼承.

_inherit_ = ‘sale.order’, 這一句指出這個類繼承了sale.order, OpenERP的繼承.

_columns字典列出了我們向sales order模塊添加的兩個自定義字段.

###將自定義字段添加到sales order視圖中

__openerp__.py文件中的’data’指定了視圖xml文件, silkworm_view.xml.

<?xml version="1.0" encoding="utf-8"?>
   <openerp>
       <data>
          <record id="sale_view_order_form" model="ir.ui.view">
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
              <field name="client_order_ref" position="after">
                <field name="x_daterequired"/>
                <field name="x_rush"/>
              </field>
            </field>
       </record>
    </data>
</openerp>

OE中的視圖定義使用XML語法. OE視圖文件用openerp標記包裹, 下一級是data標記. 為了在自定義的OE模塊中修改或添加視圖, 添加record標記.

<record id="sale_view_order_form" model="ir.ui.view">

每一個record必須有一個id屬性, 另外這裏我們指定了這個record的model屬性為ir.ui.view.

<field name="model">sale.order</field>

接下來, 應該指定這個record對應的model, 本例中為sale.order, 因為我們為sale.order添加了字段. 如果我們為purchase order添加了字段, 那這裏就應該是purchase.order.

在OE的開發模式下, 鼠標移動到字段上可以查看該字段所屬的模型; 在開發模式下的Manage Views中, 也可以發現想要使用的view的名字. 這些功能可以方便OpenERP的模塊開發.

<field name="inherit_id" ref="sale.view_order_form"/>

類似於我們的模型派生自sale.model, 我們的視圖也應該從sale.view_order_form視圖派生而來, 這樣我們可以增加一些自定義的字段. 開發模式下使用”Manage Views”查看這些信息.

<field name="arch" type="xml">

arch項是所有視圖改變都需要的, 不需要知道為什麽, 用吧.

接下來就到了給新增的自定義字段指定顯示位置了.

<field name="client_order_ref" position="after">

添加字段到form上時, 應該明確地確定這個字段應該放在什麽位置. 例如上面的那行代碼, 告訴OpenERP框架首先找到client_order_ref字段, 然後在它的後面(position=”after”)顯示增加的兩個字段.

client_order_ref字段怎麽找到的? 只需要激活OE的開發者模式(OE的關於對話框中激活), 打開相應的view, 然後將鼠標懸停在字段的label上即可在tooltip上顯示出來.

<field name="x_daterequired"/>
<field name="x_rush"/>

上面這兩句向form中添加我們新增的字段顯示.

##安裝模塊

這個例子很簡單, 僅僅把兩個字段添加到了sales order form中, 這個模塊目錄中有四個文件:

  • __init__.py
  • __openerp__.py
  • silkworm.py
  • silkworm_view.xml

###參數設定

OpenERP addons_path設定
首先./openerp-server -s, 在$HOME/下生成.openerp-serverrc文件, 修改其中的addons_path選項, 增加addons目錄. 這裏要註意, 多個路徑之間用逗號分隔並且不能有空格.

###安裝

需要該用戶啟用了技術特性(設置->用戶->編輯->訪問權限->勾選”技術特性”).

首先”設置->更新模塊列表”, 然後輸入過濾關鍵字找到模塊安裝. 安裝後打開一個sale order(銷售訂單), 可以看到在”客戶關聯單號(client_order_ref)”後增加了兩個新的字段

openERP筆記,自定義開發模塊