Les objets personnalisés
Aussi en 28 langues
English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Deutsch (Schweiz)

Module 3 sur 10 du chapitre L’architecture de données Salesforce, chapitre 3 du cours Data Architect. Chaque module se suffit à lui-même. Précédent : Regardez le vaisseau mère : les modèles de données standard · Suivant : Où vivent ces données ?
La question à laquelle répond ce module : quand Salesforce ne l’a pas, qu’obtenez-vous réellement en construisant votre propre objet ?
Dans le module précédent, nous avons regardé ce que Salesforce a déjà construit. Parfois, il n’a pas ce qu’il vous faut. Steve Trucking fait rouler des camions, et il n’existe pas d’objet standard Camion. Alors vous en construisez un : un objet personnalisé.
Voici ce que je veux que vous voyiez dans ce module. Un objet personnalisé est créé dans les métadonnées, comme tout le reste au module 1, et dès qu’il existe, il vient avec un ensemble de fonctionnalités standard. Ce n’est pas une table vide. Et l’écran que vous remplissez pour le créer vous pose des questions d’architecture, que vous le remarquiez ou non.
L’écran Nouvel objet personnalisé
Section intitulée « L’écran Nouvel objet personnalisé »Allez dans Configuration → Gestionnaire d’objets → Créer → Objet personnalisé et vous obtenez un long formulaire. La plupart des gens remplissent les deux premières cases et cliquent sur Enregistrer. Ralentissons et lisons-le.
Étiquette et Étiquette au pluriel (Label, Plural Label). « Truck » et « Trucks », camion et camions. C’est ce que voient les utilisateurs, dans les onglets, les présentations de page et les rapports. Vous pouvez les changer plus tard sans trop de peine.
Nom de l’objet (Object Name). Celui-ci est différent : c’est le nom d’API, le nom qu’utilisent le code, les intégrations, les rapports et désormais les agents. Tapez « Truck » et Salesforce en fait Truck__c. Le changer plus tard veut dire retrouver tout ce qui y fait référence : c’est encore le test de réversibilité du chapitre 1. Choisissez-le bien du premier coup.
Description. Remplissez-la. À chaque fois. Au module 1, j’ai dit que les métadonnées ne sont plus de la décoration : l’administrateur suivant lit ceci, et chaque outil d’IA qui essaie de comprendre votre organisation aussi. Un objet personnalisé sans description, c’est une boîte sans étiquette.
Nom de l’enregistrement (Record Name). Chaque objet personnalisé a un champ Nom, et c’est ici que vous décidez de ce qu’il est. Un nom de type Texte, comme « Truck 117 », ou une numérotation automatique (Auto Number), comme T-000184, que Salesforce remplit pour vous. Lisez l’avertissement sur cet écran : si vous prévoyez d’insérer un gros volume d’enregistrements via l’API, Salesforce vous dit d’utiliser Texte. C’est la plateforme qui vous dit quelque chose sur le passage à l’échelle avant même que vous ayez créé un seul enregistrement.

Configuration Salesforce, Nouvel objet personnalisé : la section Nom de l’enregistrement, avec son avertissement (capture d’écran, 2026-10-12). Taille réelle
Fonctionnalités facultatives (Optional Features). Autoriser les rapports, Autoriser les activités, Suivre l’historique des champs, Autoriser dans les groupes Chatter. Désactivées par défaut. Chacune est une capacité que vous activez pour cet objet ; décidez-en délibérément.
Classification de l’objet (Object Classification). Autoriser le partage, Autoriser l’accès à l’API en masse (Bulk API), Autoriser l’accès à l’API de streaming (Streaming API), toutes activées par défaut. L’écran le dit clairement : avec ces options activées, l’objet est un objet Enterprise Application ; désactivées, c’est un objet Light Application. Ces noms correspondent aux licences d’abonnement d’application de Salesforce : une Lightning Platform Light App n’a pas de partage au niveau de l’enregistrement et ne peut pas utiliser la Bulk API ni la Streaming API, et une Enterprise App le peut. Mon conseil : laissez-les activées, sauf si vous savez exactement pourquoi ne pas le faire. Désactivez l’accès à la Bulk API sur un objet que vous chargerez plus tard en volume, et vous découvrirez pourquoi c’était important.
Statut de déploiement et recherche (Deployment Status, Search). « En développement » cache l’objet aux utilisateurs pendant que vous le construisez ; « Déployé » le met en service. Et Autoriser la recherche (Allow Search) est désactivé par défaut, donc les utilisateurs ne trouveront pas ces enregistrements dans la recherche globale tant que vous ne l’aurez pas activé. Celle-là piège les gens à chaque fois.

