Partekatu honen bidez:


Guía de referencia de esquema para los tipos de desencadenador y de acción en Azure Logic Apps

En esta referencia se describen los tipos generales que se usan para identificar desencadenadores y acciones en la definición de flujo de trabajo subyacente de la aplicación lógica, que el lenguaje de definición de flujo de trabajo describe y valida. Para buscar los desencadenadores de conector específicos y las acciones que puede usar en las aplicaciones lógicas, vea la lista en Introducción a los conectores.

Introducción a los desencadenadores

Todos los flujos de trabajo incluyen un desencadenador, que define las llamadas que crean una instancia e inician un flujo de trabajo. Estas son las categorías generales de desencadenadores:

  • Un desencadenador de sondeo, que comprueba un punto de conexión de servicio a intervalos regulares

  • Un desencadenador de inserción, que crea una suscripción a un punto de conexión y proporciona una dirección URL de devolución de llamada para que el punto de conexión pueda notificar al desencadenador cuando se produzca el evento especificado o estén disponibles los datos. El desencadenador espera la respuesta del punto de conexión antes de activarse.

Los desencadenadores tienen estos elementos de nivel superior, aunque algunos son opcionales:

"<trigger-name>": {
   "type": "<trigger-type>",
   "inputs": { "<trigger-inputs>" },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "conditions": [ "<array-with-conditions>" ],
   "runtimeConfiguration": { "<runtime-config-options>" },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
},

Obligatorio

Value Tipo Descripción
<trigger-name> String El nombre del desencadenador
<trigger-type> String El tipo de desencadenador como, por ejemplo, "Http" o "ApiConnection"
<trigger-inputs> Objeto JSON Las entradas que definen el comportamiento del desencadenador
<time-unit> String La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month"
<number-of-time-units> Entero Valor que especifica la frecuencia con la que se desencadena el desencadenador en función de la frecuencia, que es el número de unidades de tiempo que se esperarán hasta que el desencadenador se active de nuevo.

Estos son los intervalos mínimo y máximo:

- Mes: 1-16 meses
- Día: 1-500 días
- Hora: 1-12 000 horas
- Minuto: 1-72 000 minutos
- Segundo: 1-9 999 999 segundos

Por ejemplo, si el intervalo es 6 y la frecuencia es "month", la periodicidad es cada 6 meses.

Opcional

Value Tipo Descripción
<array-with-conditions> Array Una matriz que contiene una o más condiciones que determinan si ejecutar o no el flujo de trabajo. Disponible solo para desencadenadores.
<runtime-config-options> Objeto JSON Puede cambiar el comportamiento del entorno en tiempo de ejecución del desencadenador estableciendo propiedades runtimeConfiguration. Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución.
<splitOn-expression> String Para los desencadenadores que devuelven una matriz, puede especificar una expresión que divide o desagrupa los elementos de matriz en varias instancias de flujo de trabajo para su procesamiento.
<operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Lista de tipos de desencadenador

Cada tipo de desencadenador tiene una interfaz distinta y entradas que definen el comportamiento del desencadenador.

Desencadenadores integrados

Tipo de desencadenador Descripción
HTTP Comprueba o sondea cualquier punto de conexión. El punto de conexión debe ajustarse a un contrato de desencadenamiento específico, ya sea mediante un patrón asincrónico 202 o devolviendo una matriz.
HTTPWebhook Crea un punto de conexión invocable para la aplicación lógica pero llama a la dirección URL especificada para registrar o anular el registro.
Recurrence Se desencadena en función de una programación definida. Puede establecer una fecha y hora futuras para activar este desencadenador. Según la frecuencia, también puede especificar las horas y días para ejecutar el flujo de trabajo.
Request Crea un punto de conexión invocable para la aplicación lógica, también conocido como desencadenador "manual". Por ejemplo, consulte Llamada, desencadenamiento o anidamiento de flujos de trabajo con puntos de conexión HTTP en aplicaciones lógicas.

Desencadenadores de API administrados

Tipo de desencadenador Descripción
ApiConnection Comprueba o sondea un punto de conexión mediante API administradas por Microsoft o "conectores".
ApiConnectionWebhook A fin de crear un punto de conexión invocable para el flujo de trabajo de la aplicación lógica, llama a API administradas por Microsoft o "conectores" para suscribirse o cancelar la suscripción.

Desencadenadores: referencia detallada

Desencadenador APIConnection

Este desencadenador comprueba o sondea un punto de conexión mediante API administradas por Microsoft o "conectores", por lo que los parámetros de este desencadenador pueden ser diferentes según el punto de conexión. Muchas de las secciones de esta definición de desencadenador son opcionales. El comportamiento del desencadenador depende de si se incluyen las secciones o no.

"<APIConnection_trigger_name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": { "<retry-behavior>" },
      "queries": { "<query-parameters>" }
   },
   "recurrence": { 
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

Obligatorio

Propiedad Valor Tipo Descripción
None <APIConnection_trigger_name> String El nombre del desencadenador
host.connection.name <connection-name> String El nombre de la conexión a la API administrada que utiliza el flujo de trabajo
method <method-type> Cadena Método HTTP para comunicarse con la API administrada: GET, PUT, POST, PATCH, DELETE
path <api-operation> String La operación de API a la que llamar
recurrence.frequency <time-unit> Cadena Unidad de tiempo que describe la frecuencia con la que se desencadena el desencadenador: Second, Minute, Hour, Day, Week, Month
recurrence.interval <number-of-time-units> Entero Valor que especifica la frecuencia con la que se desencadena el desencadenador en función de la frecuencia, que es el número de unidades de tiempo que se esperarán hasta que el desencadenador se active de nuevo.

Estos son los intervalos mínimo y máximo:

- Mes: 1-16 meses
- Día: 1-500 días
- Hora: 1-12.000 horas
- Minuto: 1-72 000 minutos
- Segundo: 1-9,999,999 segundos

Por ejemplo, si el intervalo es 6 y la frecuencia es Mes, la periodicidad es cada 6 meses.

Opcional

Propiedad Valor Tipo Descripción
retryPolicy <retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
Consultas <query-parameters> Objeto JSON Cualquier parámetro de consulta que desee incluir con la llamada API. Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
runtimeConfiguration.concurrency.runs <max-runs> Entero De forma predeterminada, las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
runtimeConfiguration.maximumWaitingRuns <max-runs-queue> Entero Si el flujo de trabajo ya ejecuta el número máximo de instancias, las nuevas ejecuciones se colocan en esta cola hasta el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera. Para cambiar el número máximo de instancias, especifique un valor para la propiedad runtimeConfiguration.concurrency.runs .

Nota: Si establece el
splitOn <splitOn-expression> String Para los desencadenadores que devuelven matrices, esta expresión hace referencia a la matriz que se usará para que pueda crear y ejecutar una instancia de flujo de trabajo para cada elemento de la matriz, en lugar de usar un bucle "foreach".

Por ejemplo, esta expresión representa un elemento de la matriz devuelto en el contenido del cuerpo del desencadenador: @triggerbody()?['value']
operationOptions <operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Salidas

Elemento Tipo Descripción
headers Objeto JSON Encabezados de la respuesta
cuerpo Objeto JSON Cuerpo de la respuesta
código de estado Entero El código de estado de la respuesta

Ejemplo

Esta definición del desencadenador busca correo electrónico a diario en la bandeja de entrada de una cuenta profesional o educativa:

"When_a_new_email_arrives": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "get",
      "path": "/Mail/OnNewEmail",
      "queries": {
          "fetchOnlyWithAttachment": false,
          "folderPath": "Inbox",
          "importance": "Any",
          "includeAttachments": false
      }
   },
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

Desencadenador ApiConnectionWebhook

Este desencadenador envía una solicitud de suscripción a un punto de conexión mediante una API administrada por Microsoft, proporciona una dirección URL de devolución de llamada donde el punto de conexión puede enviar una respuesta y espera a que este responda. Para más información, consulte Suscripciones del punto de conexión.

"<ApiConnectionWebhook_trigger_name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
          "NotificationUrl": "@{listCallbackUrl()}"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<connection-name>']['connectionId']"
         }
      },
      "retryPolicy": { "<retry-behavior>" },
      "queries": "<query-parameters>"
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      }
   },
   "splitOn": "<splitOn-expression>",
   "operationOptions": "<operation-option>"
}

Obligatorio

Value Tipo Descripción
<connection-name> String El nombre de la conexión a la API administrada que utiliza el flujo de trabajo
<body-content> Objeto JSON Cualquier contenido de mensaje para enviar como carga a la API administrada

Opcional

Value Tipo Descripción
<retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
<query-parameters> Objeto JSON Todos los parámetros de consulta que se van a incluir con la llamada API

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
<max-runs> Entero De forma predeterminada, las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
<max-runs-queue> Entero Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la propiedad runtimeConfiguration.concurrency.runs, todas las ejecuciones nuevas se pondrán en esta cola hasta alcanzar el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
<splitOn-expression> String Para los desencadenadores que devuelven matrices, esta expresión hace referencia a la matriz que se usará para que pueda crear y ejecutar una instancia de flujo de trabajo para cada elemento de la matriz, en lugar de usar un bucle "foreach".

Por ejemplo, esta expresión representa un elemento de la matriz devuelto en el contenido del cuerpo del desencadenador: @triggerbody()?['value']
<operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Ejemplo

Esta definición del desencadenador se suscribe a la API de Office 365 Outlook, proporciona una dirección URL de devolución de llamada al punto de conexión de API y espera a que el punto de conexión responda cuando llega un nuevo correo electrónico.

"When_a_new_email_arrives_(webhook)": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "body": {
         "NotificationUrl": "@{listCallbackUrl()}" 
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "path": "/MailSubscription/$subscriptions",
      "queries": {
          "folderPath": "Inbox",
          "hasAttachment": "Any",
          "importance": "Any"
      }
   },
   "splitOn": "@triggerBody()?['value']"
}

Desencadenador HTTP

Este desencadenador envía una solicitud al punto de conexión HTTP o HTTPS especificado según la programación de periodicidad especificada. El desencadenador luego comprueba la respuesta para determinar si el flujo de trabajo se ejecuta. Para más información, consulte Llamada a puntos de conexión de servicio mediante HTTP o HTTPS desde Azure Logic Apps.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": "<query-parameters>",
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      }
   },
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Obligatorio

Propiedad Valor Tipo Descripción
method <method-type> String El método que se usará para enviar la solicitud saliente: "GET", "PUT", "POST", "PATCH" o "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> String La dirección URL del punto de conexión HTTP o HTTPS a la que quiere enviar la solicitud saliente. Tamaño máximo de cadena: 2 KB

Para un servicio o recurso de Azure, esta sintaxis de URI incluye el identificador de recurso y la ruta de acceso al recurso al que quiere acceder.
frequency <time-unit> String La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month"
interval <number-of-time-units> Entero Valor que especifica la frecuencia con la que se desencadena el desencadenador en función de la frecuencia, que es el número de unidades de tiempo que se esperarán hasta que el desencadenador se active de nuevo.

Estos son los intervalos mínimo y máximo:

- Mes: 1-16 meses
- Día: 1-500 días
- Hora: 1-12 000 horas
- Minuto: 1-72 000 minutos
- Segundo: 1-9 999 999 segundos

Por ejemplo, si el intervalo es 6 y la frecuencia es "month", la periodicidad es cada 6 meses.

Opcional

Propiedad Valor Tipo Descripción
headers <header-content> Objeto JSON Cualquier encabezado que necesite incluir con la solicitud

Por ejemplo, para establecer el idioma y el tipo:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
queries <query-parameters> Objeto JSON Cualquier parámetro de consulta que necesite usar en la solicitud

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la solicitud.
body <body-content> Objeto JSON El contenido del mensaje que se va a enviar como carga con la solicitud
authentication <authentication-type-and-property-values> Objeto JSON El modelo de autenticación que la solicitud utiliza para autenticar las solicitudes salientes. Para obtener más información, consulte Incorporación de la autenticación en las llamadas salientes. Más allá de Scheduler, se admite la propiedad authority. Cuando no se especifica, el valor predeterminado es https://management.azure.com/, pero puede usar otro valor.
retryPolicy > type <retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
runs <max-runs> Entero De forma predeterminada, las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
maximumWaitingRuns <max-runs-queue> Entero Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la propiedad runtimeConfiguration.concurrency.runs, todas las ejecuciones nuevas se pondrán en esta cola hasta alcanzar el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
operationOptions <operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Salidas

Elemento Tipo Descripción
headers Objeto JSON Encabezados de la respuesta
body Objeto JSON Cuerpo de la respuesta
status code Entero El código de estado de la respuesta

Requisitos de las solicitudes entrantes

