Opret lagrede procedurer
Azure Cosmos DB leverer sprogintegrerede transaktionsudførelser af JavaScript, så du kan skrive lagrede procedurer, udløsereog brugerdefinerede funktioner. Hvis du vil kalde en lagret procedure, udløser eller brugerdefineret funktion, skal du registrere den. Du kan få flere oplysninger under Sådan arbejder du med lagrede procedurer, udløsere, brugerdefinerede funktioner i Azure Cosmos DB.
Seddel
I dette undermodul fokuseres der på lagrede procedurer. I følgende undermodul beskrives udløsere og brugerdefinerede funktioner.
Skriver lagrede procedurer
Lagrede procedurer kan oprette, opdatere, læse, forespørge på og slette elementer i en Azure Cosmos-objektbeholder. Lagrede procedurer registreres pr. samling og kan fungere på alle dokumenter eller en vedhæftet fil, der findes i den pågældende samling.
Her er en simpel lagret procedure, der returnerer et "Hello World"-svar.
var helloWorldStoredProc = {
id: "helloWorld",
serverScript: function () {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
}
Kontekstobjektet giver adgang til alle handlinger, der kan udføres i Azure Cosmos DB, og adgang til anmodnings- og svarobjekterne. I dette tilfælde skal du bruge svarobjektet til at angive brødteksten i svaret, der skal sendes tilbage til klienten.
Opret et element ved hjælp af en lagret procedure
Når du opretter et element ved hjælp af en lagret procedure, indsættes elementet i Azure Cosmos DB-objektbeholderen, og der returneres et id for det nyoprettede element. Oprettelse af et element er en asynkron handling og afhænger af tilbagekaldsfunktionerne i JavaScript. Tilbagekaldsfunktionen har to parametre: én for fejlobjektet, hvis handlingen mislykkes, og en anden for en returværdi, i dette tilfælde det oprettede objekt. I tilbagekaldet kan du enten håndtere undtagelsen eller udløse en fejl. Hvis der ikke er angivet et tilbagekald, og der er en fejl, udløser Azure Cosmos DB-kørsel en fejl.
Den lagrede procedure indeholder også en parameter til at angive beskrivelsen som en boolesk værdi. Når parameteren er angivet til sand, og beskrivelsen mangler, udløser den lagrede procedure en undtagelse. Ellers fortsætter resten af den lagrede procedure med at køre.
Denne lagrede procedure bruges som input documentToCreate
, brødteksten i et dokument, der skal oprettes i den aktuelle samling. Alle disse handlinger er asynkrone og afhænger af tilbagekald af JavaScript-funktioner.
var createDocumentStoredProc = {
id: "createMyDocument",
body: function createMyDocument(documentToCreate) {
var context = getContext();
var collection = context.getCollection();
var accepted = collection.createDocument(collection.getSelfLink(),
documentToCreate,
function (err, documentCreated) {
if (err) throw new Error('Error' + err.message);
context.getResponse().setBody(documentCreated.id)
});
if (!accepted) return;
}
}
Matrixer som inputparametre for lagrede procedurer
Når du definerer en lagret procedure på Azure Portal, sendes inputparametre altid som en streng til den lagrede procedure. Selvom du overfører en matrix af strenge som input, konverteres matrixen til en streng og sendes til den lagrede procedure. Du kan løse problemet ved at definere en funktion i den lagrede procedure for at fortolke strengen som en matrix. Følgende kode viser, hvordan du fortolker en strenginputparameter som en matrix:
function sample(arr) {
if (typeof arr === "string") arr = JSON.parse(arr);
arr.forEach(function(a) {
// do something here
console.log(a);
});
}
Afgrænset udførelse
Alle Azure Cosmos DB-handlinger skal fuldføres inden for et begrænset tidsrum. Lagrede procedurer har en begrænset mængde tid til at køre på serveren. Alle samlingsfunktioner returnerer en boolesk værdi, der repræsenterer, om handlingen fuldføres eller ej
Transaktioner i lagrede procedurer
Du kan implementere transaktioner for elementer i en objektbeholder ved hjælp af en lagret procedure. JavaScript-funktioner kan implementere en fortsættelsesbaseret model for at batch- eller genoptage udførelsen. Fortsættelsesværdien kan være en hvilken som helst værdi efter eget valg, og dine programmer kan derefter bruge denne værdi til at genoptage en transaktion fra et nyt udgangspunkt. I følgende diagram kan du se, hvordan fortsættelsesmodellen for transaktioner kan bruges til at gentage en serverbaseret funktion, indtil funktionen er færdig med hele dens behandlingsarbejdsbelastning.