Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: mail.thread

mail.thread 2 Anni 10 Mesi fa #23726

  • MiCantino
  • Avatar di MiCantino
  • Offline
  • Expert Boarder
  • Messaggi: 137
  • Ringraziamenti ricevuti 7
  • Karma: 1
Salve a tutti!

Sto cercando di loggare con i messaggi le variazioni di stato di un oggetto contenuto in un mio modulo (v8) per la gestione delle riparazioni. Nell'xml ho inserito il box per i messaggi e viene visualizzato correttamente, però al momento di scrivere il messaggio ottengo questo errore:
File "/opt/odoo/buildout/parts/odoo/addons/mail/mail_thread.py", line 1625, in message_post thread id = thread_id[0]
IndexError: list index out of range

Nella classe python, dove eredito la classe mail.thread, ho questo semplice metodo:
@api.one
@api.onchange('stadio_lavorazione')
def log_lavorazione(self):
    if self.stadio_lavorazione != '0':
        return self.message_post(body="Variazione dello stato dell'Item")


Le variazioni sul campo vengono effettuate attraverso un metodo che fa dei calcoli sulle delle date e che funziona correttamente.
Da quello che trovo anche in rete, tutto dovrebbe funzionare normalmente, eppure non è così.

Potete darmi indicazioni su dove trovare, se non altro, documentazione sulla classe mail.thread e su come utilizzare i metodi?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

mail.thread 2 Anni 10 Mesi fa #23735

  • OpenCode
  • Avatar di OpenCode
  • Offline
  • Gold Boarder
  • Vi Veri Veniversum Vivus Vici
  • Messaggi: 179
  • Ringraziamenti ricevuti 32
  • Karma: 4
Ciao MiCantino,

c'è un motivo particolare per cui hai decorato la funzione con @api.one? Puoi tranquillamente togliere quel decoratore e lasciare solo quello onchange. Inoltre log_lavorazione non deve restituire il risultato di message_post perché il metodo di suo già prevede la scrittura nel log.

Inoltre io aggiungerei il parametro type='comment' a message_post

Un'osservazione: stai scrivendo un messaggio di log in un'onchange. Questo significa che quando qualcuno, anche semplicemente per sbaglio, modifica il valore di "stadio_lavorazione" tale messaggio viene scritto. Non sarebbe il caso di spostare la logica nella write?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: MiCantino

mail.thread 2 Anni 10 Mesi fa #23737

  • MiCantino
  • Avatar di MiCantino
  • Offline
  • Expert Boarder
  • Messaggi: 137
  • Ringraziamenti ricevuti 7
  • Karma: 1
nulla, anche scrivendo così il metodo ù
@api.onchange('stadio_lavorazione')
    def log_lavorazione(self):
        if self.stadio_lavorazione != '0':
            self.message_post(body="Variazione dello stato dell'Item", type='comment')

il risultato è sempre questo:
2016-03-30 07:28:57,389 34699 ERROR odoo openerp.http: Exception during JSON request handling.
Traceback (most recent call last):
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 537, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 574, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 310, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/service/model.py", line 118, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 307, in checked_call
    return self.endpoint(*a, **kw)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 803, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 403, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 944, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 936, in _call_kw
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/api.py", line 399, in old_api
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/models.py", line 5956, in onchange
    record._onchange_eval(name, field_onchange[name], result)
  File "/opt/odoo/buildout/parts/odoo/openerp/models.py", line 5814, in _onchange_eval
    method_res = method(self)
  File "/opt/odoo/odoo_files/workspace_pycharm/ies_maintenance/models/item.py", line 123, in log_lavorazione
    self.message_post(body="Variazione dello stato dell'Item", type='comment')
  File "/opt/odoo/buildout/parts/odoo/openerp/api.py", line 266, in wrapper
    return new_api(self, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/api.py", line 592, in new_api
    result = method(self._model, cr, uid, self.ids, *args, **old_kwargs)
  File "/opt/odoo/buildout/parts/odoo/addons/mail/mail_thread.py", line 1625, in message_post
    thread_id = thread_id[0]
IndexError: list index out of range
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

mail.thread 2 Anni 10 Mesi fa #23738

  • OpenCode
  • Avatar di OpenCode
  • Offline
  • Gold Boarder
  • Vi Veri Veniversum Vivus Vici
  • Messaggi: 179
  • Ringraziamenti ricevuti 32
  • Karma: 4
Se sposti la logica della scrittura del log nella write funziona?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

mail.thread 2 Anni 10 Mesi fa #23739

  • MiCantino
  • Avatar di MiCantino
  • Offline
  • Expert Boarder
  • Messaggi: 137
  • Ringraziamenti ricevuti 7
  • Karma: 1
In effetti si, spostando tutto nella write non ho problemi.
dipende dalla natura "temporanea" imposta dal decoratore @api.onchange?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

mail.thread 2 Anni 10 Mesi fa #23740

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Considera che gli oggetti caricati dall'interfaccia sono nella migliore delle ipotesi una copia di cio' che esiste nel db messa in cache oppure completamente inesistenti sul db.

Bisognerebbe indagare se il metodo message_post si aspetti o meno un oggetto finalizzato sul db ...

Detto questo, come ti ha fatto notare OpenCode, sarebbe un dramma attivare il log ad ogni cambiamento ... otterresti una lista infinita di valori ... questo comportamento va assolutamente messo nella write.

Dopotutto quello che vuoi è loggare i cambiamenti dell'oggetto non le interazioni che fa l'utente sullo stesso prima di salvarlo :) con il tuo approccio otterresti il secondo scopo e non il primo.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: MiCantino
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.144 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam