Få tilgang til data i SQL Server
Legg til en datakilde
Direkte tilgang:
Hvis du velger alternativet Start med data når du oppretter en app, har egenskapen Items for galleriet en Power Fx-formel med et datakildenavn som peker direkte mot databasetabellen.
Hvis du for eksempel har en BOOKLENDING
-tabell, vises følgende formel:
Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)
Visninger og lagrede prosedyrer:
Et vanlig, profesjonelt datatilgangsmønster er å bruke visninger og deretter lagrede prosedyrer til oppretting, oppdatering og sletting i stedet for å gi direkte tilgang. Hvis du vil bruke visninger eller lagrede prosedyrer, må du endre eksempelformelen. Skjemaet for oppføringen bruker likeledes ikke den innebygde direkte tilnærmingen til formelen SubmitForm()
.
Utløsere:
Et databasemønster er å bruke utløsere i tabeller. Hvis en tabell har en utløser, kan du ikke bruke det direkte mønsteret Submit()
til oppretting, oppdatering og sletting. Submit()
har en konflikt mellom håndteringen av SQL-utløsere og den innebygde Power Apps-funksjonaliteten, som bruker samme utdataparameter.
Du kan få direkte tilgang til tabellen for spørringsformål, men hvis du vil håndtere Create
, Update
eller Delete
, må du kalle opp en lagret prosedyre.
[!OBS!]
SQL Server-koblingen, i likhet med alle koblingene som fungerer med relasjonsdata, forutsetter at tabeller har en primærnøkkel. En primærnøkkel er avgjørende for å finne bestemte poster som skal oppdateres. Hvis en SQL Server-tabell ikke har en primærnøkkel, behandles dataene som skrivebeskyttet. Hvis du har tilgangs- og redigeringsrettigheter til SQL Server-tabellen, bør du vurdere å legge til en automatisk generert nøkkel.
Bruk en visning
En visning er en lagret spørring som vises som én tabell med data.
Visninger vises i listen over tabeller du kan velge når du legger til en datakilde. Visninger støtter bare spørringer – ikke oppdateringer. Du må bruke en lagret prosedyre til oppdateringer.
Hvis du oppretter en tabell med alternativet Start with data
, får du skjermer og formler som viser oppføringer i et galleri og skjema. Du kan se formler og funksjonalitet for oppretting, redigering og sletting. Hvis du imidlertid bruker en visning, vises bare en skjerm for galleriet og skjemaet.
Du ønsker kanskje de automatisk genererte skjermene fra Start with data
for visninger.
For dette automatisk genererte alternativet:
- Velg
Start with data
med en grunnleggende tabell. - Slett og erstatt tabelldatakilden.
Eksempel:
Hvis du for eksempel har tabellen BOOKLENDINGVIEW
og legger den til som datakilde for Power Apps, kan formelen være så enkel som følger:
BOOKLENDINGVIEW
Du kan også erstatte andre formler for oppretting, oppdatering og sletting med en datakilde for visning og lagrede prosedyreoppkall.
Bruk lagrede prosedyrer
Når du legger til en SQL Server-tilkobling i appen, kan du legge til lagrede prosedyrer og kalle dem opp direkte i Power Fx.
Merk
Denne funksjonen fungerer også med sikre, implisitte tilkoblinger.
Når du har valgt en lagret prosedyre, vises en underordnet node, og du kan angi den lagrede prosedyren som Sikker å bruke for gallerier og tabeller.
En lagret prosedyre er trygg hvis den ikke utfører handlinger som kan være uønskede i visse scenarioer. Eksempel: En lagret prosedyre samler inn alle kontoer fra en gitt by og sender dem deretter en e-postmelding. Du ønsker kanskje ikke alltid at e-postmeldinger skal sendes hver gang den lagrede prosedyren kalles opp. Den lagrede prosedyren må derfor ikke merkes som trygg.
Merk en lagret prosedyre som trygg bare hvis følgende er tilfelle:
Det oppstår ingen bivirkninger når du kaller opp denne prosedyren ved behov.
Du skal kunne kalle opp prosedyren flere ganger eller hver gang Power Apps oppdaterer kontrollen. Når den brukes med en Elementer-egenskap for et galleri eller en tabell, kaller Power Apps opp den lagrede prosedyren når systemet avgjør at en oppdatering er nødvendig. Du kan ikke styre når den lagrede prosedyren kalles.
Du returnerer en beskjeden mengde data i den lagrede prosedyren.
Handlingsoppkall, for eksempel lagrede prosedyrer, har ingen grense for antall rader som kan hentes. De justeres ikke automatisk i trinn på 100 oppføringer slik som tabulære datakilder, for eksempel tabeller eller visninger.
Hvis den lagrede prosedyren returnerer for mye data (tusenvis av oppføringer), kan det hende at appen blir tregere eller krasjer. Hent inn færre enn 2000 oppføringer av hensyn til ytelsen.
Hvis du merker en lagret prosedyre som trygg, kan du tilordne den lagrede prosedyren som en Items-egenskap i gallerier som tabeller kan bruke i appen.
Viktig!
Skjemaet for returverdiene for den lagrede prosedyren må være statisk, slik at verdiene ikke endres fra oppkall til oppkall. Hvis en lagret prosedyre for eksempel returnerer to tabeller, returnerer den alltid to tabeller. Du kan arbeide med typebaserte eller typeløse resultater.
Strukturen til resultatene må også være statisk. Hvis skjemaet for resultatene for eksempel er dynamisk, er resultatene typeløse, og du må angi en type for å kunne bruke dem i Power Apps. Hvis du vil ha mer informasjon, kan du se Typeløse resultater.
SQL-navneområde lagt til foran navn på lagret prosedyre
Navnet på SQL Server-navneområde, der du lagrer prosedyren, legges til foran navnet på den lagrede prosedyren. Alle lagrede prosedyrer i SQL Server-navneområdet «DBO» har for eksempel «dbo» i begynnelsen på navnet.
Når du for eksempel legger til en lagret prosedyre, kan det hende at du ser flere datakilder i prosjektet.
Oppkalling av en lagret prosedyre
Hvis du vil bruke en lagret prosedyre i Power Apps, bruker du navnet på koblingen som er knyttet til den lagrede prosedyren, som prefiks for navnet på den lagrede prosedyren, for eksempel Paruntimedb.dbonewlibrarybook
.
Merk
Når Power Apps henter inn den lagrede prosedyren, kjeder det sammen navneområdet og prosedyrenavnet slik at dbo.newlibrarybook
blir dbonewlibrarybook
.
Argumenter sendes som en Power Apps-oppføring med navngitte verdipar:
<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})
Tips
Husk om nødvendig å konvertere verdier når du sender dem til den lagrede prosedyren, siden du leser fra en tekstverdi i Power Apps. Hvis du for eksempel oppdaterer et heltall i SQL, må du konvertere teksten i feltet ved hjelp av Value()
.
Her er et eksempel på hvordan lagrede prosedyrer kan se ut når du tilordner dem til en OnSelect
-egenskap.
Variabler og alle lagrede prosedyrer
Du kan få tilgang til en lagret prosedyre for egenskapen Items for et galleri etter at du har erklært den som sikker for brukergrensesnittet. Referer til datakildenavnet og navnet på den lagrede prosedyren etterfulgt av ResultSets
. Du kan få tilgang til flere resultater ved å henvise til settet med tabeller som returneres, for eksempel tabell 1, tabell 2 og så videre.
En lagret prosedyre som åpnes fra tabellen Paruntimedb
med navnet dbo.spo_show_all_library_books()
, ser for eksempel slik ut:
Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1
Denne spørringen fyller galleriet med oppføringer. Lagrede prosedyrer er imidlertid handling-funksjonalitet i tabellmodellen. Refresh()
fungerer bare med tabelldatakilder og kan ikke brukes med lagrede prosedyrer. Du må oppdatere galleriet når en oppføring opprettes, oppdateres eller slettes.
Merk
Når du bruker en Submit()
i et skjema for en tabelldatakilde, blir egentlig Refresh()
kallet opp i bakgrunnen, og galleriet oppdateres.
Bruk en variabel til å fylle ut og oppdatere galleriet
Bruk en variabel i egenskapen OnVisible
for skjermen, og angi variabelen for den lagrede prosedyren.
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
Du kan deretter angi variabelnavnet for egenskapen Items
for galleriet.
SP_Books
Etter at du har opprettet, oppdatert eller slettet en oppføring med et oppkall til den lagrede prosedyren, angir du variabelen på nytt for å oppdatere galleriet.
Paruntimedb.dbonewlibrarybook({
book_name: DataCardValue3_2.Text,
author: DataCardValue1_2.Text,
...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
Bruk Power Automate til å kalle opp lagrede prosedyrer
Power Automate håndterer asynkrone handlinger best. Du kan kalle opp lagrede prosedyrer som en del av en serie med oppkall i en forretningsprosess.
Hvis du vil kalle opp Power Automate etterfulgt av et oppkall til lagrede prosedyrer, oppretter du inndatavariabler som en del av flyten.
Send deretter inndatavariablene til oppkallet til den lagrede prosedyren.
Legg til denne Power Automate-flyten i appen, og kall den opp. De valgfrie argumentene sendes som en oppføring «{ … }». Eksemplet nedenfor har alle valgfrie argumenter.