Introduzione
Il campo di testo è uno dei tipi di campo più pratici in Odoo. Ogni volta che un utente compila un'area note, scrive una descrizione del prodotto o aggiunge un commento interno a un ordine di vendita, c'è una buona probabilità che stia digitando in un campo di testo.
Apparentemente sembra una semplice area di testo nell'interfaccia, ma comprendere le sue proprietà e come si inserisce nel modello dati di Odoo e nell'ORM fa davvero la differenza quando si progettano moduli, si costruiscono moduli personalizzati o si impostano i campi di Odoo Studio per il proprio team.
Questa guida copre tutto, da ciò che il campo di testo memorizza e come si comporta, a casi d'uso aziendali reali, personalizzazione tecnica, migliori pratiche e gli errori che la maggior parte delle persone commette quando si avvicina a questo tipo di campo.
Cos'è il campo di testo in Odoo
Nell'ORM di Odoo, fields.Text è il tipo di campo per memorizzare testo semplice su più righe. Si mappa a una colonna TEXT in PostgreSQL, senza restrizioni di lunghezza. Gli utenti possono scrivere una singola frase o diversi paragrafi, e il campo gestisce entrambi allo stesso modo.
Nei moduli, si presenta come un elemento <textarea> ridimensionabile. Nelle visualizzazioni elenco, appare come testo semplice troncato. Nelle visualizzazioni di ricerca, supporta il filtraggio basato su testo proprio come il campo Char.
Ecco come appare una definizione di campo Text di base in un modulo Python:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Note interne',
translate=False,
)
In Odoo Studio, questo campo è chiamato Testo Multi-Linea. Quando viene creato tramite Studio, Odoo assegna automaticamente un prefisso x_studio_. Quando lo crei tramite codice o l'API XML-RPC, definisci tu stesso il nome tecnico.
Come si differenzia da Char e Html
Tre tipi di campo in Odoo possono memorizzare contenuti testuali e sapere quando utilizzare quale è un comune punto di confusione:
- Campo Char: Input di testo su una sola riga. Ideale per valori brevi come nomi, codici e riferimenti. Supporta un limite di dimensione opzionale.
- Campo Text: Area di testo multi-linea. Ideale per note, descrizioni e commenti liberi. Memorizza testo semplice senza formattazione.
- Campo Html: Editor di testo ricco multi-linea. Ideale per contenuti in cui la formattazione è importante, come modelli di email, descrizioni di prodotti sul web o pagine di siti web. Memorizza markup HTML.
Il campo Text si colloca tra i due. Offre agli utenti più spazio rispetto a un campo Char, ma senza la complessità del markup HTML. Per la maggior parte delle note interne e delle descrizioni semplici, è la scelta giusta nel modello di dati Odoo.
Come funziona il campo
Quando aggiungi un campo Text a un modello Odoo, il framework crea automaticamente la corrispondente colonna TEXT in PostgreSQL durante l'installazione o l'aggiornamento del modulo. Non ci sono migrazioni SQL manuali coinvolte.
A differenza del campo Char, non è disponibile alcun parametro size sui campi Text. La colonna del database non impone alcun limite di caratteri. Questo è voluto: i campi Text sono destinati a contenuti aperti in cui limitare la lunghezza in anticipo non avrebbe senso.
Attributi Chiave del Campo
Le proprietà più importanti di un campo di testo nel framework Odoo:
- traduci: Quando impostato su
True, il valore del campo può essere tradotto per lingua. Utile per istanze Odoo multilingue dove il testo cambia a seconda della lingua dell'utente. - obbligatorio: Rende il campo obbligatorio a livello di interfaccia e ORM. Gli utenti non possono salvare un record senza compilarlo.
- predefinito: Imposta un valore predefinito automatico quando vengono creati nuovi record. Può essere una stringa statica o un metodo chiamabile.
- calcola: Collega un metodo Python che genera dinamicamente il valore del campo. Utile per riassunti generati automaticamente o contenuti derivati.
- memorizza: Quando combinato con
calcola, controlla se il valore calcolato viene salvato nel database. Constore=True, il valore è ricercabile e disponibile nei report. - copia: Controlla se il valore del campo è incluso quando si duplica un record. Di default è impostato su
True. Imposta suFalseper note che non devono essere trasferite ai duplicati. - indice: Non comunemente usato sui campi di testo poiché l'indicizzazione full-text funziona in modo diverso rispetto all'indice B-tree semplice utilizzato per i campi Char. Per contenuti ricercabili, la ricerca full-text di PostgreSQL o il filtraggio integrato di Odoo sono generalmente sufficienti.
Come Appare nelle Visualizzazioni
Nelle visualizzazioni dei moduli, il campo di testo viene visualizzato come un <textarea> che gli utenti possono ridimensionare verticalmente. Nelle visualizzazioni elenco, il contenuto viene troncato per adattarsi alla larghezza della colonna. Nelle visualizzazioni di ricerca, supporta filtri di ricerca basati su testo out of the box una volta aggiunto alla definizione della visualizzazione di ricerca.
A differenza dei campi Html, il campo di testo non carica un editor WYSIWYG. Gli utenti vedono un'area di testo semplice senza barra degli strumenti di formattazione. Ciò che digitano è esattamente ciò che viene memorizzato nel database, con i ritorni a capo preservati.
Interazione con l'Odoo ORM
Dal punto di vista di uno sviluppatore, leggere e scrivere campi di testo nello sviluppo Odoo è semplice. Accedi direttamente al valore sull'oggetto record, e l'ORM gestisce tutta la persistenza. Le interruzioni di riga vengono memorizzate così come sono. Non viene applicata alcuna sanificazione o escaping automatico ai campi di testo semplici, il che è uno dei motivi per cui è distinto dal campo Html, dove Odoo applica la sanificazione per prevenire problemi di XSS.
Casi d'uso aziendali
I campi di testo appaiono in tutto Odoo in luoghi in cui gli utenti devono scrivere più di una singola riga. Ecco cinque esempi concreti da flussi di lavoro aziendali reali.
Vendite: Note interne sugli ordini
Il campo note sugli ordini di vendita e il campo internal_note utilizzato in alcune implementazioni sono campi di testo. I rappresentanti di vendita li utilizzano per registrare istruzioni di consegna, requisiti di imballaggio speciali o preferenze dei clienti che non si adattano bene a un campo strutturato. Queste note viaggiano con l'ordine e sono visibili ai team operativi senza essere stampate sui documenti del cliente.
Inventario: Note interne sui prodotti
Nel modulo prodotto, Odoo fornisce una scheda Note con un campo di testo per commenti interni. I team di magazzino utilizzano questo per documentare istruzioni di gestione, avvertenze di fragilità o informazioni specifiche sui fornitori. Poiché è testo semplice e non viene visualizzato sul sito web o nei documenti del cliente, è sicuro scrivere dettagli operativi che le parti esterne non dovrebbero vedere.
Acquisti: Termini e istruzioni di consegna del fornitore
Sugli ordini di acquisto, un campo di testo per le note del fornitore consente ai team di approvvigionamento di documentare specifici accordi o vincoli di consegna che sono stati confermati via email o telefono. Avere queste informazioni collegate al record dell'ordine previene malintesi quando le merci arrivano e la conversazione originale non è più facile da trovare.
CRM: Riepiloghi delle opportunità e note delle riunioni
I team di vendita che lavorano attraverso il pipeline CRM spesso aggiungono un campo di testo ai record delle opportunità per note libere da riunioni con i clienti, obiezioni sollevate o contesto sul processo di acquisto. A differenza dei messaggi di chatter, un campo di testo dedicato mantiene queste informazioni strutturate e facili da leggere a colpo d'occhio quando qualcun altro prende in carico il lead.
HR: Commenti su dipendenti e candidati
I team HR hanno frequentemente bisogno di catturare note sui colloqui, commenti sull'onboarding o osservazioni sulle performance in un campo che rimanga attaccato al record del dipendente o del candidato. Un campo di testo nel modello del dipendente è un modo pulito e semplice per memorizzare queste informazioni senza creare un modello separato. È ricercabile, stampabile e facile da includere nei report HR personalizzati.
Creare o personalizzare il campo di testo
Ci sono tre modi principali per aggiungere un campo di testo a un modello Odoo, a seconda del tuo contesto tecnico e dell'approccio di distribuzione.
Utilizzando Odoo Studio (No Code)
Odoo Studio è il percorso più semplice per gli utenti aziendali e i consulenti che non vogliono scrivere codice. Per aggiungere un campo di testo senza lavoro di sviluppo:
- Apri Odoo Studio dal menu principale (richiede l'app Studio).
- Naviga al modulo in cui desideri il campo.
- Trascina un campo Multi-Line Text dalla barra laterale di Studio nel modulo.
- Imposta l'etichetta, lo stato richiesto e qualsiasi valore predefinito nel pannello delle proprietà del campo.
- Salva e chiudi Studio.
Studio gestisce automaticamente la creazione del campo e l'aggiornamento della vista. Il campo ottiene un prefisso x_studio_ ed è immediatamente disponibile nel modulo senza alcuna migrazione del database o riavvio del server.
Utilizzando Python in un Modulo Personalizzato
Per qualsiasi personalizzazione che deve essere controllata in versione e distribuita su più ambienti, definire il campo in Python è l'approccio giusto. Questa è la pratica standard di sviluppo Odoo:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_client_notes = fields.Text(
string='Client Notes',
translate=False,
copy=False,
)
Dopo aver definito il campo nel file del modello, è necessario aggiungerlo alla vista XML pertinente affinché appaia nell'interfaccia. Odoo crea automaticamente la colonna del database quando si installa o si aggiorna il modulo. Questo è l'approccio consigliato per qualsiasi personalizzazione di Odoo in produzione che deve essere mantenuta nel tempo.
Utilizzando l'API XML-RPC
Se stai gestendo i campi di Odoo programmaticamente, ad esempio come parte di uno script di distribuzione o di un quaderno di configurazione remota, puoi creare campi di tipo Text tramite l'API XML-RPC:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_client_notes',
'field_description': 'Client Notes',
'model_id': model_id,
'ttype': 'text',
'state': 'manual',
'translate': False,
'copy': False,
}]
)
Il valore ttype: text indica a Odoo di creare un campo di tipo Text (a differenza di char per un campo Char o html per un campo Html). L'impostazione state: manual indica che questo campo è stato creato al di fuori di un modulo, il che è corretto per i campi creati tramite Studio o programmaticamente tramite l'API. Questo è l'approccio utilizzato da Dasolo quando distribuisce configurazioni di campo remote per i clienti.
Migliori pratiche
1. Usa Text quando il contenuto ha realmente bisogno di più righe
L'errore più comune è ricorrere a un campo Text quando un campo Char sarebbe sufficiente. Se il valore è un nome, un codice, un riferimento o qualsiasi cosa che possa stare su una riga, usa Char. Riserva Text per contenuti in cui ci si aspetta che gli utenti scrivano frasi o paragrafi. Utilizzare un campo Text per un breve inserimento di valore singolo crea un'esperienza utente ingombrante e un modello di dati fuorviante.
2. Usa Html quando la formattazione è importante
Se gli utenti devono aggiungere elenchi puntati, testo in grassetto, collegamenti ipertestuali o qualsiasi formattazione visiva al contenuto, il campo Text è la scelta sbagliata. Usa invece un campo Html. I campi Text supportano solo testo semplice. Chiedere agli utenti di scrivere contenuti formattati in un'area di testo semplice porterà a utenti frustrati che si aspettano opzioni di formattazione che non ci sono.
3. Abilita la traduzione per contenuti multilingue rivolti agli utenti
Nelle aziende che utilizzano Odoo in più lingue, qualsiasi campo Text che appare su documenti rivolti ai clienti o sul sito web dovrebbe avere translate=True. Questo consente ai traduttori di fornire versioni specifiche per lingua del contenuto senza sovrascrivere il lavoro degli altri. Per note interne e commenti operativi che gli utenti scrivono da soli, di solito non è necessaria la traduzione.
4. Imposta copy=False per le note che non devono essere duplicate
Quando gli utenti duplicano un ordine di vendita o un prodotto, i campi di testo vengono copiati per impostazione predefinita. Per le note che catturano il contesto specifico del record originale, come una conversazione con un cliente o un problema di consegna specifico, questo può creare confusione. Imposta copy=False su quei campi in modo che i record duplicati inizino con una sezione note pulita.
5. Usa compute con store=True per riepiloghi generati automaticamente
I campi di testo possono essere calcolati dinamicamente in Odoo. Un modello utile è costruire un campo di riepilogo generato automaticamente che concatena i valori di altri campi del record. Con store=True e i corretti trigger @api.depends(), il testo calcolato viene salvato nel database e diventa ricercabile nelle viste elenco e nei filtri. Questa è una tecnica pratica per i campi calcolati di Odoo per creare riepiloghi interni leggeri senza costruire un report separato.
Errori comuni
Scegliere Text quando è necessario Html
Se un campo è destinato a contenere contenuti visualizzati sul sito web o in un report PDF formattato, utilizzare Text invece di Html rimuoverà tutta la formattazione. Gli utenti che incollano contenuti con punti elenco o testo in grassetto in un campo di testo lo vedranno visualizzato come prosa piatta e non formattata. Chiedi sempre se il canale di output ha bisogno di formattazione prima di scegliere il tipo di campo.
Scegliere Text quando Char è la scelta giusta
Un campo di testo si presenta come una textarea alta e ridimensionabile. Se un campo deve contenere solo un valore breve come un numero di tracciamento o un codice variante di prodotto, utilizzare Text rende il modulo inutilmente ingombrante. I contenuti su una sola riga appartengono a un campo Char, che si presenta come un input di testo compatto che si adatta naturalmente a un layout di modulo.
Dimenticare di tradurre etichette e descrizioni multilingue
Su istanze Odoo distribuite in più paesi, mancare l'attributo translate=True su un campo di testo visibile agli utenti significa che tutti gli utenti vedono lo stesso valore indipendentemente dalle loro impostazioni di lingua. Questo è particolarmente problematico per le descrizioni dei prodotti e le note delle categorie che sono visibili nell'interfaccia. La soluzione è semplice, ma aggiungerla dopo che i dati sono già nel sistema richiede una migrazione attenta per evitare di sovrascrivere i valori esistenti.
Utilizzare Text per dati strutturati
Un campo di testo che memorizza JSON, valori separati da pipe o altri formati strutturati creati a mano è un problema di manutenzione in attesa di accadere. Se i dati hanno una struttura coerente, dovrebbero essere memorizzati nei tipi di campo Odoo appropriati: Selection per opzioni fisse, Many2one per relazioni, o un modello correlato con campi appropriati. Codificare la struttura all'interno di un campo di testo libero rende impossibile filtrare, raggruppare o riportare i dati in modo affidabile.
Non aggiungere il campo alla vista di ricerca
Un campo di testo che contiene informazioni importanti ma non è incluso nella vista di ricerca del modello non può essere filtrato dalla barra di ricerca della vista elenco. Gli utenti finiscono per scorrere i record per trovare ciò di cui hanno bisogno invece di digitare semplicemente una parola chiave. Se un campo di testo memorizza informazioni che gli utenti vorranno cercare, aggiungilo alla definizione della vista di ricerca quando crei il campo.
Conclusione
Il campo di testo è uno di quei mattoni nel framework Odoo che sembra insignificante finché non inizi a progettare seriamente i moduli.
Scegliere tra Char, Text e Html è una delle prime decisioni che affronti in qualsiasi progetto di personalizzazione Odoo, e farlo bene fin dall'inizio evita rifacimenti e problemi di qualità dei dati in seguito.
Che tu stia aggiungendo un campo note tramite Odoo Studio, definendolo in un modulo Python o creandolo programmaticamente tramite l'API, i modelli in questa guida ti aiuteranno a fare la scelta giusta e configurare correttamente il campo per il tuo caso d'uso.
Un modello di dati Odoo ben progettato si basa su piccole decisioni ben scelte. Scegliere il tipo di campo giusto per ciascun pezzo di informazione è una di queste, e il campo di testo, utilizzato nel contesto giusto, è uno strumento affidabile e flessibile per catturare il tipo di contenuto che non si adatta perfettamente a campi strutturati.
Da Dasolo, aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i dipartimenti. Che tu abbia bisogno di aiuto per progettare un modello di dati pulito, costruire campi e flussi di lavoro personalizzati, o impostare un'implementazione completa di Odoo da zero, il nostro team è qui per supportarti. Mettiti in contatto e parliamo del tuo progetto Odoo.