Opret lagrede procedurer

Fuldført

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.

Dette diagram viser, hvordan posteringsfortsættelsesmodellen kan bruges til at gentage en serverfunktion, indtil funktionen afslutter hele dens behandlingsarbejdsbelastning.