Condividi tramite


Espressioni di configurazione dell'intercettore

Il file di configurazione dell'intercettatore BAM usa espressioni di filtro per identificare un'attività e usa espressioni di dati per costruire un elemento dati per l'archiviazione, usare come ID di correlazione o token di continuazione o scopo simile. Indipendentemente dallo scopo, le singole espressioni vengono identificate nel file di configurazione dell'intercettatore dall'elemento expression e contengono una o più operazioni usando notazione polacca inversa, nota anche come notazione postfix.

Informazioni sulla notazione polacca inversa

Nella notazione polacca inversa gli operandi precedono l'operatore, pertanto non è necessario utilizzare parentesi per definire l'ordine di precedenza degli operatori. Per contenere i valori viene utilizzato uno stack e tutte le operazioni inseriscono valori nello stack, rimuovono valori dallo stack o eseguono una combinazione di inserimenti e rimozioni per completare un'operazione.

Se ad esempio si desidera valutare l'espressione

5 + (10 - 2)

Convertendola nell'equivalente notazione polacca inversa diventerà

5 10 2 - +

Questa espressione verrà valutata come segue:

Input Operazione Stack
5 Push 5
10 Push 5, 10
2 Push 5, 10, 2
- Sottrazione 5, 8
+ Add 13

Supponendo che il sistema di notazione polacca inversa supporti questa operazione di concatenazione di stringhe, sarà inoltre possibile valutare l'espressione

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

Convertendola nell'equivalente notazione polacca inversa restituirà:

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

Questa espressione verrà valutata come segue:

Input Operazione Stack
"The quick brown" Push "Il marrone rapido "
"fox" Push "The quick brown ", "fox "
"jumped over the lazy" Push "The quick brown ", "fox ", "jumped over the lazy "
"dog". Push "The quick brown ", "fox ", "jumped over the lazy ", "dog."
+ Concatenate "The quick brown ", "fox ", "jumped over the lazy dog."
+ Concatenate "The quick brown ", "fox jumped over the lazy dog."
+ Concatenate "The quick brown fox jumped over the lazy dog."

Come si noterà, è possibile supportare un numero arbitrario di operazioni, incluse quelle di confronto, booleane e personalizzate che recuperano i valori appropriati per le operazioni di cui fanno parte. I valori vengono accumulati nello stack e inseriti e rimossi in base alle singole operazioni.

Notazione polacca inversa nel file di configurazione dell'intercettore

Si scriveranno due tipi di espressioni nel file di configurazione dell'intercettatore: espressioni di filtro e espressioni di dati. Le espressioni di filtro prevedono che il risultato dell'espressione RPN sia un valore booleano true o false mentre le espressioni di dati prevedono un singolo valore nello stack.

Espressioni filtro

Le espressioni di filtro valutano booleano true o false vengono usate per identificare un evento specifico da tenere traccia nell'applicazione WF o WFC. Nelle applicazioni WF il filtro viene solitamente applicato in base al nome dell'attività e all'evento. Ad esempio, è possibile selezionare l'attività FoodAndDrinksPolicy quando è Chiusa. Utilizzando operazioni WF è possibile esprimere il filtro come segue:

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

Convertendo questa espressione in notazione polacca inversa restituirà:

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

Convertendo questa espressione nell'equivalente espressione per il file di configurazione dell'intercettore verrà generato il codice XML seguente:

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

Infine, questa espressione verrà valutata come segue presupponendo che GetActivityName abbia restituito "DessertPolicy" e GetActivityEvent restituito "Closed":

Input Operazione Stack
GetActivityName "DessertPolicy"
"FoodAndDrinksPolicy" Costante "DessertPolicy", "FoodAndDrinksPolicy"
Uguale a Confronto Falso
GetActivityEvent False, Closed
"Closed" Costante False, "Closed", "Closed"
Uguale a Confronto False, True
e And logico Falso

Il valore sinistro dello stack è booleano False. L'evento corrispondente non verrà di conseguenza generato. Se il nome dell'attività era "FoodAndDrinksPolicy", avrebbe valutato in Boolean True.

È possibile costruire un'espressione simile (con una valutazione simile) usando le operazioni GetEndpointName WCF e GetOperationName.

Espressioni di dati

Le espressioni di dati vengono utilizzate per definire un valore di dati con una singola stringa. Un'espressione di dati è qualsiasi espressione non racchiusa da un Filter elemento. Le espressioni di dati vengono usate dagli OnEvent elementi CorrelationID, ContinuationToken, Referencee Update.

Un requisito comune consiste nell'aggiornare l'attività di database BAM con un timestamp con etichetta. Ad esempio, è possibile acquisire l'ora in cui un evento inizia con una stringa formattata come "Start: <EventTime>". A questo scopo è necessario utilizzare un'espressione analoga alla seguente (dove + rappresenta la concatenazione):

"Start: " + GetContextProperty(EventTime)

Convertendo questa espressione in notazione polacca inversa restituirà:

"Start: " GetContextProperty(EventTime) +

La conversione di questa espressione nell'espressione equivalente per un Update elemento nel file di configurazione dell'intercettatore genera il codice XML seguente:

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

Nella tabella seguente viene illustrata la possibile interpretazione di questa espressione se l'ora dell'evento fosse "12:00 PM".

Input Operazione Stack
"Start: " Costante "Start: "
GetContextProperty(EventTime) Push "Start: ", "2006-09-27T12:00:34.000Z"
Concatenate Concatenate "Start: 2006-09-27T12:00:34.000Z"

Il valore usato dal comando di aggiornamento è "Start: 2006-09-27T12:00:34.000Z".

Nota

Non utilizzare le operazioni di confronto "And"o "Equals" nelle espressioni di dati. In caso contrario, durante la distribuzione del file di configurazione dell'intercettore verrà visualizzato un errore.

Contenuto della sezione

Operazioni relative agli intercettori

Vedere anche

Struttura di un file di configurazione di intercettore