Registro y uso de procedimientos almacenados, desencadenadores y funciones definidas por el usuario en Azure Cosmos DB
Artículo
SE APLICA A: NoSQL
La API para NoSQL en Azure Cosmos DB admite el registro e invocación de procedimientos almacenados, desencadenadores y funciones definidas por el usuario (UDF) escritas en JavaScript. Después de que defina uno o varios procedimientos, desencadenadores y funciones definidas por el usuario, puede cargarlos y verlos en Azure Portal mediante Data Explorer.
Puede usar el SDK de API para NoSQL en varias plataformas, como los SDK de .NET v2 (heredado), .NET v3, Java, JavaScript o Python para realizar estas tareas. Si no ha trabajado con uno de estos SDK antes, consulte el artículo Inicio rápido para ver el SDK adecuado:
En los ejemplos de código siguientes se supone que ya tiene las variables client y container. Si necesita crear esas variables, consulte el inicio rápido adecuado para la plataforma.
Ejecución de procedimientos almacenados
Los procedimientos almacenados se escriben con JavaScript. Pueden crear, actualizar, leer, consultar y eliminar elementos dentro de un contenedor de Azure Cosmos DB. Para obtener más información, vea Cómo escribir procedimientos almacenados.
Los ejemplos siguientes muestran cómo registrar y llamar a un procedimiento almacenado mediante los SDK de Azure Cosmos DB. Para el origen de este procedimiento almacenado, guardado como spCreateToDoItem.js, consulte Creación de elementos mediante procedimientos almacenados.
Nota:
Para los contenedores con particiones, al ejecutar un procedimiento almacenado, debe proporcionar un valor de clave de partición en las opciones de solicitud. Los procedimientos almacenados siempre se limitan a una clave de partición. Los elementos que tienen un valor de clave de partición diferente no están visibles para el procedimiento almacenado. Este principio se aplica también a los desencadenadores.
El siguiente código muestra cómo llamar a un procedimiento almacenado mediante el SDK de 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)
Ejecución de desencadenadores previos
Los ejemplos siguientes muestran cómo registrar y llamar a un desencadenador previo mediante los SDK de Azure Cosmos DB. Para obtener el origen de este ejemplo de desencadenador previo, guardado como trgPreValidateToDoItemTimestamp.js, consulte Desencadenadores previos.
Cuando ejecuta una operación al especificar PreTriggerInclude y pasar el nombre del desencadenador en un objeto List, los desencadenadores previos se pasan en el objeto RequestOptions.
Nota:
Aunque el nombre del desencadenador se pasa como List, puede ejecutar solo un desencadenador por cada operación.
El código siguiente muestra cómo llamar a un desencadenador previo mediante el SDK de Python:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Ejecución de desencadenadores posteriores
Los ejemplos siguientes muestran cómo registrar un desencadenador posterior mediante los SDK de Azure Cosmos DB. Para obtener el origen de este ejemplo de desencadenador posterior, guardado como trgPostUpdateMetadata.js, consulte Desencadenadores posteriores
Los ejemplos siguientes muestran cómo registrar una función definida por el usuario mediante los SDK de Azure Cosmos DB. Para obtener el origen de este ejemplo de función definida por el usuario, guardado como udfTax.js, vea Cómo escribir funciones definidas por el usuario.
El código siguiente muestra cómo registrar una función definida por el usuario mediante el SDK de .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);
El código siguiente muestra cómo llamar a una función definida por el usuario mediante el SDK de .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
}
El código siguiente muestra cómo registrar una función definida por el usuario mediante el SDK de .NET v3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
El código siguiente muestra cómo llamar a una función definida por el usuario mediante el SDK de .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
}
}
El código siguiente muestra cómo registrar una función definida por el usuario mediante el SDK de Java: