كيفية تسجيل واستخدام الإجراءات المخزنة والمشغلات والدالات المعرفة من قبل المستخدم في Azure Cosmos DB

ينطبق على: NoSQL

تدعم واجهة برمجة التطبيقات ل NoSQL في Azure Cosmos DB تسجيل واستدعاء الإجراءات المخزنة والمشغلات والوظائف المعرفة من قبل المستخدم (UDFs) المكتوبة بلغة JavaScript. بعد تحديد إجراء واحد أو أكثر من الإجراءات المخزنة أو المشغلات أو الوظائف المعرفة من قبل المستخدم، يمكنك تحميلها وعرضها في مدخل Microsoft Azure باستخدام Data Explorer.

يمكنك استخدام واجهة برمجة التطبيقات ل NoSQL SDK عبر أنظمة أساسية متعددة بما في ذلك .NET v2 (قديم) أو .NET v3 أو Java أو JavaScript أو Python SDKs للقيام بهذه المهام. إذا لم تكن قد عملت مع إحدى مجموعات SDK هذه من قبل، فشاهد مقالة التشغيل السريع ل SDK المناسب:

SDK الشروع في العمل
.NET v3 التشغيل السريع: مكتبة عميل Azure Cosmos DB ل NoSQL ل .NET
Java التشغيل السريع: إنشاء تطبيق Java لإدارة Azure Cosmos DB لبيانات NoSQL
JavaScript التشغيل السريع: مكتبة عميل Azure Cosmos DB ل NoSQL Node.js
Python التشغيل السريع: مكتبة عميل Azure Cosmos DB ل NoSQL ل Python

هام

تفترض نماذج التعليمات البرمجية التالية أن لديك بالفعل client متغيرات و container . إذا كنت بحاجة إلى إنشاء هذه المتغيرات، فراجع التشغيل السريع المناسب للنظام الأساسي الخاص بك.

كيفية تشغيل الإجراءات المخزنة

تتم كتابة الإجراءات المخزنة باستخدام JavaScript. يمكنهم إنشاء العناصر وتحديثها وقراءتها والاستعلام عنها وحذفها داخل حاوية Azure Cosmos DB. لمزيد من المعلومات، راجع كيفية كتابة الإجراءات المخزنة.

توضح الأمثلة التالية كيفية التسجيل واستدعاء إجراء مخزن باستخدام Azure Cosmos DB SDKs. للحصول على مصدر هذا الإجراء المخزن، المحفوظ ك spCreateToDoItem.js، راجع إنشاء عناصر باستخدام الإجراءات المخزنة.

إشعار

بالنسبة للحاويات المقسمة، عند تشغيل إجراء مخزن، يجب توفير قيمة مفتاح قسم في خيارات الطلب. يتم دائمًا تحديد نطاق الإجراءات المخزنة لمفتاح القسم. العناصر التي تحتوي على قيمة مفتاح قسم مختلفة غير مرئية للإجراء المخزن. ينطبق هذا المبدأ أيضا على المشغلات.

يوضح المثال التالي كيفية تسجيل إجراء مخزن باستخدام .NET SDK V2:

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;

توضح التعليمة البرمجية التالية كيفية استدعاء إجراء مخزن باستخدام .NET SDK V2:

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

كيفية تشغيل المشغلات المسبقة

توضح الأمثلة التالية كيفية تسجيل واستدعاء pretrigger باستخدام Azure Cosmos DB SDKs. للحصول على مصدر مثال pretrigger هذا، المحفوظ ك trgPreValidateToDoItemTimestamp.js، راجع Pretriggers.

عند تشغيل عملية عن طريق تحديد PreTriggerInclude ثم تمرير اسم المشغل في كائن List ، يتم تمرير الزناد المسبقين RequestOptions في الكائن.

إشعار

على الرغم من تمرير اسم المشغل ك List، فلا يزال بإمكانك تشغيل مشغل واحد فقط لكل عملية.

توضح التعليمات البرمجية التالية كيفية تسجيل pretrigger باستخدام .NET SDK v2:

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

توضح التعليمات البرمجية التالية كيفية استدعاء pretrigger باستخدام .NET SDK v2:

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

كيفية تشغيل المشغلات اللاحقة

توضح الأمثلة التالية كيفية تسجيل المشغل اللاحق باستخدام Azure Cosmos DB SDKs. للحصول على مصدر مثال المشغل اللاحق، المحفوظ ك trgPostUpdateMetadata.js، راجع المشغلات اللاحقة

توضح التعليمات البرمجية التالية كيفية تسجيل مشغل لاحق باستخدام .NET SDK V2:

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

توضح التعليمات البرمجية التالية كيفية تسجيل مشغل لاحق باستخدام .NET SDK V2:

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

كيفية العمل مع الوظائف المعرفة من قِبَل المستخدم

توضح الأمثلة التالية كيفية تسجيل دالة معرّفة من قِبَل المستخدم باستخدام Azure Cosmos DB SDKs. للحصول على مصدر مثال الدالة المعرفة من قبل المستخدم، المحفوظ ك udfTax.js، راجع كيفية كتابة الدالات المعرفة من قبل المستخدم.

توضح التعليمات البرمجية التالية كيفية تسجيل دالة معرّفة من قِبَل المستخدم باستخدام .NET SDK V2:

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

توضح التعليمات البرمجية التالية كيفية استدعاء دالة معرّفة من قِبَل المستخدم باستخدام .NET SDK V2:

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
}

الخطوات التالية

تعرّف على مزيد من المفاهيم وكيفية كتابة الإجراءات المخزنة والمشغلات والدالات المعرّفة من قِبَل لمستخدم أو استخدامها في Azure Cosmos DB: