Udostępnij przez


Jak rejestrować i używać procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika w usłudze Azure Cosmos DB

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 definiowanych przez użytkownika, można załadować je i wyświetlić w 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 Szybki start
.NET v3 Biblioteka klienta Usługi Azure Cosmos DB for NoSQL dla platformy .NET
Java Tworzenie aplikacji Java do zarządzania danymi usługi Azure Cosmos DB for NoSQL
JavaScript Biblioteka klienta usługi Azure Cosmos DB for NoSQL dla Node.js
Python 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 już zmienne client i container. Jeśli musisz utworzyć te zmienne, zapoznaj się z odpowiednim przewodnikiem szybkiego startu dla swojej platformy.

Jak uruchamiać procedury składowane

Procedury składowane są pisane 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.

W poniższych przykładach pokazano, jak zarejestrować i wywołać procedurę składowaną przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby uzyskać źródło tego przykładu, zapisane jako spCreateToDoItem.js, zobacz Tworzenie elementów przy użyciu procedur składowanych.

Uwaga / Notatka

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ć wyzwalacze wstępne

W poniższych przykładach pokazano, jak zarejestrować i wywołać wyzwalacz wstępny przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby uzyskać informacje o źródle tego przykładu wyzwalacza wstępnego, zapisanego jako trgPreValidateToDoItemTimestamp.js, zobacz Wyzwalacze wstępne.

Podczas uruchamiania operacji poprzez określenie PreTriggerInclude i następnie przekazanie nazwy wyzwalacza w obiekcie List, wyzwalacze wstępne są przekazywane w obiekcie RequestOptions.

Uwaga / Notatka

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

Poniższy kod pokazuje, jak zarejestrować wyzwalacz wstępny przy użyciu zestawu .NET SDK 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ć wyzwalacz wstępny przy użyciu zestawu .NET SDK 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 końcowe

W poniższych przykładach pokazano, jak zarejestrować wyzwalacz końcowy przy użyciu SDK Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu wyzwalacza po aktualizacji, zapisanego jako trgPostUpdateMetadata.js, zobacz Post-triggers (Wyzwalacze po aktualizacji)

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 wyzwać post-trigger 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

Na poniższych przykładach pokazano, jak zarejestrować UDF przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby uzyskać źródło tego przykładu, zapisane 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
}

Dalsze kroki