Dela via


Få åtkomst till data i SQL Server

Lägg till en datakälla

Direktåtkomst:

Om du väljer alternativet Börja med data när du skapar en app har egenskapen Objekt i galleriet en Power Fx-formel med ett namn på datakällan som pekar direkt på databastabellen.

Om du till exempel har en BOOKLENDING-tabell visas följande formel:

Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)

Vyer och lagrade procedurer:

Ett vanligt professionellt dataåtkomstmönster är att använda vyer och sedan lagrade procedurer för att skapa, uppdatera och ta bort i stället för att tillåta direkt åtkomst. Om du vill använda vyer eller lagrade procedurer måste du ändra exempelformeln. På samma sätt använder formuläret för posten inte heller SubmitForm()-formelns inbyggda direkta metod.

Utlösare:

Ett databasmönster är att använda utlösare i tabeller. Om en tabell har en utlösare kan du inte använda direktmönstret Submit() för att skapa, uppdatera och ta bort. Submit() har en konflikt mellan hanteringen av SQL-utlösare och det inbyggda Power Apps-beteendet, som använder samma utdataparameter.

Du kan dock komma åt tabellen direkt i frågesyfte, men för att hantera Create, Update eller Delete måste du anropa en lagrad procedur.

[!OBS]

Anslutningsappen SQL Server, liksom alla anslutningsappar som arbetar med relationsdata, förutsätter att tabeller har en primärnyckel. En primärnyckel är viktig för att hitta specifika poster som ska uppdateras. Om en SQL Server-tabell inte har en primärnyckel behandlas data som skrivskyddade. Om du har åtkomst- och redigeringsbehörighet till tabellen SQL Server bör du överväga att lägga till en automatiskt genererad nyckel.

Använda en vy

En vy är en sparad fråga som visas som en enda tabell med data.

Vyer visas i listan över tabeller som du kan välja när du lägger till en datakälla. Vyer har endast stöd för frågor, inte uppdateringar. Du måste använda en lagrad procedur för uppdateringar.

Om du skapar en tabell med alternativet Start with data får du skärmar och formler som visar poster i ett galleri och ett formulär. Du kan se formler och funktioner för att skapa, redigera och ta bort. Men om du använder en vy visas bara en skärm för galleriet och formuläret.

Du kanske vill ha de automatiskt genererade skärmarna från Start with data för vyer.

För det här automatiskt genererade alternativet:

  1. Välj Start with data med en grundläggande tabell.
  2. Ta bort och ersätt tabelldatakällan.

Exempel:

Om du till exempel har tabellen BOOKLENDINGVIEW och har lagt till den som datakälla för Power Apps kan formeln vara så enkel som:

BOOKLENDINGVIEW

Du kan också ersätta andra formler för att skapa, uppdatera och ta bort med en vydatakälla och lagrade proceduranrop.

Använda lagrade procedurer

När du lägger till en SQL Server-anslutning till din app kan du lägga till lagrade procedurer och anropa dem direkt i Power Fx.

Obs

Den här funktionen fungerar även med säkra implicita kopplingar.

Skärmbild som visar listor över tabeller, vyer och lagrade procedurer som är tillgängliga för att läggas till i appen.

När du har valt en lagrad procedur visas en underordnad nod och du kan ange den lagrade proceduren som Säker att använda för gallerier och tabeller.

En lagrad procedur är säker om den inte har någon åtgärd den utför som kan vara oönskad i vissa scenarier. Till exempel om en lagrad procedur samlade in alla konton från en viss stad och sedan skickade ett e-postmeddelande till dem. Du kanske inte alltid vill att e-postmeddelanden ska skickas varje gång den lagrade proceduren anropas. Därför bör den lagrade proceduren inte markeras som säker.

Kontrollera bara att en lagrad procedur är säker om:

  1. Det inte finns biverkningar av att anropa denna procedur på begäran.

    Du bör kunna anropa proceduren flera gånger eller när Power Apps uppdaterar kontrollen. När de används med en egenskap Items för ett galleri eller en tabell anropar Power Apps den lagrade proceduren när systemet bestämmer en uppdatering. Du kan inte kontrollera när den lagrade proceduren anropas.

  2. Du returnerar en blygsam mängd data i den lagrade proceduren.

    Åtgärdsanrop, till exempel lagrade procedurer, har ingen gräns för antalet rader som hämtas. De visas inte automatiskt i 100 postökningar som till exempel tabeller eller vyer i tabellerna.

    Om den lagrade proceduren returnerar för mycket data (tusentals poster) kan appen bli långsammare eller krascha. Av prestandaskäl bör du ta in färre än 2 000 poster.

