Passer au contenu principal
Twenty ne prend pas encore en charge les champs de formule natifs (prévu en 2026), mais vous pouvez obtenir le même résultat à l’aide de workflows. Cette solution de contournement vous permet de calculer et de renseigner automatiquement les valeurs de champs — des concaténations simples à une logique métier complexe.

Cas d’utilisation courants

Cas d’utilisationExemple de formule
Nom completPrénom + ” ” + Nom de famille
Montant attenduMontant × Probabilité
Jours avant l’échéanceDate d’échéance - Aujourd’hui
Jours dans l’étapeAujourd’hui - Date d’entrée dans l’étape
Score de leadPoints basés sur plusieurs critères
Pour un exemple complet de suivi du temps dans les étapes du pipeline, voir Suivre la durée de présence des opportunités dans chaque étape.

Formule de base : concaténation

Exemple : remplissage automatique du nom complet

Objectif : Combiner automatiquement le prénom et le nom de famille dans un champ de nom complet.

Installation

  1. Déclencheur : Enregistrement mis à jour ou créé (Personnes)
  2. Filtre : Vérifier que le prénom ou le nom de famille a changé
  3. Action de code :
export const main = async (params) => {
  const { firstName, lastName } = params;

  const fullName = [firstName, lastName]
    .filter(Boolean)
    .join(' ');

  return { fullName };
};
  1. Mettre à jour l’enregistrement : Définir le nom complet sur {{code.fullName}}

Formule numérique : montant attendu

Exemple : calculer le revenu attendu

Objectif : Multiplier le montant de l’opportunité par la probabilité pour obtenir le montant attendu. Voir Comment afficher le montant attendu dans le pipeline pour le workflow complet.

Configuration rapide

  1. Déclencheur : Enregistrement mis à jour (Opportunités, champ Montant OU Probabilité)
  2. Action de code :
export const main = async (params) => {
  const { amount, probability } = params;

  const expectedAmount = (amount || 0) * (probability || 0) / 100;

  return { expectedAmount };
};
  1. Mettre à jour l’enregistrement : Définir le montant attendu sur {{code.expectedAmount}}

Formule de date : calcul des jours

Exemple : jours avant l’échéance de la tâche

Objectif : Calculer le nombre de jours restants avant la date d’échéance d’une tâche.

Installation

  1. Déclencheur : Enregistrement mis à jour ou créé (Tâches, champ Date d’échéance)
  2. Action de code :
export const main = async (params) => {
  const { dueDate } = params;

  if (!dueDate) {
    return { daysUntilDue: null };
  }

  const due = new Date(dueDate);
  const today = new Date();
  const diffTime = due - today;
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));

  return { daysUntilDue: diffDays };
};
  1. Mettre à jour l’enregistrement : Définir les jours avant l’échéance sur {{code.daysUntilDue}}
Des valeurs négatives indiquent des tâches en retard. Vous pouvez utiliser ce champ pour filtrer ou trier les tâches par urgence.

Formule conditionnelle : score de lead

Exemple : calculer le score de lead en fonction de critères

Objectif : Noter les leads selon la taille de l’entreprise, le secteur d’activité et l’engagement.

Installation

  1. Déclencheur : Enregistrement mis à jour (Personnes ou Entreprises)
  2. Action de code :
export const main = async (params) => {
  const { companySize, industry, hasEmail, hasPhone, source } = params;

  let score = 0;

  // Company size scoring
  if (companySize === 'Enterprise') score += 30;
  else if (companySize === 'Mid-Market') score += 20;
  else if (companySize === 'SMB') score += 10;

  // Industry scoring
  const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
  if (targetIndustries.includes(industry)) score += 25;

  // Contact info scoring
  if (hasEmail) score += 10;
  if (hasPhone) score += 15;

  // Source scoring
  if (source === 'Referral') score += 20;
  else if (source === 'Website') score += 10;

  return { leadScore: score };
};
  1. Mettre à jour l’enregistrement : Définir le score de lead sur {{code.leadScore}}

Formule texte : extraction de domaine

Exemple : extraire le domaine à partir de l’email

Objectif : Extraire et stocker automatiquement le domaine de l’email.

Installation

  1. Déclencheur : Enregistrement mis à jour (Personnes, champ Email)
  2. Action de code :
export const main = async (params) => {
  const { email } = params;

  if (!email) return { domain: null };

  const domain = email.split('@')[1]?.toLowerCase();

  return { domain };
};
  1. Mettre à jour l’enregistrement : Définir le champ Domaine sur {{code.domain}}

Meilleures pratiques

Performances

  • Ne déclenchez que lors des modifications de champs pertinentes
  • Utilisez des filtres pour ignorer les enregistrements qui n’ont pas besoin de calcul
  • Évitez les calculs complexes dans les workflows à fort volume

Gestion des erreurs

  • Vérifiez les valeurs null/undefined avant les calculs
  • Utilisez des valeurs par défaut lorsque des données manquent
  • Renvoyez des messages d’erreur clairs lorsque les calculs échouent

Tests

  • Testez avec des cas limites (champs vides, valeurs zéro)
  • Vérifiez manuellement les calculs avant l’activation
  • Surveillez les exécutions de workflows pour détecter des résultats inattendus

Articles connexes