Les valeurs par défaut : les trois paramètres d’API activés, Déployé, et Autoriser la recherche désactivé (capture d’écran, 2026-10-12). Taille réelle
Cliquez sur Enregistrer, et le Gestionnaire d’objets vous montre l’objet : le nom d’API Truck__c, une coche dans Personnalisé, les étiquettes, le statut de déploiement. Regardez pourtant le côté gauche : Champs et relations, Présentations de page, Pages d’enregistrement Lightning, Types d’enregistrement, Règles de validation, Déclencheurs, Déclencheurs de flux, Accès à l’objet, Accès aux champs. Cette liste, c’est le module 1 rendu visible. Un objet n’est pas seulement du stockage ; c’est l’endroit auquel tout ce comportement est accroché.

Gestionnaire d’objets, Truck : le nom d’API Truck__c, Personnalisé, et tout ce qui est accroché à un objet (capture d’écran, 2026-10-12). Taille réelle
Les champs que vous n’avez pas créés
Section intitulée « Les champs que vous n’avez pas créés »Ouvrez Champs et relations sur un objet personnalisé tout neuf : il a déjà des champs. Chaque objet personnalisé reçoit un ensemble standard :
- Nom (Name), le nom d’enregistrement que vous venez de choisir, utilisé dans les présentations de page, les listes associées, les références et les résultats de recherche.
- Propriétaire (Owner), l’utilisateur ou la file d’attente qui possède l’enregistrement.
- Créé par et Dernière modification par (Created By, Last Modified By), les utilisateurs qui l’ont créé et modifié en dernier.
- Devise (Currency), si la multidevise est activée, et Division, si votre organisation utilise des divisions.
Et en dessous, l’ID d’enregistrement du module 1, ainsi que les dates de création et de modification. Exportez quelques enregistrements avec Data Loader et vous les verrez tous.
L’un d’eux peut disparaître. Faites de votre objet personnalisé le côté détail d’une relation principal-détails, et le champ Propriétaire disparaît : la propriété vient alors de l’enregistrement principal. C’est plus important qu’il n’y paraît, et nous y reviendrons aux modules 7 et 8.
Préfixes et suffixes : ce que vous avez sous les yeux
Section intitulée « Préfixes et suffixes : ce que vous avez sous les yeux »Dans le module précédent, j’ai dit que les objets standard n’ont ni préfixe ni suffixe. Tout le reste en a, et une fois que vous savez les lire, une liste de champs vous dit exactement ce que vous avez sous les yeux.
| À quoi ça ressemble | Ce que c’est |
|---|---|
Account, Case | Un objet ou un champ standard : ni préfixe, ni suffixe |
Truck__c | Un objet personnalisé, ou un champ personnalisé, comme Unit_Number__c |
abc__Inspection__c | Un objet personnalisé issu d’un package géré : abc est l’espace de noms de l’éditeur |
Delivery_History__b | Un big object (module 4) |
Shipment__x | Un objet externe : les données vivent dans un autre système (module 4) |
Allergies__pc | Un champ de contact personnalisé sur un compte personnel (module 2) |
Truck__r | La relation derrière une référence personnalisée, quand vous la suivez dans une requête |
Quelques remarques.
Jusqu’ici, c’est une liste. Voici comment je l’enseigne : par couches. Il y a trois sortes d’objets, standard, personnalisé et de package géré, et chacun d’eux peut porter les mêmes sortes de champs : les champs standard avec lesquels il est arrivé, et les champs personnalisés que quelqu’un a ajoutés.
Les objets standard. Account n’a ni préfixe ni suffixe, pas plus que ses champs standard : Name, Industry, OwnerId. Vous pouvez ajouter des champs personnalisés à la plupart des objets standard, et chacun de ceux que vous ajoutez se termine par __c : Region__c (Custom Fields (opens in a new tab), en anglais). C’est ce suffixe qui vous protège. Salesforce ajoute de nouveaux champs standard à Account dans ses versions, et comme les vôtres se terminent toujours par __c et les siens jamais, un futur champ standard ne peut jamais entrer en collision avec un champ que vous avez déjà.
Les objets personnalisés. Votre propre objet se termine par __c, Truck__c (Custom Objects (opens in a new tab), en anglais), tout comme les champs personnalisés que vous y mettez : Unit_Number__c. Mais les champs avec lesquels il est né, ceux de la section précédente, sont des champs standard : Name, OwnerId, CreatedDate, sans suffixe. Donc même sur votre propre objet, le suffixe vous dit qui a créé chaque champ.
Les objets de package géré. Quand vous installez un package géré depuis AppExchange, ses objets et ses champs viennent avec le préfixe d’espace de noms de l’éditeur : abc__Inspection__c, et des champs comme abc__Result__c. Ce préfixe est propre à l’éditeur, et il ne change pas (Namespace Prefix (opens in a new tab), en anglais). Selon les propres termes de Salesforce, le préfixe est ajouté à chaque composant pour le rendre unique : name__c devient prefix__name__c (AppExchange Object Prefixes and the API (opens in a new tab), en anglais). Deux éditeurs peuvent donc livrer chacun un objet appelé Invoice__c sans jamais entrer en collision l’un avec l’autre, ni avec vous. Les objets du package ont toujours leurs champs standard, Name et OwnerId, sans préfixe. Un package peut aussi ajouter ses propres champs préfixés aux objets standard, comme abc__Score__c sur Account. Et vous pouvez ajouter vos propres champs personnalisés aux objets d’un package : Depot__c sur abc__Inspection__c prend votre suffixe __c, mais jamais le préfixe de l’éditeur, parce que c’est vous qui l’avez créé, pas lui (Known Issue: unmanaged custom field on a managed package object (opens in a new tab), en anglais).
Lisez n’importe quel nom d’API et vous savez qui l’a créé. Pas de suffixe : Salesforce. __c sans préfixe : votre organisation. abc__ devant : l’éditeur. Cela compte chaque fois que vous planifiez un changement. Ce qui est à vous, vous pouvez le changer. Ce qui est à Salesforce, vous le configurez et l’étendez. Ce qui est à l’éditeur est en grande partie verrouillé : quelques éléments, comme les présentations de page et le texte d’aide, sont modifiables par vous, mais l’essentiel du package, et chaque nom d’API, appartient à l’éditeur, et ses mises à niveau apportent ses changements (Editable Properties After Package Promotion or Installation (opens in a new tab), en anglais).
Les packages non gérés, eux, n’en ont pas. Installez un package non géré, et ses objets arrivent dans votre organisation comme si vous les aviez construits vous-même, sans préfixe. S’il apporte un Truck__c et que vous en avez déjà un, vous avez une collision de noms. Vérifiez avant d’installer.
Ne construisez que ce que Salesforce n’a pas
Section intitulée « Ne construisez que ce que Salesforce n’a pas »Créer un objet personnalisé est facile ; c’est exactement pourquoi je pense que nous en créons trop. L’écran Nouvel objet personnalisé vous fera volontiers un Customer__c dans une organisation qui a déjà le compte. Alors avant de cliquer, posez la question du module précédent : le vaisseau mère a-t-il déjà cela ? Si oui, utilisez-le. Sinon, construisez-le, et remplissez tout l’écran en architecte.
Le module suivant pose une question encore plus en amont : ces données devraient-elles seulement être dans Salesforce ?
Ce que l’architecte décide ici
Section intitulée « Ce que l’architecte décide ici »- Si Salesforce a déjà un objet standard pour cela, avant d’en construire un personnalisé.
- Le nom d’API, choisi une fois pour toutes, et une description écrite pour les personnes et pour les machines.
- Le nom d’enregistrement : Texte ou numérotation automatique, en gardant à l’esprit le volume attendu.
- Quelles fonctionnalités facultatives, quel accès API et quelle recherche activer, délibérément.
- Ce que les suffixes d’une organisation vous disent : personnalisé, géré, big object, externe, compte personnel.
- Si un package que vous vous apprêtez à installer pourrait entrer en collision avec ce que vous avez construit.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Custom Objects (opens in a new tab) et Custom Fields (opens in a new tab) (en anglais), Object Reference (consulté le 2026-10-13) : « les noms des objets personnalisés comportent un suffixe de deux traits de soulignement suivis d’un ‘c’ minuscule » ; il en va de même pour les champs personnalisés ; et le tableau des objets standard qui acceptent des champs personnalisés.
- AppExchange Object Prefixes and the API (opens in a new tab) (en anglais), Object Reference (consulté le 2026-10-13) : un préfixe d’espace de noms rend unique chaque composant de package ; « name__c devient prefix__name__c ».
- Namespace Prefix (opens in a new tab) (en anglais), Apex Developer Guide (consulté le 2026-10-13) : les préfixes d’espace de noms séparent les noms d’objets et de champs des packages gérés de ceux des autres organisations.
- Editable Properties After Package Promotion or Installation (opens in a new tab) (en anglais), Second-Generation Managed Packaging Developer Guide (consulté le 2026-10-13) : quelles propriétés des composants d’un package le développeur, l’abonné, les deux ou aucun des deux peuvent modifier.
- Custom Object Standard Fields (opens in a new tab) (en anglais), Salesforce Help (consulté le 2026-10-12) : les champs standard que reçoit chaque objet personnalisé (Name, Owner, Created By, Last Modified By, Currency, Division), et pourquoi Owner est retiré du côté détail d’une relation principal-détails.
- Standard User Licenses (opens in a new tab) (en anglais), Salesforce Help (consulté le 2026-10-12) : une Lightning Platform Light App « ne peut pas utiliser la Bulk API ni la Streaming API » ; une Enterprise App « prend en charge le partage au niveau de l’enregistrement et peut utiliser la Bulk API et la Streaming API ».
