Jak rejestrować procedury składowane, wyzwalacze i funkcje zdefiniowane przez użytkownika oraz jak ich używać w usłudze Azure Cosmos DB

DOTYCZY: NoSQL

Interfejs API for NoSQL w usłudze Azure Cosmos DB obsługuje rejestrowanie i wywoływanie procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika (UDF) napisanych w języku JavaScript. Po zdefiniowaniu co najmniej jednej procedury składowanych, wyzwalaczy lub funkcji zdefiniowanych przez użytkownika można załadować i wyświetlić je w witrynie Azure Portal przy użyciu Eksploratora danych.

Do wykonywania tych zadań można użyć interfejsu API dla zestawu SDK NoSQL na wielu platformach, w tym .NET v2 (starsza wersja), .NET v3, JavaScript lub Python SDK. Jeśli wcześniej nie pracowaliśmy z jednym z tych zestawów SDK, zapoznaj się z artykułem Szybki start dotyczącym odpowiedniego zestawu SDK:

SDK Wprowadzenie
.NET v3 Szybki start: biblioteka klienta usługi Azure Cosmos DB for NoSQL dla platformy .NET
Java Szybki start: tworzenie aplikacji Java do zarządzania danymi usługi Azure Cosmos DB for NoSQL
JavaScript Szybki start: biblioteka klienta usługi Azure Cosmos DB for NoSQL dla Node.js
Python Szybki start: biblioteka klienta usługi Azure Cosmos DB for NoSQL dla języka Python

Ważne

W poniższych przykładach kodu przyjęto założenie, że masz client już zmienne i container . Jeśli musisz utworzyć te zmienne, zapoznaj się z odpowiednim przewodnikiem Szybki start dla swojej platformy.

Jak uruchamiać procedury składowane

Procedury składowane pisze się przy użyciu języka JavaScript. Mogą tworzyć, aktualizować, odczytywać, wykonywać zapytania i usuwać elementy w kontenerze usługi Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz Jak pisać procedury składowane.

Poniższe przykłady pokazują, jak zarejestrować i wywoływać procedurę składowaną przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby użyć źródła dla tej procedury składowanej zapisanej jako spCreateToDoItem.js, zobacz Tworzenie elementów przy użyciu procedur składowanych.

Uwaga

W przypadku kontenerów partycjonowanych podczas uruchamiania procedury składowanej należy podać wartość klucza partycji w opcjach żądania. Procedury składowane są zawsze ograniczone do klucza partycji. Elementy, które mają inną wartość klucza partycji, nie są widoczne dla procedury składowanej. Ta zasada dotyczy również wyzwalaczy.

W poniższym przykładzie pokazano, jak zarejestrować procedurę składowaną przy użyciu zestawu .NET SDK w wersji 2:

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;

Poniższy kod pokazuje, jak wywołać procedurę składowaną przy użyciu zestawu .NET SDK w wersji 2:

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 uruchamiać pretriggers

W poniższych przykładach pokazano, jak zarejestrować i wywołać pretrigger przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu pretrigger zapisanego jako trgPreValidateToDoItemTimestamp.js, zobacz Pretriggers (Pretriggers).

Po uruchomieniu operacji przez PreTriggerInclude określenie, a następnie przekazanie nazwy wyzwalacza w List obiekcie, pretriggers są przekazywane w RequestOptions obiekcie.

Uwaga

Mimo że nazwa wyzwalacza jest przekazywana jako List, nadal można uruchomić tylko jeden wyzwalacz na operację.

Poniższy kod pokazuje, jak zarejestrować wstępne narzędzie przy użyciu zestawu SDK platformy .NET w wersji 2:

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);

Poniższy kod pokazuje, jak wywołać pretrigger przy użyciu zestawu SDK platformy .NET w wersji 2:

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);

Jak uruchamiać wyzwalacze wywoływane po operacji

Poniższe przykłady pokazują, jak zarejestrować wyzwalacz uruchamiany po operacji przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu po wyzwoleniu zapisanym jako trgPostUpdateMetadata.js, zobacz Post-triggers (Wyzwalacze po wyzwoleniu)

Poniższy kod pokazuje, jak zarejestrować wyzwalacz po operacji przy użyciu zestawu .NET SDK w wersji 2:

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);

Poniższy kod pokazuje, jak wywołać wyzwalacz po operacji przy użyciu zestawu .NET SDK w wersji 2:

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 pracować z funkcjami zdefiniowanymi przez użytkownika

Poniższe przykłady pokazują, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu funkcji zdefiniowanej przez użytkownika, zapisanego jako udfTax.js, zobacz How to write user-defined functions (Jak zapisywać funkcje zdefiniowane przez użytkownika).

Poniższy kod pokazuje, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 2:

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);

Poniższy kod pokazuje, jak wywołać funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 2:

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
}

Następne kroki

Poznaj dodatkowe pojęcia i dowiedz się, jak pisać procedury składowane, wyzwalacze i funkcje zdefiniowane przez użytkownika w usłudze Azure Cosmos DB: