2013-06-21 27 views
2
<record id="rule_605" model="ir.actions.server">  
     <field name="name">Example of action server item</field> 
     <field name="condition">True</field> 
     <field name="state">code</field> 
     <field name="sequence" eval="456"/> 
     <field name="code">True</field> 
     <field name="model_id" eval="Selling"/> 
</record> 

我混淆了上面的代碼片段在我的自定義模塊內。如何創建一個動作服務器OpenERP 7

什麼是正確的做法?我知道一些領域可能是錯的!

如何設置model_id?

回答

5

服務器操作是開放式ERP的最強大的功能之一(但我記不清楚)。我試圖在這裏解釋開放式ERP中的服務器操作。

服務器操作用於在達到工作流的特定階段時觸發一個或多個要在服務器端執行的操作。

例如,

  1. 當銷售訂單被批准時,將其添加到客戶的歷史記錄中。
  2. 確認銷售發票後,發送給客戶。
  3. 當CRM的情況下被關閉,彈出在客戶端的窗口交互/反饋總結等

要創建一個服務器動作轉到:管理>>定製>>行動>>服務器操作。

步驟創建:

第1步:服務器操作

  1. 操作名稱的定義:由於顯而易見的名字是

  2. 對象:對象/模型從服務器行動將被觸發。例如。銷售訂單

  3. 動作類型:隨着每個案件的處理,後面會詳細介紹。 順序:當動作類型是多動作時使用,其中一系列動作將按順序發生。

  4. 條件:單線python條件。例如。如果您想在超過5000的優惠券發送時發送短信提醒。 object.amount>5000。如果沒有條件,則必須給予True才能執行。

  5. 動作類型的特定選項卡:在這裏,我將詳細

    1. 虛擬講解每個動作類型:僞級什麼都不做。 (天知道爲什麼它在那裏..)

    2. 客戶端操作:您可以選擇要打開的窗體,要運行的嚮導或要啓動的報告。從列表中選擇報告。

    3. 迭代:基於Python的循環表達式,你可以遍歷服務器操作,例如:當一隻股票出現向內移動和你確認,你想成爲historised各行項目..你可以在表達object.move_lines環和創建另一個服務器操作,該操作被稱爲歷史工作。Python代碼:你可以執行多行python代碼。返回的值是變量action = {}的值。這隻有在您想要彈出特定於上下文的特定窗口(表單)時纔有意義。恕我直言,你不需要返回值。注:objecttimecruidids

    4. 觸發:可使用此觸發工作流程的任何過渡使用Python,它在字典中的命名空間與變量運行的執行函數代碼執行。你需要設置的選項是。工作流程模型:您想要觸發工作流程的目標對象。 '觸發'字段應具有目標模型記錄的ID。例如,如果您想要觸發發票更改,請提供發票編號。 「觸發器名稱」是您必須用來啓動轉換的信號。下拉列表列出了所有可能的觸發器。注意:觸發器名稱列表也顯示所有可能的模型轉換,因此請確保選擇正確的觸發器。模型用括號給出。

    5. 電子郵件:設置一個電子郵件地址,標題&消息。您需要爲此配置Open ERP構建smtpserver。電子郵件是Open ERP的通用電子郵件體系結構,可用於發送電子郵件,因爲它提供了更多功能和自動化電子郵件(不需要混淆服務器操作)。其可在:http://launchpad.net/poweremail和下載http://launchpad.net/poweremail/+download

    6. 短信:選擇手機號碼。例如:[[ object.shipping_address.mobile ]]和主題。

    7. 創建對象:這用於在觸發服務器操作時在任何模型中創建新記錄。所討論的歷史特徵可以使用這個來實現。字段映射用於在記錄給予價值領域

讓我們來看看這個例子

<record id="ir_actions_server_timsheet_sheet" model="ir.actions.server"> 
      <field name="sequence" eval="5"/> 
      <field name="state">code</field> 
      <field name="type">ir.actions.server</field> 
      <field name="model_id" ref="model_hr_timesheet_current_open"/> 
      <field name="code">action = pool.get('hr.timesheet.current.open').open_timesheet(cr, uid, None, context)</field> 
      <field name="condition">True</field> 
      <field name="name">My Timesheet</field> 
     </record> 

這裏model_hr_timesheet_current_open是對象的引用了哪個對象這個動作走了火,爲你的情況<field name="model_id" eval="Selling"/> model_id不是銷售,而是這個消防行動的對象引用。

+0

謝謝! @ user1576199終於我明白了...擴展信息非常有用,再次感謝。 – jthmiranda

+0

你可以顯示另一個例子,當一個動作服務器是'其他',以及如何定義它們之間的關係...預先感謝 – jthmiranda

+0

我沒有找到任何示例 我想要做的工作是: 創建自動操作>在其內部創建一個過濾器>然後附加一個操作服務器,同時狀態爲'多個操作'等等。 – jthmiranda