Para que funcione bien con la aplicación lógica, el punto de conexión debe cumplir con un patrón de desencadenador específico o un contrato y reconocer estas propiedades de respuesta:

Propiedad Obligatorio Descripción
status code El código de estado "200 OK" inicia una ejecución. Cualquier otro código de estado no inicia una ejecución.
Encabezado Retry-after No Número de segundos hasta que la aplicación lógica sondea de nuevo el punto de conexión
Encabezado Location No La dirección URL para llamar en el siguiente intervalo de sondeo. Si no se especifica, se usa la dirección URL original.

Comportamientos de ejemplo para solicitudes distintas

status code Reintentar después Comportamiento
200 {none} Ejecutar el flujo de trabajo y luego comprobar de nuevo si hay más datos después de la periodicidad definida.
200 10 segundos Ejecutar el flujo de trabajo y luego comprobar de nuevo si hay más datos después de 10 segundos.
202 60 segundos No desencadenar el flujo de trabajo. El próximo intento tiene lugar en un minuto, según cuál sea la periodicidad definida. Si la periodicidad definida es inferior a un minuto, el encabezado retry-after tiene prioridad. Si no, se usa la periodicidad definida.
400 {none} Solicitud incorrecta, no ejecutar el flujo de trabajo. Si no se define ningún retryPolicy, se utiliza la directiva predeterminada. Una vez alcanzado el número de reintentos, el desencadenador volverá a comprobar si hay datos después de la periodicidad definida.
500 {none} Error del servidor, no ejecutar el flujo de trabajo. Si no se define ningún retryPolicy, se utiliza la directiva predeterminada. Una vez alcanzado el número de reintentos, el desencadenador volverá a comprobar si hay datos después de la periodicidad definida.

Desencadenador HTTPWebhook

Este desencadenador hace que la aplicación lógica sea invocable mediante la creación de un punto de conexión que puede registrar una suscripción llamando a la dirección URL especificada de este. Cuando se crea este desencadenador en el flujo de trabajo, una solicitud saliente realiza la llamada para registrar la suscripción. De este modo, el desencadenador puede iniciar la escucha de eventos. Cuando una operación hace que este desencadenador no sea válido, una solicitud saliente realiza automáticamente la llamada para cancelar la suscripción. Para más información, consulte Suscripciones del punto de conexión.

También puede especificar límites asincrónicos en un desencadenador HTTPWebhook. El comportamiento del desencadenador depende de las secciones que se usen o se omitan.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<endpoint-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": { "<retry-behavior>" }
      },
      "unsubscribe": {
         "method": "<method-type>",
         "url": "<endpoint-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" }
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Algunos valores, como <method-type>, están disponibles para los objetos "subscribe" y "unsubscribe".

Obligatorio

Value Tipo Descripción
<method-type> String El método HTTP que se usará para la solicitud de suscripción: "GET", "PUT", "POST", "PATCH" o "DELETE"
<endpoint-subscribe-URL> String Dirección URL del punto de conexión a donde enviar la solicitud de suscripción

Opcional

Value Tipo Descripción
<method-type> String El método HTTP que se usará para la solicitud de cancelación: "GET", "PUT", "POST", "PATCH" o "DELETE"
<endpoint-unsubscribe-URL> String Dirección URL del punto de conexión a donde enviar la solicitud de cancelación
<body-content> String Cualquier contenido de mensaje para enviar en la solicitud de suscripción o de cancelación
<authentication-type> Objeto JSON El modelo de autenticación que la solicitud utiliza para autenticar las solicitudes salientes. Para obtener más información, consulte Incorporación de la autenticación en las llamadas salientes.
<retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
<max-runs> Entero De forma predeterminada, todas las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
<max-runs-queue> Entero Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la propiedad runtimeConfiguration.concurrency.runs, todas las ejecuciones nuevas se pondrán en esta cola hasta alcanzar el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
<operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Salidas

Elemento Tipo Descripción
headers Objeto JSON Encabezados de la respuesta
body Objeto JSON Cuerpo de la respuesta
status code Entero El código de estado de la respuesta

Ejemplo

Este desencadenador crea una suscripción al punto de conexión especificado, proporciona una dirección URL única de devolución de llamada y espera a artículos sobre tecnología recientemente publicados.

"HTTP_Webhook": {
   "type": "HttpWebhook",
   "inputs": {
      "subscribe": {
         "method": "POST",
         "uri": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{listCallbackUrl()}",
            "hub.mode": "subscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         },
      },
      "unsubscribe": {
         "method": "POST",
         "url": "https://pubsubhubbub.appspot.com/subscribe",
         "body": {
            "hub.callback": "@{workflow().endpoint}@{listCallbackUrl()}",
            "hub.mode": "unsubscribe",
            "hub.topic": "https://pubsubhubbub.appspot.com/articleCategories/technology"
         }
      }
   }
}

Desencadenador de periodicidad

Este desencadenador se ejecuta según la programación de periodicidad especificada y proporciona una manera sencilla de ejecutar con regularidad un flujo de trabajo.

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
      "startTime": "<start-date-time-with-format-YYYY-MM-DDThh:mm:ss>",
      "timeZone": "<time-zone>",
      "schedule": {
         // Applies only when frequency is Day or Week. Separate values with commas.
         "hours": [ <one-or-more-hour-marks> ], 
         // Applies only when frequency is Day or Week. Separate values with commas.
         "minutes": [ <one-or-more-minute-marks> ], 
         // Applies only when frequency is Week. Separate values with commas.
         "weekDays": [ "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday" ] 
      }
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-runs-queue>
      }
   },
   "operationOptions": "<operation-option>"
}

Obligatorio

Value Tipo Descripción
<time-unit> String La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month"
<number-of-time-units> Entero Valor que especifica la frecuencia con la que se desencadena el desencadenador en función de la frecuencia, que es el número de unidades de tiempo que se esperarán hasta que el desencadenador se active de nuevo.

Estos son los intervalos mínimo y máximo:

- Mes: 1-16 meses
- Día: 1-500 días
- Hora: 1-12 000 horas
- Minuto: 1-72 000 minutos
- Segundo: 1-9 999 999 segundos

Por ejemplo, si el intervalo es 6 y la frecuencia es "month", la periodicidad es cada 6 meses.

Opcional

Value Tipo Descripción
<start-date-time-with-format-YYYY-MM-DDThh:mm:ss> Cadena Fecha y hora de inicio en este formato:

AAAA-MM-DDThh:mm:ss si especifica una zona horaria

O bien

AAAA-MM-DDThh:mm:ssZ si no especifica una zona horaria

Por ejemplo, si desea la fecha del 18 de septiembre de 2017 a las 2:00 p.m., especifique entonces "2017-09-18T14:00:00" y especifique una zona horaria como "Hora estándar del Pacífico", o bien especifique "2017-09-18T14:00:00Z" sin una zona horaria.

Nota: Esta hora de inicio tiene un máximo de 49 años en el futuro y debe seguir la especificación de fecha y hora ISO 8601 en formato de fecha y hora UTC, pero sin una diferencia horaria con UTC. Si no se especifica una zona horaria, debe agregar la letra "Z" al final sin espacios. Esta "Z" se refiere al equivalente de hora náutica.

Para las programaciones simples, la hora de inicio es la primera aparición, mientras que para programaciones complejas, el desencadenador no se activa antes de la hora de inicio. Para más información sobre las fechas y horas de inicio, consulte Introducción al desencadenador de periodicidad.
<time-zone> String Solo se aplica cuando se especifica una hora de inicio porque este desencadenador no acepta diferencia horaria con UTC. Especifique la zona horaria que desea aplicar.
<one-or-more-hour-marks> Entero o matriz de enteros Si especifica "Day" o "Semana" para frequency, puede especificar uno o varios enteros de 0 a 23, separados por comas, como las horas del día en las que desea ejecutar el flujo de trabajo.

Por ejemplo, si especifica "10", "12" y "14", obtendrá 10 a. m., 12 p. m. y 2 p. m. como las marcas de hora.
<one-or-more-minute-marks> Entero o matriz de enteros Si especifica "Day" o "Semana" para frequency, puede especificar uno o varios enteros de 0 a 59, separados por comas, como los minutos de la hora en los que desea ejecutar el flujo de trabajo.

Por ejemplo, puede especificar "30" como la marca de minuto y, utilizando el ejemplo anterior para las horas del día, obtendrá 10:30 a. m., 12:30 p. m. y las 2:30 p. m.
weekDays Cadena o matriz de cadenas Si especifica "Week" para frequency, puede especificar uno o varios días, separados por comas, cuando quiera ejecutar el flujo de trabajo: "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" y "Sunday"
<max-runs> Entero De forma predeterminada, todas las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
<max-runs-queue> Entero Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la propiedad runtimeConfiguration.concurrency.runs, todas las ejecuciones nuevas se pondrán en esta cola hasta alcanzar el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
<operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Ejemplo 1

La periodicidad básica con que se ejecuta diariamente el desencadenador:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1
   }
}

Ejemplo 2

Puede especificar una fecha y hora de inicio para activar el desencadenador. Este desencadenador de periodicidad se inicia en la fecha especificada y luego se activa a diario:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Day",
      "interval": 1,
      "startTime": "2017-09-18T00:00:00Z"
   }
}

Ejemplo 3

Este desencadenador de periodicidad se inicia el 9 de septiembre de 2017 a las 2:00 p.m. y se activa semanalmente cada lunes a las 10:30 a.m., 12:30 p.m. y 2:30 p.m., Hora estándar del Pacífico:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Week",
      "interval": 1,
      "schedule": {
         "hours": [ 10, 12, 14 ],
         "minutes": [ 30 ],
         "weekDays": [ "Monday" ]
      },
      "startTime": "2017-09-07T14:00:00",
      "timeZone": "Pacific Standard Time"
   }
}

Para más información sobre ejemplos de este desencadenador, consulte Creación y programación de tareas ejecutadas con regularidad con Azure Logic Apps.

Desencadenador de solicitud

Este desencadenador hace que se pueda llamar a la aplicación lógica mediante la creación de un punto de conexión que puede aceptar solicitudes entrantes. Para este desencadenador, proporcione un esquema JSON que describa y valide la carga o las entradas que el desencadenador recibe de la solicitud entrante. El esquema también facilita la referencia a propiedades del desencadenador desde acciones posteriores del flujo de trabajo.

Para llamar a este desencadenador, debe usar la listCallbackUrlAPI que se describe en API REST de Servicio de flujo de trabajo. Para información sobre cómo usar este desencadenador como punto de conexión HTTP, consulte Llamada, desencadenamiento o anidamiento de flujos de trabajo con puntos de conexión HTTP en aplicaciones lógicas.

"manual": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "<method-type>",
      "relativePath": "<relative-path-for-accepted-parameter>",
      "schema": {
         "type": "object",
         "properties": { 
            "<property-name>": {
               "type": "<property-type>"
            }
         },
         "required": [ "<required-properties>" ]
      }
   },
   "runTimeConfiguration": {
      "concurrency": {
         "runs": <max-runs>,
         "maximumWaitingRuns": <max-run-queue>
      },
   },
   "operationOptions": "<operation-option>"
}

Obligatorio

Value Tipo Descripción
<property-name> String El nombre de una propiedad en el esquema JSON que describe la carga
<property-type> String El tipo de propiedad

Opcional

Value Tipo Descripción
<method-type> String El método que las solicitudes entrantes deben usar para llamar a la aplicación lógica: "GET", "PUT", "POST", "PATCH", "DELETE"
<relative-path-for-accepted-parameter> String La ruta de acceso relativa del parámetro que la dirección URL del punto de conexión puede aceptar
<required-properties> Array Una o más propiedades que requieren valores
<max-runs> Entero De forma predeterminada, todas las instancias del flujo de trabajo se ejecutan al mismo tiempo (de manera simultánea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio en la simultaneidad de desencadenadores.
<max-runs-queue> Entero Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la propiedad runtimeConfiguration.concurrency.runs, todas las ejecuciones nuevas se pondrán en esta cola hasta alcanzar el límite predeterminado. Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
<operation-option> String Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Ejemplo

Este desencadenador especifica que una solicitud entrante debe usar el método HTTP POST para llamar al desencadenador e incluye un esquema que valida la entrada de la solicitud entrante:

"manual": {
   "type": "Request",
   "kind": "Http",
   "inputs": {
      "method": "POST",
      "schema": {
         "type": "object",
         "properties": {
            "customerName": {
               "type": "String"
            },
            "customerAddress": { 
               "type": "Object",
               "properties": {
                  "streetAddress": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  }
               }
            }
         }
      }
   }
}

Condiciones del desencadenador

Para cualquier desencadenador, y solo desencadenadores, puede incluir una matriz con una o varias expresiones de condiciones que determinan si el flujo de trabajo debe ejecutarse o no. Para agregar la propiedad conditions a un desencadenador del flujo de trabajo, abra la aplicación lógica en el editor de la vista Código.

Por ejemplo, puede especificar que un desencadenador se active solo cuando un sitio web devuelve un error de servidor interno haciendo referencia al código de estado del desencadenador en la propiedad conditions:

"Recurrence": {
   "type": "Recurrence",
   "recurrence": {
      "frequency": "Hour",
      "interval": 1
   },
   "conditions": [ {
      "expression": "@equals(triggers().code, 'InternalServerError')"
   } ]
}

De forma predeterminada, un desencadenador solo se activa después de obtener una respuesta "200 OK". Cuando una expresión hace referencia a un código de estado del desencadenador, se reemplaza el comportamiento predeterminado de este. Por tanto, si desea que el desencadenador se active con más de un código de estado, como el "200" y el "201", debe incluir esta expresión como condición:

@or(equals(triggers().code, 200),equals(triggers().code, 201))

Desencadenar varias ejecuciones en una matriz

Si el desencadenador recibe una matriz para que la procese el flujo de trabajo, un bucle "para cada una" podría tardar demasiado tiempo en procesar cada elemento de la matriz. En lugar de eso, puede usar la propiedad SplitOn en el desencadenador para desagrupar la matriz. La desagrupación sirve para dividir los elementos de la matriz e iniciar una nueva instancia de flujo de trabajo que se ejecuta para cada elemento de la matriz. Este enfoque resulta útil, por ejemplo, si desea sondear un punto de conexión que puede devolver varios elementos nuevos entre intervalos de sondeo.

Si el archivo Swagger del desencadenador describe una carga que es una matriz, la propiedad SplitOn se agrega automáticamente a su desencadenador. En caso contrario, agregue esta propiedad en la carga de respuesta que tiene la matriz que desea desagrupar.

Antes de usar la funcionalidad SplitOn, revise las consideraciones siguientes:

  • Si está habilitada la simultaneidad del desencadenador, se reduce significativamente el límite SplitOn. Si el número de elementos supera este límite, se deshabilita la funcionalidad de SplitOn.

  • No puede utilizar la capacidad SplitOn con un patrón de respuesta sincrónica. Cualquier flujo de trabajo que use la propiedad SplitOn e incluya una acción de respuesta se ejecuta de forma asincrónica y envía de inmediato una respuesta 202 ACCEPTED.

  • Para conocer el número máximo de elementos de matriz que SplitOn puede procesar en una única ejecución de flujo de trabajo, consulte Límites y configuración.

Ejemplo

Supongamos que tiene un desencadenador HTTP que llama a una API y recibe esta respuesta:

{
   "Status": "Succeeded",
   "Rows": [ 
      { 
         "id": 938109380,
         "name": "customer-name-one"
      },
      {
         "id": 938109381,
         "name": "customer-name-two"
      }
   ]
}

El flujo de trabajo solo necesita el contenido de la matriz en Rows, por lo que puede crear un desencadenador como en este ejemplo:

"HTTP_Debatch": {
   "type": "Http",
    "inputs": {
        "uri": "https://mydomain.com/myAPI",
        "method": "GET"
    },
   "recurrence": {
      "frequency": "Second",
      "interval": 1
    },
    "splitOn": "@triggerBody()?.Rows"
}

Nota

Si usa el comando SplitOn, no puede obtener las propiedades que están fuera de la matriz. Así pues, en este ejemplo, no puede obtener la propiedad status en la respuesta que se devuelve a través de la API.

Para evitar un error si la propiedad Rows no existe, en este ejemplo se utiliza el operador ?.

La definición de flujo de trabajo ahora puede usar @triggerBody().name para obtener los valores name"customer-name-one" de la primera ejecución y "customer-name-two" de la segunda ejecución. Así, las salidas del desencadenador se parecen a estos ejemplos:

{
   "body": {
      "id": 938109380,
      "name": "customer-name-one"
   }
}
{
   "body": {
      "id": 938109381,
      "name": "customer-name-two"
   }
}

Información general sobre acciones

Azure Logic Apps proporciona varios tipos de acción, cada uno con diferentes entradas que definen un comportamiento único de esta. Las acciones tienen estos elementos de alto nivel, aunque algunos son opcionales:

"<action-name>": {
   "type": "<action-type>",
   "inputs": { 
      "<input-name>": { "<input-value>" },
      "retryPolicy": "<retry-behavior>" 
   },
   "runAfter": { "<previous-trigger-or-action-status>" },
   "runtimeConfiguration": { "<runtime-config-options>" },
   "operationOptions": "<operation-option>"
},

Obligatorio

Value Tipo Descripción
<action-name> String El nombre de la acción
<action-type> String El tipo de acción, por ejemplo, "Http" o "ApiConnection"
<input-name> String El nombre de una entrada que define el comportamiento de la acción
<input-value> Varios El valor de entrada, que puede ser una cadena, un número entero, un objeto JSON, etc.
<previous-trigger-or-action-status> Objeto JSON El nombre y el estado resultante del desencadenador o acción que se debe ejecutar inmediatamente antes de que se pueda ejecutar esta acción actual

Opcional

Value Tipo Descripción
<retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para obtener más información, consulte Directivas de reintentos.
<runtime-config-options> Objeto JSON Para algunas acciones, puede cambiar el comportamiento de la acción en el tiempo de ejecución estableciendo propiedades runtimeConfiguration. Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución.
<operation-option> String Para algunas acciones, puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para más información, consulte Opciones de operación.

Lista de tipos de acción

Estos son algunos tipos de acción de uso frecuente:

Acciones integradas

Tipo de acción Descripción
Redactar Crea una única salida a partir de las entradas y puede tener varios tipos.
Ejecutar código de JavaScript Ejecute fragmentos de código de JavaScript que se ajusten a criterios específicos. Para obtener los requisitos de código y más información, vea Adición y ejecución de fragmentos de código con código en línea.
Function Llama a una función de Azure.
HTTP Llama a un punto de conexión HTTP.
Combinar Crea una cadena con todos los elementos de una matriz y los separa con el carácter delimitador especificado.
Análisis del archivo JSON Crea tokens fáciles de usar a partir de propiedades del contenido JSON. Posteriormente, puede hacer referencia a esas propiedades mediante la inclusión de los tokens en la aplicación lógica.
Consulta Crea una matriz a partir de elementos de otra matriz basándose en una condición o un filtro.
Respuesta Crea una respuesta a una solicitud o una llamada entrante.
Seleccionar Crea una matriz con objetos JSON mediante la transformación de los elementos de otra matriz según la asignación especificada.
Tabla Crea una tabla CSV o HTML a partir de una matriz.
Terminate Detiene un flujo de trabajo que se está ejecutando activamente.
Esperar Pone en pausa el flujo de trabajo durante un tiempo especificado o hasta la fecha y hora especificadas.
Workflow Anida un flujo de trabajo dentro de otro flujo de trabajo.

Acciones de API administradas

Tipo de acción Descripción
ApiConnection Comprueba un punto de conexión HTTP mediante una API administrada por Microsoft.
ApiConnectionWebhook Funciona igual que HTTP Webhook, pero usa una API administrada por Microsoft.

Acciones de control del flujo de trabajo

Estas acciones le ayudan a controlar la ejecución del flujo de trabajo e incluyen, a su vez, otras acciones. Desde fuera de una acción de control de flujo de trabajo puede hacer referencia directamente a las acciones de esa acción de control del flujo de trabajo. Por ejemplo, si tiene una acción Http dentro de un ámbito, puede hacer referencia a la expresión @body('Http') desde cualquier lugar del flujo de trabajo. No obstante, las acciones que existen en una acción de control del flujo de trabajo solo se pueden "ejecutar después" de otras acciones que están en la misma estructura de control del flujo de trabajo.

Tipo de acción Descripción
ForEach Ejecuta las mismas acciones en un bucle para todos los elementos de una matriz.
If Ejecuta acciones en función de si la condición especificada es true o false.
Scope Ejecuta acciones según el estado del grupo a partir de un conjunto de acciones.
Switch Ejecuta acciones que se organizan en casos cuando los valores de las expresiones, objetos o tokens coinciden con los valores especificados por cada caso.
Until Ejecuta acciones en un bucle hasta que la condición especificada es true.

Acciones: referencia detallada

Acción APIConnection

Esta acción envía una solicitud HTTP a una API administrada por Microsoft y requiere información sobre la API y los parámetros más una referencia a una conexión válida.

"<action-name>": {
   "type": "ApiConnection",
   "inputs": {
      "host": {
         "connection": {
            "name": "@parameters('$connections')['<api-name>']['connectionId']"
         },
         "<other-action-specific-input-properties>"        
      },
      "method": "<method-type>",
      "path": "/<api-operation>",
      "retryPolicy": "<retry-behavior>",
      "queries": { "<query-parameters>" },
      "<other-action-specific-properties>"
    },
    "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<action-name> String El nombre de la acción proporcionada por el conector
<api-name> String El nombre de la API administrada por Microsoft que se usa para la conexión
<method-type> String El método HTTP para llamar a la API: "GET", "PUT", "POST", "PATCH" o "DELETE"
<api-operation> String La operación de API a la que llamar

Opcional

Value Tipo Descripción
<other-action-specific-input-properties> Objeto JSON Cualquier otra propiedad de entrada que sea aplicable a esta acción específica
<retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
<query-parameters> Objeto JSON Cualquier parámetro de consulta que desee incluir con la llamada API.

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
<other-action-specific-properties> Objeto JSON Cualquier otra propiedad que sea aplicable a esta acción específica

Ejemplo

Esta definición describe la acción Enviar un correo electrónico para el conector de Office 365 Outlook, que es una API administrada por Microsoft:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "Thank you for your membership!",
         "Subject": "Hello and welcome!",
         "To": "Sophie.Owen@contoso.com"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "POST",
      "path": "/Mail"
    },
    "runAfter": {}
}

Acción de APIConnectionWebhook

Esta acción envía una solicitud de suscripción a través de HTTP a un punto de conexión mediante una API administrada por Microsoft, proporciona una dirección URL de devolución de llamada donde el punto de conexión puede enviar una respuesta y espera a que este responda. Para más información, consulte Suscripciones del punto de conexión.

"<action-name>": {
   "type": "ApiConnectionWebhook",
   "inputs": {
      "subscribe": {
         "method": "<method-type>",
         "uri": "<api-subscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "retryPolicy": "<retry-behavior>",
         "queries": { "<query-parameters>" },
         "<other-action-specific-input-properties>"
      },
      "unsubscribe": {
         "method": "<method-type>",
         "uri": "<api-unsubscribe-URL>",
         "headers": { "<header-content>" },
         "body": "<body-content>",
         "authentication": { "<authentication-type>" },
         "<other-action-specific-properties>"
      },
   },
   "runAfter": {}
}

Algunos valores, como <method-type>, están disponibles para los objetos "subscribe" y "unsubscribe".

Obligatorio

Value Tipo Descripción
<action-name> String El nombre de la acción proporcionada por el conector
<method-type> String El método HTTP que se usará para suscribirse o cancelar la suscripción desde un punto de conexión: "GET", "PUT", "POST", "PATCH" o "DELETE"
<api-subscribe-URL> String El identificador URI que se utiliza para suscribirse a la API

Opcional

Value Tipo Descripción
<api-unsubscribe-URL> String El identificador URI que se utiliza para cancelar la suscripción desde la API
<header-content> Objeto JSON Los encabezados que se van a enviar en la solicitud

Por ejemplo, para establecer el idioma y el tipo en una solicitud: .

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
<body-content> Objeto JSON Cualquier contenido de mensaje que se vaya a enviar en la solicitud
<authentication-type> Objeto JSON El modelo de autenticación que la solicitud utiliza para autenticar las solicitudes salientes. Para obtener más información, consulte Incorporación de la autenticación en las llamadas salientes.
<retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
<query-parameters> Objeto JSON Todos los parámetros de consulta que se van a incluir con la llamada API

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
<other-action-specific-input-properties> Objeto JSON Cualquier otra propiedad de entrada que sea aplicable a esta acción específica
<other-action-specific-properties> Objeto JSON Cualquier otra propiedad que sea aplicable a esta acción específica

También puede especificar límites sobre una acción de ApiConnectionWebhook de la misma manera que los límites asincrónicos de HTTP.

Acción Compose

Esta acción crea una única salida a partir de varias entradas, incluidas las expresiones. La salida y las entradas pueden tener cualquier tipo que Azure Logic Apps admita de forma nativa como matrices, objetos JSON, XML y binario. Posteriormente, puede usar la salida de la acción en otras acciones.

"Compose": {
   "type": "Compose",
   "inputs": "<inputs-to-compose>",
   "runAfter": {}
},

Obligatorio

