Partage via


Expressions de configuration d'intercepteur

Le fichier de configuration de l’intercepteur BAM utilise des expressions de filtre pour identifier une activité et utilise des expressions de données pour construire un élément de données pour le stockage, comme ID de corrélation ou jeton de continuation, ou à des fins similaires. Quel que soit l’objectif, les expressions individuelles sont identifiées dans le fichier de configuration de l’intercepteur par l’élément expression et contiennent une ou plusieurs opérations à l’aide de la notation polonaise inverse, également appelée notation postfixée.

À propos de la notation polonaise inverse

Dans le cadre de la notation polonaise inverse (NPI), les opérandes précèdent l'opérateur, supprimant ainsi le besoin d'utiliser des parenthèses comme opérateurs de priorité. Une pile sert à maintenir des valeurs et toutes les opérations et pousser des valeurs sur la pile, retirer (supprimer) des valeurs de la pile ou réaliser une combinaison de poussées et de retraits pour effectuer une opération.

Par exemple, si vous souhaitez évaluer l'expression

5 + (10 - 2)

La conversion de ce en rpn équivalent entraîne

5 10 2 - +

Cela serait évalué comme suit :

Entrée Opération Pile
5 Envoi (push) 5
10 Envoi (push) 5, 10
2 Envoi (push) 5, 10, 2
- Soustraire 5, 8
+ Ajouter 13

En supposant que le système NPI prenne en charge l'opération de concaténation de chaînes, vous pouvez également évaluer l'expression

"The quick brown " + "fox " + "jumped over the lazy " + "dog."

Sa conversion en son équivalent NPI donne :

"The quick brown " "fox " "jumped over the lazy " "dog" + + +

Cela serait évalué comme suit :

Entrée Opération Pile
« Le jeune » Envoi (push) « Le brun rapide »
« renard » Envoi (push) « Le jeune »,« renard »
« a sauté par-dessus le vieux » Envoi (push) « Le jeune »,« renard », « a sauté par-dessus le vieux »
« chien. » Envoi (push) « Le jeune »,« renard », « a sauté par-dessus le vieux », « chien. »
+ Concatenate « Le jeune »,« renard », « a sauté par-dessus le vieux chien. »
+ Concatenate « Le jeune »,« renard a sauté par-dessus le vieux chien. »
+ Concatenate « Le jeune renard a sauté par-dessus le vieux chien. »

Comme vous pouvez le constater, un nombre arbitraire d'opérations peut être pris en charge, notamment la comparaison, les opérations booléennes et les opérations personnalisées qui extraient les valeurs appropriées pour les opérations auxquelles elles participent. Les valeurs s'accumulent sur la pile et sont poussées et retirées en fonction des opérations individuelles.

Notation polonaise inverse dans le fichier de configuration de l'intercepteur

Vous allez écrire deux types d’expressions dans le fichier de configuration de l’intercepteur : les expressions de filtre et les expressions de données. Les expressions de filtre s’attendent à ce que le résultat de l’expression RPN soit booléen true ou false que les expressions de données attendent une valeur unique sur la pile.

Expressions de filtre

Les expressions de filtre sont évaluées en booléen true ou false et sont utilisées pour identifier un événement spécifique à suivre dans l’application WF ou WFC. Dans les applications WF, il est courant de filtrer en fonction du nom de l'activité et de l'événement. Par exemple, vous pouvez sélectionner l’activité FoodAndDrinksPolicy lorsqu’elle est fermée. À l'aide d'opérations WF, vous pouvez exprimer le filtre comme suit :

(GetActivityName = "FoodAndDrinksPolicy") && (GetActivityEvent = "Closed")

La conversion de ce en RPN donne les résultats suivants :

GetActivityName "FoodAndDrinksPolicy" == GetActivityEvent "Closed" == &&

La conversion de cette expression en son expression équivalente pour le fichier de configuration de l'intercepteur donne le code XML suivant :

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName"/>  
    <ic:Operation Name="Constant">  
      <ic:Argument>FoodAndDrinksPolicy</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals"/>  
    <wf:Operation Name="GetActivityEvent"/>  
    <ic:Operation Name="Constant">  
      <ic:Argument>Closed</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals"/>  
    <ic:Operation Name="And"/>  
  </ic:Expression>  
</ic:Filter>  

Enfin, cette expression est évaluée comme suit en supposant que GetActivityName a retourné « DessertPolicy » et GetActivityEvent a retourné « Fermé » :

Entrée Opération Pile
GetActivityName « DessertPolicy »
« FoodAndDrinksPolicy » Constant « DessertPolicy », « FoodAndDrinksPolicy »
Égal à Comparaison Faux
GetActivityEvent False, « Closed »
« Closed » Constant False, « Closed », « Closed »
Égal à Comparaison False, True
And AND logique False

La valeur restante sur la pile est Boolean False. Cela entraînera le non-déclenchement de l'événement correspondant. Si le nom de l’activité était « FoodAndDrinksPolicy », il aurait été évalué à Boolean True.

Vous pouvez construire une expression similaire (avec une évaluation similaire) à l’aide des opérations GetEndpointName WCF et GetOperationName.

Expressions de données

Les expressions de données permettent de définir une valeur de données de chaîne unique. Une expression de données est toute expression qui n’est pas entourée d’un Filter élément. Les expressions de données sont utilisées par les OnEvent éléments CorrelationID, ContinuationToken, Referenceet Update.

Il est courant de devoir mettre à jour la base de données des activités BAM avec un horodatage étiqueté. Par exemple, vous pouvez capturer l’heure à laquelle un événement démarre avec une chaîne au format « Start : <EventTime> ». Pour ce faire, vous devez utiliser une expression semblable à celle qui suit (où + représente une concaténation) :

"Start: " + GetContextProperty(EventTime)

La conversion de ce en RPN donne les résultats suivants :

"Start: " GetContextProperty(EventTime) +

La conversion de cette expression en expression équivalente pour un Update élément dans le fichier de configuration de l’intercepteur entraîne le code XML suivant :

<ic:Update DataItemName="NewOrderCreateTime" Type="NVARCHAR">  
  <ic:Expression>  
    <ic:Operation Name="Constant">  
      <ic:Argument>Start:</ic:Argument>  
    </ic:Operation>  
    <wf:Operation Name="GetContextProperty">  
      <wf:Argument>EventTime</wf:Argument>  
    </wf:Operation>  
    <ic:Operation Name="Concatenate" />  
  </ic:Expression>  
</ic:Update>  

Le tableau suivant montre comment cette expression serait interprétée si l'heure de l'événement était minuit (« 12:00 PM »).

Entrée Opération Pile
« Start:  » Constant « Start:  »
GetContextProperty(EventTime) Envoi (push) « Start:  », « 2006-09-27T12:00:34.000Z »
Concatenate Concatenate « Start: 2006-09-27T12:00:34.000Z »

La valeur utilisée par la commande de mise à jour serait « Start: 2006-09-27T12:00:34.000Z ».

Notes

N'utilisez pas les opérations de comparaison « And » ou « Égal à » dans les expressions de données. Sinon, vous obtenez une erreur lors du déploiement de votre fichier de configuration de l'intercepteur.

Dans cette section

Opérations d’intercepteur

Voir aussi

Structure d’un fichier de configuration d’intercepteur