Compartilhar via


Como registrar e usar procedimentos armazenados, gatilhos e funções definidas pelo usuário no Azure Cosmos DB

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. Depois de definir um ou mais procedimentos armazenados, gatilhos ou UDFs, você poderá carregá-los e exibi-los no portal do Azure usando o Data Explorer.

Você pode usar a API para SDK do NoSQL em várias plataformas, incluindo SDKs do .NET v2 (herdado),.NET v3, Java, JavaScript ou Python para realizar essas tarefas. Se você ainda não trabalhou com um desses SDKs antes, consulte o artigo de início rápido para o SDK apropriado:

SDK Início Rápido
.NET v3 Biblioteca de cliente do Azure Cosmos DB para NoSQL no .NET
Java Criar um aplicativo Java para gerenciar dados do Azure Cosmos DB para NoSQL
JavaScript Biblioteca de clientes do Azure Cosmos DB para NoSQL para Node.js
Python Biblioteca de clientes do Azure Cosmos DB para NoSQL para Python

Importante

Os exemplos de código a seguir pressupõem que você já tem client e container variáveis. Se você precisar criar essas variáveis, consulte o guia de início rápido adequado para sua plataforma.

Como executar procedimentos armazenados

Os procedimentos armazenados são escritos em JavaScript. Eles podem criar, atualizar, ler, consultar e excluir itens em 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 obter a origem deste exemplo, salvo como spCreateToDoItem.js, consulte Criar itens usando procedimentos armazenados.

Observação

Para contêineres particionados, ao executar um procedimento armazenado, você deve fornecer um valor de chave de partição nas opções de solicitação. Os procedimentos armazenados são sempre associados a uma chave de partição. Os itens que têm um valor de chave de partição diferente não são visíveis para o procedimento armazenado. Esse princípio também se aplica a gatilhos.

O exemplo a seguir mostra como registrar um procedimento armazenado usando o SDK do .NET 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;

O código a seguir mostra como chamar um procedimento armazenado usando o SDK do .NET 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 });

Como executar pré-gatilhos

Os exemplos a seguir mostram como registrar e chamar um pré-acionador usando os SDKs do Azure Cosmos DB. Para obter a origem desse exemplo de pré-gatilho, salvo como trgPreValidateToDoItemTimestamp.js, consulte Pré-gatilhos.

Quando você executa uma operação especificando PreTriggerInclude e, em seguida, passa o nome do desencadeador em um objeto List, os pré-desencadeadores são passados em objetos RequestOptions.

Observação

Mesmo que o nome do gatilho seja passado como um List, você ainda pode executar apenas um gatilho por operação.

O código a seguir mostra como registrar um pré-gatilho usando o SDK do .NET 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);

O código a seguir mostra como chamar um pré-gatilho usando o .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);

Como executar gatilhos pós-processamento

Os exemplos a seguir mostram como registrar um trigger pós-execução usando os SDKs do Azure Cosmos DB. Para obter a origem desse exemplo pós-gatilho, salvo como trgPostUpdateMetadata.js, consulte Post-triggers

O código a seguir mostra como registrar um disparador pós-uso do SDK do .NET 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);

O código a seguir mostra como chamar um gatilho pós-processamento usando o .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);

Como trabalhar com funções definidas pelo usuário

Os exemplos a seguir mostram como registrar uma UDF usando os SDKs do Azure Cosmos DB. Para obter a origem deste exemplo, salvo como udfTax.js, consulte Como escrever funções definidas pelo usuário.

O código a seguir 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 código a seguir 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
}

Próximas etapas