Value Tipo Descripción
<inputs-to-compose> Any Las entradas para la creación de una única salida

Ejemplo 1

Esta definición de acción combina abcdefg con un espacio final y con el valor 1234:

"Compose": {
   "type": "Compose",
   "inputs": "abcdefg 1234",
   "runAfter": {}
},

Esta es la salida que resulta de la acción:

abcdefg 1234

Ejemplo 2

Esta definición de la acción combina una variable de cadena que contiene abcdefg y una variable de entero que contiene 1234:

"Compose": {
   "type": "Compose",
   "inputs": "@{variables('myString')}@{variables('myInteger')}",
   "runAfter": {}
},

Esta es la salida que resulta de la acción:

"abcdefg1234"

Acción Ejecutar código de JavaScript

Esta acción ejecuta un fragmento de código de JavaScript y devuelve los resultados a través de un token al que pueden referirse acciones posteriores en el flujo de trabajo.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "<JavaScript-code-snippet>",
      "explicitDependencies": {
         "actions": [ <preceding-actions> ],
         "includeTrigger": true
      }
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<Fragmento de código de JavaScript> Varía El código JavaScript que se va a ejecutar. Para conocer los requisitos de código y obtener más información, consulte Ejecución de fragmentos de código en flujos de trabajo.

En el atributo code, el fragmento de código puede usar el objeto workflowContext de solo lectura como entrada. Este objeto tiene subpropiedades que proporcionan al código acceso a las salidas del desencadenador y las acciones anteriores en el flujo de trabajo. Para obtener más información sobre el objeto workflowContext, consulte Referencia a las salidas del desencadenador y la acción mediante el objeto workflowContext.

Obligatorio en algunos casos

El atributo explicitDependencies especifica que quiere incluir de forma explícita resultados del desencadenador, acciones anteriores o ambos como dependencias para el fragmento de código. Para obtener más información sobre cómo agregar estas dependencias, vea Agregar dependencias como parámetros a una acción Código insertado.

Para el atributo includeTrigger, puede especificar valores true o false.

Value Tipo Descripción
<acciones anteriores> Matriz de cadena Una matriz con los nombres de acción en formato JSON como dependencias. Asegúrese de usar los nombres de acción que aparecen en la definición del flujo de trabajo donde los nombres de acción usan caracteres de subrayado (_), no espacios (" ").

Ejemplo 1

Esta acción ejecuta código que obtiene el nombre de la aplicación lógica y devuelve el texto "Hola mundo de <Nombre de la aplicación lógica>" como resultado. En este ejemplo, el código hace referencia al nombre del flujo de trabajo mediante el acceso a la propiedad workflowContext.workflow.name a través del objeto workflowContext de solo lectura. Para más información sobre el uso del objeto workflowContext, vea Referencia a los resultados de desencadenadores y acciones en el código.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var text = \"Hello world from \" + workflowContext.workflow.name;\r\n\r\nreturn text;"
   },
   "runAfter": {}
}

Ejemplo 2

Esta acción ejecuta código en una aplicación lógica que se desencadena cuando llega un nuevo correo electrónico a una cuenta de Outlook. El flujo de trabajo también usa la acción de envío de correo electrónico de aprobación de Office 365 Outlook que reenvía el contenido del correo electrónico recibido junto con una solicitud de aprobación.

El código extrae las direcciones de correo electrónico de la propiedad Body del mensaje de correo electrónico y devuelve las direcciones junto con el valor de la propiedad SelectedOption de la acción de aprobación. La acción incluye de forma explícita la acción de envío de correo electrónico de aprobación como una dependencia en el objeto actions dentro del objeto explicitDependencies.

"Execute_JavaScript_Code": {
   "type": "JavaScriptCode",
   "inputs": {
      "code": "var myResult = /(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\r\n\r\nvar email = workflowContext.trigger.outputs.body.Body;\r\n\r\nvar reply = workflowContext.actions.Send_approval_email.outputs.body.SelectedOption;\r\n\r\nreturn email.match(myResult) + \" - \" + reply;\r\n;",
      "explicitDependencies": {
         "actions": [
            "Send_approval_email"
         ]
      }
   },
   "runAfter": {}
}

Acción de la función

Esta acción llama a una función de Azure creada previamente.

"<Azure-function-name>": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "<Azure-function-ID>"
      },
      "method": "<method-type>",
      "headers": { "<header-content>" },
      "body": { "<body-content>" },
      "queries": { "<query-parameters>" } 
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<Azure-function-ID> String El identificador de recurso de la función de Azure que quiere llamar. Este es el formato del valor:

"/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Web/sites/<Azure-function-app-name>/functions/<Azure-function-name>"
<method-type> Cadena Método HTTP que se va a usar para llamar a la función: "GET", "PUT", "POST", "PATCH" o "DELETE"

Si no se especifica, "POST" es el método predeterminado.

Opcional

Value Tipo Descripción
<header-content> Objeto JSON Cualquier encabezado que se envíe con la llamada

Por ejemplo, para establecer el idioma y el tipo en una solicitud: .

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
<body-content> Objeto JSON Cualquier contenido de mensaje que se vaya a enviar en la solicitud
<query-parameters> Objeto JSON Todos los parámetros de consulta que se van a incluir con la llamada API

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
<other-action-specific-input-properties> Objeto JSON Cualquier otra propiedad de entrada que sea aplicable a esta acción específica
<other-action-specific-properties> Objeto JSON Cualquier otra propiedad que sea aplicable a esta acción específica

Al guardar la aplicación lógica, Azure Logic Apps realiza estas comprobaciones en la función a la que se hace referencia:

  • El flujo de trabajo debe tener acceso a la función.

  • El flujo de trabajo solo puede usar un desencadenador HTTP estándar o webhook JSON genérico.

    Azure Logic Apps obtiene y almacena en caché la dirección URL del desencadenador, que se usa en tiempo de ejecución. Sin embargo, si una operación invalida la dirección URL almacenada en caché, se produce un error en tiempo de ejecución en la acción Function. Para corregir este problema, vuelva a guardar la aplicación lógica de forma que esta obtenga y almacene en caché la dirección URL del desencadenador de nuevo.

  • La función no puede tener ninguna ruta definida.

  • Solo se permiten los niveles de autorización "function" y "anonymous".

Ejemplo

Esta definición de acción llama a la función "GetProductID" creada anteriormente:

"GetProductID": {
   "type": "Function",
   "inputs": {
     "function": {
        "id": "/subscriptions/<XXXXXXXXXXXXXXXXXXXX>/resourceGroups/myLogicAppResourceGroup/providers/Microsoft.Web/sites/InventoryChecker/functions/GetProductID"
      },
      "method": "POST",
      "headers": { 
          "x-ms-date": "@utcnow()"
       },
      "body": { 
          "Product_ID": "@variables('ProductID')"
      }
   },
   "runAfter": {}
}

Acción HTTP

Esta acción envía una solicitud al punto de conexión especificado y comprueba la respuesta para determinar si el flujo de trabajo se ejecuta. Para más información, consulte Llamada a puntos de conexión de servicio mediante HTTP o HTTPS desde Azure Logic Apps.

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "<method-type>",
      "uri": "<HTTP-or-HTTPS-endpoint-URL>",
      "headers": { "<header-content>" },
      "queries": { "<query-parameters>" },
      "body": "<body-content>",
      "authentication": { "<authentication-type-and-property-values>" },
      "retryPolicy": {
         "type": "<retry-behavior>"
      },
   },
   "runAfter": {}
}

Obligatorio

Propiedad Valor Tipo Descripción
method <method-type> String El método que se usará para enviar la solicitud saliente: "GET", "PUT", "POST", "PATCH" o "DELETE"
uri <HTTP-or-HTTPS-endpoint-URL> String La dirección URL del punto de conexión HTTP o HTTPS a la que quiere enviar la solicitud saliente. Tamaño máximo de cadena: 2 KB

Para un servicio o recurso de Azure, esta sintaxis de URI incluye el identificador de recurso y la ruta de acceso al recurso al que quiere acceder.

Opcional

Propiedad Valor Tipo Descripción
headers <header-content> Objeto JSON Cualquier encabezado que necesite incluir con la solicitud

Por ejemplo, para establecer el idioma y el tipo:

"headers": { "Accept-Language": "en-us", "Content-Type": "application/json" }
queries <query-parameters> Objeto JSON Cualquier parámetro de consulta que necesite usar en la solicitud

Por ejemplo, el objeto "queries": { "api-version": "2018-01-01" } agrega ?api-version=2018-01-01 a la llamada.
body <body-content> Objeto JSON El contenido del mensaje que se va a enviar como carga con la solicitud
authentication <authentication-type-and-property-values> Objeto JSON El modelo de autenticación que la solicitud utiliza para autenticar las solicitudes salientes. Para obtener más información, consulte Incorporación de la autenticación en las llamadas salientes. Más allá de Scheduler, se admite la propiedad authority. Cuando no se especifica, el valor predeterminado es https://management.azure.com/, pero puede usar otro valor.
retryPolicy > type <retry-behavior> Objeto JSON Personaliza el comportamiento de reintento para errores intermitentes, que tienen el código de estado 408, 429 y 5XX, y todas las excepciones de conectividad. Para más información, consulte Directivas de reintentos.
<other-action-specific-input-properties> <input-property> Objeto JSON Cualquier otra propiedad de entrada que sea aplicable a esta acción específica
<other-action-specific-properties> <property-value> Objeto JSON Cualquier otra propiedad que sea aplicable a esta acción específica

Ejemplo

Esta definición de acción obtiene las últimas noticias mediante el envío de una solicitud al punto de conexión especificado:

"HTTP": {
   "type": "Http",
   "inputs": {
      "method": "GET",
      "uri": "https://mynews.example.com/latest"
   }
}

Acción Combinar

Esta acción crea una cadena con todos los elementos de una matriz y los separa con el carácter delimitador especificado.

"Join": {
   "type": "Join",
   "inputs": {
      "from": <array>,
      "joinWith": "<delimiter>"
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<array> Array La matriz o expresión que proporciona los elementos de origen. Si especifica una expresión, incluya esa expresión entre comillas dobles.
<delimitador> Cadena de un único carácter El carácter que separa cada elemento de la cadena

Ejemplo

Supongamos que ha creado anteriormente la variable "myIntegerArray" que contiene esta matriz de enteros:

[1,2,3,4]

Esta definición de acción obtiene los valores de la variable mediante la función variables() en una expresión y crea esta cadena con esos valores separados por una coma: "1,2,3,4"

"Join": {
   "type": "Join",
   "inputs": {
      "from": "@variables('myIntegerArray')",
      "joinWith": ","
   },
   "runAfter": {}
}

Acción Análisis del archivo JSON

Esta acción crea campos o tokens fáciles de usar a partir de las propiedades del contenido JSON. Posteriormente, puede acceder a esas propiedades de la aplicación lógica mediante los tokens. Por ejemplo, si desea utilizar una salida JSON de servicios como Azure Service Bus y Azure Cosmos DB, puede incluir esta acción en la aplicación lógica para que pueda hacer referencia más fácilmente a los datos de esa salida.

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": "<JSON-source>",
         "schema": { "<JSON-schema>" }
      },
      "runAfter": {}
},

Obligatorio

Value Tipo Descripción
<JSON-source> Objeto JSON El contenido JSON que desea analizar
<JSON-schema> Objeto JSON El esquema JSON que describe el contenido JSON subyacente, que la acción utiliza para analizar el contenido JSON de origen.

Sugerencia: En el diseñador de flujo de trabajo, puede proporcionar el esquema o proporcionar una carga de ejemplo para que la acción pueda generar el esquema.

Ejemplo

Esta definición de acción crea estos tokens que puede usar en el flujo de trabajo pero solo en las acciones que ejecuten la siguiente acción Análisis del archivo JSON:

FirstName, LastName y Email

"Parse_JSON": {
   "type": "ParseJson",
   "inputs": {
      "content": {
         "Member": {
            "Email": "Sophie.Owen@contoso.com",
            "FirstName": "Sophie",
            "LastName": "Owen"
         }
      },
      "schema": {
         "type": "object",
         "properties": {
            "Member": {
               "type": "object",
               "properties": {
                  "Email": {
                     "type": "string"
                  },
                  "FirstName": {
                     "type": "string"
                  },
                  "LastName": {
                     "type": "string"
                  }
               }
            }
         }
      }
   },
   "runAfter": { }
},

En este ejemplo, la propiedad "content" especifica el contenido JSON de la acción que se va a analizar. También puede proporcionar este contenido JSON como la carga de ejemplo para generar el esquema.

"content": {
   "Member": { 
      "FirstName": "Sophie",
      "LastName": "Owen",
      "Email": "Sophie.Owen@contoso.com"
   }
},

