Modificación del flujo de control mediante una acción de control

Completado

Las acciones de control permiten que el flujo de trabajo de aplicación lógica tome decisiones. La aplicación de supervisión de redes sociales usará una acción de control para probar la puntuación de opinión de un tweet y bifurcar la ruta de acceso del flujo de trabajo, en función de si la puntuación es positiva o negativa. En esta unidad, se describirán las cuatro acciones de control que ayudan a administrar la ruta de ejecución en el flujo de trabajo. También se verá cómo usar el diseñador de flujos de trabajo para agregar y configurar una acción de control.

Acción condición

Una acción de control de condición es una instrucción if que permite que el flujo de trabajo se divida en dos rutas, en función de los datos que se procesan. Esta acción consta de una expresión booleana y dos acciones. En tiempo de ejecución, el motor de ejecución evalúa la expresión y elige una acción en función de si la expresión es true o false.

Por ejemplo, es posible que quiera enrutar un informe de gastos a otro administrador en función del importe. Si va a procesar un correo electrónico, es posible que tenga que comprobar si el mensaje está marcado como de alta prioridad. En la aplicación de supervisión de redes sociales, se usará una instrucción de condición para crear una rama en función de la puntuación de opiniones del tweet. En el diagrama siguiente se muestra cómo usa el flujo de trabajo la acción de control de condición.

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

Tipos y operadores

En las acciones de control de condición puede probar objetos numéricos, de cadena, booleanos y JSON. En el pseudocódigo siguiente se muestra un ejemplo de cada tipo simple:

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

Cada tipo tiene un conjunto de operadores que se pueden usar en las comparaciones. En la tabla siguiente se enumeran los operadores para cada tipo:

Numérico Cadena Booleano Objetos JSON
es igual a es igual a es igual a es igual a
no es igual a no es igual a no es igual a no es igual a
es mayor que contiene
es mayor o igual que no contiene
es menor que comienza por
es menor o igual que no empieza por
termina por
no termina por

La mayoría de las operaciones son intuitivas, pero hay dos casos que vale la pena mencionar:

  • Las comparaciones de cadenas distinguen mayúsculas de minúsculas.
  • En las comparaciones JSON se usa lo que se denomina una igualdad profunda. Esta comparación significa que los operadores de igualdad compararán el objeto completo, incluidos los tokens descendientes dentro de los objetos complejos.

Combinación de expresiones con AND y OR

Azure Logic Apps permite crear expresiones complejas mediante la combinación de condiciones con AND u OR. Imagine que quiere identificar tweets con una opinión neutra (una puntuación cercana a 0,5). Puede escribir una expresión similar al pseudocódigo siguiente:

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

Disponibilidad de los datos

Azure Logic Apps hace que los datos de todos los pasos anteriores estén disponibles en los siguientes. Esta característica significa que las expresiones pueden usar los valores generados por cualquiera de los pasos anteriores. Incluso puede combinar valores de otros pasos en una expresión. Por ejemplo, en el pseudocódigo siguiente se buscan tweets con una opinión positiva que no han sido enviados por la empresa. Observe que score procede de la acción Detectar opinión mientras que el valor TweetedBy proviene del desencadenador Cuando se publica un tweet nuevo.

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

Creación de expresiones complejas con grupos

Imagine que quiere crear una expresión para identificar tweets influyentes. Decide que hay dos criterios que se deben cumplir:

  • La puntuación de opiniones está por encima de 0,9 y el tweet se ha marcado como favorito.
  • El recuento de retweets es mayor que 1000.

Para captar esta idea quiere crear una expresión similar al pseudocódigo siguiente:

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 admite indirectamente esta expresión y puede usar una característica denominada grupos para habilitarla. Un grupo es una secuencia de expresiones combinadas con AND u OR. Dentro de un grupo no se pueden mezclar AND y OR.

Ahora se mostrarán algunos ejemplos expresados como pseudocódigo. Para facilitar la lectura de los ejemplos, se usarán letras en minúscula para representar las expresiones que se deben combinar. El primero de los ejemplos siguientes es un grupo válido, pero el segundo no:

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

En su lugar, tendría que crear un grupo para las expresiones conectadas mediante AND en el ejemplo anterior. Después, use OR para conectar el grupo a la otra expresión. En el pseudocódigo siguiente se usan corchetes para representar un grupo:

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

Acción del conmutador

Una acción de control switch compara un valor con varios casos y ejecuta solo el que coincida. Los tipos admitidos para una expresión de conmutador son cadena y entero. Un conmutador puede incluir una acción default (predeterminada) que se ejecuta si no hay ninguna coincidencia.

Por ejemplo, imagine que va a procesar un mensaje de correo electrónico y quiere responder forma diferente en función de la importancia del mensaje. En el correo electrónico de Outlook, la importancia es un entero entre 0 y 2. En el pseudocódigo siguiente se muestra cómo se podría crear una acción switch para la importancia del correo electrónico.

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

Bucle foreach

Una acción de control de bucle foreach procesa una matriz. El bucle realiza las mismas acciones en todos los elementos de la matriz. De forma predeterminada, las acciones para cada elemento de matriz se ejecutan en paralelo, aunque este comportamiento se puede controlar en la configuración del bucle.

Por ejemplo, parte de los datos de tweet devueltos por el desencadenador Cuando se publica un tweet nuevo es una matriz de direcciones URL para los elementos multimedia que se incluyen en el tweet. Imagine que quiere insertar cada dirección URL en su propia fila en una base de datos. Para realizar el procesamiento podría usar una acción foreach como en el pseudocódigo siguiente:

foreach url in MediaUrls
    insert-row

Bucle until

La acción de control de bucle until ejecuta un grupo de acciones varias veces. Puede establecer tres criterios de detención diferentes y el bucle se ejecutará hasta que uno de ellos sea verdadero:

  • Condición: una expresión que se evalúa después de cada iteración
  • Recuento: el número máximo de iteraciones. El valor predeterminado es 60.
  • Tiempo de expiración: el tiempo de reloj máximo permitido especificado con formato ISO 8601. El valor predeterminado es de una hora.

Puede usar este bucle para procesar datos, pero también es una buena opción cuando es necesario volver a intentar una operación de red hasta que se realice correctamente o se agote el tiempo de espera. Por ejemplo, imagine que en el flujo de trabajo es necesario ejecutar una acción que realiza una solicitud HTTP. Puede usar un bucle until similar al que se muestra en el pseudocódigo siguiente donde el valor de tiempo PT5M equivale a cinco minutos:

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

Adición de una acción de control mediante el diseñador

El diseñador de flujos de trabajo proporciona una manera visual de agregar y configurar una acción de control. Todas las acciones de control se empaquetan dentro del conector Control, por lo que el primer paso es encontrar este conector. Después de localizar el conector, podrá seleccionar entre las acciones de control que se han descrito antes y algunas otras de utilidad, pero que no están directamente relacionadas con el objetivo de administrar el flujo de control. En la captura de pantalla siguiente se muestra las acciones de control disponibles representadas en el diseñador:

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

El diseñador también proporciona una manera visual de crear expresiones complejas, incluidos los grupos. En la captura de pantalla siguiente se muestra una acción condición en el diseñador:

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.

En la aplicación de supervisión de redes sociales, se usará la acción de control Condición a fin de agregar una instrucción if para probar la puntuación de opiniones.