Event Grid abonelikleri için olay filtrelemeyi anlama

Bu makalede, uç noktanıza hangi olayların gönderildiğini filtrelemenin farklı yolları açıklanmaktadır. Olay aboneliği oluştururken filtreleme için üç seçeneğiniz vardır:

  • Olay türleri
  • Konu ile başlar veya ile biter
  • Gelişmiş alanlar ve işleçler

Azure Resource Manager şablonu

Bu makalede gösterilen örnekler, Azure Resource Manager (ARM) şablonlarında filtre tanımlamaya yönelik JSON kod parçacıklarıdır. Eksiksiz bir ARM şablonu ve ARM şablonu dağıtma örneği için bkz . Hızlı Başlangıç: ARM şablonu kullanarak Blob depolama olaylarını web uç noktasına yönlendirme. Aşağıda, hızlı başlangıçtaki örnekte yer alan bölümün filter bazı bölümleri verilmiştir. ARM şablonu aşağıdaki kaynakları tanımlar.

  • Azure depolama hesabı
  • Depolama hesabı için sistem konusu
  • Sistem konusu için olay aboneliği. Olay aboneliği bölümünde alt bölümü görürsünüz filter .

Aşağıdaki örnekte, olay aboneliği ve Microsoft.Storage.BlobDeleted olayları için Microsoft.Storage.BlobCreated filtrelenir.

{
  "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'))]"
      ]
    }
  ]
}

Olay türü filtreleme

Varsayılan olarak, olay kaynağı için tüm olay türleri uç noktaya gönderilir. Uç noktanıza yalnızca belirli olay türlerini göndermeye karar vekleyebilirsiniz. Örneğin, kaynaklarınızdaki güncelleştirmeler için bildirim alabilir, ancak silme işlemleri gibi diğer işlemler için bildirim alamayabilirsiniz. Bu durumda, olay türüne Microsoft.Resources.ResourceWriteSuccess göre filtreleyin. Olay türlerini içeren bir dizi sağlayın veya olay kaynağı için tüm olay türlerini almak üzere belirtin All .

Olay türüne göre filtrelemeye yönelik JSON söz dizimi:

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

Konu filtreleme

Konuya göre basit filtreleme için konu için bir başlangıç veya bitiş değeri belirtin. Örneğin, yalnızca bir metin dosyasını depolama hesabına yüklemeyle .txt ilgili olayları almak için konu sonu değerini belirtebilirsiniz. Öte yandan konu /blobServices/default/containers/testcontainer başlığını filtreleyebilir ve bu kapsayıcının tüm olaylarını alabilir ancak depolama hesabındaki diğer kapsayıcıları alamayabilirsiniz.

Olayları özel konulara yayımlarken, abonelerin olayla ilgilenip ilgilenmediklerini öğrenmesini kolaylaştıran olaylarınız için konular oluşturun. Aboneler olayları filtrelemek ve yönlendirmek için subject özelliğini kullanır. Abonelerin bu yolun segmentlerine göre filtrelemesi için olayın gerçekleştiği yerin yolunu eklemeyi göz önünde bulundurun. Bu yol, abonelerin olayları dar veya geniş kapsamlı bir şekilde filtrelemesine olanak tanır. Konuda olduğu gibi /A/B/C üç segment yolu sağlarsanız, aboneler geniş bir olay kümesi elde etmek için ilk segmente /A göre filtreleyebilir. Bu aboneler veya /A/D/Egibi /A/B/C konularla ilgili olaylar alır. Diğer aboneler daha dar bir olay kümesi elde etmek için ölçütüne /A/B göre filtreleyebilir.

Konuya göre filtreleme için JSON söz dizimi şu şekildedir:

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

Gelişmiş filtreleme

Veri alanlarındaki değerlere göre filtrelemek ve karşılaştırma işlecini belirtmek için gelişmiş filtreleme seçeneğini kullanın. Gelişmiş filtrelemede şunları belirtirsiniz:

  • işleç türü - Karşılaştırma türü.
  • key - Filtreleme için kullandığınız olay verilerindeki alan. Bir sayı, boole, dize veya dizi olabilir.
  • values - Anahtarla karşılaştıracak değer veya değerler.

Anahtar