La propiedad "schema" especifica el esquema JSON que se usa para describir el contenido JSON:

"schema": {
   "type": "object",
   "properties": {
      "Member": {
         "type": "object",
         "properties": {
            "FirstName": {
               "type": "string"
            },
            "LastName": {
               "type": "string"
            },
            "Email": {
               "type": "string"
            }
         }
      }
   }
}

Acción de consulta

Esta acción crea una matriz a partir de elementos de otra matriz basándose en una condición o un filtro especificados.

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": <array>,
      "where": "<condition-or-filter>"
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<array> Array La matriz o expresión que proporciona los elementos de origen. Si especifica una expresión, incluya esa expresión entre comillas dobles.
<condition-or-filter> Cadena Condición que se usa para filtrar elementos de la matriz de origen

Nota: Si ningún valor satisface la condición, la acción crea una matriz vacía.

Ejemplo

Esta definición de acción crea una matriz que contiene valores superiores al valor especificado, que es dos:

"Filter_array": {
   "type": "Query",
   "inputs": {
      "from": [ 1, 3, 0, 5, 4, 2 ],
      "where": "@greater(item(), 2)"
   }
}

Acción de respuesta

Esta acción crea la carga de la respuesta a una solicitud HTTP.

"Response" {
    "type": "Response",
    "kind": "http",
    "inputs": {
        "statusCode": 200,
        "headers": { <response-headers> },
        "body": { <response-body> }
    },
    "runAfter": {}
},

Obligatorio

Value Tipo Descripción
<response-status-code> Entero El código de estado HTTP que se envía a la solicitud entrante. El código predeterminado es "200 OK", pero el código puede ser cualquier código de estado válido que comience por 2xx, 4xx o 5xx, pero no por 3xxx.

Opcional

Value Tipo Descripción
<response-headers> Objeto JSON Uno o más encabezados que se incluyen con la respuesta
<response-body> Varios El cuerpo de respuesta, que puede ser una cadena, un objeto JSON o incluso contenido binario de una acción anterior

Ejemplo

Esta definición de acción crea una respuesta a una solicitud HTTP con el código de estado, el cuerpo del mensaje y los encabezados de mensaje especificados:

"Response": {
   "type": "Response",
   "inputs": {
      "statusCode": 200,
      "body": {
         "ProductID": 0,
         "Description": "Organic Apples"
      },
      "headers": {
         "x-ms-date": "@utcnow()",
         "content-type": "application/json"
      }
   },
   "runAfter": {}
}

Restricciones

A diferencia de otras acciones, la acción Respuesta tiene restricciones especiales:

  • El flujo de trabajo solo puede usar la acción Respuesta si empieza por un desencadenador de solicitud HTTP, lo cual significa que el flujo de trabajo se debe desencadenar mediante una solicitud HTTP.

  • El flujo de trabajo puede usar la acción Respuesta en cualquier lugar excepto dentro de los bucles Foreach y los bucles Until, incluidos los bucles secuenciales y las ramas paralelas.

  • La solicitud original obtiene la respuesta del flujo de trabajo solo cuando todas las acciones requeridas por la acción Respuesta han finalizado dentro del límite de tiempo de espera de HTTP.

    No obstante, si el flujo de trabajo llama a otra aplicación lógica como un flujo de trabajo anidado, el flujo de trabajo primario espera hasta que el anidado termina, independientemente del tiempo que transcurra hasta que eso suceda.

  • Cuando el flujo de trabajo usa la acción Response y un patrón de respuesta sincrónico, el flujo de trabajo no puede usar el comando splitOn en la definición del desencadenador ya que este comando crea múltiples ejecuciones. Comprueba si este es el caso cuando se usa el método PUT, y en caso de que así sea, devuelve una respuesta de "solicitud incorrecta".

    En caso contrario, si el flujo de trabajo usa el comando splitOn y una acción Respuesta, el flujo de trabajo se ejecuta de forma asincrónica y devuelve inmediatamente una respuesta "202-Aceptado".

  • Si la ejecución del flujo de trabajo alcanza la acción Respuesta, pero la solicitud entrante ya ha recibido una respuesta, la acción Respuesta se marcará como "Errónea" debido al conflicto. Y, como resultado, la ejecución de la aplicación lógica también se marcará con el estado "Erróneo".

Acción Select

Esta acción crea una matriz con objetos JSON mediante la transformación de los elementos de otra matriz según la asignación especificada. La matriz de salida y la matriz de origen siempre tienen el mismo número de elementos. Aunque no puede cambiar el número de objetos de la matriz de salida, puede agregar o quitar propiedades y sus valores para esos objetos. La propiedad select especifica al menos un par clave-valor que define la asignación para transformar los elementos de la matriz de origen. Un par clave-valor representa una propiedad y su valor en todos los objetos de la matriz de salida.

"Select": {
   "type": "Select",
   "inputs": {
      "from": <array>,
      "select": { 
          "<key-name>": "<expression>",
          "<key-name>": "<expression>"        
      }
   },
   "runAfter": {}
},

Obligatorio

Value Tipo Descripción
<array> Array La matriz o expresión que proporciona los elementos de origen. Asegúrese de que incluye una expresión entre comillas dobles.

Nota: Si la matriz de origen está vacía, la acción creará una matriz vacía.
<key-name> String El nombre de la propiedad asignado al resultado de <expression>

Para agregar una nueva propiedad en todos los objetos de la matriz de salida, proporcione un <key-name> para esa propiedad y una <expression> para el valor de propiedad.

Para quitar una propiedad de todos los objetos de la matriz, omita el <key-name> de esa propiedad.
<expression> String La expresión que transforma el elemento de la matriz de origen y asigna el resultado a <key-name>

La acción Seleccionar crea una matriz como salida, por lo que cualquier acción que desee usar esta salida debe aceptar una matriz, o debe convertir la matriz en un tipo que acepte la acción del consumidor. Por ejemplo, para convertir la matriz de salida en una cadena, puede pasar esa matriz a la acción Redactar y, a continuación, hacer referencia a la salida de la acción Redactar en las demás acciones.

Ejemplo

Esta definición de acción crea una matriz de objetos JSON a partir de una matriz de enteros. La acción itera la matriz de origen, obtiene cada valor entero mediante la expresión @item() y asigna cada valor a la propiedad "number" de cada objeto JSON:

"Select": {
   "type": "Select",
   "inputs": {
      "from": [ 1, 2, 3 ],
      "select": { 
         "number": "@item()" 
      }
   },
   "runAfter": {}
},

Esta es la matriz que resulta de la acción:

[ { "number": 1 }, { "number": 2 }, { "number": 3 } ]

Para usar esta salida de matriz en otras acciones, pásela a una acción Redactar:

"Compose": {
   "type": "Compose",
   "inputs": "@body('Select')",
   "runAfter": {
      "Select": [ "Succeeded" ]
   }
},

Después, puede usar la salida de la acción Redactar en otras acciones como, por ejemplo, la acción Office 365 Outlook: enviar un correo electrónico:

"Send_an_email": {
   "type": "ApiConnection",
   "inputs": {
      "body": {
         "Body": "@{outputs('Compose')}",
         "Subject": "Output array from Select and Compose actions",
         "To": "<your-email@domain>"
      },
      "host": {
         "connection": {
            "name": "@parameters('$connections')['office365']['connectionId']"
         }
      },
      "method": "post",
      "path": "/Mail"
   },
   "runAfter": {
      "Compose": [ "Succeeded" ]
   }
},

Acción Table

Esta acción crea una tabla CSV o HTML a partir de una matriz. Para las matrices con objetos JSON, esta acción crea automáticamente los encabezados de columna a partir de los nombres de propiedad de los objetos. Para las matrices con otros tipos de datos, debe especificar los encabezados de columna y los valores. Por ejemplo, esta matriz incluye las propiedades "ID" y "Product_Name" que puede usar esta acción para los nombres de encabezados de columna:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

"Create_<CSV | HTML>_table": {
   "type": "Table",
   "inputs": {
      "format": "<CSV | HTML>",
      "from": <array>,
      "columns": [ 
         {
            "header": "<column-name>",
            "value": "<column-value>"
         },
         {
            "header": "<column-name>",
            "value": "<column-value>"
         } 
      ]
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<CSV o HTML> String El formato de la tabla que desea crear
<array> Array Matriz o expresión que proporciona los elementos de origen para la tabla

Nota: Si la matriz de origen está vacía, la acción creará una tabla vacía.

Opcional

Para especificar o personalizar los encabezados y los valores de columna, use la matriz columns. Cuando los pares header-value tienen el mismo nombre de encabezado, sus valores se mostrarán en la misma columna bajo ese nombre de encabezado. En caso contrario, cada encabezado único define una columna única.

Value Tipo Descripción
<column-name> String El nombre del encabezado de una columna
<column-value> Any El valor de esa columna

Ejemplo 1

Supongamos que ha creado anteriormente la variable "myItemArray" que contiene actualmente esta matriz:

[ {"ID": 0, "Product_Name": "Apples"}, {"ID": 1, "Product_Name": "Oranges"} ]

Esta definición de acción crea una tabla CSV a partir de la variable "myItemArray". La expresión utilizada por la propiedad from obtiene la matriz a partir de "myItemArray" mediante la función variables():

"Create_CSV_table": {
   "type": "Table",
   "inputs": {
      "format": "CSV",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

Esta es la tabla CSV que resulta de la acción:

ID,Product_Name 
0,Apples 
1,Oranges 

Ejemplo 2

Esta definición de acción crea una tabla HTML a partir de la variable "myItemArray". La expresión utilizada por la propiedad from obtiene la matriz a partir de "myItemArray" mediante la función variables():

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')"
   },
   "runAfter": {}
}

Esta es la tabla HTML que resulta de la acción:

IDProduct_Name
0Apples (Manzanas)
1Oranges

Ejemplo 3

Esta definición de acción crea una tabla HTML a partir de la variable "myItemArray". Sin embargo, este ejemplo reemplaza los nombres de los encabezados de columna predeterminados por "Stock_ID" y "Description", y agrega la palabra "Organic" a los valores de la columna "Description".

"Create_HTML_table": {
   "type": "Table",
   "inputs": {
      "format": "HTML",
      "from": "@variables('myItemArray')",
      "columns": [ 
         {
            "header": "Stock_ID",
            "value": "@item().ID"
         },
         {
            "header": "Description",
            "value": "@concat('Organic ', item().Product_Name)"
         }
      ]
    },
   "runAfter": {}
},

Esta es la tabla HTML que resulta de la acción:

Stock_IDDescripción
0Organic Apples (Manzanas orgánicas)
1Organic Oranges (Naranjas orgánicas)

Acción Terminate

Esta acción detiene la ejecución de una instancia del flujo de trabajo, cancela cualquier acción en curso, omite las acciones restantes y devuelve el estado especificado. Por ejemplo, puede usar la acción Terminate si la aplicación lógica debe salir completamente después de un estado de error. Esta acción no afecta a las acciones ya finalizadas y no puede aparecer dentro de bucles Foreach y Until, incluidos los bucles secuenciales.

"Terminate": {
   "type": "Terminate",
   "inputs": {
       "runStatus": "<status>",
       "runError": {
            "code": "<error-code-or-name>",
            "message": "<error-message>"
       }
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<status> String El estado que se devolverá para la ejecución: "Erróneo", "Cancelado" o "Correcto"

Opcional

Las propiedades del objeto "runStatus" se aplican solo cuando se establece la propiedad "runStatus" en estado "Erróneo".

Value Tipo Descripción
<error-code-or-name> String El código o nombre del error
<error-message> String El mensaje o el texto que describe el error y las acciones que el usuario de la aplicación puede realizar

Ejemplo

Esta definición de acción detiene la ejecución de un flujo de trabajo, establece el estado de la ejecución en "Erróneo" y devuelve el estado, un código de error y un mensaje de error:

"Terminate": {
    "type": "Terminate",
    "inputs": {
        "runStatus": "Failed",
        "runError": {
            "code": "Unexpected response",
            "message": "The service received an unexpected response. Please try again."
        }
   },
   "runAfter": {}
}

Acción Wait

Esta acción detiene la ejecución del flujo de trabajo durante el intervalo especificado o hasta la hora especificada, pero no ambas opciones.

Intervalo especificado

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": <number-of-units>,
         "unit": "<interval>"
      }
   },
   "runAfter": {}
},

Hora especificada

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "<date-time-stamp>"
      }
   },
   "runAfter": {}
},

Obligatorio

Value Tipo Descripción
<number-of-units> Entero Para la acción Delay es el número de unidades que debe esperar
<intervalo> String Para la acción de retraso, el intervalo que se esperará: "Second", "Minute", "Hour", "Day", "Week", "Month"
<date-time-stamp> String Para la acción Delay Until, la fecha y hora en la que se reanudará la ejecución. Este valor debe usar el formato UTC de fecha y hora.

