Connessione a SQL Server da Power Apps

È possibile eseguire la connessione a SQL Server in Azure o in un database locale.

Nota

Le origini dati SQL appena create non hanno più il prefisso [dbo] come nelle versioni precedenti di Power Apps.

Per ulteriori informazioni, vedi Problemi comuni e soluzioni per Power Apps.

Generare un'app automaticamente

A seconda dell'interfaccia Power Apps che stai utilizzando, fai riferimento al nuovo aspetto o al look classico per creare un'app.

  1. Accedi a Power Apps.

  2. Dalla Home page, seleziona l'opzione raccolta a pagina singola o dispositivo mobile a tre schermate:

    • Per creare un'app raccolta a pagina singola con un layout reattivo, scegli una delle seguenti opzioni:
      • Inizia con i dati > Seleziona dati esterni > Da SQL.
      • Inizia con un progetto di pagina > Raccolta collegata a dati esterni > Da SQL.
    • Per creare un'app per dispositivi mobili a tre schermi, seleziona Inizia con un modello app > Da SQL.
  3. Seleziona la tua connessione SQL, quindi una tabella. Per scegliere una connessione diversa, seleziona il menu di overflow ... per cambiare la connessione o creare una nuova connessione SQL.

    Nota

    Viene mostrata solo una connessione alla volta.

  4. Al termine, seleziona Crea app.

Chiama le stored procedure direttamente in Power Fx (anteprima)

Ora è possibile chiamare direttamente le stored procedure di SQL Server da Power Fx. Per impostazione predefinita, questa nuova opzione dovrebbe essere attivata. In caso contrario, puoi attivarlo.

  1. Vai su Impostazioni > Aggiornamenti > Nuovo.
  2. Cerca stored procedure.
  3. Imposta l'interruttore On per Stored procedure di SQL Server.
  4. Salva e riapri l'app.

Screenshot che mostra l'attivazione/disattivazione delle stored procedure di SQL Server.

Quando aggiungi una connessione SQL Server alla tua app, ora puoi aggiungere tabelle, viste o stored procedure. Questa funzionalità funziona anche con connessioni implicite sicure.

Screenshot che mostra gli elenchi di tabelle, viste e stored procedure disponibili per l'aggiunta all'app.

Se non vedi immediatamente la stored procedure, è più veloce cercarla.

Una volta selezionata una stored procedure, viene visualizzato un nodo figlio ed è possibile designare la stored procedure come Sicuro da utilizzare per raccolte e tabelle. Se selezioni questa opzione, puoi assegnare la stored procedure come proprietà Items per le raccolte per le tabelle da utilizzare nella tua app.

Abilita questa opzione solo se:

  1. Non ci sono effetti collaterali nel richiamare questa procedura su richiesta, più volte, ogni volta che Power Apps aggiorna il controllo. Se utilizzato con una proprietà Items di una raccolta o tabella, Power Apps chiama la stored procedure ogni volta che il sistema determina che è necessario un aggiornamento. Non è possibile controllare quando viene chiamata la stored procedure.
  2. La quantità di dati restituiti nella procedura memorizzata è modesta. Le chiamate ad azioni, come le stored procedure, non hanno un limite al numero di righe recuperate. Non vengono automaticamente impaginati con incrementi di 100 record come le origini dati tabulari come tabelle o visualizzazioni. Pertanto, se la stored procedure restituisce troppi dati (molte migliaia di record), la tua app potrebbe essere lenta o bloccarsi. Per motivi di prestazioni, dovresti importare meno di 2.000 record.

Importante

Lo schema dei valori restituiti dalla stored procedure dovrebbe essere statico. Ciò significa che non cambia da una chiamata all'altra. Ad esempio, se si richiama una stored procedure e questa restituisce due tabelle, allora dovrebbe sempre restituire due tabelle. È possibile lavorare sia con risultati tipizzati che non tipizzati. La struttura dei risultati deve essere la stessa da una chiamata all'altra. Se lo schema dei risultati è dinamico, i risultati non saranno tipizzati e sarà necessario fornire un tipo per poterli utilizzare in Power Apps. Per ulteriori informazioni, consultare Risultati non tipizzati.

Namespace SQL anteposto al nome della stored procedure

Il nome dello spazio dei nomi di SQL Server in cui è archiviata la stored procedure è anteposto al nome della stored procedure creata per essa in Power Apps. Ad esempio, tutte le procedure archiviate nello spazio dei nomi 'DBO' SQL Server hanno 'dbo' all'inizio del nome.

Esempio

Quando aggiungi una stored procedure, potresti vedere più di un'origine dati nel tuo progetto.

Screenshot che mostra le origini dati SQL.

Chiamata di una stored procedure

Per utilizzare una stored procedure in Power Apps, anteporre innanzitutto al nome della stored procedure il nome del connettore ad essa associato e il nome della stored procedure. "Paruntimedb.dbonewlibrarybook" nell'esempio illustra questo criterio. Quando Power Apps importa la stored procedure, concatena lo spazio dei nomi e il nome della procedura e 'dbo.newlibrarybook' diventa 'dbonewlibrarybook'.

