Como registrar e usar procedimentos armazenados, gatilhos e funções definidas pelo usuário no Azure Cosmos DB
Artigo
APLICA-SE A: NoSQL
A API para NoSQL no Azure Cosmos DB dá suporte ao registro e invocação de procedimentos armazenados, gatilhos e UDFs (funções definidas pelo usuário) escritos em JavaScript. Após definir um ou mais procedimentos armazenados, gatilhos ou funções definidas pelo usuário, você pode carregá-los e exibi-los no portal do Azure usando o Data Explorer.
Você pode usar o SDK de API para NoSQL em várias plataformas, incluindo SDKs .NET v2 (herdado), .NET v3, Java, JavaScript ou Python para fazer essas tarefas. Se você nunca trabalhou com um desses SDKs antes, confira o artigo início rápido para o SDK apropriado:
Os exemplos de código a seguir pressupõem que você já tenha client e container variáveis. Se você precisar criar essas variáveis, consulte o início rápido apropriado para sua plataforma.
Como executar procedimentos armazenados
Os procedimentos armazenados são escritos usando JavaScript. Eles podem criar, atualizar, ler, consultar e excluir itens dentro de um contêiner do Azure Cosmos DB. Para obter mais informações, consulte Como gravar procedimentos armazenados.
Os exemplos a seguir mostram como registrar e chamar um procedimento armazenado usando os SDKs do Azure Cosmos DB. Para a origem deste procedimento armazenado, salvo como spCreateToDoItem.js, consulte Criar itens usando procedimentos armazenados.
Observação
Para contêineres particionados, quando você executa um procedimento armazenado, você deve fornecer um valor chave de partição nas opções de solicitação. O escopo dos procedimentos armazenados sempre é uma chave de partição. Os itens com um valor de chave de partição diferente não são visíveis para o procedimento armazenado. Este princípio também se aplica aos gatilhos.
O código a seguir mostra como chamar um procedimento armazenado usando o SDK do Python:
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)
Como executar os pré-disparadores
Os exemplos a seguir mostram como registrar e chamar um pré-disparador usando os SDKs do Azure Cosmos DB. Para a origem deste exemplo de pré-disparador, salvo como trgPreValidateToDoItemTimestamp.js, consulte Pré-disparadores.
Quando você executa uma operação especificando PreTriggerInclude e passando o nome do gatilho em um objeto List, os pré-disparadores são passados no objeto RequestOptions.
Observação
Mesmo que o nome do gatilho seja transmitido como uma List, você ainda é pode executar apenas um gatilho por operação.
O código a seguir mostra como chamar um pré-disparador usando o SDK do Python:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Como executar pós-gatilhos
Os exemplos a seguir mostram como registrar um pós-gatilho usando os SDKs do Azure Cosmos DB. Para a origem deste exemplo de pós-gatilho, salvo como trgPostUpdateMetadata.js, consulte Pós-gatilhos
Os exemplos a seguir mostram como registrar uma função definida pelo usuário usando os SDKs do Azure Cosmos DB. Para a origem deste exemplo de função definida pelo usuário, salvo como udfTax.js, consulte Como gravar funções definidas pelo usuário.
O seguinte código mostra como registrar uma função definida pelo usuário usando o SDK do .NET 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);
O seguinte código mostra como chamar uma função definida pelo usuário usando o SDK do .NET 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
}
O seguinte código mostra como registrar uma função definida pelo usuário usando o SDK do .NET v3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
O seguinte código mostra como chamar uma função definida pelo usuário usando o SDK do .NET 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
}
}
O código a seguir mostra como registrar uma função definida pelo usuário usando o SDK do Java:
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulte https://aka.ms/ContentUserFeedback.