Introduction
Le champ texte est l'un des types de champs les plus pratiques dans Odoo. Chaque fois qu'un utilisateur remplit une zone de notes, rédige une description de produit ou ajoute un commentaire interne sur une commande de vente, il y a de fortes chances qu'il tape dans un champ texte.
Cela ressemble à une simple zone de texte dans l'interface, mais comprendre ses propriétés et comment il s'intègre dans le modèle de données Odoo et l'ORM fait une réelle différence lorsque vous concevez des formulaires, construisez des modules personnalisés ou configurez des champs Odoo Studio pour votre équipe.
Ce guide couvre tout, de ce que le champ texte stocke et comment il se comporte, aux cas d'utilisation commerciale réels, à la personnalisation technique, aux meilleures pratiques et aux erreurs que la plupart des gens commettent en choisissant ce type de champ.
Qu'est-ce que le champ texte dans Odoo
Dans l'ORM Odoo, fields.Text est le type de champ pour stocker du texte brut multi-lignes. Il correspond à une colonne TEXT dans PostgreSQL, sans restriction de longueur. Les utilisateurs peuvent écrire une seule phrase ou plusieurs paragraphes, et le champ le gère tout aussi bien.
Dans les formulaires, il se présente comme un élément <textarea> redimensionnable. Dans les vues de liste, il apparaît comme du texte brut tronqué. Dans les vues de recherche, il prend en charge le filtrage basé sur le texte tout comme le champ Char.
Voici à quoi ressemble une définition de champ Text de base dans un module Python :
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Notes internes',
translate=False,
)
Dans Odoo Studio, ce champ est appelé Texte multi-lignes. Lorsqu'il est créé via Studio, Odoo lui attribue automatiquement un préfixe x_studio_. Lorsque vous le créez via du code ou l'API XML-RPC, vous définissez vous-même le nom technique.
Comment cela diffère du Char et de l'Html
Trois types de champs dans Odoo peuvent stocker du contenu textuel, et savoir quand utiliser lequel est un point de confusion courant :
- Champ Char : Saisie de texte sur une seule ligne. Idéal pour des valeurs courtes comme des noms, des codes et des références. Prend en charge une limite de taille optionnelle.
- Champ Text : Zone de texte multi-lignes. Idéal pour des notes, des descriptions et des commentaires libres. Stocke du texte brut sans mise en forme.
- Champ Html : Éditeur de texte riche multi-lignes. Idéal pour du contenu où la mise en forme est importante, comme des modèles d'e-mails, des descriptions de produits sur le web ou des pages de site web. Stocke le balisage HTML.
Le champ Text se situe entre les deux. Il offre aux utilisateurs plus d'espace qu'un champ Char, mais sans la complexité du balisage HTML. Pour la plupart des notes internes et des descriptions simples, c'est le bon choix dans le modèle de données Odoo.
Comment fonctionne le champ
Lorsque vous ajoutez un champ Text à un modèle Odoo, le framework crée automatiquement la colonne TEXT correspondante dans PostgreSQL lors de l'installation ou de la mise à niveau du module. Il n'y a pas de migrations SQL manuelles impliquées.
Contrairement au champ Char, il n'y a pas de paramètre size disponible sur les champs Text. La colonne de la base de données n'impose aucune limite de caractères. C'est intentionnel : les champs Text sont destinés à un contenu ouvert où limiter la longueur à l'avance n'aurait pas de sens.
Attributs clés du champ
Les propriétés les plus importantes d'un champ Texte dans le cadre Odoo :
- traduire : Lorsqu'il est défini sur
True, la valeur du champ peut être traduite par langue. Utile pour les instances Odoo multilingues où le texte change en fonction de la langue de l'utilisateur. - requis : Rend le champ obligatoire au niveau de l'interface et de l'ORM. Les utilisateurs ne peuvent pas enregistrer un enregistrement sans le remplir.
- par défaut : Définit une valeur par défaut automatique lors de la création de nouveaux enregistrements. Peut être une chaîne statique ou une méthode appelable.
- calculer : Lie une méthode Python qui génère la valeur du champ de manière dynamique. Utile pour les résumés générés automatiquement ou le contenu dérivé.
- stockage : Lorsqu'il est combiné avec
calculer, contrôle si la valeur calculée est enregistrée dans la base de données. Avecstore=True, la valeur est recherchable et disponible dans les rapports. - copie : Contrôle si la valeur du champ est incluse lors de la duplication d'un enregistrement. Par défaut, c'est
True. Défini surFalsepour les notes qui ne doivent pas être transférées aux doublons. - index : Pas couramment utilisé sur les champs Texte car l'indexation en texte intégral fonctionne différemment de l'index B-arbre simple utilisé pour les champs Char. Pour le contenu recherchable, la recherche en texte intégral de PostgreSQL ou le filtrage intégré d'Odoo est généralement suffisant.
Comment cela apparaît dans les vues
Dans les vues de formulaire, le champ Texte se présente sous la forme d'un <textarea> que les utilisateurs peuvent redimensionner verticalement. Dans les vues de liste, le contenu est tronqué pour s'adapter à la largeur de la colonne. Dans les vues de recherche, il prend en charge les filtres de recherche basés sur le texte dès que vous l'ajoutez à la définition de la vue de recherche.
Contrairement aux champs Html, le champ Texte ne charge pas d'éditeur WYSIWYG. Les utilisateurs voient une zone de texte simple sans barre d'outils de formatage. Ce qu'ils tapent est exactement ce qui est stocké dans la base de données, avec les sauts de ligne préservés.
Interaction avec l'ORM Odoo
Du point de vue d'un développeur, la lecture et l'écriture des champs de texte dans le développement Odoo est simple. Vous accédez directement à la valeur sur l'objet d'enregistrement, et l'ORM gère toute la persistance. Les sauts de ligne sont stockés tels quels. Il n'y a pas de nettoyage ou d'échappement automatique appliqué aux champs de texte simples, ce qui est l'une des raisons pour lesquelles il est distinct du champ Html, où Odoo applique un nettoyage pour prévenir les problèmes XSS.
Cas d'utilisation commerciale
Les champs de texte apparaissent dans Odoo à des endroits où les utilisateurs doivent écrire plus d'une seule ligne. Voici cinq exemples concrets provenant de véritables flux de travail commerciaux.
Ventes : Notes internes de commande
Le champ note sur les commandes de vente et le champ internal_note utilisé dans certaines implémentations sont des champs de texte. Les représentants commerciaux les utilisent pour enregistrer des instructions de livraison, des exigences d'emballage spéciales ou des préférences clients qui ne s'intègrent pas facilement dans un champ structuré. Ces notes accompagnent la commande et sont visibles par les équipes opérationnelles sans être imprimées sur les documents clients.
Inventaire : Notes internes sur le produit
Sur le formulaire produit, Odoo fournit un onglet Notes avec un champ de texte pour les commentaires internes. Les équipes d'entrepôt l'utilisent pour documenter des instructions de manipulation, des avertissements de fragilité ou des informations spécifiques au fournisseur. Étant donné qu'il s'agit de texte brut et qu'il n'est pas affiché sur le site Web ou les documents clients, il est sûr d'écrire des détails opérationnels que les parties externes ne devraient pas voir.
Achats : Conditions et instructions de livraison du fournisseur
Sur les commandes d'achat, un champ de texte pour les notes du fournisseur permet aux équipes d'approvisionnement de documenter des accords spécifiques ou des contraintes de livraison qui ont été confirmés par e-mail ou par téléphone. Avoir cette information attachée à l'enregistrement de la commande évite les malentendus lorsque les marchandises arrivent et que la conversation originale n'est plus facile à retrouver.
CRM : Résumés d'opportunités et notes de réunion
Les équipes de vente travaillant à travers le pipeline CRM ajoutent souvent un champ de texte aux enregistrements d'opportunités pour des notes libres provenant de réunions avec des clients, des objections soulevées ou des contextes concernant le processus d'achat. Contrairement aux messages de discussion, un champ de texte dédié garde cette information structurée et facile à lire d'un coup d'œil lorsque quelqu'un d'autre prend en charge le lead.
RH : Commentaires des employés et des candidats
Les équipes RH ont souvent besoin de capturer des notes d'entretien, des commentaires sur l'intégration ou des observations de performance dans un champ qui reste attaché au dossier de l'employé ou du candidat. Un champ de texte sur le modèle d'employé est un moyen propre et simple de stocker cela sans créer un modèle séparé. Il est consultable, imprimable et facile à inclure dans des rapports RH personnalisés.
Créer ou personnaliser le champ texte
Il existe trois principales façons d'ajouter un champ de texte à un modèle Odoo, en fonction de votre contexte technique et de votre approche de déploiement.
Utiliser Odoo Studio (sans code)
Odoo Studio est la voie la plus simple pour les utilisateurs professionnels et les consultants qui ne souhaitent pas écrire de code. Pour ajouter un champ de texte sans travail de développement :
- Ouvrez Odoo Studio depuis le menu principal (nécessite l'application Studio).
- Naviguez vers le formulaire où vous souhaitez le champ.
- Faites glisser un champ Texte multi-lignes depuis la barre latérale de Studio vers le formulaire.
- Définissez l'étiquette, le statut requis et toute valeur par défaut dans le panneau des propriétés du champ.
- Enregistrez et fermez Studio.
Studio gère automatiquement la création du champ et la mise à jour de la vue. Le champ obtient un préfixe x_studio_ et est immédiatement disponible sur le formulaire sans aucune migration de base de données ni redémarrage du serveur.
Utiliser Python dans un module personnalisé
Pour toute personnalisation qui doit être contrôlée par version et déployée sur plusieurs environnements, définir le champ en Python est la bonne approche. C'est la pratique de développement standard d'Odoo :
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_client_notes = fields.Text(
string='Notes Client',
translate=False,
copy=False,
)
Après avoir défini le champ dans le fichier modèle, vous devez l'ajouter à la vue XML pertinente afin qu'il apparaisse dans l'interface. Odoo crée automatiquement la colonne de base de données lorsque vous installez ou mettez à jour le module. C'est l'approche recommandée pour toute personnalisation Odoo en production qui doit être maintenue dans le temps.
Utilisation de l'API XML-RPC
Si vous gérez les champs Odoo par programmation, par exemple dans le cadre d'un script de déploiement ou d'un carnet de configuration à distance, vous pouvez créer des champs Text via 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': 'Notes Client',
'model_id': model_id,
'ttype': 'text',
'state': 'manual',
'translate': False,
'copy': False,
}]
)
La valeur ttype: text indique à Odoo de créer un champ Text (par opposition à char pour un champ Char ou html pour un champ Html). Le paramètre state: manual indique que ce champ a été créé en dehors d'un module, ce qui est correct pour les champs créés via Studio ou par programmation via l'API. C'est l'approche utilisée par Dasolo lors du déploiement de configurations de champs à distance pour les clients.
Meilleures pratiques
1. Utilisez Text lorsque le contenu nécessite réellement plusieurs lignes
L'erreur la plus courante est de choisir un champ Text alors qu'un champ Char suffirait. Si la valeur est un nom, un code, une référence ou quoi que ce soit qui tient sur une ligne, utilisez Char. Réservez Text pour le contenu où les utilisateurs sont censés écrire des phrases ou des paragraphes. Utiliser un champ Text pour une entrée courte à valeur unique crée une expérience utilisateur maladroite et un modèle de données trompeur.
2. Utilisez Html lorsque le formatage est important
Si les utilisateurs doivent ajouter des listes à puces, du texte en gras, des hyperliens ou tout formatage visuel au contenu, le champ Text est le mauvais choix. Utilisez plutôt un champ Html. Les champs Text ne prennent en charge que le texte brut. Demander aux utilisateurs d'écrire du contenu formaté dans une zone de texte simple entraînera des utilisateurs frustrés qui s'attendent à des options de formatage qui ne sont pas disponibles.
3. Activez la traduction pour le contenu multilingue destiné aux utilisateurs
Dans les entreprises utilisant Odoo dans plusieurs langues, tout champ Text qui apparaît sur des documents destinés aux clients ou sur le site Web doit avoir translate=True. Cela permet aux traducteurs de fournir des versions spécifiques à chaque langue du contenu sans écraser le travail des autres. Pour les notes internes et les commentaires opérationnels que les utilisateurs écrivent eux-mêmes, la traduction n'est généralement pas nécessaire.
4. Définissez copy=False pour les notes qui ne doivent pas être dupliquées
Lorsque les utilisateurs dupliquent un bon de commande ou un produit, les champs de texte sont copiés par défaut. Pour les notes qui capturent un contexte spécifique à l'enregistrement original, comme une conversation avec un client ou un problème de livraison spécifique, cela peut créer de la confusion. Définissez copy=False sur ces champs afin que les enregistrements dupliqués commencent avec une section de notes vierge.
5. Utilisez compute avec store=True pour des résumés auto-générés
Les champs de texte peuvent être calculés dynamiquement dans Odoo. Un modèle utile consiste à créer un champ de résumé auto-généré qui concatène les valeurs d'autres champs de l'enregistrement. Avec store=True et les déclencheurs appropriés @api.depends(), le texte calculé est enregistré dans la base de données et devient consultable dans les vues de liste et les filtres. C'est une technique pratique des champs calculés d'Odoo pour créer des résumés internes légers sans créer un rapport séparé.
Pièges courants
Choisir Text lorsque Html est nécessaire
Si un champ est destiné à contenir du contenu affiché sur le site Web ou dans un rapport PDF formaté, utiliser Text au lieu de Html supprimera tout formatage. Les utilisateurs qui collent du contenu avec des puces ou du texte en gras dans un champ de texte le verront rendu comme une prose plate et non formatée. Demandez toujours si le canal de sortie nécessite un formatage avant de choisir le type de champ.
Choisir Text lorsque Char est le bon choix
Un champ de texte se présente sous la forme d'une zone de texte haute et redimensionnable. Si un champ ne doit jamais contenir qu'une courte valeur comme un numéro de suivi ou un code de variante de produit, utiliser Text rend le formulaire inutilement encombrant. Le contenu sur une seule ligne appartient à un champ Char, qui se présente sous la forme d'une entrée de texte compacte qui s'intègre naturellement dans une mise en page de formulaire.
Oublier de traduire les étiquettes et descriptions multilingues
Sur les instances Odoo déployées dans plusieurs pays, l'absence de l'attribut translate=True sur un champ de texte visible par l'utilisateur signifie que tous les utilisateurs voient la même valeur, quel que soit leur paramètre de langue. Cela est particulièrement problématique pour les descriptions de produits et les notes de catégorie qui sont visibles dans l'interface. La solution est simple, mais l'ajouter après que les données soient déjà dans le système nécessite une migration soigneuse pour éviter d'écraser les valeurs existantes.
Utiliser Text pour des données structurées
Un champ de texte qui stocke des JSON, des valeurs séparées par des pipes ou d'autres formats structurés faits à la main est un problème de maintenance qui attend de se produire. Si les données ont une structure cohérente, elles doivent être stockées dans les types de champs Odoo appropriés : Sélection pour des options fixes, Many2one pour des relations, ou un modèle lié avec des champs appropriés. Encoder la structure à l'intérieur d'un champ de texte libre rend impossible le filtrage, le regroupement ou le reporting des données de manière fiable.
Ne pas ajouter le champ à la vue de recherche
Un champ de texte qui contient des informations importantes mais qui n'est pas inclus dans la vue de recherche du modèle ne peut pas être filtré depuis la barre de recherche de la vue liste. Les utilisateurs finissent par faire défiler les enregistrements pour trouver ce dont ils ont besoin au lieu de simplement taper un mot-clé. Si un champ de texte stocke des informations que les utilisateurs voudront rechercher, ajoutez-le à la définition de la vue de recherche lors de la création du champ.
Conclusion
Le champ de texte est l'un de ces éléments de base dans le cadre Odoo qui semble insignifiant jusqu'à ce que vous commenciez à concevoir des formulaires sérieusement.
Choisir entre Char, Text et Html est l'une des premières décisions que vous devez prendre dans tout projet de personnalisation Odoo, et bien faire les choses dès le départ évite de retravailler et des problèmes de qualité des données par la suite.
Que vous ajoutiez un champ de notes via Odoo Studio, que vous le définissiez dans un module Python ou que vous le créiez par programmation via l'API, les modèles de ce guide vous aideront à faire le bon choix et à configurer le champ correctement pour votre cas d'utilisation.
Un modèle de données Odoo bien conçu repose sur de petites décisions bien choisies. Choisir le bon type de champ pour chaque morceau d'information en fait partie, et le champ de texte, utilisé dans le bon contexte, est un outil fiable et flexible pour capturer le type de contenu qui ne s'intègre pas facilement dans des champs structurés.
Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo dans tous les départements. Que vous ayez besoin d'aide pour concevoir un modèle de données propre, construire des champs et des flux de travail personnalisés, ou mettre en place une mise en œuvre complète d'Odoo depuis le début, notre équipe est là pour vous soutenir. Contactez-nous et parlons de votre projet Odoo.