Vytvoření uložených procedur

Dokončeno

Azure Cosmos DB poskytuje jazykově integrované transakční spouštění JavaScriptu, které umožňuje psát uložené procedury, triggery a uživatelem definované funkce (UDF). Pokud chcete volat uloženou proceduru, trigger nebo uživatelem definovanou funkci, musíte ji zaregistrovat. Další informace najdete v tématu Práce s uloženými procedurami, triggery, uživatelem definovanými funkcemi ve službě Azure Cosmos DB.

Poznámka:

Tato lekce se zaměřuje na uložené procedury. Následující lekce se zabývá triggery a uživatelem definovanými funkcemi.

Zápis uložených procedur

Uložené procedury můžou vytvářet, aktualizovat, číst, dotazovat a odstraňovat položky uvnitř kontejneru Azure Cosmos. Uložené procedury jsou registrovány na kolekci a mohou pracovat s libovolným dokumentem nebo přílohou, která je v této kolekci.

Tady je jednoduchá uložená procedura, která vrací odpověď "Hello World".

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

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

Kontextový objekt poskytuje přístup ke všem operacím, které je možné provádět ve službě Azure Cosmos DB, a přístup k objektům požadavků a odpovědí. V tomto případě použijete objekt odpovědi k nastavení textu odpovědi, která se má odeslat zpět klientovi.

Vytvoření položky pomocí uložené procedury

Když vytvoříte položku pomocí uložené procedury, položka se vloží do kontejneru Azure Cosmos DB a vrátí se ID nově vytvořené položky. Vytvoření položky je asynchronní operace a závisí na funkcích zpětného volání JavaScriptu. Funkce zpětného volání má dva parametry: jeden pro objekt chyby v případě selhání operace a druhý pro návratovou hodnotu, v tomto případě vytvořený objekt. Uvnitř zpětného volání můžete zpracovat výjimku nebo vyvolat chybu. Pokud zpětné volání není k dispozici a dojde k chybě, modul runtime Služby Azure Cosmos DB vyvolá chybu.

Uložená procedura obsahuje také parametr, který nastaví popis jako logickou hodnotu. Pokud je parametr nastaven na hodnotu true a popis chybí, uložená procedura vyvolá výjimku. V opačném případě se zbývající uložená procedura bude dál spouštět.

Tato uložená procedura přebírá jako vstup documentToCreatetext dokumentu, který se má vytvořit v aktuální kolekci. Všechny tyto operace jsou asynchronní a závisí na zpětných voláních funkcí JavaScriptu.

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

Pole jako vstupní parametry pro uložené procedury

Při definování uložené procedury na webu Azure Portal se vstupní parametry vždy odesílají jako řetězec do uložené procedury. I když jako vstup předáte pole řetězců, pole se převede na řetězec a odešle se do uložené procedury. Pokud chcete tento problém obejít, můžete definovat funkci v rámci uložené procedury pro parsování řetězce jako pole. Následující kód ukazuje, jak analyzovat vstupní parametr řetězce jako pole:

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

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

Omezené spouštění

Všechny operace Azure Cosmos DB se musí dokončit v omezeném časovém intervalu. Uložené procedury mají omezenou dobu spuštění na serveru. Všechny funkce kolekce vrací logickou hodnotu, která představuje, jestli se tato operace dokončila, nebo ne.

Transakce v rámci uložených procedur

Transakce u položek v kontejneru můžete implementovat pomocí uložené procedury. JavaScriptové funkce můžou implementovat model založený na pokračování pro dávkové nebo obnovení provádění. Hodnota pokračování může být libovolná hodnota podle vašeho výběru a aplikace pak mohou tuto hodnotu použít k obnovení transakce z nového výchozího bodu. Následující diagram znázorňuje, jak lze model pokračování transakce použít k opakování funkce na straně serveru, dokud funkce nedokončí celou úlohu zpracování.

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.