Gli argomenti vengono passati come un record con coppie di valori denominati: Power Apps

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

Ricordatevi di convertire i valori quando li passate nella stored procedure, se necessario, poiché state leggendo un valore di testo in Power Apps. Ad esempio, se stai aggiornando un numero intero in SQL devi convertire il testo nel campo utilizzando "Value()".

Chiamare direttamente le stored procedure.

Accesso ai risultati

Una stored procedure può restituire un codice, valori dai parametri Out o i risultati delle query. Per accedere a questi risultati, utilizzare i seguenti modelli:

Codice di ritorno

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ReturnCode

Utilizzare questo comando per accedere ai risultati di un'istruzione return.

Parametri di output

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).OutputParameters.<parameterName>

Ricordatevi di utilizzare il nome del parametro così come appare nel payload JSON.

Set di risultati

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ResultSets.Table1

È possibile accedere ad altre tabelle tramite il loro nome (ad esempio, Tabella1, Tabella2, Tabella3, ...)

Risultati non tipizzati

Alcune procedure archiviate complesse restituiscono un risultato non tipizzato. Questi risultati non sono accessibili direttamente. Per prima cosa devi specificare un tipo. È possibile accedere ai dati utilizzando il seguente schema.

In questo esempio, per prima cosa estraiamo i risultati in una variabile denominata "MyUntypedObject". Quindi estraiamo 'Tabella1' da quella variabile e la inseriamo in una variabile denominata 'tabella1'. Questo passaggio non è strettamente necessario. Tuttavia è utile inserire tutti i risultati in una variabile con un valore puntare nel tempo e poi estrarre le parti necessarie. Quindi, eseguiamo un'iterazione nella tabella 1 ed estraiamo gli elementi JSON in coppie di valori denominati. Assicuratevi di far corrispondere i nomi con i nomi restituiti nel payload JSON. Per convalidare, apri un monitor e guarda la sezione del corpo del nodo dati per un record. Power Apps

Set(
    <MyUntypedObject>,
    <datasourceName>.<StoredprocedureName>( 
      { <paramName1>: "someString" }
    ).ResultSets
);
Set(
    table1,
    <MyUntypedObject>.Table1
);
Set(
    TypedTable,
    ForAll(
        table1,
        {
            BookID: Value(ThisRecord.BookID),
            BookName: Text(ThisRecord.BookName)
        }
    )
);

Puoi accedere a una stored procedure per la proprietà Items di una raccolta dopo averla dichiarata sicura per l'interfaccia utente. Fare riferimento al nome dell'origine dati e al nome della stored procedure seguito da "ResultSets". È possibile accedere a più risultati facendo riferimento all'insieme di tabelle restituite, ad esempio Tabella 1, Tabella 2 e così via.

Ad esempio, l'accesso a una stored procedure da un'origine dati denominata "Paruntimedb" con una stored procedure denominata "dbo.spo_show_all_library_books()" sarà simile al seguente.

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

Questo popola la raccolta con i record. Tuttavia, le stored procedure sono un'aggiunta di comportamenti azione al modello tabulare. Refresh() funziona solo con origini dati tabulari e non può essere utilizzato con stored procedure. Quindi è necessario aggiornare la raccolta quando un record viene creato, aggiornato o eliminato. Quando si utilizza Submit() su un modulo per un origine dati tabulare, in pratica viene richiamato Refresh() e la galleria viene aggiornata.

Per aggirare questa limitazione, utilizzare una variabile nella proprietà OnVisible per lo schermo e impostare la stored procedure sulla variabile.

Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

Quindi impostare la proprietà "Items" della raccolta sul nome della variabile.

SP_Books

Quindi, dopo aver creato, aggiornato o eliminato un record con una chiamata alla stored procedure, imposta nuovamente la variabile. Questo aggiorna la raccolta.

Paruntimedb.dbonewlibrarybook({   
  book_name: DataCardValue3_2.Text, 
  author: DataCardValue1_2.Text,
    ...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

Problemi noti

Le origini dati SQL non aggiungono più un prefisso [dbo] al nome dell'origine dati

Il prefisso [dbo] non ha alcuno scopo pratico in Power Apps poiché i nomi delle origini dati vengono automaticamente disambiguati. Le origini dati esistenti non saranno interessate da questa modifica, ma le origini dati SQL appena aggiunte non includeranno il prefisso.

Se devi aggiornare un numero elevato di formule in una delle app, l'utility di compressione e decompressioni di origini file di Power Apps può essere utilizzata per eseguire un'operazione di ricerca e sostituzione globale.

Nota

A partire dalla versione 3.21054, aggiorneremo automaticamente i riferimenti ai nomi legacy non funzionanti al nuovo nome origine dati dopo aver letto l'origine dati.

Passaggi successivi

Nota

Puoi indicarci le tue preferenze di lingua per la documentazione? Partecipa a un breve sondaggio. (il sondaggio è in inglese)

Il sondaggio richiederà circa sette minuti. Non viene raccolto alcun dato personale (Informativa sulla privacy).