Delen via


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 UDF's 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 Snelstart
.NET v3 Azure Cosmos DB voor NoSQL-clientbibliotheek voor .NET
Java Een Java-app bouwen om Azure Cosmos DB for NoSQL-gegevens te beheren
Javascript Azure Cosmos DB-clientbibliotheek voor NoSQL voor Node.js
Python Azure Cosmos DB for NoSQL-clientbibliotheek voor Python

Belangrijk

In de volgende codevoorbeelden wordt ervan uitgegaan dat u al over de variabelen client en container beschikt. 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. Voor meer informatie, zie Hoe u opgeslagen procedures schrijft.

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 van dit voorbeeld, 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 });

Hoe pre-triggers uit te voeren

In de volgende voorbeelden ziet u hoe u een pretrigger registreert en aanroept met behulp van de Azure Cosmos DB SDK's. Zie Pre-triggers voor de bron van dit pre-triggervoorbeeld, opgeslagen als trgPreValidateToDoItemTimestamp.js.

Wanneer u een bewerking uitvoert door op te geven met PreTriggerInclude, en vervolgens de naam van de trigger doorgeeft in een List-object, worden pre-triggers doorgegeven in 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);

Hoe post-triggers uit te voeren

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

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

In de volgende voorbeelden ziet u hoe u een UDF registreert met behulp van de Azure Cosmos DB SDK's. Zie Voor de bron van dit voorbeeld, 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