Vai al contenuto principale
Twenty non supporta ancora i campi formula nativi (in arrivo nel 2026), ma puoi ottenere lo stesso risultato utilizzando i flussi di lavoro. Questa soluzione alternativa consente di calcolare e compilare automaticamente i valori dei campi — dalle semplici concatenazioni alla logica aziendale più complessa.

Casi d’Uso Comuni

Caso d’usoEsempio di formula
Nome completoNome + ” ” + Cognome
Importo previstoImporto × Probabilità
Giorni alla scadenzaData di scadenza - Oggi
Giorni nella faseOggi - Data di ingresso nella fase
Punteggio leadPunti in base a criteri multipli
Per un esempio completo del monitoraggio del tempo nelle fasi della pipeline, vedi Traccia quanto tempo le opportunità restano in ogni fase.

Formula di base: concatenazione

Esempio: compilazione automatica del nome completo

Obiettivo: combinare automaticamente nome e cognome in un campo nome completo.

Impostazione

  1. Trigger: il record viene aggiornato o creato (Persone)
  2. Filtro: verifica che il nome o il cognome siano cambiati
  3. Azione di codice:
export const main = async (params) => {
  const { firstName, lastName } = params;

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

  return { fullName };
};
  1. Aggiorna record: imposta Nome completo su {{code.fullName}}

Formula numerica: importo previsto

Esempio: calcolare il ricavo previsto

Obiettivo: moltiplicare l’importo dell’opportunità per la probabilità per ottenere l’importo previsto. Vedi Come mostrare l’importo previsto nella pipeline per il flusso di lavoro completo.

Configurazione rapida

  1. Trigger: il record viene aggiornato (Opportunità, campo Importo oppure Probabilità)
  2. Azione di codice:
export const main = async (params) => {
  const { amount, probability } = params;

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

  return { expectedAmount };
};
  1. Aggiorna record: imposta Importo previsto su {{code.expectedAmount}}

Formula sulle date: calcolo dei giorni

Esempio: giorni alla scadenza dell’attività

Obiettivo: calcolare quanti giorni mancano alla data di scadenza di un’attività.

Impostazione

  1. Trigger: il record viene aggiornato o creato (Attività, campo Data di scadenza)
  2. Azione di codice:
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. Aggiorna record: imposta Giorni alla scadenza su {{code.daysUntilDue}}
I valori negativi indicano attività scadute. Puoi usare questo campo per filtrare o ordinare le attività per urgenza.

Formula condizionale: punteggio lead

Esempio: calcolare il punteggio lead in base a criteri

Obiettivo: assegnare un punteggio ai lead in base alla dimensione aziendale, al settore e al coinvolgimento.

Impostazione

  1. Trigger: il record viene aggiornato (Persone o Aziende)
  2. Azione di codice:
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. Aggiorna record: imposta Punteggio lead su {{code.leadScore}}

Formula di testo: estrazione del dominio

Esempio: estrarre il dominio dall’email

Obiettivo: estrarre e archiviare automaticamente il dominio dell’email.

Impostazione

  1. Trigger: il record viene aggiornato (Persone, campo Email)
  2. Azione di codice:
export const main = async (params) => {
  const { email } = params;

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

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

  return { domain };
};
  1. Aggiorna record: imposta il campo Dominio su {{code.domain}}

Migliori Pratiche

Prestazioni

  • Attiva solo in caso di modifiche ai campi rilevanti
  • Usa filtri per ignorare i record che non richiedono calcolo
  • Evita calcoli complessi in flussi di lavoro ad alto volume

Gestione degli errori

  • Verifica i valori null/undefined prima dei calcoli
  • Usa valori predefiniti quando i dati mancano
  • Restituisci messaggi di errore chiari quando i calcoli falliscono

Testing

  • Esegui test con casi limite (campi vuoti, valori zero)
  • Verifica manualmente i calcoli prima dell’attivazione
  • Monitora le esecuzioni dei flussi di lavoro per risultati imprevisti

Correlati