Opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies registreren en gebruiken in Azure Cosmos DB

VAN TOEPASSING OP: NoSQL

De API voor NoSQL in Azure Cosmos DB biedt ondersteuning voor het registreren en aanroepen van opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies (UDF's) die zijn geschreven in JavaScript. Nadat u een of meer opgeslagen procedures, triggers of door de gebruiker gedefinieerde functies hebt gedefinieerd, kunt u deze laden en weergeven in Azure Portal met behulp van Data Explorer.

U kunt de API voor NoSQL SDK op meerdere platforms gebruiken, waaronder .NET v2 (verouderd), .NET v3, Java, JavaScript of Python SDK's om deze taken uit te voeren. Als u nog niet eerder met een van deze SDK's hebt gewerkt, raadpleegt u het quickstart-artikel voor de juiste SDK:

SDK Aan de slag
.NET v3 Quickstart: Azure Cosmos DB for NoSQL-clientbibliotheek voor .NET
Java Quickstart: Een Java-app bouwen om Azure Cosmos DB for NoSQL-gegevens te beheren
JavaScript Quickstart: Azure Cosmos DB for NoSQL-clientbibliotheek voor Node.js
Python Quickstart: Azure Cosmos DB for NoSQL-clientbibliotheek voor Python

Belangrijk

In de volgende codevoorbeelden wordt ervan uitgegaan dat u al over en container variabelen beschiktclient. Als u deze variabelen wilt maken, raadpleegt u de juiste quickstart voor uw platform.

Opgeslagen procedures uitvoeren

Opgeslagen procedures worden geschreven met behulp van JavaScript. Ze kunnen items in een Azure Cosmos DB-container maken, bijwerken, lezen, opvragen en verwijderen. Zie Opgeslagen procedures schrijven voor meer informatie.

De volgende voorbeelden laten zien hoe u een opgeslagen procedure registreert en aanroept met behulp van de Azure Cosmos DB-SDK's. Zie Items maken met behulp van opgeslagen procedures voor de bron voor deze opgeslagen procedure, opgeslagen als spCreateToDoItem.js.

Notitie

Wanneer u een opgeslagen procedure uitvoert, moet u voor gepartitioneerde containers een partitiesleutelwaarde opgeven in de aanvraagopties. Opgeslagen procedures zijn altijd gerelateerd aan een partitiesleutel. Items met een andere partitiesleutelwaarde zijn niet zichtbaar voor de opgeslagen procedure. Dit principe is ook van toepassing op triggers.

In het volgende voorbeeld ziet u hoe u een opgeslagen procedure registreert met behulp van de .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;

De volgende code laat zien hoe u een opgeslagen procedure aanroept met behulp van de .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 });

Pretriggers uitvoeren

In de volgende voorbeelden ziet u hoe u een pretrigger registreert en aanroept met behulp van de Azure Cosmos DB SDK's. Zie Pretriggers voor de bron van deze pretrigger, opgeslagen als trgPreValidateToDoItemTimestamp.js.

Wanneer u een bewerking uitvoert door de naam van de trigger in een List object op te PreTriggerInclude geven en vervolgens door te geven, worden pretriggers doorgegeven aan het RequestOptions object.

Notitie

Hoewel de naam van de trigger wordt doorgegeven als een List, kunt u nog steeds slechts één trigger per bewerking uitvoeren.

De volgende code laat zien hoe u een pretrigger registreert met behulp van de .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);

De volgende code laat zien hoe u een pretrigger aanroept met behulp van de .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);

Navolgende triggers uitvoeren

De volgende voorbeelden laten zien hoe u een navolgende trigger registreert met behulp van de Azure Cosmos DB-SDK's. Zie Post-triggers voor de bron van dit voorbeeld na de trigger, opgeslagen als trgPostUpdateMetadata.js

De volgende code laat zien hoe u een posttrigger registreert met behulp van de .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);

De volgende code laat zien hoe u een post-trigger aanroept met behulp van de .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);

Werken met door de gebruiker gedefinieerde functies

De volgende voorbeelden laten zien hoe u een door de gebruiker gedefinieerde functie registreert met behulp van de Azure Cosmos DB-SDK's. Zie Voor de bron van dit door de gebruiker gedefinieerde functievoorbeeld, opgeslagen als udfTax.js, hoe u door de gebruiker gedefinieerde functies schrijft.

De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie registreert met behulp van de .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);

De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie aanroept met behulp van de .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
}

Volgende stappen

Meer informatie over concepten en het schrijven of gebruiken van procedures, triggers en door de gebruiker gedefinieerde functies in Azure Cosmos DB: