Tworzenie procedur składowanych

Ukończone

Usługa Azure Cosmos DB zapewnia zintegrowane z językiem, transakcyjne wykonywanie kodu JavaScript, które umożliwia pisanie procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika (UDF). Aby wywołać procedurę składowaną, wyzwalacz lub funkcję zdefiniowaną przez użytkownika, należy ją zarejestrować. Aby uzyskać więcej informacji, zobacz Jak pracować z procedurami składowanymi, wyzwalaczami i funkcjami zdefiniowanymi przez użytkownika w usłudze Azure Cosmos DB.

Uwaga

Ta lekcja koncentruje się na procedurach składowanych. W poniższej lekcji omówiono wyzwalacze i funkcje zdefiniowane przez użytkownika.

Pisanie procedur składowanych

Procedury składowane mogą tworzyć, aktualizować, odczytywać, wykonywać zapytania i usuwać elementy wewnątrz kontenera usługi Azure Cosmos. Procedury składowane są rejestrowane w danej kolekcji i mogą operować na dowolnych dokumentach lub załącznikach znajdujących się w tej kolekcji.

Oto prosta procedura składowana zwracająca odpowiedź "Hello World".

var helloWorldStoredProc = {
    id: "helloWorld",
    serverScript: function () {
        var context = getContext();
        var response = context.getResponse();

        response.setBody("Hello, World");
    }
}

Obiekt kontekstu zapewnia dostęp do wszystkich operacji, które można wykonać w usłudze Azure Cosmos DB, oraz dostępu do obiektów żądania i odpowiedzi. W tym przypadku obiekt odpowiedzi jest używany w celu ustawienia wysłania treści odpowiedzi z powrotem do klienta.

Tworzenie elementu za pomocą procedury składowanej

Podczas tworzenia elementu przy użyciu procedury składowanej element jest wstawiany do kontenera usługi Azure Cosmos DB i zwracany jest identyfikator nowo utworzonego elementu. Tworzenie elementu jest operacją asynchroniczną i zależy od funkcji wywołania zwrotnego języka JavaScript. Funkcja wywołania zwrotnego ma dwa parametry: jeden dla obiektu błędu w przypadku niepowodzenia operacji, a drugi dla wartości zwracanej, w tym przypadku utworzonego obiektu. Wewnątrz wywołania zwrotnego można obsłużyć wyjątek lub zgłosić błąd. Jeśli wywołanie zwrotne nie zostanie podane i wystąpi błąd, środowisko uruchomieniowe usługi Azure Cosmos DB zgłasza błąd.

Procedura składowana zawiera również parametr służący do ustawiania opisu jako wartości logicznej. Gdy parametr ma wartość true i brakuje opisu, procedura składowana zgłasza wyjątek. W przeciwnym razie pozostała część procedury składowanej zostanie wykonana.

Ta procedura składowana przyjmuje jako dane wejściowe documentToCreate, treść dokumentu, który ma zostać utworzony w bieżącej kolekcji. Wszystkie takie operacje są asynchroniczne i zależą od wywołań zwrotnych funkcji Języka JavaScript.

var createDocumentStoredProc = {
    id: "createMyDocument",
    body: function createMyDocument(documentToCreate) {
        var context = getContext();
        var collection = context.getCollection();
        var accepted = collection.createDocument(collection.getSelfLink(),
              documentToCreate,
              function (err, documentCreated) {
                  if (err) throw new Error('Error' + err.message);
                  context.getResponse().setBody(documentCreated.id)
              });
        if (!accepted) return;
    }
}

Tablice jako parametry wejściowe dla procedur składowanych

Podczas definiowania procedury składowanej w witrynie Azure Portal parametry wejściowe są zawsze wysyłane jako ciąg do procedury składowanej. Nawet jeśli jako dane wejściowe przekażesz tablicę ciągów, tablica jest konwertowana na ciąg i wysyłana do procedury składowanej. Aby to obejść, można zdefiniować funkcję w swojej procedurze składowanej, aby przeanalizować ciąg jako tablicę. Poniższy kod pokazuje, jak można przeanalizować parametr wejściowy ciągu jako tablicę:

function sample(arr) {
    if (typeof arr === "string") arr = JSON.parse(arr);

    arr.forEach(function(a) {
        // do something here
        console.log(a);
    });
}

Powiązane wykonywanie

Wszystkie operacje usługi Azure Cosmos DB muszą zostać ukończone w ograniczonym czasie. Procedury składowane mają ograniczony czas do uruchomienia na serwerze. Wszystkie funkcje kolekcji zwracają wartość logiczną, która reprezentuje, czy ta operacja zostanie ukończona, czy nie

Transakcje w ramach procedur składowanych

Za pomocą procedury składowanej można zaimplementować transakcje na elementach w kontenerze. Funkcje języka JavaScript mogą implementować model oparty na kontynuacji do wykonywania wsadowego lub wznawiania wykonywania. Wartość kontynuacji może być dowolną wybraną wartością, a aplikacje mogą następnie użyć tej wartości, aby wznowić transakcję od nowego punktu wyjścia. Na poniższym diagramie przedstawiono sposób użycia modelu kontynuacji transakcji w celu powtórzenia funkcji po stronie serwera do momentu zakończenia całego obciążenia przetwarzania przez funkcję.

This diagram depicts how the transaction continuation model can be used to repeat a server-side function until the function finishes its entire processing workload.