Gebeurtenisfiltering voor Event Grid-abonnementen begrijpen

In dit artikel worden de verschillende manieren beschreven om te filteren welke gebeurtenissen naar uw eindpunt worden verzonden. Wanneer u een gebeurtenisabonnement maakt, hebt u drie opties voor het filteren:

  • Gebeurtenistypen
  • Onderwerp begint met of eindigt met
  • Geavanceerde velden en operators

Azure Resource Manager-sjabloon

De voorbeelden in dit artikel zijn JSON-fragmenten voor het definiëren van filters in ARM-sjablonen (Azure Resource Manager). Zie Quickstart: Blob Storage-gebeurtenissen routeren naar een webeindpunt met behulp van een ARM-sjabloon voor een voorbeeld van een volledige ARM-sjabloon en het implementeren van een ARM-sjabloon. Hier volgen nog enkele secties rond de filter sectie uit het voorbeeld in de quickstart. De ARM-sjabloon definieert de volgende resources.

  • Azure-storageaccount
  • Systeemonderwerp voor het opslagaccount
  • Gebeurtenisabonnement voor het systeemonderwerp. U ziet de filter subsectie in de sectie gebeurtenisabonnement.

In het volgende voorbeeld filtert het gebeurtenisabonnement op Microsoft.Storage.BlobCreated en Microsoft.Storage.BlobDeleted gebeurtenissen.

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

Filteren van gebeurtenistype

Standaard worden alle gebeurtenistypen voor de gebeurtenisbron naar het eindpunt verzonden. U kunt besluiten om alleen bepaalde gebeurtenistypen naar uw eindpunt te verzenden. U kunt bijvoorbeeld op de hoogte worden gesteld van updates voor uw resources, maar niet voor andere bewerkingen, zoals verwijderingen. Filter in dat geval op het Microsoft.Resources.ResourceWriteSuccess gebeurtenistype. Geef een matrix op met de gebeurtenistypen of geef All op om alle gebeurtenistypen voor de gebeurtenisbron op te halen.

De JSON-syntaxis voor filteren op gebeurtenistype is:

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

Onderwerpfiltering

Geef voor eenvoudig filteren op onderwerp een begin- of eindwaarde op voor het onderwerp. U kunt bijvoorbeeld opgeven dat het onderwerp eindigt om .txt alleen gebeurtenissen op te halen die betrekking hebben op het uploaden van een tekstbestand naar een opslagaccount. U kunt het onderwerp /blobServices/default/containers/testcontainer ook filteren om alle gebeurtenissen voor die container op te halen, maar niet andere containers in het opslagaccount.

Wanneer u gebeurtenissen publiceert naar aangepaste onderwerpen, maakt u onderwerpen voor uw gebeurtenissen waarmee abonnees gemakkelijk kunnen weten of ze geïnteresseerd zijn in de gebeurtenis. Abonnees gebruiken de onderwerpeigenschap om gebeurtenissen te filteren en te routeren. Overweeg het pad toe te voegen voor waar de gebeurtenis zich voordeed, zodat abonnees kunnen filteren op segmenten van dat pad. Met het pad kunnen abonnees gebeurtenissen smal of breed filteren. Als u een drie segmentpad opgeeft, zoals /A/B/C in het onderwerp, kunnen abonnees filteren op het eerste segment /A om een brede reeks gebeurtenissen op te halen. Deze abonnees krijgen gebeurtenissen met onderwerpen zoals /A/B/C of /A/D/E. Andere abonnees kunnen filteren /A/B om een smallere set gebeurtenissen op te halen.

Voorbeelden (Blob Storage-gebeurtenissen)

Blobgebeurtenissen kunnen worden gefilterd op het gebeurtenistype, de containernaam of de naam van het object dat is gemaakt of verwijderd.

Het onderwerp van Blob Storage-gebeurtenissen maakt gebruik van de indeling:

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

Als u alle gebeurtenissen voor een opslagaccount wilt vergelijken, kunt u de onderwerpfilters leeg laten.

Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een set containers die een voorvoegsel delen, gebruikt u een subjectBeginsWith filter zoals:

/blobServices/default/containers/containerprefix

Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container, gebruikt u een subjectBeginsWith filter zoals:

/blobServices/default/containers/containername/

Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container die een blobnaamvoorvoegsel delen, gebruikt u een subjectBeginsWith filter zoals:

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

Als u gebeurtenissen van blobs wilt vergelijken in een specifieke submap van een container, gebruikt u een subjectBeginsWith filter zoals:

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

Als u gebeurtenissen wilt vergelijken van blobs die zijn gemaakt in een specifieke container die een blobachtervoegsel delen, gebruikt u een subjectEndsWith filter zoals .log of .jpg.

Geavanceerd filteren