Om du markerar en lagrad procedur som säker kan du tilldela den lagrade proceduren som en Objekt-egenskap i gallerier för tabeller som ska användas i din app.

Viktigt

Schemat för returvärdena för den lagrade proceduren ska vara statiskt, så att värdena ändras inte från anrop till anrop. Om en lagrad procedur till exempel returnerar två tabeller returneras alltid två tabeller. Du kan arbeta med antingen typade eller typlösa resultat.

Resultatens struktur behöver också vara statisk. Om schemat för resultaten till exempel är dynamiskt, är resultaten typlösa och du måste ange en typ för att kunna använda dem i Power Apps. Mer information finns i avsnittet Typlösa resultat.

SQL-namnrymden tillagt i början av namnet på den lagrade proceduren

SQL Server-namnrymdsnamnet, där du lagrar proceduren, läggs till i början av namnet på den lagrade proceduren. Till exempel har alla lagrade procedurer i SQL Server-namnrymden DBOdbo i början av namnet.

När du till exempel lägger till en lagrad procedur kan du se fler än en datakälla i projektet.

Skärmbild som visar SQL-datakällor.

Anropa en lagrad procedur

Om du vill använda en lagrad procedur i Power Apps prefixar du namnet på den lagrade proceduren med namnet på den associerade anslutningsappen följt av namnet på den lagrade proceduren, till exempel Paruntimedb.dbonewlibrarybook.

Obs

När Power Apps tar in den lagrade proceduren sammanfogas namnrymden och procedurnamnet så att dbo.newlibrarybook blir dbonewlibrarybook.

Argument skickas som en Power Apps-post med namngivna värdepar:

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

Tips!

Kom ihåg att konvertera värden om det behövs när du skickar dem till den lagrade proceduren, eftersom du läser från ett textvärde i Power Apps. Om du till exempel uppdaterar ett heltal i SQL måste du konvertera texten i fältet med Value().

Här är ett exempel på hur lagrade procedurer kan se ut när du tilldelar dem åt en OnSelect-egenskap.

Skärmbild som visar hur du anropar lagrade procedurer direkt med hjälp av nyckel/värde-par och punktnotation.

Variabler och alla lagrade procedurer

Du kan få tillgång till en lagrad procedur för egenskapen Items i ett galleri när du har uppger att den är säker för användargränssnittet. Referera till datakällans namn och namnet på den lagrade proceduren följt av ResultSets. Du kan få tillgång till flera resultat genom att referera till de tabeller som returneras, t.ex. tabell 1, tabell 2, etc.

En lagrad procedur som nås från tabellen Paruntimedb med namnet dbo.spo_show_all_library_books() ser till exempel ut så här:

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

Den här frågan fyller i galleriet med poster. Lagrade procedurer är dock åtgärdsbeteenden i tabellmodellen. Refresh() fungerar bara med tabelldatakällor och kan inte användas med lagrade procedurer. Du måste uppdatera galleriet när en post skapas, uppdateras eller raderas.

Obs

När du använder en Submit() i ett formulär för en tabelldatakälla anropar den Refresh() under huven och uppdaterar galleriet.

Använd en variabel i OnVisible-egenskapen för skärmen och ange den lagrade proceduren till variabeln.

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

Du kan sedan ange galleriets Items-egenskap till variabelnamnet.

SP_Books

När du har skapat, uppdaterat eller tagit bort en post med ett anrop till den lagrade proceduren anger du variabeln igen för att uppdatera galleriet.

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

Använda Power Automate för att anropa lagrade procedurer

Power Automate hanterar asynkrona åtgärder bäst. Du kan anropa lagrade procedurer som en del av en serie anrop i en affärsprocess.

Om du vill anropa Power Automate följt av ett anrop till lagrade procedurer skapar du indatavariabler som en del av ditt flöde.

Skärmbild som visar Power Automate-indata.

Skicka sedan dina indatavariabler till anropet av den lagrade proceduren.

Köra lagrad procedur

Lägg till det här Power Automate-flödet i din app och anropa det. De valfria argumenten skickas som en post ”{ ... }”. I följande exempel finns alla valfria argument.

Power Automate-flow