فهم تصفية الأحداث لاشتراكات Event Grid

توضح هذه المقالة الطرق المختلفة لتصفية الأحداث التي ترسل إلى نقطة النهاية الخاصة بك. عند إنشاء اشتراك حدث، تتوفر لديك ثلاثة خيارات للتصفية:

  • أنواع الحدث
  • يبدأ الموضوع أو ينتهي مع
  • الحقول المتقدمة والمشغلين

قالب Azure Resource Manager

الأمثلة المُوضحة في هذه المقالة هي قصاصات JSON برمجية لتعريف عوامل التصفية في قوالب Azure Resource Manager (ARM). للحصول على مثال لقالب ARM كامل وتوزيع قالب ARM، راجع التشغيل السريع: توجيه أحداث تخزين كائن ثنائي كبير الحجم إلى نقطة نهاية الويب باستخدام قالب ARM. فيما يلي بعض الأقسام حول قسم filter من المثال في التشغيل السريع. يحدد قالب ARM الموارد التالية.

  • حساب مخزن Azure
  • موضوع النظام لحساب التخزين
  • اشتراك الحدث لموضوع النظام. سترى القسم الفرعي filter في قسم اشتراك الحدث.

في المثال التالي، عوامل تصفية اشتراك الحدث للأحداث Microsoft.Storage.BlobCreated وMicrosoft.Storage.BlobDeleted.

{
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.EventGrid/systemTopics",
      "apiVersion": "2021-12-01",
      "name": "[parameters('systemTopicName')]",
      "location": "[parameters('location')]",
      "properties": {
        "source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "topicType": "Microsoft.Storage.StorageAccounts"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
      "apiVersion": "2021-12-01",
      "name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
      "properties": {
        "destination": {
          "properties": {
            "endpointUrl": "[parameters('endpoint')]"
          },
          "endpointType": "WebHook"
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Storage.BlobCreated",
            "Microsoft.Storage.BlobDeleted"
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
      ]
    }
  ]
}

تصفية نوع الحدث

بشكل افتراضي، يتم إرسال جميع أنواع الأحداث لمصدر الحدث إلى نقطة النهاية. يمكنك أن تقرر إرسال أنواع أحداث معينة فقط إلى نقطة النهاية. على سبيل المثال، يمكنك الحصول على إعلامك بالتحديثات التي تم تحديثها إلى مواردك، ولكن لا يتم إعلامك بعمليات أخرى مثل عمليات الحذف. في هذه الحالة، عامل تصفية حسب نوع الحدث Microsoft.Resources.ResourceWriteSuccess. قم بتوفير صفيف مع أنواع الأحداث، أو حدد All للحصول على جميع أنواع الأحداث لمصدر الحدث.

بناء الجملة JSON لتصفية حسب نوع الحدث هو:

"filter": {
  "includedEventTypes": [
    "Microsoft.Resources.ResourceWriteFailure",
    "Microsoft.Resources.ResourceWriteSuccess"
  ]
}

تصفية الموضوع

للتصفية البسيطة حسب الموضوع، حدد قيمة بداية أو نهاية للموضوع. على سبيل المثال، يمكنك تحديد موضوع ينتهي بـ .txt للحصول فقط على الأحداث المتعلقة بتحميل ملف نصي إلى حساب التخزين. أو يمكنك تصفية الموضوع الذي يبدأ بـ /blobServices/default/containers/testcontainer للحصول على جميع الأحداث لتلك الحاوية وليس الحاويات الأخرى في حساب التخزين.