Als u wilt filteren op waarden in de gegevensvelden en de vergelijkingsoperator wilt opgeven, gebruikt u de geavanceerde filteroptie. Bij geavanceerd filteren geeft u het volgende op:

  • operatortype : het type vergelijking.
  • sleutel: het veld in de gebeurtenisgegevens die u gebruikt voor filteren. Dit kan een getal, booleaanse waarde, tekenreeks of matrix zijn.
  • waarden: de waarde of waarden die moeten worden vergeleken met de sleutel.

Toets

Sleutel is het veld in de gebeurtenisgegevens die u gebruikt voor filteren. Dit kan een van de volgende typen zijn:

  • Aantal

  • Booleaans

  • String

  • Array. U moet de enableAdvancedFilteringOnArrays eigenschap instellen op True om deze functie te kunnen gebruiken.

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

Gebruik voor gebeurtenissen in het schema van cloudevenementen de volgende waarden voor de sleutel: eventid, source, eventtype, eventtypeversionof gebeurtenisgegevens (zoals data.key1).

Als u de Basic-laag van Event Grid gebruikt, gebruikt u voor gebeurtenissen in het Event Grid-schema de volgende waarden voor de sleutel: ID, Topic, Subject, EventTypeof DataVersiongebeurtenisgegevens (zoalsdata.key1). Voor een aangepast invoerschema gebruikt u de gebeurtenisgegevensvelden (zoals data.key1). Gebruik de . notatie (punt) om toegang te krijgen tot velden in de gegevenssectie. Bijvoorbeeld, data.siteNamedata.appEventTypeDetail.action voor toegang tot siteName of action voor de volgende voorbeeldgebeurtenis.

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

Notitie

Event Grid biedt geen ondersteuning voor filteren op een matrix met objecten. Hiermee kunnen alleen tekenreeksen, Booleaanse waarden, getallen en matrix van dezelfde typen worden toegestaan (zoals een matrix met gehele getallen of tekenreeksmatrix).

Waarden

De waarden kunnen zijn: getal, tekenreeks, booleaanse waarde of matrix

Operatoren

De beschikbare operators voor getallen zijn:

NumberIn

De operator NumberIn resulteert in waar als de sleutelwaarde een van de opgegeven filterwaarden is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie 5 of 1 is.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a, b, c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberNotIn

NumberNotIn resulteert in waar als de sleutelwaarde geen van de opgegeven filterwaarden is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie niet 41 en 0 is.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a, b, c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberLessThan

De operator NumberLessThan resulteert in waar als de sleutelwaarde kleiner is dan de opgegeven filterwaarde . In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie kleiner is dan 100.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberGreaterThan

De operator NumberGreaterThan evalueert waar als de sleutelwaarde groter is dan de opgegeven filterwaarde . In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie groter is dan 20.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberLessThanOrEquals

De operator NumberLessThanOrEquals resulteert in waar als de sleutelwaarde kleiner is dan of gelijk is aan de opgegeven filterwaarde. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie kleiner is dan of gelijk is aan 100.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberGreaterThanOrEquals

De operator NumberGreaterThanOrEquals resulteert in waar als de sleutelwaarde groter is dan of gelijk is aan de opgegeven filterwaarde. In het volgende voorbeeld wordt gecontroleerd of de waarde van het counter kenmerk in de data sectie groter is dan of gelijk is aan 30.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberInRange

De operator NumberInRange resulteert in waar als de sleutelwaarde zich in een van de opgegeven filterbereiken bevindt. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie zich in een van de twee bereiken bevindt: 3.14159 - 999,95, 3000 - 4000.

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

De values eigenschap is een matrix met bereiken. In het vorige voorbeeld is het een matrix van twee bereiken. Hier volgt een voorbeeld van een matrix met één bereik dat u wilt controleren.

Matrix met één bereik:

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: een matrix met bereiken. In deze pseudocode a zijn b lage en hoge waarden van elk bereik in de matrix. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

NumberNotInRange

De operator NumberNotInRange resulteert in waar als de sleutelwaardezich niet in een van de opgegeven filterbereiken bevindt. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie zich in een van de twee bereiken bevindt: 3.14159 - 999,95, 3000 - 4000. Als dat zo is, retourneert de operator onwaar.

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

De values eigenschap is een matrix met bereiken. In het vorige voorbeeld is het een matrix van twee bereiken. Hier volgt een voorbeeld van een matrix met één bereik dat u wilt controleren.

Matrix met één bereik:

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: een matrix met bereiken. In deze pseudocode a zijn b lage en hoge waarden van elk bereik in de matrix. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

De beschikbare operator voor Booleaanse waarden is:

BoolEquals

De BoolEquals-operator evalueert waar als de sleutelwaarde het opgegeven booleaanse waardefilter is. In het volgende voorbeeld wordt gecontroleerd of de waarde van het isEnabled kenmerk in de data sectie is true.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de booleaanse filterwaarde. Dit is de pseudocode met de sleutel: [v1, v2, v3]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

