Tárolt eljárások, eseményindítók és felhasználói függvények regisztrálása és használata az Azure Cosmos DB-ben

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az Azure Cosmos DB NoSQL API-ja támogatja a JavaScriptben írt tárolt eljárások, triggerek és felhasználó által definiált függvények (UDF-ek) regisztrálását és meghívását. Miután definiált egy vagy több tárolt eljárást, eseményindítót vagy felhasználó által definiált függvényt, betöltheti és megtekintheti őket az Azure Portalon az Adatkezelő használatával.

A NoSQL SDK API-t több platformon is használhatja, beleértve a .NET v2 (örökölt), a .NET v3, a Java, a JavaScript vagy a Python SDK-kat ezen feladatok elvégzéséhez. Ha korábban még nem dolgozott ezen SDK-k egyikével, tekintse meg a megfelelő SDK rövid útmutatóját:

SDK Első lépések
.NET v3 Rövid útmutató: Az Azure Cosmos DB for NoSQL ügyfélkódtár a .NET-hez
Java Rövid útmutató: Java-alkalmazás létrehozása az Azure Cosmos DB for NoSQL-adatok kezeléséhez
JavaScript Rövid útmutató: Azure Cosmos DB for NoSQL ügyfélkódtár Node.js
Python Rövid útmutató: Azure Cosmos DB for NoSQL-ügyfélkódtár Pythonhoz

Fontos

Az alábbi kódminták feltételezik, hogy már rendelkezik client és container változókkal rendelkezik. Ha létre kell hoznia ezeket a változókat, tekintse meg a platform megfelelő rövid útmutatóját.

Tárolt eljárások futtatása

A tárolt eljárások JavaScript használatával vannak megírva. Létrehozhatnak, frissíthetnek, olvashatnak, lekérdezhetnek és törölhetnek elemeket egy Azure Cosmos DB-tárolóban. További információ: Tárolt eljárások írása.

Az alábbi példák bemutatják, hogyan regisztrálhat és hívhat meg tárolt eljárásokat az Azure Cosmos DB SDK-k használatával. A tárolt eljárás spCreateToDoItem.js ként mentett forrását lásd: Elemek létrehozása tárolt eljárásokkal.

Feljegyzés

Particionált tárolók esetén tárolt eljárás futtatásakor meg kell adnia egy partíciókulcs-értéket a kérés beállításai között. A tárolt eljárások mindig partíciókulcsra vannak korlátozva. Az eltérő partíciókulcs-értékkel rendelkező elemek nem láthatók a tárolt eljárásban. Ez az elv az eseményindítókra is vonatkozik.

Az alábbi példa bemutatja, hogyan regisztrálhat tárolt eljárást a .NET SDK v2 használatával:

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;

Az alábbi kód bemutatja, hogyan hívhat meg tárolt eljárást a .NET SDK v2 használatával:

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

Előpróbálkozók futtatása

Az alábbi példák bemutatják, hogyan regisztrálhat és hívhat meg egy előpróbálkozót az Azure Cosmos DB SDK-k használatával. A trgPreValidateToDoItemTimestamp.js ként mentett pretrigger-példa forrását lásd: Pretriggers.

Amikor egy műveletet úgy futtat, hogy megadja PreTriggerInclude , majd átadja az eseményindító nevét egy List objektumban, az előpróbálkozók az objektumban RequestOptions lesznek átadva.

Feljegyzés

Annak ellenére, hogy az eseményindító neve átadva van, műveletenként Listtovábbra is csak egy eseményindítót futtathat.

Az alábbi kód bemutatja, hogyan regisztrálhat egy előpróbálkozót a .NET SDK v2 használatával:

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

Az alábbi kód bemutatja, hogyan hívhat meg egy pretriggert a .NET SDK v2 használatával:

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

Eseményindítók utáni futtatás

Az alábbi példák bemutatják, hogyan regisztrálhat egy eseményindítót az Azure Cosmos DB SDK-k használatával. A trgPostUpdateMetadata.js ként mentett, eseményindító utáni példa forrását lásd: Post-triggers

Az alábbi kód bemutatja, hogyan regisztrálhat egy eseményindítót a .NET SDK v2 használatával:

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

Az alábbi kód bemutatja, hogyan hívhat meg egy eseményindítót a .NET SDK v2 használatával:

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

Felhasználó által definiált függvények használata

Az alábbi példák bemutatják, hogyan regisztrálhat felhasználó által definiált függvényeket az Azure Cosmos DB SDK-k használatával. A felhasználó által definiált, udfTax.js ként mentett példa forrását a Felhasználó által definiált függvények írása című témakörben találhatja meg.

Az alábbi kód bemutatja, hogyan regisztrálhat egy felhasználó által definiált függvényt a .NET SDK v2 használatával:

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

Az alábbi kód bemutatja, hogyan hívhat meg egy felhasználó által definiált függvényt a .NET SDK v2 használatával:

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
}

Következő lépések

További fogalmak és útmutató tárolt eljárások, triggerek és felhasználó által definiált függvények írásához vagy használatához az Azure Cosmos DB-ben: