2016-03-24 9 views
2

Ich schreibe ein Odoo v9 Widget, das eine URL darstellt, die auf der Verkettung einer Einstellung in der Datenbank und den tatsächlichen Formularfeldern basiert.Odoo UI Widget - wie man Einstellungen von der Datenbank erhält?

Die Einstellung in der Datenbank I Abbildung sollte in ir_config_parameter leben. Ich füge einen Standardwert mit meinem Modul ein.

Was ist der beste Weg, um diesen Wert beim Rendern des Widgets zu erhalten? einen asynchronen Ajax-Aufruf zu tun

neues Modell ("ir.config_parameter")

scheint ein wenig plump verwenden. Gibt es einen besseren Weg, dies zu tun?

Danke.

Widget Code:

var UrlWidget2 = form_common.FormWidget.extend({ 
     start: function() { 
      this._super(); 
      this.field_manager.on("field_changed:ref", this, this.display_result); 
      this.display_result(); 
     }, 
     display_result: function() { 
      var ref = this.field_manager.get_field_value("ref"); 

      if (!ref) return; 

      var baseUrl = 'https://example.com'; //this is the value I want to get from the setting in the database. 
      var url = baseUrl + '/foo/' + ref;  

      this.$el.html('<a href="' + url + '" target="portal">View Externally</a><br /><br/>'); 
     } 
    }); 
+0

Wo möchten Sie den Wert der Einstellung anzeigen? Ich meine, es wird ein Feld der Form sein? –

+0

Innerhalb des Widgets - wo ich Javascript schreibe - muss ich die Konfigurationseinstellungen nutzen und nutzen. – Nik

+0

Zeigen Sie Ihr js-Widget. Ich habe etwas ähnliches gemacht. Vielleicht kann ich helfen. –

Antwort

0

Sie RPC dafür verwenden können. Dies ist beispielsweise, die für mich arbeiten:

var Model = require('web.DataModel'); 

var UrlWidget2 = form_common.FormWidget.extend({ 
     // just example how to get parameter from backend 
     display_result: function() { 
      var parameter = new Model('ir.config_parameter'); 
      // get fields value, key 
      parameter.query(['value', 'key']) 
       // criteria of search - record with id = 1 
       .filter([['id', '=', 1]]) 
       // only one record 
       .limit(1) 
       .all() 
       .then(function (parameter) { 
        // here data from server 
        console.log(parameter); 
      }); 
     // ... 
     } 
    }); 

Hope this Ihnen hilft.

+0

Danke, ich muss das vielleicht tun - aber wie ich in meiner Frage gesagt habe, ist genau das, was ich vermeiden möchte, einen Ajax-Anruf zu machen. Ich versuche nur, einen Link (oder vielleicht ein paar) zu rendern. Das Zurückkehren zum Server und das asynchrone Rendern dieser Links ist nur langsam. Ich suche nach einem besseren allgemeinen Weg, all das zu erreichen. – Nik

+0

Lassen Sie mich wissen, wenn Sie etwas besseres finden. Noch eine Sache ... Ich habe Quellen verschiedener Apps überprüft. Ich habe sowas nicht als Config gesehen. Die Arbeit mit 'ir_config_parameter' erfolgt über RPC. –