Opgeslagen procedures maken

Voltooid

Azure Cosmos DB biedt taalgeïntegreerde, transactionele uitvoering van JavaScript waarmee u opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies (UDF's) kunt schrijven. Als u een opgeslagen procedure, trigger of door de gebruiker gedefinieerde functie wilt aanroepen, moet u deze registreren. Zie Werken met opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies in Azure Cosmos DB voor meer informatie.

Notitie

Deze les is gericht op opgeslagen procedures. In de volgende les worden triggers en door de gebruiker gedefinieerde functies behandeld.

Opgeslagen procedures schrijven

Opgeslagen procedures kunnen items in een Azure Cosmos-container maken, bijwerken, lezen, opvragen en verwijderen. Opgeslagen procedures worden geregistreerd per verzameling en kunnen worden uitgevoerd op elk document of een in deze verzameling aanwezige bijlage.

Hier volgt een eenvoudige opgeslagen procedure die een antwoord 'Hallo wereld' retourneert.

var helloWorldStoredProc = {
    id: "helloWorld",
    serverScript: function () {
        var context = getContext();
        var response = context.getResponse();

        response.setBody("Hello, World");
    }
}

Het contextobject biedt toegang tot alle bewerkingen die kunnen worden uitgevoerd in Azure Cosmos DB en toegang tot de aanvraag- en antwoordobjecten. U gebruikt in dit geval het antwoordobject om de hoofdtekst van het antwoord in te stellen dat terug naar de client wordt verzonden.

Een item maken met behulp van opgeslagen procedure

Wanneer u een item maakt met behulp van een opgeslagen procedure, wordt het item ingevoegd in de Azure Cosmos DB-container en wordt een id voor het zojuist gemaakte item geretourneerd. Het maken van een item is een asynchrone bewerking en is afhankelijk van de callback-functies van JavaScript. De callback-functie heeft twee parameters: een voor het foutobject als de bewerking mislukt en een andere voor een retourwaarde, in dit geval het gemaakte object. Binnen de callback kunt u de uitzondering verwerken of een fout genereren. Als er geen callback is opgegeven en er een fout optreedt, genereert de Azure Cosmos DB-runtime een fout.

De opgeslagen procedure bevat ook een parameter om de beschrijving in te stellen als een Booleaanse waarde. Wanneer de parameter is ingesteld op true en de beschrijving ontbreekt, genereert de opgeslagen procedure een uitzondering. Anders gaat de uitvoering van de rest van de opgeslagen procedure verder.

Deze opgeslagen procedure neemt als invoer documentToCreate, de hoofdtekst van een document dat in de huidige verzameling moet worden gemaakt. Al deze bewerkingen zijn asynchroon en zijn afhankelijk van callbacks van JavaScript-functies.

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;
    }
}

Matrices als invoerparameters voor opgeslagen procedures

Bij het definiëren van een opgeslagen procedure in Azure Portal worden invoerparameters altijd als een tekenreeks naar de opgeslagen procedure verzonden. Zelfs als u een matrix met tekenreeksen als invoer doorgeeft, wordt de matrix geconverteerd naar een tekenreeks en verzonden naar de opgeslagen procedure. Om dit te omzeilen kunt u een functie definiëren binnen de opgeslagen procedure voor het parseren van de tekenreeks als matrix. De volgende code laat zien hoe u een invoerparameter van de tekenreeks als matrix kunt parseren:

function sample(arr) {
    if (typeof arr === "string") arr = JSON.parse(arr);

    arr.forEach(function(a) {
        // do something here
        console.log(a);
    });
}

Gebonden uitvoering

Alle Azure Cosmos DB-bewerkingen moeten binnen een beperkte tijd worden voltooid. Opgeslagen procedures hebben een beperkte hoeveelheid tijd om op de server uit te voeren. Alle verzamelingsfuncties retourneren een Booleaanse waarde die aangeeft of die bewerking is voltooid of niet

Transacties in opgeslagen procedures

U kunt transacties implementeren in items in een container met behulp van een opgeslagen procedure. JavaScript-functies kunnen een vervolgmodel implementeren om de uitvoering te batcheren of te hervatten. De vervolgwaarde kan elke waarde van uw keuze zijn en uw toepassingen kunnen deze waarde vervolgens gebruiken om een transactie vanaf een nieuw uitgangspunt te hervatten. In het volgende diagram ziet u hoe het transactievervolgmodel kan worden gebruikt om een functie aan de serverzijde te herhalen totdat de functie de volledige verwerkingsworkload heeft voltooid.

This diagram depicts how the transaction continuation model can be used to repeat a server-side function until the function finishes its entire processing workload.