I campi di sola lettura sono una di quelle funzionalità in Odoo che sembrano semplici all'inizio, ma svolgono un ruolo molto più grande di quanto la maggior parte degli utenti si aspetti.
Che tu sia un utente aziendale che si chiede perché alcuni campi siano disattivati, o uno sviluppatore che cerca di controllare il comportamento dei campi nella tua personalizzazione di Odoo, questa guida copre tutto ciò che devi sapere.
Comprendere come funzionano i campi di sola lettura è fondamentale per costruire flussi di lavoro affidabili, proteggere l'integrità dei dati e offrire un'esperienza più fluida per il tuo team.
Questo tutorial sui campi di Odoo esplora sia gli aspetti aziendali che quelli tecnici della sola lettura, quindi che tu stia configurando Odoo o costruendo su di esso, troverai qui ciò di cui hai bisogno.
Cos'è il campo di sola lettura in Odoo
Un campo di sola lettura in Odoo è un campo che visualizza un valore ma non può essere modificato direttamente dall'utente tramite l'interfaccia. I dati sono visibili, ma l'input è bloccato.
Nella vista del modulo, i campi di sola lettura appaiono tipicamente come testo semplice piuttosto che come caselle di input interattive. A seconda del tema di Odoo, potrebbero apparire leggermente grigi o semplicemente piatti rispetto ai campi modificabili.
All'interno del modello dati di Odoo, il comportamento di sola lettura può essere applicato a due livelli distinti:
- Al livello del campo (Python/ORM): il campo è sempre di sola lettura in tutte le viste e contesti
- Al livello della vista (XML): il campo è di sola lettura in una vista specifica o sotto condizioni specifiche
Questa distinzione è importante. Un campo contrassegnato come di sola lettura a livello ORM non può essere modificato attraverso alcuna interfaccia utente. Un campo contrassegnato come di sola lettura a livello di vista è protetto in quel particolare contesto ma potrebbe comunque essere modificabile in altre viste o tramite codice lato server.
Readonly non è un tipo di campo di per sé. È un attributo che può essere applicato a qualsiasi dei tipi di campo standard di Odoo: Char, Integer, Float, Many2one, Date e altri. Questo è un elemento fondamentale del framework di Odoo per controllare come si comportano i campi durante l'esecuzione.
Come funziona il campo di sola lettura
Per comprendere come si comportano i campi di sola lettura, è utile guardare entrambi i lati: l'ORM di Odoo (Python) e il livello della vista (XML).
Readonly a livello ORM
Nell'ORM di Odoo, un campo può essere dichiarato come permanentemente di sola lettura direttamente nel modello Python. Questo è più comune per i campi calcolati che derivano il loro valore da altri dati. La definizione del campo include readonly=True come parametro, e Odoo non permetterà mai all'utente di modificarlo tramite l'interfaccia utente.
Questo livello di sola lettura fa parte dell'API dei campi Python di Odoo ed è documentato nella guida ufficiale per sviluppatori di Odoo. Si applica globalmente, indipendentemente dalla vista utilizzata.
Readonly basato sullo stato
Uno dei modelli più comuni nello sviluppo di Odoo è rendere un campo di sola lettura in base allo stato attuale di un documento. Questo è il modo in cui i moduli standard come Vendite, Acquisti e Contabilità bloccano i loro dati una volta che un documento supera la fase di bozza.
In Odoo 16 e versioni precedenti, questo veniva fatto utilizzando l'attributo attrs nel XML della vista, combinando una condizione di dominio con l'elemento del campo. In Odoo 17 e versioni successive, la sintassi è più concisa e scritta direttamente come un'espressione inline sull'elemento del campo.
Entrambi gli approcci raggiungono lo stesso risultato: il campo è modificabile mentre il documento è in bozza e diventa bloccato una volta che progredisce attraverso il flusso di lavoro. Questo è un concetto fondamentale in qualsiasi tutorial tecnico di Odoo che tratta la configurazione dei campi.
Campi Calcolati e Sola Lettura
I campi calcolati di Odoo sono di sola lettura per impostazione predefinita. Quando definisci un campo con un metodo compute, Odoo presume che non debba essere modificato direttamente perché il suo valore è derivato automaticamente da altri campi.
Se desideri che un campo calcolato venga anche memorizzato, imposti sia il parametro compute che store=True. Questi campi del database Odoo memorizzati sono un modello comune per l'ottimizzazione delle prestazioni, poiché possono essere utilizzati nei filtri di ricerca e ordinati in modo efficiente a livello di database senza ricalcolare i valori al volo.
Rendere un Campo Calcolato Scrivibile
Se hai bisogno che un campo calcolato accetti anche input manuali, puoi definire un metodo inverso insieme ad esso. Il metodo inverso indica a Odoo cosa fare quando un utente scrive un valore nel campo calcolato. Senza un inverso, il campo rimane di sola lettura per impostazione predefinita. Questo fa parte dell'API dei tipi di campo ORM di Odoo più avanzata ed è trattato in dettaglio nella guida per sviluppatori di Odoo.
Casi d'uso aziendali
I campi di sola lettura appaiono in tutti i moduli di Odoo. Ecco cinque esempi pratici da flussi di lavoro aziendali reali.
1. CRM: Blocco dei Dati delle Opportunità Vinte e Perse
Nel modulo CRM, il fatturato atteso e la data di chiusura sono modificabili mentre si lavora su un lead. Una volta che un'opportunità è contrassegnata come Vinta o Persa, questi campi vengono impostati su sola lettura per preservare un record accurato di ciò che è stato chiuso e a quale valore.
Questo impedisce a chiunque di tornare indietro e modificare i dati dopo il fatto, il che distorcerebbe i rapporti di vendita e le analisi del pipeline.
2. Vendite: Proteggere le Linee d'Ordine Confermate
Quando un ordine di vendita passa da Bozza a Confermato, le righe dell'ordine diventano di sola lettura. Gli utenti non possono più modificare il prodotto, la quantità o il prezzo dopo che il cliente ha ricevuto una conferma.
Se sono realmente necessarie delle modifiche, l'ordine deve essere esplicitamente ripristinato a bozza, il che crea una traccia di audit e rende la correzione intenzionale piuttosto che accidentale.
3. Inventario: Quantità di Movimento di Magazzino Valide
Nelle operazioni di magazzino, una volta che una consegna o una ricezione è stata convalidata, le quantità effettuate vengono bloccate. Questo protegge l'integrità della valutazione delle scorte e garantisce che i registri corrispondano a ciò che è fisicamente passato attraverso il magazzino.
Quantità modificabili dopo la convalida potrebbero silenziosamente corrompere i livelli di inventario in più località.
4. Contabilità: Righe di Registrazione Contabile Pubblicate
In contabilità, una volta che una registrazione contabile è pubblicata, tutte le sue righe diventano di sola lettura. Questo è sia un requisito legale in molti paesi sia un principio fondamentale della contabilità a doppia entrata.
Consentire modifiche dopo la pubblicazione comprometterebbe l'affidabilità dei bilanci e creerebbe seri rischi di conformità.
5. Produzione: Dati dell'Ordine di Lavoro Completato
Nel modulo di Produzione, una volta che un ordine di lavoro è contrassegnato come completato, la durata effettiva e le quantità prodotte vengono impostate su sola lettura. Questo preserva registri di produzione accurati che alimentano l'analisi dei costi e il monitoraggio delle prestazioni.
Creazione o personalizzazione di un campo di sola lettura
Ci sono due principali modalità per configurare i campi di sola lettura in Odoo: utilizzare Odoo Studio per un approccio senza codice, oppure scrivere direttamente in Python e XML per un controllo tecnico completo.
Utilizzando Odoo Studio
I campi di Odoo Studio rendono facile aggiungere o modificare il comportamento di sola lettura senza scrivere alcun codice. Per configurare un campo come sola lettura utilizzando Studio:
- Apri Odoo Studio dal menu principale (l'icona della matita)
- Naviga alla vista del modulo in cui desideri configurare il campo
- Clicca sul campo che desideri modificare
- Nel pannello delle proprietà a destra, attiva l'opzione "Sola lettura"
- Salva e chiudi Studio
Studio consente anche di impostare un comportamento condizionale di sola lettura utilizzando espressioni di dominio. Ad esempio, puoi rendere un campo di sola lettura solo quando un campo di stato è uguale a un valore specifico, senza scrivere una sola riga di codice.
L'approccio ai campi di creazione di Odoo Studio è la scelta giusta per consulenti e amministratori che devono applicare rapidamente e in sicurezza le regole sui dati. Le modifiche apportate tramite Studio vengono memorizzate nel database e non verranno sovrascritte dagli aggiornamenti dei moduli.
Utilizzando Python per la personalizzazione tecnica
Per gli sviluppatori che costruiscono moduli Odoo personalizzati, l'attributo di sola lettura è impostato direttamente sulla definizione del campo nel modello Python. Questo è l'uso standard dei campi Python di Odoo ed è trattato in ogni guida per sviluppatori Odoo.
Puoi impostare readonly=True come parametro statico su qualsiasi tipo di campo, rendendolo permanentemente non modificabile. Per un controllo più flessibile, il parametro states consente di definire in quali stati del documento il campo dovrebbe essere scrivibile rispetto a sola lettura.
Questo approccio è particolarmente utile quando aggiungi campi personalizzati a modelli Odoo esistenti come parte di un progetto di personalizzazione Odoo. Mantiene la logica del campo vicina al modello di dati piuttosto che dispersa in più file di vista.
Utilizzare gli Attributi di Visualizzazione XML
Per il comportamento readonly a livello di visualizzazione, aggiungi l'attributo readonly direttamente all'elemento del campo nel tuo XML di visualizzazione. Questo fa parte del flusso di lavoro standard di sviluppo di Odoo per qualsiasi personalizzazione tecnica.
Il vantaggio del readonly a livello di visualizzazione è la flessibilità: lo stesso campo può comportarsi in modo diverso in diverse visualizzazioni, o in condizioni diverse, senza modificare la definizione sottostante del campo. Questo è spesso l'approccio preferito quando è necessario aggiungere restrizioni ai campi standard esistenti senza modificare la loro definizione in Python.
In Odoo 17, la sintassi dell'espressione inline per le condizioni readonly è più pulita e leggibile rispetto alla sintassi del dizionario attrs utilizzata nelle versioni precedenti. Entrambi gli approcci sono validi a seconda della versione di Odoo in uso.
Migliori pratiche
Utilizzare bene i campi readonly significa applicarli al livello giusto, per il motivo giusto. Ecco le linee guida più importanti da una prospettiva di consulenza Odoo.
1. Preferire il Readonly a Livello di Visualizzazione Quando il Contesto Varia
Se un campo deve essere readonly solo in determinati stati del documento o in visualizzazioni specifiche, applica il readonly a livello di visualizzazione piuttosto che a livello di modello. Questo mantiene il tuo modello di dati Odoo flessibile e consente ai processi backend o alle integrazioni API di scrivere ancora nel campo quando necessario.
2. Allineare le Condizioni Readonly con il Ciclo di Vita del Documento
Le tue condizioni readonly dovrebbero corrispondere al flusso naturale dei tuoi documenti. I campi dovrebbero bloccarsi quando il documento raggiunge uno stato in cui ulteriori modifiche causerebbero problemi. Questo crea un'esperienza prevedibile e intuitiva per gli utenti, che è uno dei segni distintivi di una personalizzazione Odoo ben implementata.
3. Testare tra i Ruoli Utente
Il comportamento readonly può interagire con i diritti di accesso in modi inaspettati. Testa sempre la tua configurazione sia come utente standard che come amministratore per verificare che il campo si comporti correttamente per ciascun ruolo. Ciò che appare readonly per un gruppo di utenti potrebbe essere ancora modificabile per un altro a seconda del loro profilo.
4. Combinare Readonly con Richiesto Dove Ha Senso
Nei moduli a più fasi, un campo potrebbe essere richiesto nella bozza ma di sola lettura negli stati successivi. Puoi combinare entrambi gli attributi nel tuo XML di visualizzazione per applicare questo schema in modo chiaro. Questo è comune per campi come le date di consegna o i numeri di riferimento che devono essere compilati prima che un documento venga confermato.
5. Documenta la tua logica di sola lettura
Nello sviluppo personalizzato di Odoo, specialmente su modelli di dati complessi, aggiungi sempre un commento che spieghi perché un campo è di sola lettura. Gli sviluppatori futuri che mantengono il codice devono comprendere il motivo commerciale dietro la restrizione, non solo l'implementazione tecnica.
6. Usa i campi di Studio per modifiche rapide e sicure per gli aggiornamenti
Per casi d'uso semplici, i campi di Odoo Studio offrono un modo rapido e sicuro per gli aggiornamenti per aggiungere comportamenti di sola lettura. Riserva la personalizzazione in Python per i casi in cui Studio non può fornire la logica richiesta, come condizioni complesse tra campi o integrazione con campi calcolati personalizzati.
Trappole comuni
Anche gli utenti e gli sviluppatori esperti di Odoo si imbattono negli stessi problemi con i campi di sola lettura. Ecco quelli che vale la pena conoscere prima che ti colgano di sorpresa.
Confondere la sola lettura a livello di visualizzazione con un confine di sicurezza
Un campo impostato come di sola lettura in una visualizzazione non impedisce aggiornamenti tramite l'API XML-RPC, chiamate ORM write in Python o azioni del server. La sola lettura a livello di visualizzazione è una restrizione dell'interfaccia utente, non un controllo di sicurezza. Se hai davvero bisogno di impedire tutti gli scritti a un campo, devi farlo a livello ORM o attraverso regole di controllo accessi, non solo nella visualizzazione.
Rendere i campi permanentemente di sola lettura quando sarebbe meglio condizionale
È allettante bloccare completamente un campo quando vuoi proteggerlo. Ma se gli utenti hanno legittimamente bisogno di modificarlo in determinate situazioni, come quando ripristinano un documento in bozza, un campo di sola lettura permanente a livello ORM li bloccherà completamente, inclusi eventuali flussi di lavoro di correzione. Pensa sempre all'intero ciclo di vita prima di scegliere il permanente rispetto al condizionale.
Dimenticare i metodi Onchange
Se un campo di sola lettura è anche referenziato in un onchange, quel metodo può comunque tentare di assegnargli un valore. Questo può produrre comportamenti confusi in cui il campo sembra aggiornarsi durante l'interazione dell'utente ma poi torna indietro o genera un errore. Assicurati che la tua logica onchange tenga conto dei campi di sola lettura.
Non applicare il readonly in modo coerente in tutte le viste
Un campo contrassegnato come readonly nella vista del modulo potrebbe essere ancora modificabile nella vista elenco o nella vista kanban se quelle viste non includono la stessa restrizione. Controlla sempre che la tua configurazione readonly sia applicata in modo coerente in ogni vista in cui appare il campo.
Effetti collaterali quando si ereditano modelli standard
Quando si eredita da un modello standard di Odoo e si aggiunge readonly=True a un campo esistente, questa modifica influisce su tutte le viste che mostrano quel campo, comprese quelle standard. Assicurati che ciò sia intenzionale e che non interrompa il comportamento standard di Odoo o confligga con altre personalizzazioni sullo stesso modello.
Conclusione
I campi readonly sono uno strumento fondamentale in Odoo per guidare gli utenti attraverso i flussi di lavoro, proteggere l'integrità dei dati e far rispettare le regole aziendali senza fare affidamento solo sulla formazione.
La chiave è sapere quando applicare il readonly a livello di vista rispetto a livello di modello, e assicurarsi che le condizioni siano allineate con il modo in cui il tuo team lavora effettivamente. Un modello di dati Odoo ben configurato utilizza sempre in modo riflessivo i campi readonly nei momenti giusti nel ciclo di vita del documento.
Che tu li configuri tramite Odoo Studio per un approccio senza codice o li definisca direttamente in Python e XML come parte di un progetto di sviluppo Odoo più ampio, la logica dietro i campi readonly rimane coerente: mostra i dati, ma proteggili da modifiche non intenzionali.
Potrebbero non essere l'argomento più discusso nella personalizzazione di Odoo, ma sono silenziosamente uno dei più impattanti.
Presso Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i moduli e settori. Se hai bisogno di aiuto per configurare i campi, progettare flussi di lavoro affidabili o migliorare il tuo modello di dati Odoo, il nostro team è pronto a supportarti. Contattaci e raccontaci del tuo progetto.