Modifier le flux de contrôle à l’aide d’une action de contrôle

Effectué

Les actions de contrôle permettent à votre workflow d’application logique de prendre des décisions. L’application de supervision des réseaux sociaux utilise une action de contrôle pour tester le score de sentiment d’un tweet et catégoriser le chemin du flux de travail, selon que le score est positif ou négatif. Dans cette unité, nous allons nous intéresser aux quatre actions de contrôle qui permettent de gérer le chemin d’exécution dans votre workflow. Nous allons également voir comment utiliser le concepteur de workflow pour ajouter et configurer une action de contrôle.

Action Condition

Une action de contrôle de condition est une instruction if qui permet à votre workflow de fractionner en deux chemins d’accès, en fonction des données que vous traitez. Cette action se compose d’une expression booléenne et de deux actions. Au moment de l’exécution, le moteur d’exécution évalue l’expression avant de choisir une action selon que l’expression est vraie ou fausse.

Par exemple, le montant d’une note de frais peut déterminer le responsable à qui elle est transmise. Si vous traitez un e-mail, vous pouvez avoir envie de déterminer si le message comporte un indicateur de priorité élevée. Dans notre application de contrôle des réseaux sociaux, nous utilisons une instruction condition pour catégoriser en fonction du score de sentiment du tweet. Le diagramme suivant montre comment notre workflow utilise l’action de contrôle condition.

Diagram shows a conceptual view for the entire social media monitoring app. The *condition* control action appears highlighted.

Types et opérateurs

Vous pouvez tester des objets numériques, de chaîne, booléens et JSON dans vos actions de contrôle de condition. Le pseudocode suivant montre un exemple de chacun des types simples :

if (score is-greater-than 0.7)              ... // Numeric
if (TweetedBy does-not-contain "MyCompany") ... // String
if (Favorited is-equal-to true)             ... // Boolean

Chaque type a un ensemble d’opérateurs que vous pouvez utiliser dans vos comparaisons. Le tableau suivant liste les opérateurs de chaque type :

Numérique Chaîne Booléen Objets JSON
is-equal-to is-equal-to is-equal-to is-equal-to
is-not-equal-to is-not-equal-to is-not-equal-to is-not-equal-to
is-greater-than contains
is-greater-than-or-equal-to does-not-contain
is-less-than starts-with
is-less-than-or-equal-to does-not-start-with
ends-with
does-not-end-with

La plupart des opérations sont intuitives, mais il existe deux cas importants à mentionner :

  • Les comparaisons de chaînes sont toutes sensibles à la casse.
  • Les comparaisons d’objets JSON utilisent des égalités profondes. Cette comparaison signifie que les opérateurs d’égalité compareront l’objet entier, y compris tous les jetons descendants inclus dans des objets complexes.

Combiner des expressions à l’aide de AND et OR

Azure Logic Apps vous permet de créer des expressions complexes en combinant des conditions à l’aide de AND ou OR. Supposons que vous voulez identifier les tweets dont le sentiment est neutre (souvenez-vous qu’un score proche de 0,5 est neutre). Vous pouvez écrire une expression similaire au pseudo-code suivant :

if (score is-greater-than 0.4 AND score is-less-than 0.6)

Disponibilité des données

Azure Logic Apps rend les données de toutes les étapes antérieures disponibles dans les étapes postérieures. Cette fonctionnalité signifie que vos expressions peuvent utiliser des valeurs générées par chacune des étapes antérieures. Vous pouvez même combiner des valeurs de différentes étapes dans une même expression. Par exemple, le pseudo-code suivant recherche les tweets dont le sentiment est positif qui n’ont pas été envoyés par votre entreprise. Notez que le score provient de l’action Détecter le sentiment tandis que la valeur de TweetedBy provient du déclencheur Lors de la publication d’un nouveau tweet.

if (score is-greater-than 0.7 AND TweetedBy does-not-contain "MyCompany")

Créer des expressions complexes avec des groupes

Supposons que vous souhaitez créer une expression pour identifier les tweets influents. Vous déterminez les deux critères à satisfaire à cette fin :

  • Le score de sentiment est supérieur à 0,9 et le tweet a été marqué comme favori.
  • Le nombre de retweets est supérieur à 1 000.

Vous voulez créer une expression comme le pseudo-code suivant pour capturer cette idée :

if (score is-greater-than 0.9 AND Favorited is-equal-to true OR RetweetCount is-greater-than 1000) // Error, cannot mix AND and OR

Azure Logic Apps prend indirectement en charge cette expression et vous pouvez utiliser une fonctionnalité appelée groupes pour activer cette prise en charge. Un groupe est une séquence d’expressions combinée avec AND ou OR. Vous ne pouvez pas mélanger AND et OR au sein d’un groupe.

Examinons quelques exemples exprimés sous forme de pseudo-code. Pour en faciliter la lecture des exemples, nous allons utiliser des lettres minuscules pour représenter les expressions que nous avons besoin de combiner. Le premier exemple ci-dessous est un groupe légitime, alors que le second ne l’est pas :

if (a AND b AND c) // OK
if (a AND b OR  c) // Error, cannot mix AND and OR

Vous devez plutôt créer un groupe pour les expressions connectées par AND dans l’exemple précédent. Ensuite, vous utilisez OR pour connecter le groupe à l’autre expression. Nous utilisons des crochets dans le pseudo-code suivant pour représenter un groupe :

if ([a AND b] OR c) // OK

Action switch

Une action de contrôle switch compare une valeur à plusieurs cas, et exécute uniquement celui qui correspond. Les types pris en charge pour une expression switch sont chaîne et entier. Un switch peut inclure une action par défaut qui s’exécute en l’absence de correspondance.

Par exemple, supposons que vous êtes en train de traiter un e-mail et que vous voulez y répondre différemment selon l’importance du message. L’importance dans un message Outlook est un entier compris entre 0 et 2. Le pseudo-code suivant montre comment générer une action switch pour l’importance de l’e-mail.

switch (Importance)
  case 0: ... // action(s) for low importance
  case 1: ... // action(s) for medium importance
  case 2: ... // action(s) for high importance
  default: ...

Boucle foreach

Une action de contrôle de boucle foreach traite un tableau. La boucle effectue les mêmes actions sur chaque élément du tableau. Par défaut, les actions s’exécutent en parallèle pour chaque élément du tableau, même si vous pouvez contrôler ce comportement dans la configuration de la boucle.

Par exemple, une partie des données de tweet retournées par le déclencheur Lors de la publication d’un nouveau tweet est un tableau d’URL pour le média inclus dans le tweet. Supposons que vous voulez insérer chaque URL dans sa propre ligne dans une base de données. Vous pouvez utiliser une action foreach comme le pseudo-code suivant pour effectuer le traitement :

foreach url in MediaUrls
    insert-row

Boucle until

L’action de contrôle de boucle until exécute un groupe d’actions plusieurs fois. Vous pouvez définir trois critères d’arrêt différents. La boucle s’exécute jusqu’à ce que l’un d’entre eux soit vrai :

  • Condition : une expression évaluée après chaque itération
  • Nombre : nombre maximal d’itérations. La valeur par défaut est 60.
  • Délai d’expiration : heure maximale autorisée spécifiée à l’aide du format ISO 8601. La valeur par défaut est d’une heure.

Vous pouvez utiliser cette boucle pour traiter les données, mais elle convient aussi très bien quand vous avez besoin de retenter une opération de mise en réseau jusqu’à ce qu’elle réussisse ou expire. Par exemple, supposons que votre workflow a besoin d’exécuter une action qui effectue une requête HTTP. Vous pouvez utiliser une boucle until similaire à celle qui figure dans le pseudo-code suivant où la valeur PT5M est égale à cinq minutes :

repeat
    HTTP Get
until (StatusCode is-equal-to 200 OR Count is-greater-than 3 OR Timeout is-greater-than PT5M)

Ajouter une action de contrôle en utilisant le Concepteur

Le concepteur de workflow vous offre un moyen visuel d’ajouter et de configurer une action de contrôle. Toutes les actions de contrôle sont empaquetées à l’intérieur du connecteur Control, la première étape consiste donc à trouver ce connecteur. Une fois que vous avez localisé le connecteur, vous pouvez sélectionner les actions de contrôle que nous avons abordées précédemment, ainsi que quelques autres également utiles, mais pas directement liées à notre objectif de gestion du flux de contrôle. La capture d’écran suivante montre les actions de contrôle disponibles affichées dans le Concepteur :

Screenshot shows the actions in the **Control** connector in the workflow designer. The list includes the following control flow actions: **Condition**, **For each**, **Switch**, and **Until**.

Le concepteur fournit également un moyen visuel pour vous permettre de créer des expressions complexes, notamment des groupes. La capture d’écran suivante montre une action condition affichée dans le Concepteur :

Screenshot shows a configured **Condition** action in the workflow designer. The image contains a **Sentiment** action followed by a **Condition** action. The **Condition** action has a simple expression that tests whether the sentiment score is greater than 0.7.

Dans notre application de supervision des réseaux sociaux, nous utilisons l’action de contrôle Condition pour ajouter une instruction if afin de tester le score de sentiment.