عند نشر الأحداث على مواضيع مخصصة، قم بإنشاء موضوعات للأحداث التي تجعل من السهل على المشتركين معرفة ما إذا كانوا مهتمين بالحدث. يستخدم المشتركون خاصية الموضوع لتصفية الأحداث وتوجيهها. ضع في اعتبارك إضافة المسار لمكان وقوع الحدث، بحيث يمكن للمشتركين التصفية حسب أجزاء ذلك المسار. يمكن المسار المشتركين من تصفية الأحداث بشكل ضيق أو واسع. إذا قدمت مساراً من ثلاثة أجزاء مثل /A/B/Cفي الموضوع، فيمكن للمشتركين التصفية حسب المقطع الأول/A للحصول على مجموعة واسعة من الأحداث. يحصل هؤلاء المشتركون على أحداث مع مواضيع مثل /A/B/C أو /A/D/E. يمكن للمشتركين الآخرين التصفية حسب /A/B للحصول على مجموعة أحداث أضيق.

أمثلة (أحداث Blob Storage)

يمكن تصفية أحداث Blob حسب نوع الحدث أو اسم الحاوية أو اسم الكائن الذي تم إنشاؤه أو حذفه.

يستخدم موضوع أحداث مخزن الكائنات الثنائية كبيرة الحجم التنسيق:

/blobServices/default/containers/<containername>/blobs/<blobname>

لمطابقة جميع الأحداث الخاصة بحساب تخزين، يمكنك ترك عوامل تصفية الموضوع فارغة.

لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في مجموعة من الحاويات ولها نفس البادئة، استخدم subjectBeginsWith عامل تصفية مثل:

/blobServices/default/containers/containerprefix

لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة، استخدم subjectBeginsWith عامل تصفية مثل:

/blobServices/default/containers/containername/

لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة ولها نفس بادئة اسم كائن ثنائي كبير الحجم، استخدم subjectBeginsWith عامل تصفية مثل:

/blobServices/default/containers/containername/blobs/blobprefix

لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في مجلد فرعي معين للحاوية، استخدم subjectBeginsWith عامل تصفية مثل:

/blobServices/default/containers/{containername}/blobs/{subfolder}/

لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة ولها نفس لاحقة كائن ثنائي كبير الحجم استخدم subjectEndsWithعامل تصفية مثل "log" أو ".jpg".

تصفية متقدمة

للتصفية حسب القيم في حقول البيانات وتحديد عامل المقارنة، استخدم خيار التصفية المتقدم. في التصفية المتقدمة، يمكنك تحديد:

  • نوع عامل التشغيل - نوع المقارنة.
  • مفتاح - الحقل في بيانات الحدث الذي تستخدمه للتصفية. يمكن أن يكون رقماً أو منطقيَّا أو سلسلة أو مصفوفة.
  • القيم - القيمة أو القيم المطلوب مقارنتها بالمفتاح.

مفتاح

المفتاح هو الحقل الموجود في بيانات الحدث الذي تستخدمه للتصفية. يمكن أن يكون أحد الأنواع التالية:

  • الرقم‬

  • قيمة منطقية

  • السلسلة

  • صفيف. تحتاج إلى تعيين الخاصية enableAdvancedFilteringOnArrays على "صواب" لاستخدام هذه الميزة.

    "filter":
    {
        "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log",
        "subjectEndsWith": ".jpg",
        "enableAdvancedFilteringOnArrays": true
    }
    

بالنسبة إلى الأحداث في مخطط أحداث السحابة، استخدم القيم التالية للمفتاح: eventid، source، eventtype، eventtypeversion أو بيانات الأحداث (مثل data.key1).

إذا كنت تستخدم المستوى الأساسي لشبكة الأحداث، للأحداث في مخطط Event Grid، فاستخدم القيم التالية للمفتاح: IDأو SubjectDataVersionTopicEventTypeبيانات الحدث (مثل ).data.key1 بالنسبة إلى مخطط الإدخال المخصص، استخدم حقول بيانات الحدث (مثل data.key1). للوصول إلى الحقول في قسم البيانات، استخدم تدوين . (نقطة). على سبيل المثال، data.siteName، data.appEventTypeDetail.action للوصول siteName أو action لعينة الحدث التالية.

	"data": {
		"appEventTypeDetail": {
			"action": "Started"
		},
		"siteName": "<site-name>",
		"clientRequestId": "None",
		"correlationRequestId": "None",
		"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
		"address": "None",
		"verb": "None"
	},

