Accès aux données
Les fonctions d'accès aux données vous permettent de rechercher et récupérer des objets depuis votre base de données directement dans vos formules.
Recherche d'objets
CHERCHER.OBJET(typeObjet, requete)
Recherche et retourne un seul objet correspondant aux critères. Si plusieurs correspondent, seul le premier est retourné.
// Rechercher un client par son nom
CHERCHER.OBJET(client, { name: "ACME Corp" })
// Rechercher un client lié à la commande
CHERCHER.OBJET(client, { id: {{commande.clientId}} })
// Rechercher une facture spécifique
CHERCHER.OBJET(facture, { numero: "FAC-2025-001" })
// Utiliser l'objet trouvé
var monClient = CHERCHER.OBJET(client, { email: "contact@acme.com" });
{{monClient.nom}}Attention : Si aucun objet n'est trouvé, cette fonction peut générer une erreur. Utilisez EXISTE pour vérifier ou SI.ECHOUE.RENVOYER pour gérer ce cas.
CHERCHER.OBJETS(typeObjet, requete)
Recherche et retourne tous les objets correspondant aux critères sous forme de tableau.
// Récupérer tous les projets
CHERCHER.OBJETS(projet, {})
// Récupérer les commandes d'un client
CHERCHER.OBJETS(commande, { clientId: {{client.id}} })
// Accéder aux champs de tous les objets trouvés
CHERCHER.OBJETS(produit, {}).nom // Tableau des noms
// Combiner avec d'autres fonctions
var commandes = CHERCHER.OBJETS(commande, {});
SOMME(TRANSFORMER(commandes, {{$.total}}))Bon à savoir : Une requête vide {}retourne tous les objets du type spécifié. C'est utile pour obtenir une liste complète.
Syntaxe des requêtes
Les requêtes utilisent une syntaxe inspirée de MongoDB (MEL Query). Voici les opérateurs disponibles.
Égalité simple
La forme la plus simple : { champ: valeur }
// Rechercher par nom
CHERCHER.OBJET(client, { name: "ACME Corp" })
// Rechercher par statut
CHERCHER.OBJETS(commande, { statut: "validée" })
// Rechercher par booléen
CHERCHER.OBJETS(facture, { payee: true })Opérateur $eq
Forme explicite de l'égalité. Utile avec des valeurs dynamiques.
// Égalité explicite
CHERCHER.OBJET(facture, { order: { $eq: "{{order}}" } })
// Équivalent à la forme simple
CHERCHER.OBJET(facture, { order: "{{order}}" })Critères multiples
Combinez plusieurs critères (tous doivent correspondre - ET implicite).
// Rechercher avec plusieurs critères
CHERCHER.OBJETS(commande, {
clientId: {{client.id}},
statut: "validée"
})
// Client actif dans une ville
CHERCHER.OBJETS(client, {
ville: "Paris",
actif: true
})Valeurs dynamiques
Vous pouvez utiliser l'interpolation {{...}} dans les requêtes pour passer des valeurs dynamiques. Enveloppez-les dans des guillemets si nécessaire.
Historique des statuts
DATE.DU.PASSAGE.AU.STATUT(objet, nomStatut)
Retourne la date à laquelle un objet est passé à un statut spécifique. Utile pour calculer des délais ou afficher des dates clés.
// Date de validation d'une commande
DATE.DU.PASSAGE.AU.STATUT({{commande}}, "validée")
// Date d'envoi d'une facture
DATE.DU.PASSAGE.AU.STATUT({{facture}}, "envoyée")
// Calculer le délai de traitement
var dateCreation = {{commande.dateCreation}};
var dateValidation = DATE.DU.PASSAGE.AU.STATUT({{commande}}, "validée");
JOURS.ENTRE.INCLU(dateCreation, dateValidation)Bon à savoir : Cette fonction recherche dans l'historique des changements de statut. Si l'objet n'a jamais eu ce statut, elle retourne une erreur.
Bonnes pratiques
✓ Stocker dans une variable
Si vous utilisez le résultat plusieurs fois, stockez-le dans une variable.
// ✓ Bon : une seule recherche
var client = CHERCHER.OBJET(client, { id: {{commande.clientId}} });
CONCAT({{client.nom}}, " - ", {{client.email}})
// ✗ À éviter : deux recherches pour le même objet
CONCAT(
CHERCHER.OBJET(client, { id: {{commande.clientId}} }).nom,
" - ",
CHERCHER.OBJET(client, { id: {{commande.clientId}} }).email
)✓ Filtrer après la recherche
Parfois il est plus clair de chercher puis filtrer.
// Récupérer puis filtrer
var commandes = CHERCHER.OBJETS(commande, {});
var commandesValidees = FILTRER(commandes, {{$.statut}} == "validée");
var commandesRecentes = FILTRER(commandesValidees,
{{$.date}} > AUJOURDHUI() - 30
);⚠ Gérer l'absence de résultat
Vérifiez toujours si un objet a été trouvé avant de l'utiliser.
var client = SI.ECHOUE.RENVOYER(
CHERCHER.OBJET(client, { email: {{email}} }),
null
);
SI EXISTE(client)
ALORS {{client.nom}}
SINON "Client non trouvé"
FINSIExemples pratiques
Calculer le chiffre d'affaires d'un client
var commandes = CHERCHER.OBJETS(commande, { clientId: {{client.id}} });
var commandesPayees = FILTRER(commandes, {{$.statut}} == "payée");
var totaux = TRANSFORMER(commandesPayees, {{$.totalTTC}});
SOMME(totaux)Vérifier l'unicité d'un email
var emailExistant = SI.ECHOUE.RENVOYER(
CHERCHER.OBJET(client, { email: {{nouveauClient.email}} }),
null
);
SI EXISTE(emailExistant)
ALORS "Cet email est déjà utilisé par " + {{emailExistant.nom}}
SINON "Email disponible"
FINSITrouver la dernière facture d'un client
var factures = CHERCHER.OBJETS(facture, { clientId: {{client.id}} });
var dates = TRANSFORMER(factures, {{$.date}});
var datePlusRecente = MAX(dates);
var derniereFacture = TROUVER(factures, {{$.date}} == datePlusRecente);
SI EXISTE(derniereFacture)
ALORS CONCAT("Dernière facture : ", {{derniereFacture.numero}})
SINON "Aucune facture"
FINSICalculer le délai moyen de paiement
var factures = CHERCHER.OBJETS(facture, { payee: true });
var delais = TRANSFORMER(factures,
JOURS.ENTRE.INCLU(
{{$.dateEmission}},
DATE.DU.PASSAGE.AU.STATUT({{$}}, "payée")
)
);
MOYENNE(delais)Prochaine étape
Apprenez maintenant à gérer les erreurs et les valeurs manquantes pour des formules robustes.