Aracılığıyla paylaş


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 Başlangıç
.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ıç: NoSQL için Azure Cosmos DB istemci kitaplığı; Node.js
Piton 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.

Depolanan yordamları nasıl çalıştırılır

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 Saklı yordamları nasıl yazılır?

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 tetikleyiciler nasıl çalıştırılır

Aşağıdaki örneklerde, Azure Cosmos DB SDK'larını kullanarak bir ön denemenin nasıl kaydedildiği ve çağrıldığı gösterilmektedir. Bu ön tetikleme örneğinin kaynağı için, trgPreValidateToDoItemTimestamp.js olarak kaydedilmiş dosyaya, Pretriggers bölümünden bakın.

Bir nesne içinde tetikleyici adını belirtip PreTriggerInclude geçirerek bir List işlemi çalıştırdığınızda, ön tetikleyiciler RequestOptions nesnesine 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: