Registrera och använda lagrade procedurer, utlösare och användardefinierade funktioner i Azure Cosmos DB

GÄLLER FÖR: NoSQL

API:et för NoSQL i Azure Cosmos DB stöder registrering och anropande av lagrade procedurer, utlösare och användardefinierade funktioner (UDF:er) som skrivits i JavaScript. När du har definierat en eller flera lagrade procedurer, utlösare eller användardefinierade funktioner kan du läsa in och visa dem i Azure-portalen med datautforskaren .

Du kan använda API:et för NoSQL SDK på flera plattformar, inklusive .NET v2 (äldre), .NET v3, Java, JavaScript eller Python SDK:er för att utföra dessa uppgifter. Om du inte har arbetat med någon av dessa SDK:er tidigare kan du läsa snabbstartsartikeln för lämplig SDK:

SDK Komma igång
.NET v3 Snabbstart: Azure Cosmos DB för NoSQL-klientbibliotek för .NET
Java Snabbstart: Skapa en Java-app för att hantera Azure Cosmos DB för NoSQL-data
JavaScript Snabbstart: Azure Cosmos DB för NoSQL-klientbibliotek för Node.js
Python Snabbstart: Azure Cosmos DB för NoSQL-klientbibliotek för Python

Viktigt!

Följande kodexempel förutsätter att du redan har client och container variabler. Om du behöver skapa dessa variabler kan du läsa lämplig snabbstart för din plattform.

Köra lagrade procedurer

Lagrade procedurer är skrivna med JavaScript. De kan skapa, uppdatera, läsa, fråga och ta bort objekt i en Azure Cosmos DB-container. Mer information finns i Skriva lagrade procedurer.

Följande exempel visar hur du registrerar och anropar en lagrad procedur med hjälp av Azure Cosmos DB SDK:er. Källan för den här lagrade proceduren, som sparats som spCreateToDoItem.js, finns i Skapa objekt med lagrade procedurer.

Kommentar

När du kör en lagrad procedur för partitionerade containrar måste du ange ett partitionsnyckelvärde i begärandealternativen. Lagrade procedurer är alltid begränsade till en partitionsnyckel. Objekt som har ett annat partitionsnyckelvärde är inte synliga för den lagrade proceduren. Den här principen gäller även för utlösare.

I följande exempel visas hur du registrerar en lagrad procedur med hjälp av .NET SDK v2:

string storedProcedureId = "spCreateToDoItems";
StoredProcedure newStoredProcedure = new StoredProcedure
   {
       Id = storedProcedureId,
       Body = File.ReadAllText($@"..\js\{storedProcedureId}.js")
   };
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
var response = await client.CreateStoredProcedureAsync(containerUri, newStoredProcedure);
StoredProcedure createdStoredProcedure = response.Resource;

Följande kod visar hur du anropar en lagrad procedur med hjälp av .NET SDK v2:

dynamic[] newItems = new dynamic[]
{
    new {
        category = "Personal",
        name = "Groceries",
        description = "Pick up strawberries",
        isComplete = false
    },
    new {
        category = "Personal",
        name = "Doctor",
        description = "Make appointment for check up",
        isComplete = false
    }
};

Uri uri = UriFactory.CreateStoredProcedureUri("myDatabase", "myContainer", "spCreateToDoItem");
RequestOptions options = new RequestOptions { PartitionKey = new PartitionKey("Personal") };
var result = await client.ExecuteStoredProcedureAsync<string>(uri, options, new[] { newItems });

Så här kör du pretriggers

I följande exempel visas hur du registrerar och anropar en pretrigger med hjälp av Azure Cosmos DB SDK:er. Källan till det här pretriggerexemplet, som sparats som trgPreValidateToDoItemTimestamp.js, finns i Pretriggers.

När du kör en åtgärd genom att PreTriggerInclude ange och sedan skicka namnet på utlösaren i ett List objekt skickas pretriggers i RequestOptions objektet.

Kommentar

Även om namnet på utlösaren skickas som en Listkan du fortfarande bara köra en utlösare per åtgärd.

Följande kod visar hur du registrerar en pretrigger med hjälp av .NET SDK v2:

string triggerId = "trgPreValidateToDoItemTimestamp";
Trigger trigger = new Trigger
{
    Id =  triggerId,
    Body = File.ReadAllText($@"..\js\{triggerId}.js"),
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Pre
};
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateTriggerAsync(containerUri, trigger);

Följande kod visar hur du anropar en pretrigger med hjälp av .NET SDK v2:

dynamic newItem = new
{
    category = "Personal",
    name = "Groceries",
    description = "Pick up strawberries",
    isComplete = false
};

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
RequestOptions requestOptions = new RequestOptions { PreTriggerInclude = new List<string> { "trgPreValidateToDoItemTimestamp" } };
await client.CreateDocumentAsync(containerUri, newItem, requestOptions);

Så här kör du efterutlösare

Följande exempel visar hur du registrerar en efterutlösare med hjälp av Azure Cosmos DB SDK:er. Källan till det här exemplet efter utlösaren, som sparats som trgPostUpdateMetadata.js, finns i Post-triggers (Efterutlösare)

Följande kod visar hur du registrerar en efterutlösare med hjälp av .NET SDK v2:

string triggerId = "trgPostUpdateMetadata";
Trigger trigger = new Trigger
{
    Id = triggerId,
    Body = File.ReadAllText($@"..\js\{triggerId}.js"),
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Post
};
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateTriggerAsync(containerUri, trigger);

Följande kod visar hur du anropar en efterutlösare med hjälp av .NET SDK v2:

var newItem = { 
    name: "artist_profile_1023",
    artist: "The Band",
    albums: ["Hellujah", "Rotators", "Spinning Top"]
};

RequestOptions options = new RequestOptions { PostTriggerInclude = new List<string> { "trgPostUpdateMetadata" } };
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.createDocumentAsync(containerUri, newItem, options);

Arbeta med användardefinierade funktioner

Följande exempel visar hur du registrerar en användardefinierad funktion med hjälp av Azure Cosmos DB SDK:er. Källan till det här användardefinierade funktionsexemplet, som sparats som udfTax.js, finns i Så här skriver du användardefinierade funktioner.

Följande kod visar hur du registrerar en användardefinierad funktion med hjälp av .NET SDK v2:

string udfId = "Tax";
var udfTax = new UserDefinedFunction
{
    Id = udfId,
    Body = File.ReadAllText($@"..\js\{udfId}.js")
};

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateUserDefinedFunctionAsync(containerUri, udfTax);

Följande kod visar hur du anropar en användardefinierad funktion med hjälp av .NET SDK v2:

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
var results = client.CreateDocumentQuery<dynamic>(containerUri, "SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000"));

foreach (var result in results)
{
    //iterate over results
}

Nästa steg

Lär dig mer om begrepp och hur du skriver och använder lagrade procedurer, utlösare och användardefinierade funktioner i Azure Cosmos DB: