Qui l’esame smette di chiedere «dove si clicca» e chiede «quale strumento regge questo volume»: far entrare e uscire i dati, impedire che entrino sporchi, rileggerli nei report.

Far entrare i dati: Wizard o Data Loader

Data Import Wizard Data Loader
Volume «up to 50,000 records at a time» fino a «150 million records»
Oggetti account, contact, lead, campaign member, solution, person account e i custom; niente Opportunity, niente Case qualsiasi oggetto
Operazioni insert, update, upsert con matching anche delete, hard delete, export
Automazione no sì, da riga di comando e pianificabile

Basta una delle due condizioni a escludere il wizard: un oggetto fuori elenco (Opportunity e Case sono i classici) oppure un volume a sei cifre.

Prima di caricare si pulisce il CSV (deduplica, picklist coerenti, formati di data) e si sceglie la chiave. Un campo External ID abilita l’upsert: Salesforce aggiorna il record se la chiave esiste e lo inserisce altrimenti.

Volumi grandi: cosa si spegne prima di caricare

SOAP API è «optimized for real-time client applications that update a few records at a time»; Bulk API è «designed to make it simple to process data from a few thousand to millions of records»: per una migrazione da milioni di record la risposta è sempre Bulk API in parallelo. Poi si spegne tutto ciò che gira record per record: validation rule, workflow rule e flow disattivati, trigger spenti con una custom setting letta dal codice, ricalcolo dello sharing differito caricando con org-wide default Public Read/Write. E i record figli si preordinano per Id del padre («presort the child records by parent ID») contro gli errori di lock fra batch paralleli.

Far uscire i dati: export, backup, archivio

Il Data Export Service (Setup → Data Export) produce un backup pianificato o su richiesta: settimanale in Enterprise, Performance e Unlimited, mensile in Professional e Developer. Il punto è la consegna: «Salesforce creates a zip archive of CSV files and emails you when it’s ready», e i file vengono «deleted 48 hours after the email is sent». Non è un download immediato. Per un’estrazione immediata o programmabile c’è il Data Loader in export (Export All include i record nel cestino).

Riassegnare in blocco il proprietario dei record è un’altra cosa ancora: Mass Transfer Records in Setup riassegna per criteri, senza spostare dati.

Cancellare, invece, non è una cosa sola.

Operazione Cosa fa Storage
Delete da UI/API (soft delete) il record va nel Recycle Bin (15 giorni) ancora occupato
Hard delete di Bulk API «bypass the Recycle Bin», eliminazione immediata liberato subito, nessun recupero
Truncate su oggetto custom rimuove tutti i record, tiene oggetto e metadati liberato, ma niente sottoinsiemi
Mass Delete Records (Setup) pochi oggetti, poche centinaia per volta passa dal cestino
Archive storico su storage esterno, «directly in production via a Lightning web component» ridotto, dato conservato

Liberare storage subito su una parte dei record è hard delete; ridurlo tenendo lo storico consultabile dentro produzione è Archive.

Qualità del dato: duplicati e validation rule

I duplicati si governano con due oggetti distinti. La matching rule definisce quando due record si somigliano (confronto esatto o fuzzy matching, che riconosce «SW Barnes Ave» e «Southwest Barnes Avenue»). La duplicate rule definisce cosa succede: alert, alert con registrazione del duplicato per un report, o blocco. Verbatim: «Before an active matching rule can do anything, you pair it with a duplicate rule». I limiti dichiarati: «up to three matching rules in each duplicate rule, and up to five active matching rules per object».

La validation rule si scrive al contrario di come la si legge: la error condition formula descrive la situazione da rifiutare. «If the formula results in TRUE, the error message will tell the user to correct their data»: per impedire il salvataggio di un Lead senza ricavi la formula è ISBLANK(AnnualRevenue), non la sua negazione, senza bisogno di un IF(). L’errore si posiziona su un Field o in cima al record. Girano dopo trigger e flow: un’automazione può scrivere un valore che fa fallire il salvataggio a chi quel campo non l’ha toccato. Se deve valere per gli utenti ma non per un’utenza di integrazione non si disattiva: si crea una custom permission, assegnata con un permission set al solo utente tecnico e innestata nella formula: AND(NOT($Permission.Bypass_Lead_Validation_Rules), ISBLANK(AnnualRevenue)).

Report: formato, report type, filtri

Il formato decide come si raggruppa.

Formato Raggruppamenti Quando è la risposta
Tabular nessuno elenco piatto, con row limit
Summary solo per righe subtotali in verticale
Matrix righe e colonne subtotali nelle due direzioni
Joined fino a 5 blocchi confrontare oggetti diversi

Il report type decide quali record possono comparire: la distinzione più insidiosa. «A with B» è una join interna: Accounts with Opportunities non elencherà mai un account senza opportunità. Per vedere affiancati lavorati e non lavorati serve un custom report type con la relazione su «A records may or may not have related B records». Se invece servono solo i padri senza figli non si cambia report type: si aggiunge un cross filter con operatore without (Accounts without Opportunities), con eventuali subfiltri sui campi del figlio.

Altre personalizzazioni della guida: bucket field per raggruppare valori in categorie senza creare un campo custom; row-level formula e summary formula; hide details per i soli totali di gruppo; le chart settings; la rinomina dei campi, che in Lightning non avviene nel report builder ma cambiando la label nel layout del custom report type, primo posto da guardare anche quando un campo «non esiste» nel builder, prima della field-level security.

Il joined report affianca fino a cinque blocchi, ognuno con report type, colonne e filtri propri; si allineano raggruppando su un campo comune (Account Name) e il principal report type «controls how common fields are named». Le formule cross-block calcolano fra i blocchi, e un record entra se soddisfa i criteri di almeno un blocco. Attenzione a qualche pagina non aggiornata: da diverse release un joined report può essere sorgente di un componente dashboard.

Trappole tipiche d’esame

  • 120.000 Opportunity da un CSV in produzione → Data Loader: il wizard è escluso due volte, supera i 50.000 record e Opportunity non è supportato.
  • Backup settimanale con il Data Export Service → arriva una mail con il link a uno zip di CSV, per una finestra breve (48 ore), non un download istantaneo da Setup.
  • Cancellare 2 milioni di record tenendo l’ultimo anno, liberando storage subito → hard delete via Bulk API. Truncate è la trappola: svuota l’oggetto intero. Il delete normale lascia tutto nel cestino, storage compreso.
  • Matching rule custom attiva su Contact, ma nessun avviso ai commerciali → manca la duplicate rule attiva che la referenzia: da sola la matching rule non agisce al salvataggio.
  • Validation rule che blocca il salvataggio con Annual Revenue vuoto → la formula vale TRUE quando il campo è vuoto; chi scrive la condizione «valida» la inverte e blocca i record corretti. Per l’integrazione si aggiunge NOT($Permission....), non si spegne la regola.
  • Case chiusi per Case Origin in colonna e Case Owner in riga, subtotali in entrambe le direzioni → formato Matrix. Summary raggruppa solo per righe; joined confronta oggetti diversi, non due assi dello stesso.
  • Account senza opportunità, contro account lavorati e non lavorati nello stesso report → cross filter without per il primo, custom report type «may or may not have related records» per il secondo. Scambiarli è la coppia che l’esame ama.