2016-04-05 8 views
1

フィールドがあるフォームがあります。独自の「保存」ボタンを追加しました。このボタンをクリックすると、フォーム上のデータをサーバーに保存します。Openerp/Odooにカスタムボタンを使用してフォームデータを保存する方法

ボタンのクリックを処理するためにサーバー上でアクションを作成する方法はわかっていますが、フォームデータを取得する方法はわかりません。

現在、私たちはinbuilt Saveボタンを使用していますが、いくつかの追加機能をトリガーする必要があります。

これは、現在のXMLの外観です。

<record model="ir.ui.view" id="petra_ticket_hold_dialog"> 
     <field name="name">petra.ticket_request.hold.dialog</field> 
     <field name="model">petra.ticket_request</field> 
     <field name="arch" type="xml"> 
      <form string="Hold Ticket" edit="false" create="false" delete="false"> 
       <sheet> 
        <group colspan="2"> 
         <field name="hold_reason"/> 
         <field name="status" invisible="1"/> 
        </group> 
        <button string="Save" /> 
       </sheet> 
      </form> 
     </field> 
    </record> 
+0

新しい代替機能を追加するのではなく、既存の「保存」機能に追加機能を追加する方が良いのではないでしょうか? –

+0

私たちは5日間odooをやっています。悲しいことに、ドキュメンテーションはそれほど大きくありません。どのように正しい方向性を示すか、私たちに示すことができれば、感謝しています。 – frostymarvelous

+0

だから私はそれを見て、それは私たちのために働いていない。基本的に、ダイアログがあり、保存ボタンの後にダイアログを閉じる必要があります。 save関数をオーバーライドするにはtrueまたはfalseを返さなければならないので、ウィンドウを閉じるアクションを返すことはできません。 – frostymarvelous

答えて

2

ここではあなたを助けることができる小さな例です。まず第一に、あなたはこのようにボタンにモデルのいくつかのアクションを追加する必要があります。この後

<record model="ir.ui.view" id="petra_ticket_hold_dialog"> 
     <field name="name">petra.ticket_request.hold.dialog</field> 
     <field name="model">petra.ticket_request</field> 
     <field name="arch" type="xml"> 
      <form string="Hold Ticket" edit="false" create="false" delete="false"> 
       <sheet> 
        <group colspan="2"> 
         <field name="hold_reason"/> 
         <field name="status" invisible="1"/> 
        </group> 
        <!-- it means that will be calls method 'action_my_action' of object 'petra.ticket_request' --> 
        <button string="Save" name="action_my_action" type="object"/> 
       </sheet> 
      </form> 
     </field> 
    </record> 

はあなたのモデルにメソッドを追加する必要があります。

# you can use @api.multi for collection processing like this: 
# for ticket in self: ...something do here 
# or you can use @api.model for processing only one object 
@api.model 
def action_my_action(self): 
    # here you have values from form and context 
    print(self.hold_reason, self._context) 
    # todo something here... and close dialog 
    return {'type': 'ir.actions.act_window_close'} 

再起動openerp-サーバーおよび更新あなたのモジュール。

注意してください!オブジェクトはの前にdbに保存されます。 これがあなたを助けてくれることを願っています。

+0

パーフェクト!私は値を取得するために自己を使うことができるのか分からなかった。優れた!再度、感謝します。 – frostymarvelous

+0

@frostymarvelous good luck;) –

+0

api.modelは失敗しますが、api.oneは機能しません。エラーはシーケンスに変換できないという問題でした。 – frostymarvelous

関連する問題