Azure Cosmos DB'de saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri kaydetme ve kullanma

UYGULANANLAR: NoSQL

Azure Cosmos DB'deki NoSQL API'si JavaScript'te yazılmış saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri (UDF) kaydetmeyi ve çağırmayı destekler. Bir veya daha fazla saklı yordam, tetikleyici veya kullanıcı tanımlı işlev tanımladıktan sonra, Veri Gezgini kullanarak bunları Azure portalında yükleyebilir ve görüntüleyebilirsiniz.

Bu görevleri gerçekleştirmek için .NET v2 (eski), .NET v3, Java, JavaScript veya Python SDK'ları gibi birden çok platformda NoSQL SDK'sı için API'yi kullanabilirsiniz. Bu SDK'lardan biriyle daha önce çalışmadıysanız, uygun SDK için hızlı başlangıç makalesine bakın:

SDK Kullanmaya başlama
.NET v3 Hızlı Başlangıç: .NET için NoSQL için Azure Cosmos DB istemci kitaplığı
Java Hızlı Başlangıç: NoSQL için Azure Cosmos DB verilerini yönetmek için java uygulaması oluşturma
JavaScript Hızlı Başlangıç: Node.js için NoSQL için Azure Cosmos DB istemci kitaplığı
Python Hızlı Başlangıç: Python için NoSQL için Azure Cosmos DB istemci kitaplığı

Önemli

Aşağıdaki kod örneklerinde zaten client ve container değişkenleriniz olduğu varsayılır. Bu değişkenleri oluşturmanız gerekiyorsa platformunuz için uygun hızlı başlangıç konusuna bakın.

Saklı yordamları çalıştırma

Saklı yordamlar JavaScript kullanılarak yazılır. Azure Cosmos DB kapsayıcısı içinde öğe oluşturabilir, güncelleştirebilir, okuyabilir, sorgulayabilir ve silebilir. Daha fazla bilgi için bkz . Saklı yordamları yazma.

Aşağıdaki örneklerde Azure Cosmos DB SDK'larını kullanarak bir saklı yordamın nasıl kaydedilip çağrıldığı gösterilmektedir. spCreateToDoItem.js olarak kaydedilen bu saklı yordamın kaynağı için bkz. Saklı yordamları kullanarak öğe oluşturma.

Not

Bölümlenmiş kapsayıcılar için bir saklı yordam çalıştırdığınızda, istek seçeneklerinde bir bölüm anahtarı değeri sağlamanız gerekir. Saklı yordamların kapsamı her zaman bir bölüm anahtarı olarak belirlenmiştir. Farklı bir bölüm anahtarı değerine sahip öğeler saklı yordama görünmez. Bu ilke tetikleyiciler için de geçerlidir.

Aşağıdaki örnekte .NET SDK v2 kullanılarak saklı yordamın nasıl kaydedildiği gösterilmektedir:

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;

Aşağıdaki kod, .NET SDK v2 kullanarak saklı yordamı çağırmayı gösterir:

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

Ön yargılayıcıları çalıştırma

Aşağıdaki örneklerde, Azure Cosmos DB SDK'larını kullanarak bir ön denemenin nasıl kaydedildiği ve çağrıldığı gösterilmektedir. trgPreValidateToDoItemTimestamp.js olarak kaydedilen bu ön deneme örneğinin kaynağı için bkz. Pretriggers.

Bir nesnede tetikleyicinin adını belirtip PreTriggerInclude geçirerek bir List işlemi çalıştırdığınızda, nesneye RequestOptions ön denemeler geçirilir.

Not

Tetikleyicinin adı olarak Listgeçirilse de işlem başına yalnızca bir tetikleyici çalıştırabilirsiniz.

Aşağıdaki kod, .NET SDK v2 kullanarak bir ön denemeyi nasıl kaydedeceklerini gösterir:

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

Aşağıdaki kod, .NET SDK v2 kullanarak bir ön denemeyi nasıl çağıracaklarını gösterir:

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

Son tetikleyicileri çalıştırma

Aşağıdaki örneklerde Azure Cosmos DB SDK'larını kullanarak bir son tetikleyicinin nasıl kaydedildiği gösterilmektedir. trgPostUpdateMetadata.js olarak kaydedilen bu tetikleyici sonrası örneğin kaynağı için bkz. Post-triggers

Aşağıdaki kod, .NET SDK v2 kullanarak bir post-trigger'ın nasıl kaydedileceklerini gösterir:

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

Aşağıdaki kodda .NET SDK v2 kullanılarak bir post-trigger'ın nasıl çağrılacakları gösterilmektedir:

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

Kullanıcı tanımlı işlevlerle çalışma

Aşağıdaki örneklerde, Azure Cosmos DB SDK'larını kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedildiği gösterilmektedir. udfTax.js olarak kaydedilen bu kullanıcı tanımlı işlev örneğinin kaynağı için bkz. Kullanıcı tanımlı işlevleri yazma.

Aşağıdaki kod, .NET SDK v2 kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedileceklerini gösterir:

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

Aşağıdaki kodda .NET SDK v2 kullanılarak kullanıcı tanımlı bir işlevin nasıl çağrıldığı gösterilmektedir:

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
}

Sonraki adımlar

Azure Cosmos DB'de saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri yazma veya kullanma hakkında daha fazla bilgi edinin: