Sdílet prostřednictvím


Postup registrace a používání uložených procedur, triggerů a funkcí definovaných uživatelem ve službě Azure Cosmos DB

PLATÍ PRO: NoSQL

Rozhraní API pro NoSQL ve službě Azure Cosmos DB podporuje registraci a vyvolání uložených procedur, triggerů a uživatelem definovaných funkcí (UDF) napsaných v JavaScriptu. Po definování jedné nebo více uložených procedur, triggerů nebo uživatelem definovaných funkcí je můžete načíst a zobrazit na webu Azure Portal pomocí Průzkumníka dat.

K těmto úlohám můžete použít rozhraní API pro sadu NoSQL SDK na různých platformách, včetně .NET v2 (starší verze), .NET v3, Java, JavaScriptu nebo sad Python SDK. Pokud jste ještě s některou z těchto sad SDK nepracovali, projděte si článek rychlý start pro příslušnou sadu SDK:

Sada SDK Začínáme
.NET v3 Rychlý start: Klientská knihovna Azure Cosmos DB for NoSQL pro .NET
Java Rychlý start: Vytvoření aplikace v Javě pro správu dat Azure Cosmos DB for NoSQL
JavaScript Rychlý start: Klientská knihovna Azure Cosmos DB for NoSQL pro Node.js
Python Rychlý start: Klientská knihovna Azure Cosmos DB for NoSQL pro Python

Důležité

Následující ukázky kódu předpokládají, že již máte client a container proměnné. Pokud tyto proměnné potřebujete vytvořit, projděte si příslušný rychlý start pro vaši platformu.

Spouštění uložených procedur

Uložené procedury se zapisují pomocí JavaScriptu. Můžou vytvářet, aktualizovat, číst, dotazovat a odstraňovat položky v kontejneru Azure Cosmos DB. Další informace naleznete v tématu Jak psát uložené procedury.

Následující příklady ukazují, jak zaregistrovat a volat uloženou proceduru pomocí sad SDK služby Azure Cosmos DB. Zdroj pro tuto uloženou proceduru uložený jako spCreateToDoItem.js naleznete v tématu Vytváření položek pomocí uložených procedur.

Poznámka:

V případě dělených kontejnerů musíte při spuštění uložené procedury zadat hodnotu klíče oddílu v možnostech požadavku. Uložené procedury jsou vždy vymezeny na klíč oddílu. Položky, které mají jinou hodnotu klíče oddílu, nejsou viditelné pro uloženou proceduru. Tento princip platí také pro triggery.

Následující příklad ukazuje, jak zaregistrovat uloženou proceduru pomocí sady .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;

Následující kód ukazuje, jak volat uloženou proceduru pomocí sady .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 });

Jak spouštět pretriggery

Následující příklady ukazují, jak zaregistrovat a volat pretrigger pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto příkladu pretriggeru, který je uložený jako trgPreValidateToDoItemTimestamp.js, najdete v tématu Pretriggery.

Při spuštění operace zadáním PreTriggerInclude a předáním názvu triggeru v objektu List se předávají pretriggery v objektu RequestOptions .

Poznámka:

I když se název triggeru předává jako název List, stále můžete spustit pouze jednu aktivační událost pro každou operaci.

Následující kód ukazuje, jak zaregistrovat pretrigger pomocí sady .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);

Následující kód ukazuje, jak volat pretrigger pomocí sady .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);

Spuštění triggerů po spuštění

Následující příklady ukazují, jak zaregistrovat trigger po spuštění pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto příkladu po triggeru, který je uložený jako trgPostUpdateMetadata.js, najdete v tématu Post-triggery.

Následující kód ukazuje, jak zaregistrovat post-trigger pomocí sady .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);

Následující kód ukazuje, jak volat post-trigger pomocí sady .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);

Jak pracovat s uživatelem definovanými funkcemi

Následující příklady ukazují, jak zaregistrovat uživatelem definovanou funkci pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto uživatelem definovaného příkladu funkce, který je uložený jako udfTax.js, najdete v tématu Jak psát uživatelem definované funkce.

Následující kód ukazuje, jak zaregistrovat uživatelem definovanou funkci pomocí sady .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);

Následující kód ukazuje, jak volat uživatelem definovanou funkci pomocí sady .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
}

Další kroky

Přečtěte si další koncepty a postupy pro zápis nebo používání uložených procedur, triggerů a uživatelem definovaných funkcí ve službě Azure Cosmos DB: