App designer e site map: l’involucro dell’esperienza

La Sales Hub è una model-driven app costruita su Dataverse. La sua struttura si governa dall’app designer moderno, dove decidi quali tabelle, form, view, dashboard e chart includere nell’app. La navigazione è definita dalla site map, organizzata in Area → Group → Subarea: ogni subarea punta a una tabella, a un dashboard o a un URL. Aggiungere una tabella all’app non la rende automaticamente raggiungibile: serve un nodo nella site map (o una relazione che la esponga).

Scelta architetturale chiave: personalizza sempre dentro una unmanaged solution dedicata (con un publisher e prefisso custom), non “al volo” dall’app. Le modifiche fatte fuori da una solution finiscono nella Default solution, difficili da trasportare. Il pattern ALM corretto è sviluppare in una solution unmanaged, esportare managed e importare negli ambienti a valle.

Tipi di form

Dataverse offre quattro tipi principali:

  • Main form: la scheda completa del record (es. Account, Opportunity), con tab, sezioni, sotto-griglie e business process flow.
  • Quick Create form: form ridotto per creare rapidamente un record dal “+” globale o da una lookup; solo i campi essenziali (va abilitato sulla tabella).
  • Quick View form: sola lettura, embedded in un main form per mostrare campi di un record correlato (es. i dettagli dell’Account dentro l’Opportunity). Si aggiorna cambiando il parent nella lookup.
  • Card form: layout compatto usato nelle editable/read-only grid e nell’app mobile.

Il form order e le security role assegnate al form (role-based forms) determinano quale main form vede l’utente.

View

Le view definiscono colonne, ordinamento e filtri (FetchXML) di una lista. Tipi chiave:

  • Public view: condivise, selezionabili dal view selector.
  • System view speciali: Quick Find (ricerca), Lookup view (risultati di una lookup), Associated view (griglia di record correlati).
  • Personal view: create dall’utente via Advanced Find/griglia, condivisibili.

Business rules e lo scope

Le business rules applicano logica dichiarativa no-code su una tabella: condizioni + azioni (set field value, set default value, set business required, show/hide, lock/unlock, show error message, recommendation).

Il concetto cruciale è lo scope:

  • Specific form oppure All Forms: la regola gira solo client-side, quando l’utente apre quel form (o tutti i main form).
  • Entity (Table): la regola gira sia client-side sia server-side. Lato server valgono solo le azioni “dati” (set value, business required, validation/error message); le azioni puramente UI (show/hide, lock/unlock, recommendation) vengono ignorate dal server.

Business rule vs JavaScript / Power Fx

  • Business rule: rapida e manutenibile, ma limitata a una singola tabella, senza chiamate asincrone né logica cross-table complessa.
  • JavaScript (Client API): eventi OnLoad/OnChange/OnSave, chiamate Web API, logica avanzata; richiede pro-dev.
  • Power Fx: low-code per formula columns e modern commanding (bottoni della command bar).

Regola pratica: per validazioni server-side garantite → business rule scope Entity; per UI dinamica ricca → JavaScript; per calcoli o comandi low-code → Power Fx.

Trappole tipiche d’esame

  • La validazione deve bloccare anche import bulk e chiamate API, non solo il form → business rule con scope Entity (gira server-side); una regola scoped al singolo form viene bypassata da import/SDK.
  • Regola con scope Entity che “non nasconde” il campo durante un import → corretto: show/hide e lock/unlock sono azioni UI, ignorate server-side; solo set value e validation valgono ovunque.
  • Mostrare i dettagli in sola lettura di un record correlato dentro un altro formQuick View form, non una sotto-griglia né un main form.
  • Form snello per la creazione rapida da una lookupQuick Create form (ricordati di abilitarlo sulla tabella).
  • Le modifiche al form vanno portate in un altro ambiente → lavora in una unmanaged solution ed esporta managed; non affidarti alla Default solution.