De beschikbare operators voor tekenreeksen zijn:

StringContains

StringContains resulteert in waar als de sleutelwaarde een van de opgegeven filterwaarden (als subtekenreeksen) bevat. In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie een van de opgegeven subtekenreeksen bevat: microsoft of azure. Heeft er bijvoorbeeld azure data factoryazure een.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringNotContains

De operator StringNotContains resulteert in waar als de sleutelde opgegeven filterwaarden niet bevat als subtekenreeksen. Als de sleutel een van de opgegeven waarden als een subtekenreeks bevat, resulteert de operator in onwaar. In het volgende voorbeeld retourneert de operator alleen waar als de waarde van het key1 kenmerk in de data sectie niet over en fabrikam als subtekenreeksen beschiktcontoso.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

Zie de sectie Beperkingen voor de huidige beperking van deze operator.

StringBeginsWith

De operator StringBeginsWith resulteert in waar als de sleutelwaardebegint met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie begint met event of message. Begint bijvoorbeeld event hubs met event.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringNotBeginsWith

De operator StringNotBeginsWith resulteert in waar als de sleutelwaardeniet begint met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie niet begint met event of message.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringEndsWith

De operator StringEndsWith resulteert in waar als de sleutelwaardeeindigt op een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie eindigt op jpg of jpeg .png Eindigt bijvoorbeeld eventgrid.png met png.

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringNotEndsWith

De operator StringNotEndsWith resulteert in waar als de sleutelwaardeniet eindigt op een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie niet eindigt op jpg ofjpeg.png

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringIn

De StringIn-operator controleert of de sleutelwaardeexact overeenkomt met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie is contoso of fabrikam .factory

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

StringNotIn

De operator StringNotIn controleert of de sleutelwaardeniet overeenkomt met een van de opgegeven filterwaarden . In het volgende voorbeeld wordt gecontroleerd of de waarde van het key1 kenmerk in de data sectie niet awsbridgeen .

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

Als de sleutel een matrix is, worden alle waarden in de matrix gecontroleerd op basis van de matrix met filterwaarden. Dit is de pseudocode met de sleutel: [v1, v2, v3] en het filter: [a,b,c]. Sleutelwaarden met gegevenstypen die niet overeenkomen met het gegevenstype van het filter, worden genegeerd.

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

Alle tekenreeksvergelijkingen zijn niet hoofdlettergevoelig.

Notitie

Als de gebeurtenis-JSON niet de geavanceerde filtersleutel bevat, wordt het filter geëvalueerd als niet overeenkomend voor de volgende operators: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringNotEndsWith, StringIn.

Het filter wordt geëvalueerd als overeenkomend voor de volgende operators: NumberNotIn, StringNotIn.

IsNullOrUndefined

De operator IsNullOrUndefined resulteert in waar als de waarde van de sleutel NULL is of niet is gedefinieerd.

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

In het volgende voorbeeld ontbreekt key1, dus de operator zou waar zijn.

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

In het volgende voorbeeld is key1 ingesteld op null, zodat de operator waar zou evalueren.

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

Als key1 een andere waarde in deze voorbeelden heeft, zou de operator onwaar opleveren.

IsNotNull

De operator IsNotNull resulteert in waar als de waarde van de sleutel niet NULL of niet gedefinieerd is.

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

OF en AND

Als u één filter met meerdere waarden opgeeft, wordt een OR-bewerking uitgevoerd, dus de waarde van het sleutelveld moet een van deze waarden zijn. Hier volgt een voorbeeld:

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

Als u meerdere verschillende filters opgeeft, wordt een AND-bewerking uitgevoerd, zodat aan elke filtervoorwaarde moet worden voldaan. Hier volgt een voorbeeld:

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

CloudEvents

Gebruik voor gebeurtenissen in het CloudEvents-schema de volgende waarden voor de sleutel: eventid, source, eventtype, eventtypeversionof gebeurtenisgegevens (zoals data.key1).

U kunt ook extensiecontextkenmerken gebruiken in CloudEvents 1.0. In het volgende voorbeeld comexampleextension1comexampleothervalue zijn extensiecontextkenmerken.

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

Hier volgt een voorbeeld van het gebruik van een extensiecontextkenmerk in een filter.

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

Beperkingen

Geavanceerd filteren heeft de volgende beperkingen:

  • 25 geavanceerde filters en 25 filterwaarden voor alle filters per Event Grid-abonnement
  • 512 tekens per tekenreekswaarde
  • Toetsen met . (punt) in de toetsen. Bijvoorbeeld: http://schemas.microsoft.com/claims/authnclassreference of john.doe@contoso.com. Op dit moment is er geen ondersteuning voor escape-tekens in sleutels.

Dezelfde sleutel kan in meer dan één filter worden gebruikt.

Volgende stappen