إشعار

لا تدعم Event Grid التصفية على صفيف من الكائنات. يسمح فقط بالسلسلة والقيم والأرقام والصفيف من نفس الأنواع (مثل صفيف عدد صحيح أو صفيف سلسلة).

القيم

يمكن أن تكون القيم: رقماً أو سلسلة أو منطقية أو صفيفاً

عوامل التشغيل

العوامل المتاحة للأرقام هي:

NumberIn

يتم تقييم عامل التشغيل NumberIn إلى true إذا كانت قيمة key إحدى قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter في القسم data هي 5 أو 1.

"advancedFilters": [{
    "operatorType": "NumberIn",
    "key": "data.counter",
    "values": [
        5,
        1
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a, b, c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

NumberNotIn

يتم تقييم NumberNotIn إلى true إذا كانت قيمة keyليست أياً من قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counterفي القسمdata ليست 41 و0.

"advancedFilters": [{
    "operatorType": "NumberNotIn",
    "key": "data.counter",
    "values": [
        41,
        0
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a, b, c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

NumberLessThan

يتم تقييم عامل التشغيل NumberLessThan إلى true إذا كانت قيمة key أقل من قيمة التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counterفي القسمdata أقل من 100.

"advancedFilters": [{
    "operatorType": "NumberLessThan",
    "key": "data.counter",
    "value": 100
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH key IN (v1, v2, v3)
    IF key < filter
        MATCH

NumberGreaterThan

يتم تقييم عامل التشغيل NumberGreaterThan إلى "صحيح" إذا كانت قيمة المفتاح أكبر من قيمة التصفية المحددة. في المثال التالي، يتحقق ما إذا كانت قيمة السمة counter في القسم data أكبر من 20.

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.counter",
    "value": 20
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH key IN (v1, v2, v3)
    IF key > filter
        MATCH

NumberLessThanOrEquals

يتم تقييم عامل التشغيل NumberLessThanOrEquals إلى true إذا كانت قيمة key أقل من أو تساوي قيمة التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter في القسم data أقل من أو تساوي 100.

"advancedFilters": [{
    "operatorType": "NumberLessThanOrEquals",
    "key": "data.counter",
    "value": 100
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH key IN (v1, v2, v3)
    IF key <= filter
        MATCH

NumberGreaterThanOrEquals

يتم تقييم عامل التشغيل NumberGreaterThanOrEquals إلى "صحيح" إذا كانت قيمة المفتاح أكبر من أو تساوي قيمة عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter في القسم data أكبر من أو تساوي 30.

"advancedFilters": [{
    "operatorType": "NumberGreaterThanOrEquals",
    "key": "data.counter",
    "value": 30
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH key IN (v1, v2, v3)
    IF key >= filter
        MATCH

NumberInRange

يتم تقييم عامل التشغيل NumberInRange إلى true إذا كانت قيمة key موجودة في أحد نطاقات التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data تقع في أحد النطاقين: 3.14159 - 999.95، 3000 - 4000.

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

الخاصية values هي مجموعة من النطاقات. في المثال السابق، إنها مصفوفة من نطاقين. فيما يلي مثال على مصفوفة ذات نطاق واحد يجب التحقق منه.

مصفوفة ذات نطاق واحد:

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: مصفوفة من النطاقات. في هذه الشفرة الزائفة، a وb هي قيم منخفضة وعالية لكل نطاق في المصفوفة. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
       IF key >= a AND key <= b
           MATCH

NumberNotInRange

يتم تقييم عامل التشغيل NumberNotInRange إلى "صحيح" إذا كانت قيمة المفتاح ليست في أي من نطاقات التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data تقع في أحد النطاقين: 3.14159 - 999.95، 3000 - 4000. إذا كان الأمر كذلك، فسيقوم العامل بإرجاع خطأ.

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

الخاصية values هي مجموعة من النطاقات. في المثال السابق، إنها مصفوفة من نطاقين. فيما يلي مثال على مصفوفة ذات نطاق واحد يجب التحقق منه.

مصفوفة ذات نطاق واحد:

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: مصفوفة من النطاقات. في هذه الشفرة الزائفة، a وb هي قيم منخفضة وعالية لكل نطاق في المصفوفة. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
        IF key >= a AND key <= b
            FAIL_MATCH

العامل المتاح لـ booleans هو:

BoolEquals

يتم تقييم عامل التشغيل BoolEquals إلى صحيح إذا كانت قيمة المفتاح هي القيمة المنطقية المحددة عامل التصفية . في المثال التالي، يتحقق مما إذا كانت قيمة السمة isEnabled في القسم data هي true.

"advancedFilters": [{
    "operatorType": "BoolEquals",
    "key": "data.isEnabled",
    "value": true
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية المنطقية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH key IN (v1, v2, v3)
    IF filter == key
        MATCH

عوامل التشغيل المتاحة لـ السلاسل هي:

StringContains

يتم تقييم StringContains إلى true إذا كانت قيمة المفتاح تحتوي على أي من قيم التصفية المحددة (كسلاسل فرعية). في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data تحتوي على إحدى السلاسل الفرعية المحددة: microsoft أو azure. على سبيل المثال، يحتوي azure data factory على azure.

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data.key1",
    "values": [
        "microsoft", 
        "azure"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            MATCH

StringNotContains

يتم تقييم عامل التشغيل StringNotContains إلى true إذا كان المفتاح لا يحتوي على قيم التصفية المحددة كسلاسل فرعية. إذا كان المفتاح يحتوي على إحدى القيم المحددة كسلسلة فرعية، يتم تقييم عامل التشغيل على خطأ. في المثال التالي، يُرجع عامل التشغيل صحيحاً فقط إذا كانت قيمة السمة key1 في القسم data لا تحتوي على contoso وfabrikam كسلاسل فرعية.

"advancedFilters": [{
    "operatorType": "StringNotContains",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            FAIL_MATCH

راجع قسم القيود للتعرف على القيود الحالية لعامل التشغيل هذا.

StringBeginsWith

يتم تقييم عامل التشغيل StringBeginsWith إلى "صحيح" إذا كانت قيمة المفتاح تبدأ بأي من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data تبدأ بـ event أو message. على سبيل المثال، event hubs يبدأ بـ event.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            MATCH

StringNotBeginsWith

يتم تقييم عامل التشغيل String Not Begins With إلى true إذا كانت قيمة key لا تبدأ بأي من قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data لا تبدأ بـ event أو message.

"advancedFilters": [{
    "operatorType": "StringNotBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            FAIL_MATCH

StringEndsWith

يتم تقييم عامل التشغيل StringEndsWith إلى true إذا كانت قيمة المفتاح تنتهي بـ إحدى قيم التصفية المحددة. في المثال التالي، يتحقق ما إذا كانت قيمة السمة key1 في القسم data تنتهي بـ jpg أو jpeg أو png. على سبيل المثال، eventgrid.png ينتهي بـ png.

"advancedFilters": [{
    "operatorType": "StringEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            MATCH

StringNotEndsWith

يتم تقييم عامل التشغيل StringNotEndsWith إلى صحيح إذا كانت قيمة المفتاح لا تنتهي بأي من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data لا تنتهي بـ jpg أو jpeg أو png.

"advancedFilters": [{
    "operatorType": "StringNotEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            FAIL_MATCH

StringIn

يتحقق عامل التشغيل StringIn مما إذا كانت قيمة المفتاح تطابق تماماً إحدى قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data هي contoso أو fabrikam أو factory.

"advancedFilters": [{
    "operatorType": "StringIn",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam", 
        "factory"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

StringNotIn

يتحقق عامل التشغيل StringNotIn مما إذا كانت قيمة المفتاح لا تطابق أياً من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1 في القسم data ليست aws وbridge.

"advancedFilters": [{
    "operatorType": "StringNotIn",
    "key": "data.key1",
    "values": [
        "aws", 
        "bridge"
    ]
}]

إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3] والمرشح: [a,b,c]. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

جميع مقارنات السلاسل ليست حساسة لحالة الأحرف.

إشعار

إذا كان الحدث JSON لا يحتوي على مفتاح التصفية المتقدم، يتم تقييم عامل التصفية على أنه غير مطابق لعوامل التشغيل التالية: NumberGreaterThan و NumberGreaterThanOrEquals و NumberLessThan و NumberLessThanOrEquals و NumberIn و BoolEquals و StringContains و StringNotContains و StringBeginsWith و StringNotBeginsWith و StringEndsWith و StringNotEndsWith و StringIn.

يتم تقييم عامل التصفية على أنه مطابق لعوامل التشغيل التالية: NumberNotIn، StringNotIn.

IsNullOrUndefined

يتم تقييم عامل التشغيل IsNullOrUndefined إلى صحيح إذا كانت قيمة المفتاح فارغة أو غير محددة.

{
    "operatorType": "IsNullOrUndefined",
    "key": "data.key1"
}

في المثال التالي، key1 مفقود، لذا فإن عامل التشغيل سيقيم إلى true.

{ 
    "data": 
    { 
        "key2": 5 
    } 
}

في المثال التالي، تم تعيين key1 على null، لذا فإن عامل التشغيل سيقيم القيمة true.

{
    "data": 
    { 
        "key1": null
    }
}

إذا كان key1 يحتوي على أي قيمة أخرى في هذه الأمثلة، فسيتم تقييم عامل التشغيل إلى false.

IsNotNull

يتم تقييم عامل التشغيل IsNotNull إلى صحيح إذا كانت قيمة المفتاح ليست فارغة أو غير محددة.

{
    "operatorType": "IsNotNull",
    "key": "data.key1"
}

أو وو

إذا حددت عامل تصفية واحداً بقيم متعددة، فسيتم تنفيذ عملية أو ، لذا يجب أن تكون قيمة حقل المفتاح إحدى هذه القيم. إليك مثال:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/",
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

إذا حددت عدة عوامل تصفية مختلفة، فسيتم إجراء عملية و، لذلك يجب استيفاء كل شرط من شروط التصفية. إليك مثال:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/"
        ]
    },
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

CloudEvents

بالنسبة للأحداث في مخطط CloudEvents ، استخدم القيم التالية للمفتاح: eventid، source، eventtype، eventtypeversion أو بيانات الأحداث (مثل data.key1).

يمكنك أيضاً استخدام سمات سياق الإضافة في CloudEvents 1.0. في المثال التالي، تعد comexampleextension1 وcomexampleothervalue سمات سياق امتداد.

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "subject": null,
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}

فيما يلي مثال على استخدام سمة سياق ملحق في عامل تصفية.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "comexampleothervalue",
    "values": [
        "5", 
        "1"
    ]
}]

القيود

التصفية المتقدمة لها القيود التالية:

  • 25 عامل تصفية متقدمة و25 قيمة لعوامل التصفية عبر جميع عوامل التصفية لكل اشتراك Event Grid
  • 512 حرفاً لكل قيمة سلسلة
  • المفاتيح التي تحتوي على حرف . (نقطة) بداخلها. على سبيل المثال: http://schemas.microsoft.com/claims/authnclassreference أو john.doe@contoso.com. حالياً، لا يوجد دعم لأحرف الإلغاء في المفاتيح.

يمكن استخدام نفس المفتاح في أكثر من عامل تصفية واحد.

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