Come registrare e usare stored procedure, trigger e funzioni definite dall'utente in Azure Cosmos DB
Articolo
SI APPLICA A: NoSQL
Con l'API for NoSQL di Azure Cosmos DB è possibile registrare e richiamare stored procedure, trigger e funzioni definite dall'utente scritte in JavaScript. Dopo aver definito uno o più trigger, stored procedure e funzioni definite dall'utente, è possibile caricarli e visualizzarli nel portale di Azure con Esplora dati.
È possibile usare API for NoSQL SDK in più piattaforme, tra cui gli SDK per .NET v2 (legacy), .NET v3, Java, JavaScripto Python per eseguire queste attività. Se non si è mai usato uno di questi SDK in precedenza, vedere l'articolo di avvio rapido per l'SDK appropriato:
Gli esempi di codice seguenti presuppongono che siano già presenti le variabili client e container. Se è necessario creare queste variabili, vedere l'argomento di avvio rapido appropriato per la piattaforma in uso.
Come eseguire stored procedure
Le stored procedure vengono scritte in JavaScript Possono creare, aggiornare, leggere ed eliminare elementi all'interno di un contenitore Azure Cosmos DB, nonché eseguire query su tali elementi. Per altre informazioni, vedere Come scrivere stored procedure.
Gli esempi seguenti illustrano come registrare e chiamare una stored procedure con gli SDK di Azure Cosmos DB. Per il codice sorgente di questa stored procedure, salvato come spCreateToDoItem.js, vedere Creare elementi usando le stored procedure.
Nota
Per i contenitori partizionati, quando si esegue una stored procedure, è necessario specificare un valore della chiave di partizione nelle opzioni della richiesta. Le stored procedure hanno sempre come ambito una chiave di partizione. Gli elementi con un valore di chiave di partizione diverso non saranno visibili alla stored procedure. Questo principio vale anche per i trigger.
Il codice seguente illustra come chiamare una stored procedure con Python SDK:
import uuid
new_id= str(uuid.uuid4())
# Creating a document for a container with "id" as a partition key.
new_item = {
"id": new_id,
"category":"Personal",
"name":"Groceries",
"description":"Pick up strawberries",
"isComplete":False
}
result = container.scripts.execute_stored_procedure(sproc=created_sproc,params=[new_item], partition_key=new_id)
Come eseguire i pre-trigger
Gli esempi seguenti illustrano come registrare e chiamare un pre-trigger con gli SDK di Azure Cosmos DB. Per il codice sorgente di questo esempio di pre-trigger, salvato come trgPreValidateToDoItemTimestamp.js, vedere Pre-trigger.
Quando si esegue un'operazione specificando PreTriggerInclude e quindi passando il nome del trigger in un oggetto List, i pre-trigger vengono passati nell'oggetto RequestOptions.
Nota
Anche se il nome del trigger viene passato comeList, sarà comunque possibile eseguire un solo trigger per ogni operazione.
Il codice seguente illustra come chiamare un pre-trigger con Python SDK:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Come eseguire post-trigger
Gli esempi seguenti illustrano come registrare un post-trigger con gli SDK di Azure Cosmos DB. Per il codice sorgente di questo esempio di post-trigger, salvato come trgPostUpdateMetadata.js, vedere Post-trigger
Gli esempi seguenti illustrano come registrare una funzione definita dall'utente con gli SDK di Azure Cosmos DB. Per il codice sorgente di questo esempio di funzione definita dall'utente, salvato come udfTax.js, vedere Come scrivere funzioni definite dall'utente.
Il codice seguente illustra come registrare una funzione definita dall'utente con .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);
Il codice seguente illustra come chiamare una funzione definita dall'utente con .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
}
Il codice seguente illustra come registrare una funzione definita dall'utente con .NET SDK v3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Il codice seguente illustra come chiamare una funzione definita dall'utente con .NET SDK v3:
var iterator = client.GetContainer("database", "container").GetItemQueryIterator<dynamic>("SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000");
while (iterator.HasMoreResults)
{
var results = await iterator.ReadNextAsync();
foreach (var result in results)
{
//iterate over results
}
}
Il codice seguente illustra come registrare una funzione definita dall'utente con l'SDK Java: