Le canvas app di Power Apps offrono controllo pixel-perfect sul layout e si collegano a decine di origini dati tramite connettori. A differenza delle model-driven app (legate a Microsoft Dataverse), qui il consulente funzionale sceglie liberamente sorgenti, controlli e logica scritta in Power Fx. Capire dove risiede il calcolo — sul client o sull’origine dati — è la competenza chiave di questo dominio.

Connettori: standard vs premium

Un connettore è l’interfaccia verso un’origine dati o un servizio. Si dividono in due categorie con impatto diretto sulle licenze:

  • Standard: inclusi nelle licenze Microsoft 365 (es. SharePoint, Office 365 Users, Outlook, OneDrive, Excel).
  • Premium: richiedono una licenza Power Apps per user/per app o Power Apps Premium. Rientrano qui Microsoft Dataverse, SQL Server, Azure SQL, HTTP con Microsoft Entra ID e i custom connector.

Scelta architetturale tipica: se l’app deve scalare, garantire relazioni, sicurezza a livello di riga e business rules, si opta per Dataverse (premium) invece di una lista SharePoint. Se il budget/licenza è vincolato e i dati sono semplici, SharePoint resta valido — ma attenzione ai limiti di delegation che vedremo.

Power Fx e i controlli

Power Fx è il linguaggio dichiarativo, in stile Excel, delle canvas app: le formule si ricalcolano automaticamente quando cambiano le dipendenze. I due controlli data-bound centrali sono:

  • Gallery: visualizza un set di record; si popola con Items (es. Filter, Search, SortByColumns) e si naviga con ThisItem.
  • Edit form / Display form: legato a un singolo record via DataSource + Item; si salva con SubmitForm() e si legge lo stato con Form.Error / Form.LastSubmit.

Funzioni ricorrenti: Patch() per create/update mirati senza form, Collect()/ClearCollect() per collezioni in memoria, LookUp() per un singolo record.

Delegation: il concetto cardine

La delegation è la capacità di Power Fx di delegare l’elaborazione all’origine dati anziché scaricare i record sul dispositivo. Quando una funzione è delegabile, Filter/Sort/Search vengono tradotti in query eseguite dal backend (SQL, Dataverse), che restituisce solo i risultati pertinenti.

Il problema nasce con le funzioni o operatori non delegabili: Power Apps allora scarica solo i primi N record definiti dal limite “Data row limit for non-delegable queries”, di default 500, aumentabile fino a 2000 in Settings → General. Su quei record — e solo su quelli — applica la logica localmente.

Cosa è delegabile (dipende dall’origine)

La delegabilità non è assoluta: varia per connettore. Esempi tipici:

  • Delegabili (su Dataverse/SQL): Filter, Sort, LookUp, e operatori come =, >, <, StartsWith, And/Or.
  • Spesso NON delegabili: Search (a seconda del connettore), operazioni su colonne calcolate, in, e molte funzioni testo/aggregazione come First/Last in certi contesti.

Regola pratica: SharePoint e Dataverse non hanno la stessa mappa di delegation. Una formula delegata su SQL può non esserlo su SharePoint.

Il delegation warning

L’editor mostra un triangolo di warning blu (“Delegation warning”) quando una formula non può essere delegata. Non è un errore bloccante: l’app funziona, ma opera solo entro il limite 500/2000. Su un dataset più grande i risultati sono parziali e silenziosi — l’utente non riceve nessun avviso a runtime.

Strategia di mitigazione:

  • Riscrivere la formula usando solo funzioni/operatori delegabili.
  • Spostare i filtri non delegabili dopo un filtro delegabile che riduca il set sotto la soglia.
  • Migrare da SharePoint a Dataverse/SQL per una copertura di delegation più ampia.
  • Per grandi volumi, non affidarsi mai all’aumento del limite a 2000 come “soluzione”.

Trappole tipiche d’esame

  • Scenario: una gallery filtra 8.000 righe SharePoint con una funzione non delegabile e mostra risultati incompleti. → La causa è la delegation: la query non è delegata e legge solo i primi 500/2000 record. Riscrivi con funzioni delegabili, non alzare solo il limite.
  • Scenario: serve StartsWith su una colonna testo di un grande dataset SQL senza warning. → StartsWith è delegabile su SQL/Dataverse: usalo al posto di operazioni non delegabili come certi usi di Search.
  • Scenario: l’app deve connettersi a Azure SQL ma servono solo licenze M365. → Azure SQL è un connettore premium: richiede licenza Power Apps premium, non basta M365.
  • Scenario: relazioni, sicurezza per riga e business logic robusta su molti record. → Scegli Dataverse, non una lista SharePoint, anche per la migliore delegation.
  • Scenario: il delegation warning appare ma “l’app sembra funzionare in test”. → In test i dati sono sotto soglia; in produzione i risultati diventano parziali silenziosamente. Va risolto comunque.