Anahtar, filtreleme için kullandığınız olay verilerindeki alandır. Aşağıdaki türlerden biri olabilir:

  • Sayı

  • Boole

  • Dize

  • Dizi. Bu özelliği kullanmak için özelliğini true olarak ayarlamanız enableAdvancedFilteringOnArrays gerekir.

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

Event Grid şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: ID, Topic, Subject, EventType, , DataVersionveya olay verileri (gibidata.key1).

Bulut Olayları şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: eventid, source, eventtype, veya eventtypeversionolay verileri (gibidata.key1).

Özel giriş şeması için olay verisi alanlarını (gibidata.key1) kullanın. Veri bölümündeki alanlara erişmek için (nokta) gösterimini . kullanın. Örneğin, data.sitenamedata.appEventTypeDetail.action erişmek sitename için veya action aşağıdaki örnek olay için .

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

Değerler

Değerler şunlar olabilir: sayı, dize, boole veya dizi

İşleçler

Sayılar için kullanılabilir işleçler şunlardır:

NumberIn

Anahtar değeri belirtilen filtre değerlerinden biriyse NumberIn işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki özniteliğin data değerinin counter 5 veya 1 olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı [v1, v2, v3] ve filtresini içeren sahte kod aşağıdadır: [a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberNotIn

Anahtar değeri belirtilen filtre değerlerinden biri değilse NumberNotIn true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin counter 41 ve 0 olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı [v1, v2, v3] ve filtresini içeren sahte kod aşağıdadır: [a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberLessThan

Anahtar değeri belirtilen filtre değerinden küçükse NumberLessThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 100'den data küçük olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. İşte anahtarıyla birlikte sahte kod: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberGreaterThan

Anahtar değeri belirtilen filtre değerinden büyükse NumberGreaterThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin counter 20'den data büyük olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. İşte anahtarıyla birlikte sahte kod: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberLessThanOrEquals

Anahtar değeri belirtilen filtre değerinden küçük veya buna eşitse NumberLessThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki counter özniteliğin değerinin 100'den data küçük veya buna eşit olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. İşte anahtarıyla birlikte sahte kod: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberGreaterThanOrEquals

Anahtar değeri belirtilen filtre değerinden büyük veya buna eşitse NumberGreaterThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki counter özniteliğin değerinin 30'dan data büyük veya buna eşit olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. İşte anahtarıyla birlikte sahte kod: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberInRange

Anahtar değeri belirtilen filtre aralıklarından birindeyse NumberInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki key1 özniteliğin data değerinin iki aralık arasında olup olmadığını denetler: 3,14159 - 999,95, 3000 - 4000.

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

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklık bir dizidir. Aşağıda denetlenecek bir aralığı olan bir dizi örneği verilmiştir.

Tek aralıklı dizi:

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Aşağıda anahtara [v1, v2, v3] sahip sahte kod ve filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberNotInRange

Anahtar değeri belirtilen filtre aralıklarından birinde değilse NumberNotInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki data özniteliğin değerinin key1 iki aralıkta olup olmadığını denetler: 3.14159 - 999.95, 3000 - 4000. Bu ise, işleç false döndürür.

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

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklık bir dizidir. Aşağıda denetlenecek bir aralığı olan bir dizi örneği verilmiştir.

Tek aralıklı dizi:

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Aşağıda anahtara [v1, v2, v3] sahip sahte kod ve filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Boolean'lar için kullanılabilir işleç:

BoolEquals

Anahtar değeri belirtilen boole değeri filtresiyse BoolEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki trueözniteliğin data değerinin isEnabled olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre boole değeriyle karşılaştırılır. Anahtarı olan sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Dizeler için kullanılabilir işleçler şunlardır:

StringContains

Anahtar değeri belirtilen filtre değerlerinden herhangi birini içeriyorsa (alt dizeler olarak) StringContains true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 belirtilen alt dizelerden birini içerip içermediğini denetler: microsoft veya azure. Örneğin, azure data factory içinde var azure .

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotContains

Anahtar belirtilen filtre değerlerini alt dize olarak içermiyorsaStringNotContains işleci true olarak değerlendirilir. Anahtar, alt dize olarak belirtilen değerlerden birini içeriyorsa, işleç false olarak değerlendirilir. Aşağıdaki örnekte, işleç yalnızca bölümdeki özniteliğin değerinin key1 ve fabrikam alt dizeleri olmadığında contoso true döndürür.data

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Bu işlecin geçerli sınırlaması için Sınırlamalar bölümüne bakın.

StringBeginsWith

Anahtar değeri belirtilen filtre değerlerinden biriyle başlıyorsaStringBeginsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya messageile event başlayıp başlamayacağını denetler. Örneğin, event hubs ile eventbaşlar.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotBeginsWith

Anahtar değeri belirtilen filtre değerlerinden herhangi biriyle başlamazsaStringNotBeginsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya messageile event başlayıp başlamadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringEndsWith

Anahtar değeri belirtilen filtre değerlerinden biriyle biterseStringEndsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya pngjpeg ile jpg bitip bitmediğini denetler. Örneğin, eventgrid.png ile pngbiter.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotEndsWith

Anahtar değeri belirtilen filtre değerlerinden herhangi biriyle bitmezseStringNotEndsWith işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin data değerinin key1 veya pngjpeg ile jpg bitip bitmediğini denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringIn

StringIn işleci anahtar değerinin belirtilen filtre değerlerinden biriyle tam olarak eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, bölümündeki contoso özniteliğin data değerinin key1 veya fabrikamfactoryolup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotIn

StringNotIn işleci, anahtar değerinin belirtilen filtre değerlerinden herhangi biriyle eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, bölümündeki özniteliğin değerinin key1 ve bridgeolup olmadığını aws denetler.data

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren [v1, v2, v3] sahte kod şu şekildedir: [a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Tüm dize karşılaştırmaları büyük/küçük harfe duyarlı değildir.

Not

Olay JSON'ı gelişmiş filtre anahtarını içermiyorsa, filtre şu işleçler için eşleşmemiş olarak kaçılır: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Filtre, aşağıdaki işleçler için eşleşmiş şekilde buharlaşarak oluşturulur:NumberNotIn, StringNotIn.

IsNullOrUndefined

IsNullOrUndefined işleci, anahtarın değeri NULL veya tanımsız olduğunda true olarak değerlendirilir.

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

Aşağıdaki örnekte key1 eksik olduğundan işleç true olarak değerlendirilir.

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

Aşağıdaki örnekte anahtar1 null olarak ayarlandığından işleç true olarak değerlendirilir.

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

key1 bu örneklerde başka bir değere sahipse işleç false olarak değerlendirilir.

Isnotnull

IsNotNull işleci, anahtarın değeri NULL veya tanımlanmamış değilse true olarak değerlendirilir.

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

OR and AND

Birden çok değer içeren tek bir filtre belirtirseniz, bir OR işlemi gerçekleştirilir, bu nedenle anahtar alanının değeri bu değerlerden biri olmalıdır. Aşağıda bir örnek verilmiştir:

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

Birden çok farklı filtre belirtirseniz, bir AND işlemi yapılır, bu nedenle her filtre koşulu karşılanmalıdır. Aşağıda bir örnek verilmiştir:

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

CloudEvents

CloudEvents şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: eventid, source, eventtype, eventtypeversionveya olay verileri (gibidata.key1).

CloudEvents 1.0'da uzantı bağlamı özniteliklerini de kullanabilirsiniz. Aşağıdaki örnekte comexampleextension1 ve comexampleothervalue uzantı bağlamı öznitelikleridir.

{
    "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
    }
}

Aşağıda, bir filtrede uzantı bağlamı özniteliği kullanma örneği verilmiştır.

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

Sınırlamalar

Gelişmiş filtrelemenin sınırlamaları şunlardır:

  • Event Grid aboneliği başına tüm filtrelerde 25 gelişmiş filtre ve 25 filtre değeri
  • Dize değeri başına 512 karakter
  • . İçlerinde (nokta) karakter bulunan tuşlar. Örneğin: http://schemas.microsoft.com/claims/authnclassreference veya john.doe@contoso.com. Şu anda anahtarlarda kaçış karakterleri desteği yoktur.

Aynı anahtar birden fazla filtrede kullanılabilir.

Sonraki adımlar