Ejemplo 1

Esta definición de acción detiene el flujo de trabajo durante 15 minutos:

"Delay": {
   "type": "Wait",
   "inputs": {
      "interval": {
         "count": 15,
         "unit": "Minute"
      }
   },
   "runAfter": {}
},

Ejemplo 2

Esta definición de acción detiene el flujo de trabajo hasta la hora especificada:

"Delay_until": {
   "type": "Wait",
   "inputs": {
      "until": {
         "timestamp": "2017-10-01T00:00:00Z"
      }
   },
   "runAfter": {}
},

Acción Workflow

Esta acción llama a otra aplicación lógica creada anteriormente, lo que significa que puede incluir y volver a usar otros flujos de trabajo de la aplicación lógica. También puede usar las salidas de la aplicación lógica secundaria o anidada en acciones que sigan a la aplicación lógica anidada siempre que la aplicación lógica secundaria devuelva una respuesta.

Azure Logic Apps comprueba el acceso al desencadenador al que desea llamar, por lo que debe asegurarse de que puede acceder a ese desencadenador. Además, la aplicación lógica anidada debe cumplir estos criterios:

  • Un desencadenador hace que la aplicación lógica anidada sea invocable como, por ejemplo, un desencadenador Request o HTTP

  • La misma suscripción de Azure que su aplicación lógica primaria

  • Para usar las salidas de la aplicación lógica anidada en la aplicación lógica primaria, la aplicación lógica anidada debe tener una acción Respuesta

"<nested-logic-app-name>": {
   "type": "Workflow",
   "inputs": {
      "body": { "<body-content" },
      "headers": { "<header-content>" },
      "host": {
         "triggerName": "<trigger-name>",
         "workflow": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group>/providers/Microsoft.Logic/<nested-logic-app-name>"
         }
      }
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<nested-logic-app-name> String El nombre de la aplicación lógica a la que desea llamar
<trigger-name> String El nombre del desencadenador de la aplicación lógica anidada a la que desea llamar
<Azure-subscription-ID> String El identificador de suscripción de Azure para la aplicación lógica anidada
<Azure-resource-group> String El nombre del grupo de recursos de Azure para la aplicación lógica anidada

Opcional

Value Tipo Descripción
<header-content> Objeto JSON Todos los encabezados que se vayan a enviar con la llamada
<body-content> Objeto JSON Cualquier contenido de mensaje que se vaya a enviar con la llamada

Salidas

Las salidas de esta acción varían en función de la acción Respuesta de la aplicación lógica anidada. Si la aplicación lógica anidada no incluye una acción Respuesta, las salidas estarán vacías.

Ejemplo

Una vez completada la acción "Start_search" correctamente, esta definición de acción del flujo de trabajo llama a otra aplicación lógica denominada "Get_product_information", que pasa las entradas especificadas:

"actions": {
   "Start_search": { <action-definition> },
   "Get_product_information": {
      "type": "Workflow",
      "inputs": {
         "body": {
            "ProductID": "24601",
         },
         "host": {
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/InventoryManager-RG/providers/Microsoft.Logic/Get_product_information",
            "triggerName": "Find_product"
         },
         "headers": {
            "content-type": "application/json"
         }
      },
      "runAfter": { 
         "Start_search": [ "Succeeded" ]
      }
   }
},

Detalles de la acción de control del flujo de trabajo

Acción Foreach

Esta acción de bucle recorre en iteración una matriz y realiza acciones en cada elemento de la matriz. De forma predeterminada, el bucle "for each" se ejecuta en paralelo hasta alcanzar un número máximo de bucles. Para conocer este valor máximo, consulte Límites y configuración. Aprenda a crear bucles "for each".

"For_each": {
   "type": "Foreach",
   "actions": { 
      "<action-1>": { "<action-definition-1>" },
      "<action-2>": { "<action-definition-2>" }
   },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": <count>
      }
    },
    "operationOptions": "<operation-option>"
}

Obligatorio

Value Tipo Descripción
<action-1...n> String Los nombres de las acciones que se ejecutan en cada elemento de la matriz
<action-definition-1...n> Objeto JSON Las definiciones de las acciones que se ejecutan
<for-each-expression> String La expresión que hace referencia a cada elemento de la matriz especificada

Opcional

Value Tipo Descripción
<recuento> Entero De forma predeterminada, las iteraciones de bucle "for each" se ejecutan al mismo tiempo (de forma simultanea o en paralelo) hasta el límite predeterminado. Para cambiar este límite con un nuevo valor <count>, vea Cambio de la simultaneidad del bucle "for each".
<operation-option> String Para ejecutar un bucle "for each" secuencialmente, en lugar de en paralelo, establezca <operation-option> en Sequential o <count> en 1, pero no ambas opciones a la vez. Para más información, consulte Ejecución secuencial de bucles "for each".

Ejemplo

Este bucle "for each" envía un correo electrónico para cada elemento de la matriz que contiene los datos adjuntos de un correo electrónico entrante. El bucle envía un correo electrónico, con los datos adjuntos incluidos, a una persona que los revisa.

"For_each": {
   "type": "Foreach",
   "actions": {
      "Send_an_email": {
         "type": "ApiConnection",
         "inputs": {
            "body": {
               "Body": "@base64ToString(items('For_each')?['Content'])",
               "Subject": "Review attachment",
               "To": "Sophie.Owen@contoso.com"
                },
            "host": {
               "connection": {
                  "id": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {}
      }
   },
   "foreach": "@triggerBody()?['Attachments']",
   "runAfter": {}
}

Para especificar solo una matriz que se pase como salida desde el desencadenador, esta expresión obtiene la matriz <array-name> del cuerpo del desencadenador. Para evitar un error si la matriz no existe, la expresión utiliza el operador ?:

@triggerBody()?['<array-name>']

Acción If

Esta acción, que es una instrucción condicional, evalúa una expresión que representa una condición y ejecuta una rama diferente en función de si la condición es true o false. Si la condición es true, la condición se marca con el estado "Correcto". Aprenda a crear instrucciones condicionales.

"Condition": {
   "type": "If",
   "expression": { "<condition>" },
   "actions": {
      "<action-1>": { "<action-definition>" }
   },
   "else": {
      "actions": {
        "<action-2>": { "<action-definition" }
      }
   },
   "runAfter": {}
}
Value Tipo Descripción
<condition> Objeto JSON La condición que se va a evaluar, que puede ser una expresión
<action-1> Objeto JSON La acción que se ejecutará si <condition> se evalúa como true
<action-definition> Objeto JSON La definición de la acción
<action-2> Objeto JSON La acción que se ejecutará si <condition> se evalúa como false

Las acciones de los objetos actions o else obtienen estos estados:

  • "Succeeded" cuando se ejecutan y lo hacen correctamente
  • "Failed" cuando se ejecutan pero no lo hacen correctamente
  • "Skipped" cuando la rama correspondiente no se ejecuta

Ejemplo

Esta condición especifica que si la variable de entero tiene un valor mayor que cero, el flujo de trabajo comprobará un sitio web. Si la variable es cero o menos, el flujo de trabajo comprobará un sitio web diferente.

"Condition": {
   "type": "If",
   "expression": {
      "and": [ {
         "greater": [ "@variables('myIntegerVariable')", 0 ] 
      } ]
   },
   "actions": { 
      "HTTP - Check this website": {
         "type": "Http",
         "inputs": {
         "method": "GET",
            "uri": "http://this-url"
         },
         "runAfter": {}
      }
   },
   "else": {
      "actions": {
         "HTTP - Check this other website": {
            "type": "Http",
            "inputs": {
               "method": "GET",
               "uri": "http://this-other-url"
            },
            "runAfter": {}
         }
      }
   },
   "runAfter": {}
}

Uso de expresiones en las condiciones

A continuación se muestran algunos ejemplos de cómo puede usar expresiones en condiciones:

JSON Resultado
"expression": "@parameters('<hasSpecialAction>')" En el caso de las expresiones booleanas, la condición se pasa para cualquier valor que se evalúe como true.

Para convertir otros tipos a booleanas, use las funciones empty() o equals().
"expression": "@greater(actions('<action>').output.value, parameters('<threshold>'))" En el caso de las funciones de comparación, la acción se ejecuta solo si la salida de <action> es superior al valor de <threshold>.
"expression": "@or(greater(actions('<action>').output.value, parameters('<threshold>')), less(actions('<same-action>').output.value, 100))" En el caso de las funciones lógicas y la creación de expresiones booleanas anidadas, la acción se ejecuta si la salida de <action> es superior al valor de <threshold> o inferior a 100.
"expression": "@equals(length(actions('<action>').outputs.errors), 0)" Puede usar funciones de matriz para comprobar si la matriz tiene elementos. La acción se ejecuta cuando la matriz errors está vacía.

Acción Scope

Esta acción agrupa lógicamente las acciones en ámbitos, que obtienen su propio estado después de que las acciones del ámbito terminen de ejecutarse. A continuación, puede usar el estado del ámbito para determinar si se ejecutan otras acciones. Aprenda a crear ámbitos.

"Scope": {
   "type": "Scope",
   "actions": {
      "<inner-action-1>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<inner-action-2>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   }
}

Obligatorio

Value Tipo Descripción
<inner-action-1...n> Objeto JSON Una o varias acciones que se ejecutan dentro del ámbito
<action-inputs> Objeto JSON Las entradas de cada acción

Acción Switch

Esta acción, también conocida como instrucción switch, organiza otras acciones en casos y asigna un valor a cada caso, excepto para el caso predeterminado, si existe alguno. Cuando se ejecuta el flujo de trabajo, la acción Switch compara el valor de una expresión, un objeto o un token con los valores especificados para cada caso. Si la acción Switch busca un caso coincidente, el flujo de trabajo ejecuta solo las acciones para ese caso. Cada vez que se ejecuta la acción Switch existe solo un caso coincidente o ninguno. Si no existe ninguna coincidencia, la acción Switch ejecutará las acciones predeterminadas. Aprenda a crear instrucciones switch.

"Switch": {
   "type": "Switch",
   "expression": "<expression-object-or-token>",
   "cases": {
      "Case": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      },
      "Case_2": {
         "actions": {
           "<action-name>": { "<action-definition>" }
         },
         "case": "<matching-value>"
      }
   },
   "default": {
      "actions": {
         "<default-action-name>": { "<default-action-definition>" }
      }
   },
   "runAfter": {}
}

Obligatorio

Value Tipo Descripción
<expression-object-or-token> Varía La expresión, objeto JSON o token que se va a evaluar
<action-name> String El nombre de la acción que se va a ejecutar para el caso coincidente
<action-definition> Objeto JSON La definición de la acción que se va a ejecutar para el caso coincidente
<matching-value> Varía El valor que se compara con el resultado evaluado

Opcional

Value Tipo Descripción
<default-action-name> String El nombre de la acción predeterminada que se va a ejecutar si no hay ningún caso coincidente
<default-action-definition> Objeto JSON La definición de la acción que se va a ejecutar si no hay ningún caso coincidente

Ejemplo

Esta definición de acción evalúa si la persona que responde al correo electrónico de solicitud de aprobación seleccionó la opción "Aprobar" o la opción "Rechazar". Según esta elección, la acción Switch ejecuta las acciones para el caso coincidente, que consiste en enviar otro correo electrónico al respondedor pero con palabras diferentes en cada caso.

"Switch": {
   "type": "Switch",
   "expression": "@body('Send_approval_email')?['SelectedOption']",
   "cases": {
      "Case": {
         "actions": {
            "Send_an_email": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your approval.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         },
         "case": "Approve"
      },
      "Case_2": {
         "actions": {
            "Send_an_email_2": { 
               "type": "ApiConnection",
               "inputs": {
                  "Body": "Thank you for your response.",
                  "Subject": "Response received", 
                  "To": "Sophie.Owen@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}     
         },
         "case": "Reject"
      }
   },
   "default": {
      "actions": { 
         "Send_an_email_3": { 
            "type": "ApiConnection",
            "inputs": {
               "Body": "Please respond with either 'Approve' or 'Reject'.",
               "Subject": "Please respond", 
               "To": "Sophie.Owen@contoso.com"
            },
            "host": {
               "connection": {
                  "name": "@parameters('$connections')['office365']['connectionId']"
               }
            },
            "method": "post",
            "path": "/Mail"
         },
         "runAfter": {} 
      }
   },
   "runAfter": {
      "Send_approval_email": [ 
         "Succeeded"
      ]
   }
}

Acción Until

Esta acción de bucle contiene acciones que se ejecutan hasta que la condición especificada es true. El bucle comprueba la condición como último paso después de que todas las demás acciones se han ejecutado. Puede incluir más de una acción en el objeto "actions" y la acción debe definir al menos un límite. Aprenda a crear bucles "until".

 "Until": {
   "type": "Until",
   "actions": {
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      },
      "<action-name>": {
         "type": "<action-type>",
         "inputs": { "<action-inputs>" },
         "runAfter": {}
      }
   },
   "expression": "<condition>",
   "limit": {
      "count": <loop-count>,
      "timeout": "<loop-timeout>"
   },
   "runAfter": {}
}
Value Tipo Descripción
<action-name> String El nombre de la acción que desea ejecutar dentro del bucle
<action-type> String El tipo de acción que desea ejecutar
<action-inputs> Varios Las entradas para que la acción se ejecute
<condition> String La condición o expresión que va a evaluar una vez finalizada la ejecución de todas las acciones del bucle
<loop-count> Entero El límite en el mayor número de bucles que puede ejecutar la acción. Para más información sobre el límite predeterminado y el límite máximo, consulte Límites y configuración de Azure Logic Apps.
<loop-timeout> String El límite en el tiempo más largo que puede ejecutar el bucle. El valor predeterminado de timeout es PT1H, que es el formato ISO 8601 obligatorio.

Nota

Si la expresión depende de la salida de cualquier acción que se encuentre en el bucle Until, asegúrese de que tiene en cuenta todos los errores que se produzcan por dicha acción.

Ejemplo

Esta definición de acción del bucle envía una solicitud HTTP a la dirección URL especificada hasta que se cumple una de estas condiciones:

  • La solicitud obtiene una respuesta con el código de estado "200 OK".
  • El bucle se ha ejecutado 60 veces.
  • El bucle se ha ejecutado durante una hora.
 "Run_until_loop_succeeds_or_expires": {
    "type": "Until",
    "actions": {
        "HTTP": {
            "type": "Http",
            "inputs": {
                "method": "GET",
                "uri": "http://myurl"
            },
            "runAfter": {}
        }
    },
    "expression": "@equals(outputs('HTTP')['statusCode'], 200)",
    "limit": {
        "count": 60,
        "timeout": "PT1H"
    },
    "runAfter": {}
}

Webhooks y suscripciones

Los desencadenadores y acciones basados en webhooks no comprueban regularmente los puntos de conexión, sino que esperan a que se produzcan eventos o datos específicos en esos puntos de conexión. Estos desencadenadores y acciones se suscriben a los puntos de conexión proporcionando una dirección URL de devolución de llamada en la que el punto de conexión puede enviar respuestas.

La llamada subscribe tiene lugar cuando el flujo de trabajo cambia de algún modo; por ejemplo, cada vez que se renuevan las credenciales o cambian los parámetros de entrada de un desencadenador o acción. Esta llamada usa los mismos parámetros que las acciones HTTP estándar.

La llamada unsubscribe se produce automáticamente cuando una operación invalida el desencadenador o la acción, por ejemplo:

  • Eliminar o deshabilitar el desencadenador.
  • Eliminar o deshabilitar el flujo de trabajo.
  • Eliminar o deshabilitar la suscripción.

Para admitir estas llamadas, la expresión @listCallbackUrl() devuelve una "dirección URL de devolución de llamada" única para el desencadenador o acción. Esta dirección URL representa un identificador único de los puntos de conexión que usan la API de REST del servicio. Los parámetros de esta función son los mismos que los del desencadenador o acción de webhook.

Cambio de la duración asincrónica

Para los desencadenadores y las acciones, puede limitar la duración del modelo asincrónico a un intervalo de tiempo específico agregando la propiedad limit.timeout. De este modo, si no ha finalizado la acción una vez transcurrido el intervalo, el estado de la acción se marcará como Cancelled con el código ActionTimedOut. La propiedad timeout usa el formato ISO 8601.

"<trigger-or-action-name>": {
   "type": "Workflow | Webhook | Http | ApiConnectionWebhook | ApiConnection",
   "inputs": {},
   "limit": {
      "timeout": "PT10S"
   },
   "runAfter": {}
}

Valores de configuración del runtime

Para cambiar el comportamiento predeterminado del runtime de desencadenadores y acciones, agregue runtimeConfiguration estas propiedades a la definición del desencadenador o la acción.

Propiedad Tipo Descripción Desencadenador o acción
runtimeConfiguration.concurrency.runs Entero Cambie el límite predeterminado en el número de instancias de flujo de trabajo que se pueden ejecutar al mismo tiempo (de forma simultánea o en paralelo). El ajuste de este valor puede ayudar a limitar el número de solicitudes que reciben los sistemas de back-end.

Establecer la propiedad runs en 1 funciona del mismo modo que establecer la propiedad operationOptions en SingleInstance. Puede establecer una propiedad u otra, pero no ambas.

Para cambiar el límite predeterminado, consulte Cambio en la simultaneidad de desencadenadores o Desencadenamiento secuencial de instancias.
Todos los desencadenadores
runtimeConfiguration.concurrency.maximumWaitingRuns Entero Cambie el límite predeterminado en el número de instancias de flujo de trabajo que deben esperar para ejecutarse cuando la aplicación lógica ya está ejecutando el número máximo de instancias simultáneas.

Para cambiar el límite predeterminado, consulte Cambio del límite de ejecuciones en espera.
Todos los desencadenadores
runtimeConfiguration.concurrency.repetitions Entero Cambie el límite predeterminado en el número de iteraciones de bucles "for each" que se pueden ejecutar al mismo tiempo (de forma simultánea o en paralelo).

Establecer la propiedad repetitions en 1 funciona del mismo modo que establecer la propiedad operationOptions en SingleInstance. Puede establecer una propiedad u otra, pero no ambas.

Para cambiar el límite predeterminado, consulte Cambio de la simultaneidad de los bucles "for each" o Ejecución secuencial de bucles "for each".
Acción:

Foreach
runtimeConfiguration.paginationPolicy.minimumItemCount Entero Para acciones específicas que admiten y tienen la paginación activada, este valor especifica el número mínimo de resultados que se van a recuperar.

Para activar la paginación, vea Obtención masiva de datos, elementos o resultados mediante la paginación
Acción: Varía
runtimeConfiguration.secureData.properties Array En muchos desencadenadores y acciones, esta configuración oculta las entradas, salidas o ambas del historial de ejecución de la aplicación lógica.

Para obtener más información sobre la protección de estos datos, consulte Ocultar entradas y salidas del historial de ejecución.
Mayoría de desencadenadores y acciones
runtimeConfiguration.staticResult Objeto JSON Para las acciones que admiten y tienen activada la configuración de resultados estáticos, el staticResult objeto tiene estos atributos:

- name, que hace referencia al nombre de definición del resultado estático de la acción actual, que aparece dentro del atributo staticResults en el atributo definition del flujo de trabajo de la aplicación lógica. Para más información, vea Resultados estáticos: Referencia de esquema del lenguaje de definición de flujo de trabajo.

- staticResultOptions, que especifica si los resultados estáticos tienen el valor Enabled o no para la acción actual.

Para activar los resultados estáticos, vea Probar las aplicaciones lógicas con datos simulados mediante la configuración de resultados estáticos.
Acción: Varía

Opciones de operación

Puede cambiar el comportamiento predeterminado de los desencadenadores y acciones con la propiedad operationOptions de la definición de desencadenador o de acción.

Opción de operación Tipo Descripción Desencadenador o acción
DisableAsyncPattern String Ejecuta acciones basadas en HTTP sincrónicamente en lugar de hacerlo de forma asincrónica.



Para establecer esta opción, consulte Ejecutar acciones sincrónicamente.
Acciones:

Api Conectar ion,
HTTP,
Respuesta
IncludeAuthorizationHeadersInOutputs Cadena En el caso de las aplicaciones lógicas que habilitan OAuth con el identificador de Entra de Microsoft para autorizar el acceso a las llamadas entrantes a un punto de conexión de desencadenador basado en solicitudes, incluya el Authorization encabezado del token de acceso de OAuth en las salidas del desencadenador. Para más información, consulte Inclusión del encabezado "Authorization" en las salidas del desencadenador de solicitudes. Desencadenantes:

Solicitud,
Webhook HTTP
Sequential String Ejecuta iteraciones de bucles "for each" una a una, en lugar de todas al mismo tiempo en paralelo.

Esta opción funciona de la misma manera que establecer la propiedad runtimeConfiguration.concurrency.repetitions en 1. Puede establecer una propiedad u otra, pero no ambas.



Para más información, consulte Ejecución secuencial de bucles "for each".
Acción:

Foreach
SingleInstance String Ejecuta secuencialmente el desencadenador de cada instancia de aplicación lógica y espera a que termine la ejecución anteriormente activa antes de desencadenar la siguiente instancia de aplicación lógica.



Esta opción funciona de la misma manera que establecer la propiedad runtimeConfiguration.concurrency.runs en 1. Puede establecer una propiedad u otra, pero no ambas.

Para establecer esta opción, consulte Desencadenamiento secuencial de instancias.
Todos los desencadenadores
SuppressWorkflowHeaders String No envíe encabezados de metadatos x-ms-* en las solicitudes salientes. De forma predeterminada, Azure Logic Apps incluye encabezados de metadatos adicionales con el x-ms- prefijo en el nombre de encabezado como parte de las solicitudes salientes. Sin embargo, algunos servicios heredados no aceptarán solicitudes con encabezados desconocidos adicionales, lo que dará lugar a solicitudes erróneas. Acciones:

HTTP,
Función,
APIManagement
SuppressWorkflowHeadersOnResponse String No envíe encabezados de metadatos x-ms-* en respuestas a solicitudes de desencadenador de entrada. De forma predeterminada, Azure Logic Apps envía respuestas a solicitudes entrantes que incluyen encabezados de metadatos adicionales con el x-ms- prefijo en el nombre del encabezado. Sin embargo, algunos servicios heredados no aceptarán solicitudes o respuestas con encabezados desconocidos adicionales, lo que dará lugar a solicitudes erróneas. Desencadenantes:

Solicitud,
Webhook HTTP

Cambio en la simultaneidad de desencadenadores

De forma predeterminada, todas las instancias del flujo de trabajo de la aplicación lógica se ejecutan al mismo tiempo (simultáneamente o en paralelo). Este comportamiento implica la activación de todas las instancias del desencadenador antes de que finalice la ejecución de la instancia del ejecución activo anteriormente. Sin embargo, el número de instancias en ejecución simultáneas tiene un límite predeterminado. Cuando el número de instancias de flujo de trabajo que se ejecutan simultáneamente alcanza este límite, las nuevas deben esperar un tiempo para ejecutarse. Este límite ayuda a controlar el número de solicitudes que reciben los sistemas de back-end.

Al activar el control de simultaneidad del desencadenador, las instancias de desencadenador se ejecutan en paralelo hasta el límite predeterminado. Para cambiar este límite de simultaneidad predeterminado, puede usar el editor de vistas de código o el diseñador de flujo de trabajo porque cambiar la configuración de simultaneidad a través del diseñador agrega o actualiza la runtimeConfiguration.concurrency.runs propiedad en la definición del desencadenador subyacente y viceversa. Esta propiedad controla el número máximo de nuevas instancias de flujo de trabajo que se pueden ejecutar en paralelo.

Antes de habilitar la simultaneidad en un desencadenador, revise las consideraciones siguientes:

  • No se puede deshabilitar la simultaneidad después de habilitar el control de simultaneidad.

  • Si el número máximo de ejecuciones de desencadenador simultáneas alcanza el grado máximo de paralelismo, las ejecuciones de desencadenador posteriores podrían experimentar errores de limitación o "429 - Demasiadas solicitudes". Si configura una directiva de reintentos que controla los errores 429, el desencadenador podría experimentar un ciclo de comportamiento de reintentos y limitaciones que provoque retrasos prolongados en el procesamiento de nuevas solicitudes de desencadenador.

  • Cuando la simultaneidad está habilitada, se reduce significativamente el límite SplitOn para matrices de desagrupación. Si el número de elementos supera este límite, se deshabilita la funcionalidad de SplitOn.

  • Cuando la simultaneidad está habilitada, una instancia de aplicación lógica de larga duración puede provocar que las nuevas instancias de aplicación lógica entren en un estado de espera. Este estado impide que Azure Logic Apps cree instancias y se produce incluso cuando el número de ejecuciones simultáneas es menor que el número máximo de ejecuciones simultáneas especificado.

    • Para interrumpir este estado, cancele las instancias más tempranas que estén todavía en ejecución.

      1. En el menú de la aplicación lógica, seleccione Introducción.

      2. En la sección Historial de ejecuciones, seleccione la instancia más temprana que esté todavía en ejecución, por ejemplo:

        Selección de la instancia más temprana en ejecución

        Sugerencia

        Para ver solo las instancias que siguen en ejecución, abra la lista Todas y seleccione En ejecución.

      3. En Ejecución de aplicación lógica, seleccione Cancelar ejecución.

        Búsqueda de la instancia más temprana en ejecución

    • Para evitar esta posibilidad, agregue un tiempo de expiración a cualquier acción que pueda contener estas ejecuciones. Si está trabajando en el editor de código, consulte Cambio de la duración asincrónica. En caso contrario, si usa el diseñador, siga estos pasos:

      1. En el flujo de trabajo de la aplicación lógica, seleccione la acción a la que desea agregar un tiempo de espera. En la esquina superior derecha de la acción, seleccione el botón de puntos suspensivos (...) y después Configuración.

        Abrir la configuración de la acción

      2. En Tiempo de expiración, especifique la duración del tiempo de expiración en formato ISO 8601.

        Especificación de la duración del tiempo de expiración

  • Para ejecutar la aplicación lógica de manera secuencial, establezca la simultaneidad del desencadenador en 1, ya sea mediante el diseñador o el editor de la vista del código. Asegúrese de que no establece también la propiedad operationOptions del desencadenador en SingleInstance en el editor de la vista de código. De lo contrario, obtendrá un error de validación. Para más información, consulte Desencadenamiento secuencial de instancias.

Edición en la vista Código

En la definición del desencadenador subyacente, agregue la propiedad runtimeConfiguration.concurrency.runs y establezca el valor en función de los límites de simultaneidad del desencadenador. Para ejecutar el flujo de trabajo secuencialmente, establezca el valor de la propiedad en 1.

Este ejemplo limita las ejecuciones simultáneas a 10 instancias:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 10
      }
   }
}

Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución.

Edición en el diseñador de flujo de trabajo

  1. En la esquina superior derecha del desencadenador, elija el botón de los puntos suspensivos ( ... ) y, después, elija Configuración.

  2. En Control de simultaneidad, establezca Límite en Activado.

  3. Arrastre el control deslizante Grado de paralelismo al valor que desee. Para ejecutar la aplicación lógica de manera secuencial, arrastre el valor del control deslizante a 1.

Cambio de la simultaneidad de los bucles "for each"

De forma predeterminada, todas las iteraciones de bucle "for each" se ejecutan al mismo tiempo (de forma simultánea o en paralelo). Este comportamiento significa que cada iteración empieza a ejecutarse antes de que finalice la ejecución de la anterior. Sin embargo, el número de iteraciones que se ejecutan de forma simultánea tiene un límite predeterminado. Cuando el número de iteraciones que se ejecutan simultáneamente alcanza este límite, las nuevas deben esperar un tiempo para ejecutarse.

Para cambiar el límite predeterminado, puede usar el editor de vistas de código o el diseñador de flujo de trabajo porque cambiar la configuración de simultaneidad a través del diseñador agrega o actualiza la runtimeConfiguration.concurrency.repetitions propiedad en la definición de acción subyacente "for each" y viceversa. Esta propiedad controla el número máximo de iteraciones que se pueden ejecutar en paralelo.

Nota

Si configura la acción "for each" para que se ejecute secuencialmente mediante el diseñador o mediante el editor de la vista Código, no establezca la propiedad operationOptions de la acción en Sequential en el editor de la vista Código. De lo contrario, obtendrá un error de validación. Para más información, consulte Ejecución secuencial de bucles "for each".

Edición en la vista Código

En la definición de "for each" subyacente, agregue o actualice la propiedad runtimeConfiguration.concurrency.repetitions, que puede tener un valor comprendido entre 1 y 50.

Este es un ejemplo que limita las ejecuciones simultáneas a 10 iteraciones:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 10
      }
   }
}

Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución.

