2016-05-19 9 views
2

Ich konnte benutzerdefinierte Schaltfläche Add Bro mithilfe von XML erstellen.Odoo 9 So erstellen Sie eine Aktion für eine benutzerdefinierte Schaltfläche

enter image description here

Hier ist der xml

<templates> 
    <tr t-extend="ListView.buttons"> 
    <t t-jquery="button.o_list_button_add" t-operation="after"> 
     <button id="tahu" name="action" type="object" class="btn btn-sm btn-primary"> 
      Add Bro 
     </button> 
    </t> 
    </tr> 
</templates> 

Meine Frage ist, wie kann ich Aktion auf diese Schaltfläche erstellen, die aufgerufen wird, wenn ich den Knopf drücken. Ich habe versucht, Methode mit dem Namen action zu erstellen, so dass es das name Attribut der Schaltfläche matcht, aber nichts passierte.

@api.multi 
def action(self): 
    view_ref = self.env['ir.model.data'].get_object_reference('account', 'invoice_form') 
    view_id = view_ref[1] if view_ref else False 

    res = { 
     'type': 'ir.actions.act_window', 
     'name': _('Customer Invoice'), 
     'res_model': 'purchase.order', 
     'view_type': 'form', 
     'view_mode': 'form', 
     'view_id': view_id, 
     'target': 'new', 
     # 'context': {'default_partner_id': client_id} 
    } 

    return res 

Antwort

2

in Ihrem XML-Code aussehen ist, wie die Art und Weise, weil diese Vorlage direkt die jede Methode nicht aufrufen, damit Sie die XPath verwenden können

<xpath expr="/form/header/button[@name='invoice-open']" position="after"> 

    <!-- put your button here --> 

</xpath> 

Beispiel:

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

      <field name="name">account.invoice.form.my</field> 

      <field name="model">account.invoice</field> 

      <field name="inherit_id" ref="account.invoice_form"/> 

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



       <xpath expr="/form/header/button[2][@string='Print']" position="after"> 

        <button name="my_button" string="Print2" class="oe_highlight"/> 

       </xpath> 

      </field> 

     </record> 
3

Sie benötigen Erweitern Sie ListView Widget und fügen Sie einen Trigger zu Ihrer Schaltfläche hinzu:

openerp.you_module_name_here = function(instance){ 

    var _t = instance.web._t, 
     _lt = instance.web._lt; 
    var QWeb = instance.web.qweb; 

    instance.web.ListView.include({ 

     load_list: function(data) { 
      if (this.$buttons) { 
       this.$buttons.find('#tahu').click(this.proxy('action')) ; 
      } 
     }, 

     action: function() { 
      var model_obj = new instance.web.Model('ir.model.data'); 
      view_id = model_obj.call('get_object_reference', ["account", "invoice_form"]); 

      this.do_action(
       name: _t('Customer Invoice'), 
       type: 'ir.actions.act_window', 
       res_model: 'purchase.order', 
       view_type: 'form', 
       view_mode: 'form', 
       view_id: view_id, 
       target: 'new' 
       ); 
     } 
    }); 
} 

erstellen js Datei (script.js) mit dem obigen Code unter /static/src/js/ und eine xml Datei (`module_view.xml) enthält den folgenden Code:

<template id="assets_backend_custom" name="custom assets" inherit_id="web.assets_backend"> 
    <xpath expr="." position="inside"> 
     <script type="text/javascript" src="/your_module_name_here/static/src/js/script.js"></script> 
     </xpath> 
</template> 

__openerp__.py:

... 

'data': [ 
    ... 

    "module_view.xml", 

    ... 
], 

...