2016-08-24 4 views
0

Ich versuche, über ein Odoov9-Modul eine Verbindung zu einem Webservice herzustellen.TypeError: Objekt des Typs 'bool' hat keine len() - Odoo v9

Dies ist meine Klasse:

class invoice(models.Model): 
_inherit = "account.invoice" 

@api.multi 
def send_xml_file(self): 
    # haciendolo para efacturadelsur solamente por ahora 
    host = 'https://www.efacturadelsur.cl' 
    post = '/ws/DTE.asmx' # HTTP/1.1 
    url = host + post 
    _logger.info('URL to be used %s' % url) 
    # client = Client(url) 
    # _logger.info(client) 
    _logger.info('len (como viene): %s' % len(self.sii_xml_request)) 

    response = pool.urlopen('POST', url, headers={ 
     'Content-Type': 'application/soap+xml', 
     'charset': 'utf-8', 
     'Content-Length': len(
      self.sii_xml_request)}, body=self.sii_xml_request) 

    _logger.info(response.status) 
    _logger.info(response.data) 
    self.sii_xml_response = response.data 
    self.sii_result = 'Enviado' 

Aber jedes parst sie den Code auf den Server zu verbinden, führt es diesen Fehler:

Odoo Server Error 

Traceback (most recent call last): 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 646, in _handle_exception 
return super(JsonRequest, self)._handle_exception(exception) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 683, in dispatch 
result = self._call_function(**self.params) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 319, in _call_function 
return checked_call(self.db, *args, **kwargs) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/service/model.py", line 118, in wrapper 
return f(dbname, *args, **kwargs) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 312, in checked_call 
result = self.endpoint(*a, **kw) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 962, in __call__ 
return self.method(*args, **kw) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/http.py", line 512, in response_wrap 
response = f(*args, **kw) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/web/controllers/main.py", line 901, in call_button 
action = self._call_kw(model, method, args, {}) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/web/controllers/main.py", line 889, in _call_kw 
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/api.py", line 250, in wrapper 
return old_api(self, *args, **kwargs) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/api.py", line 381, in old_api 
result = method(recs, *args, **kwargs) 
File "/home/kristian/odoov9/odoo-9.0c-20160712/openerp/addons/l10n_cl_dte/models/invoice.py", line 102, in send_xml_file 
_logger.info('len (como viene): %s' % len(self.sii_xml_request)) 
TypeError: object of type 'bool' has no len() 

Der Fehler auf dieser Linie ist

_logger.info('URL to be used %s' % url) # client = Client(url) # _logger.info(client) _logger.info('len (como viene): %s' % len(self.sii_xml_request))

Ich habe durch SO gesucht, und es scheint zu sein im Zusammenhang mit Klammern, aber ich bin mir immer noch nicht wirklich sicher.

Irgendwelche Ideen dazu?

Vielen Dank im Voraus!

EDIT

Dies ist der Code, der es setzt:

sii_xml_request = fields.Text(
    string='SII XML Request', 
    copy=False, 
    ) 
+0

'self.sii_xml_request' ist ein 'bool'-Objekt, und Sie können' len() 'nicht aufrufen. Welche Art von Objekt haben Sie erwartet, dass "self.sii_xml_request" zu sein? Kannst du uns den Code zeigen, der es setzt? –

+0

@JohnGordon Hallo, Danke, Ich habe meine Frage bearbeitet, wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen – NeoVe

Antwort

3

Wenn Sie self.sii_xml_request zuzugreifen versuchen. Zuerst prüfen, ob der Wert leer ist oder nicht.

In Ihrem Fall gibt es eine leere Zeichenfolge zurück, die False ist. Um dies zu vermeiden, versuchen Sie den folgenden Code ein:

_logger.info('len (como viene): %s' % (len(self.sii_xml_request) if self.sii_xml_request else '') 

Dies wird nur log ‚self.sii_xml_request‘, wenn sie einen Wert in sich hat. Andernfalls wird nur eine leere Zeichenfolge protokolliert. Sie können dies natürlich ändern, um etwas anderes zu protokollieren, das Sie anzeigen möchten, wenn in 'self.sii_xml_request' kein Wert vorhanden ist.

+0

Vielen Dank! – NeoVe

Verwandte Themen