Edición en el diseñador de flujo de trabajo

  1. En la acción For each, en la esquina superior derecha, seleccione el botón de puntos suspensivos ( ... ) y luego seleccione Configuración.

  2. En Control de simultaneidad, establezca Control de simultaneidad en Activado.

  3. Arrastre el control deslizante Grado de paralelismo al valor que desee. Para ejecutar la aplicación lógica de manera secuencial, arrastre el valor del control deslizante a 1.

Cambio del límite de ejecuciones en espera

De forma predeterminada, todas las instancias del flujo de trabajo de la aplicación lógica se ejecutan al mismo tiempo (simultáneamente o en paralelo). Este comportamiento implica la activación de todas las instancias del desencadenador antes de que finalice la ejecución de la instancia del ejecución activo anteriormente. Sin embargo, existe un límite predeterminado en el número de instancias de flujo de trabajo que se ejecutan simultáneamente. Cuando el número de ejecuciones simultáneas alcanza este límite, cualquier otra nueva instancia de flujo de trabajo debe esperar a que se ejecute. También existe un límite predeterminado en el número de instancias de flujo de trabajo en espera. Cuando el número de instancias en espera alcanza este límite, Azure Logic Apps ya no acepta nuevas instancias de flujo de trabajo para ejecutarse. Los desencadenadores de solicitud y webhook devuelven 429: demasiados errores de solicitudes y los desencadenadores periódicos comienzan a omitir los intentos de sondeo.

Puede cambiar el límite predeterminado en la simultaneidad del desencadenador, así como el límite predeterminado en ejecuciones en espera. Sin embargo, este cambio ralentiza principalmente el desencadenador para aliviar la presión debido a la simultaneidad. Por ejemplo, si tiene desencadenador de sondeo y la cola de ejecuciones en espera está llena debido a ejecuciones en curso, Azure Logic Apps detiene el sondeo. Si el flujo de trabajo usa un desencadenador basado en solicitudes y la cola de ejecuciones en espera está llena, Azure Logic Apps comienza a devolver el error 429. Existen algunos escenarios en los que Azure Logic Apps no puede detener el sondeo del desencadenador sin introducir errores y optar por agregar estas ejecuciones a la cola de ejecuciones en espera de todos modos sin errores en las ejecuciones de llamada.

En la definición del desencadenador subyacente, agregue la propiedad runtimeConfiguration.concurrency.maximumWaitingRuns, que puede tener un valor comprendido entre 1 y 100.

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "maximumWaitingRuns": 50
      }
   }
}

Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución.

Desencadenamiento secuencial de instancias

Para que cada instancia de flujo de trabajo de la aplicación lógica se ejecute una vez que haya finalizado la ejecución de la instancia anterior, establezca el desencadenador para que se ejecute de forma secuencial. Puede usar el editor de vistas de código o el diseñador de flujo de trabajo porque cambiar la configuración de simultaneidad a través del diseñador también agrega o actualiza la runtimeConfiguration.concurrency.runs propiedad en la definición del desencadenador subyacente y viceversa.

Nota:

Si configura un desencadenador para que se ejecute secuencialmente mediante el diseñador o mediante el editor de la vista Código, no establezca la propiedad operationOptions del desencadenador en Sequential en el editor de la vista Código. De lo contrario, obtendrá un error de validación.

Edición en la vista Código

En la definición del desencadenador, establezca cualquiera de estas propiedades, pero no ambas.

Establezca la propiedad runtimeConfiguration.concurrency.runs en 1:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "runtimeConfiguration": {
      "concurrency": {
         "runs": 1
      }
   }
}

o

Establezca la propiedad operationOptions en SingleInstance:

"<trigger-name>": {
   "type": "<trigger-name>",
   "recurrence": {
      "frequency": "<time-unit>",
      "interval": <number-of-time-units>,
   },
   "operationOptions": "SingleInstance"
}

Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución y Opciones de operación.

Edición en el diseñador de flujo de trabajo

  1. En la esquina superior derecha del desencadenador, elija el botón de los puntos suspensivos ( ... ) y, después, elija Configuración.

  2. En Control de simultaneidad, establezca Límite en Activado.

  3. Arrastre el control deslizante Grado de paralelismo al número 1.

Ejecución secuencial de bucles "for each"

Para que una iteración de bucle "for each" solo se ejecute una vez que haya finalizado la ejecución de la iteración anterior, establezca la acción "for each" para que se ejecute de forma secuencial. Puede usar el editor de vistas de código o el diseñador de flujo de trabajo porque cambiar la simultaneidad de la acción a través del diseñador también agrega o actualiza la runtimeConfiguration.concurrency.repetitions propiedad en la definición de acción subyacente y viceversa.

Nota:

Si configura una acción "for each" para que se ejecute secuencialmente mediante el diseñador o mediante el editor de la vista Código, no establezca la propiedad operationOptions de la acción en Sequential en el editor de la vista Código. De lo contrario, obtendrá un error de validación.

Edición en la vista Código

En la definición de la acción, establezca cualquiera de estas propiedades, pero no ambas.

Establezca la propiedad runtimeConfiguration.concurrency.repetitions en 1:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "runtimeConfiguration": {
      "concurrency": {
         "repetitions": 1
      }
   }
}

o

Establezca la propiedad operationOptions en Sequential:

"For_each" {
   "type": "Foreach",
   "actions": { "<actions-to-run>" },
   "foreach": "<for-each-expression>",
   "runAfter": {},
   "operationOptions": "Sequential"
}

Para más información, consulte Opciones de configuración del entorno en tiempo de ejecución y Opciones de operación.

Edición en el diseñador de flujo de trabajo

  1. En la esquina superior derecha de la acción For each, seleccione el botón de puntos suspensivos ( ... ) y luego seleccione Configuración.

  2. En Control de simultaneidad, establezca Control de simultaneidad en Activado.

  3. Arrastre el control deslizante Grado de paralelismo al número 1.

Ejecución de acciones en un modelo de operación sincrónica

De forma predeterminada, la acción HTTP y las acciones APIConnection de Azure Logic Apps siguen el modelo de operación asincrónica estándar, mientras que la acción de respuesta sigue el modelo de operación sincrónica. El modelo asincrónico especifica que, después de que una acción llame a o envíe una solicitud al punto de conexión, servicio, sistema o API especificados, el receptor devolverá inmediatamente una respuesta "202 ACCEPTED". Este código confirma que el receptor aceptó la solicitud, pero no ha finalizado el procesamiento. La respuesta puede incluir un encabezado location que especifica la dirección URL y un id. de actualización que el autor de la llamada puede usar para sondear o comprobar continuamente el estado de la solicitud asincrónica hasta que el receptor detenga el procesamiento y devuelva una respuesta de operación correcta "200 OK" u otra respuesta que no sea 202. Para más información, vea La integración de microservicio asincrónico aplica la autonomía de microservicios.

  • En el Diseñador de aplicación lógica, la acción HTTP, las acciones APIConnection y la acción de respuesta tienen la configuración Modelo asincrónico. Cuando está habilitada, esta configuración especifica que el autor de la llamada no espera a que finalice el procesamiento y puede pasar a la siguiente acción, pero continúa comprobando el estado hasta que se detiene el procesamiento. Si está deshabilitada, esta configuración especifica que el autor de la llamada espera a que finalice el procesamiento antes de pasar a la siguiente acción. Para buscar esta configuración, siga estos pasos:

    1. En la barra de título de la acción HTTP, seleccione el botón de puntos suspensivos ( ... ), que abre la configuración de la acción.

    2. Busque la opción de configuración Modelo asincrónico.

      Configuración

  • En la definición de notación de objetos JavaScript (JSON) subyacente de la acción, la acción HTTP y las acciones APIConnection siguen implícitamente el modelo de operación asincrónica.

En algunos escenarios, puede que desee que una acción siga el modelo sincrónico en su lugar. Por ejemplo, cuando se utiliza la acción HTTP, es posible que desee:

En estos casos, puede hacer que una acción se ejecute de forma sincrónica mediante estas opciones:

Desactivación de la configuración Modelo asincrónico

  1. En el Diseñador de aplicación lógica, en la barra de título de la acción, seleccione el botón de puntos suspensivos ( ... ), que abre la configuración de la acción.

  2. Busque la configuración Modelo asincrónico, establézcala en Desactivada si está habilitada y seleccione Listo.

    Desactivación de la configuración

Deshabilitación del modelo asincrónico en la definición JSON de la acción

En la definición JSON subyacente de la acción, agregue y establezca la propiedad "operationOptions" en "DisableAsyncPattern" en la sección "inputs" de la acción. Por ejemplo:

"<some-long-running-action>": {
   "type": "Http",
   "inputs": { "<action-inputs>" },
   "operationOptions": "DisableAsyncPattern",
   "runAfter": {}
}

Autenticación de acciones y desencadenadores

Los puntos de conexión HTTP y HTTPS admiten distintos tipos de autenticación. Según el desencadenador o la acción que use para realizar llamadas o solicitudes salientes para acceder a estos puntos de conexión, puede seleccionar entre distintos rangos de tipos de autenticación. Para obtener más información, consulte Incorporación de la autenticación en las llamadas salientes.

Pasos siguientes