Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 desencadenadores y acciones de conector específicos que puede usar en las aplicaciones lógicas, consulte la lista en Introducción a los conectores.
Información general sobre 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 el punto de conexión de un 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 los datos estén disponibles. 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>"
},
Required
| Value | Type | Description |
|---|---|---|
| < trigger-name> | String | El nombre del desencadenador |
| < tipo de desencadenador> | String | El tipo de desencadenador como, por ejemplo, "Http" o "ApiConnection" |
| < trigger-inputs> | Objeto JSON | Las entradas que definen el comportamiento del desencadenador |
| < unidad de tiempo> | String | La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month" |
| < número de unidades de tiempo> | Integer | Un valor que especifica con qué frecuencia se activa el desencadenador según la frecuencia, que es el número de unidades de tiempo que debe esperar hasta que el desencadenador se activa 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. |
Optional
| Value | Type | Description |
|---|---|---|
| < array-with-conditions> | Array | Matriz que contiene una o varias condiciones que determinan si se va a ejecutar 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 obtener 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 | Description |
|---|---|
| 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 | Description |
|---|---|
| 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 DE APIConnection
Este desencadenador comprueba o sondea un punto de conexión mediante api administradas por Microsoft o "conectores" para que los parámetros de este desencadenador puedan diferir en función del 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>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
| None | < APIConnection_trigger_name> | String | El nombre del desencadenador |
| host.connection.name | < nombre-de-conexión> | String | El nombre de la conexión a la API administrada que utiliza el flujo de trabajo |
| method | < method-type> | String | 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 | < unidad de tiempo> | String | Unidad de tiempo que describe la frecuencia con la que se desencadena el desencadenador: Second, Minute, Hour, Day, Week, Month |
| recurrence.interval | < número de unidades de tiempo> | Integer | Un valor que especifica con qué frecuencia se activa el desencadenador según la frecuencia, que es el número de unidades de tiempo que debe esperar hasta que el desencadenador se activa de nuevo Estos son los intervalos mínimo y máximo: - Month: 1-16 meses - Day: 1-500 días - Hour: 1-12 000 horas - Minute: 1-72 000 minutos - Second: 1-9 999 999 segundos Por ejemplo, si el intervalo es 6 y la frecuencia es Mes, la periodicidad es cada 6 meses. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
| retryPolicy | < comportamiento de reintento> | 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. |
| queries | < parámetros de consulta> | 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> | Integer | De forma predeterminada, las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
| runtimeConfiguration.maximumWaitingRuns | < max-runs-queue> | Integer | 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 obtener más información, consulte Opciones de operación. |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | Objeto JSON | Encabezados de la respuesta |
| body | Objeto JSON | Cuerpo de la respuesta |
| código de estado | Integer | El código de estado de la respuesta |
Example
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 a donde el punto de conexión puede enviar una respuesta y espera a que el punto de conexión responda. Para más información, consulte Suscripciones de 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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < nombre-de-conexión> | 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 |
Optional
| Value | Type | Description |
|---|---|---|
| < comportamiento de reintento> | 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. |
| < parámetros de consulta> | 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. |
| < max-runs> | Integer | De forma predeterminada, las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
| < max-runs-queue> | Integer | Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la runtimeConfiguration.concurrency.runs propiedad , 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. |
| < 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 obtener más información, consulte Opciones de operación. |
Example
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>"
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
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 la 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 |
< unidad de tiempo> | String | La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month" |
interval |
< número de unidades de tiempo> | Integer | Un valor que especifica con qué frecuencia se activa el desencadenador según la frecuencia, que es el número de unidades de tiempo que debe esperar hasta que el desencadenador se activa 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. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< encabezado-contenido> | Objeto JSON | Los encabezados que haya que incluir con la solicitud Por ejemplo, para establecer el idioma y el tipo: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< parámetros de consulta> | Objeto JSON | Los parámetros de consulta que tenga que 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 |
< comportamiento de reintento> | 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> | Integer | De forma predeterminada, las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
maximumWaitingRuns |
< max-runs-queue> | Integer | Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la runtimeConfiguration.concurrency.runs propiedad , 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. |
operationOptions |
< operation-option> | String | Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para obtener más información, consulte Opciones de operación. |
Outputs
| Element | Type | Description |
|---|---|---|
headers |
Objeto JSON | Encabezados de la respuesta |
body |
Objeto JSON | Cuerpo de la respuesta |
status code |
Integer | 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:
| Property | Required | Description |
|---|---|---|
| Código de estado | Yes | 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 de ubicación | 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
| Código de estado | Reintentar después | Behavior |
|---|---|---|
| 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 de 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 <el tipo> de método, están disponibles para los "subscribe" objetos y "unsubscribe" .
Required
| Value | Type | Description |
|---|---|---|
| < 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 |
Optional
| Value | Type | Description |
|---|---|---|
| < 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 |
| < tipo de autenticación> | 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. |
| < comportamiento de reintento> | 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> | Integer | De forma predeterminada, todas las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
| < max-runs-queue> | Integer | Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la runtimeConfiguration.concurrency.runs propiedad , 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. |
| < operation-option> | String | Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para obtener más información, consulte Opciones de operación. |
Outputs
| Element | Type | Description |
|---|---|---|
| headers | Objeto JSON | Encabezados de la respuesta |
| body | Objeto JSON | Cuerpo de la respuesta |
| status code | Integer | El código de estado de la respuesta |
Example
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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < unidad de tiempo> | String | La unidad de tiempo que describe la frecuencia con que se activa el desencadenador: "Second", "Minute", "Hour", "Day", "Week", "Month" |
| < número de unidades de tiempo> | Integer | Un valor que especifica con qué frecuencia se activa el desencadenador según la frecuencia, que es el número de unidades de tiempo que debe esperar hasta que el desencadenador se activa 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. |
Optional
| Value | Type | Description |
|---|---|---|
| < start-date-time-with-format-AAAA-MM-DDThh:mm:ss> | String | La fecha y hora de inicio en este formato: AAAA-MM-DDThh:mm:ss si especifica una zona horaria -or- 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 un desplazamiento 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. |
| < zona horaria> | 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. |
| < una o varias horas> | 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. |
| < marcas de uno o más minutos> | 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> | Integer | De forma predeterminada, todas las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
| < max-runs-queue> | Integer | Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la runtimeConfiguration.concurrency.runs propiedad , 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. |
| < operation-option> | String | Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para obtener 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.
Note
El nombre original del desencadenador request era manual, que podría aparecer en algunos lugares. Este nombre ha cambiado para crear más coherencia en torno al tipo de patrón de flujo de trabajo que se usa el desencadenador para compilar.
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.
"Request": {
"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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < property-name> | String | El nombre de una propiedad en el esquema JSON que describe la carga |
| < tipo de propiedad> | String | El tipo de propiedad |
Optional
| Value | Type | Description |
|---|---|---|
| < 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> | Integer | De forma predeterminada, todas las instancias de flujo de trabajo se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad del desencadenador. |
| < max-runs-queue> | Integer | Cuando el flujo de trabajo ya ejecuta el número máximo de instancias, que puede cambiar en función de la runtimeConfiguration.concurrency.runs propiedad , 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. |
| < operation-option> | String | Puede cambiar el comportamiento predeterminado estableciendo la propiedad operationOptions. Para obtener más información, consulte Opciones de operación. |
Example
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:
"Request": {
"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 de flujo de trabajo en una matriz
En escenarios en los que el flujo de trabajo usa un desencadenador que recibe matrices para su procesamiento, a veces el uso de un bucle For each puede tardar demasiado tiempo. Para acelerar el procesamiento, una opción es crear ramas paralelas. O bien, si el desencadenador admite la desagrupación, puede hacer que el desencadenador divida los elementos de matriz y ejecute una instancia de flujo de trabajo independiente para cada elemento de matriz. Esta opción es útil, por ejemplo, cuando desea sondear un punto de conexión que podría devolver varios elementos nuevos entre intervalos de sondeo.
Solo los desencadenadores que pueden aceptar matrices y devolver matrices admiten esta funcionalidad, como request, HTTP, Azure Service Bus u Office Outlook 365. Para estos desencadenadores, en el diseñador de flujo de trabajo, puede activar la opción Dividir en , que agrega la splitOn propiedad a la definición del desencadenador.
Note
Si el archivo Swagger del desencadenador describe una carga que es una matriz, la propiedad se agrega automáticamente a la splitOn definición del desencadenador. Si no es así, y el desencadenador puede aceptar matrices, puede agregar la propiedad a la carga de respuesta que contiene la matriz que desea desencadene.
Antes de usar la funcionalidad de desagrupación, revise las consideraciones siguientes:
Si la simultaneidad del desencadenador también está activada, se reduce significativamente el límite de división. Si el número de elementos supera este límite, la capacidad Dividir en no está disponible.
La funcionalidad Dividir en no funciona con el patrón de respuesta sincrónica. Si un flujo de trabajo usa la acción Respuesta y activa la opción Dividir en se ejecuta de forma asincrónica y envía inmediatamente una
202 ACCEPTEDrespuesta.Existe un límite en el número de elementos de matriz que Split on puede procesar en una sola ejecución de flujo de trabajo. Para más información, consulte Límites de bucle y procesamiento por lotes.
Si configura la desagrupación a través de la definición del desencadenador mediante la
splitOnpropiedad , no se puede hacer referencia directamente a las propiedades que existen fuera de la matriz. Para evitar errores, precede a la referencia con el?operador . Para obtener ejemplos, consulte Activar el desagrupo en la definición del desencadenador.
Activar el desagrupamiento mediante el diseñador
Siga estos pasos en el diseñador de flujos de trabajo para configurar el desagrupamiento en un desencadenador en el que se admita:
En [Azure Portal], abra el recurso de aplicación lógica.
Abra el flujo de trabajo en el diseñador.
En el diseñador, seleccione el desencadenador que admite la desagrupación para abrir el panel de información del desencadenador.
En la pestaña Configuración , en General, busque la opción Dividir en y cambie la configuración a Activado si no está activado.
Activar el desagrupamiento en la definición del desencadenador
Algunos desencadenadores controlan matrices, pero la configuración Dividir en no está disponible a través del diseñador. Para estos desencadenadores, siga estos pasos para agregar la splitOn propiedad en la definición del desencadenador:
Por ejemplo, supongamos que el flujo de trabajo usa el desencadenador HTTP para llamar a una API y obtiene la siguiente respuesta:
{
"Status": "Succeeded",
"Rows": [
{
"id": 938109380,
"name": "customer-name-one"
},
{
"id": 938109381,
"name": "customer-name-two"
}
]
}
Si el flujo de trabajo solo necesita el contenido de la Rows matriz, puede agregar y configurar la splitOn propiedad en la definición del desencadenador, como se muestra en el ejemplo siguiente:
"HTTP_trigger_debatch": {
"type": "Http",
"inputs": {
"uri": "https://mydomain.com/myAPI",
"method": "GET"
},
"recurrence": {
"frequency": "Second",
"interval": 1
},
"splitOn": "@triggerBody()?.Rows"
}
Note
Recuerde que, si usa la splitOn propiedad , no puede acceder directamente a las propiedades de referencia o a las que existen fuera de la matriz. Para evitar errores, use el ? operador como se muestra en los ejemplos.
La definición del flujo de trabajo también puede usar splitOn y @triggerBody().name para obtener valores de la name propiedad . Estos valores proceden "customer-name-one" de la primera ejecución de flujo de trabajo y "customer-name-two" de la segunda ejecución de flujo de trabajo. En este ejemplo, las salidas del desencadenador tienen un aspecto similar a los siguientes valores:
{
"body": {
"id": 938109380,
"name": "customer-name-one"
}
}
{
"body": {
"id": 938109381,
"name": "customer-name-two"
}
}
Introducción a las 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>"
},
Required
| Value | Type | Description |
|---|---|---|
| < action-name> | String | El nombre de la acción |
| < tipo de acción> | 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> | Various | 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 |
Optional
| Value | Type | Description |
|---|---|---|
| < comportamiento de reintento> | 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 obtener 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:
Tipos de acción integrada como estos ejemplos y muchos otros:
HTTP para llamar a puntos de conexión a través de HTTP o HTTPS
Respuesta para responder a las solicitudes
Ejecutar código de JavaScript para ejecutar fragmentos de código de JavaScript
Función para llamar a Azure Functions
Acciones de operación de datos como Join, Compose, Table, Select y otras que crean o transforman datos de varias entradas
Flujo de trabajo para llamar a otro flujo de trabajo de aplicación lógica
Tipos de acción de API administradas como ApiConnection y ApiConnectionWebHook que llaman a varios conectores y API administrados por Microsoft como, por ejemplo, Azure Service Bus, Office 365 Outlook, Power BI, Azure Blob Storage, OneDrive, GitHub, etc.
Tipos de acción de control de flujo de trabajo como, por ejemplo, If, Foreach, Switch, Scope y Until, que contienen otras acciones y le ayudan a organizar la ejecución del flujo de trabajo
Acciones integradas
| Tipo de acción | Description |
|---|---|
| Compose | 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. |
| Join | Crea una cadena con todos los elementos de una matriz y los separa con el carácter delimitador especificado. |
| Análisis de 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. |
| Query | Crea una matriz a partir de elementos de otra matriz basándose en una condición o un filtro. |
| Response | Crea una respuesta a una solicitud o una llamada entrante. |
| Select | Crea una matriz con objetos JSON mediante la transformación de los elementos de otra matriz según la asignación especificada. |
| Table | Crea una tabla CSV o HTML a partir de una matriz. |
| Terminate | Detiene un flujo de trabajo que se está ejecutando activamente. |
| Wait | 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 | Description |
|---|---|
| ApiConnection | Llama a un punto de conexión HTTP mediante una API administrada por Microsoft. |
| ApiConnectionWebhook | Funciona como webhook HTTP, 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 | Description |
|---|---|
| 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, además de 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < 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 |
Optional
| Value | Type | Description |
|---|---|---|
| < other-action-specific-input-properties> | Objeto JSON | Cualquier otra propiedad de entrada que sea aplicable a esta acción específica |
| < comportamiento de reintento> | 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. |
| < parámetros de consulta> | 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 |
Example
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 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 a donde el punto de conexión puede enviar una respuesta y espera a que el punto de conexión responda. Para más información, consulte Suscripciones de 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 <el tipo> de método, están disponibles para los "subscribe" objetos y "unsubscribe" .
Required
| Value | Type | Description |
|---|---|---|
| < 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 |
Optional
| Value | Type | Description |
|---|---|---|
| < api-unsubscribe-URL> | String | El identificador URI que se utiliza para cancelar la suscripción desde la API |
| < encabezado-contenido> | Objeto JSON | Todos los encabezados que se vayan 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 |
| < tipo de autenticación> | 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. |
| < comportamiento de reintento> | 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. |
| < parámetros de consulta> | 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-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 en una acción ApiConnectionWebhook de la misma manera que los límites asincrónicos HTTP.
Acción De redacción
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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < JavaScript-code-snippet> | Varies | 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 | Type | Description |
|---|---|---|
| < acciones anteriores> | Matriz de cadenas | 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 de 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 función
Esta acción llama a una función de Azure creada anteriormente.
"<Azure-function-name>": {
"type": "Function",
"inputs": {
"function": {
"id": "<Azure-function-ID>"
},
"method": "<method-type>",
"headers": { "<header-content>" },
"body": { "<body-content>" },
"queries": { "<query-parameters>" }
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < 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> | String | El método HTTP que se utiliza para llamar a la función: "GET", "PUT", "POST", "PATCH" o "DELETE" Si no se especifica, "POST" es el método predeterminado. |
Optional
| Value | Type | Description |
|---|---|---|
| < encabezado-contenido> | Objeto JSON | Todos los encabezados que se vayan a enviar 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 |
| < parámetros de consulta> | 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-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 alguna operación invalida la dirección URL almacenada en caché, la acción Función produce un error en tiempo de ejecución. 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".
Example
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": {}
}
Required
| Property | Value | Type | Description |
|---|---|---|---|
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 la 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. |
Optional
| Property | Value | Type | Description |
|---|---|---|---|
headers |
< encabezado-contenido> | Objeto JSON | Los encabezados que haya que incluir con la solicitud Por ejemplo, para establecer el idioma y el tipo: "headers": { "Accept-Language": "en-us", "Content-Type": "application/json" } |
queries |
< parámetros de consulta> | Objeto JSON | Los parámetros de consulta que tenga que 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 |
< comportamiento de reintento> | 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 |
Example
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 de unión
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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < arreglo> | 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 |
Example
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 descriptivos 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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < Origen JSON> | Objeto JSON | El contenido JSON que desea analizar |
| < Esquema JSON> | 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. |
Example
Esta definición de acción crea estos tokens que puede usar en el flujo de trabajo, pero solo en acciones que se ejecutan siguiendo la acción Analizar 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < arreglo> | 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> | String | La condición usada para filtrar elementos en la matriz de origen Nota: Si no hay valores que cumplan la condición, la acción crea una matriz vacía. |
Example
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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < response-status-code> | Integer | 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. |
Optional
| Value | Type | Description |
|---|---|---|
| < encabezados de respuesta> | Objeto JSON | Uno o más encabezados que se incluyen con la respuesta |
| < cuerpo de la respuesta> | Various | El cuerpo de respuesta, que puede ser una cadena, un objeto JSON o incluso contenido binario de una acción anterior |
Example
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": {}
}
Restrictions
A diferencia de otras acciones, la acción respuesta tiene restricciones especiales:
El flujo de trabajo solo puede usar la acción Respuesta cuando el flujo de trabajo comienza con un desencadenador de solicitud HTTP, lo que significa que el flujo de trabajo debe desencadenarse mediante una solicitud HTTP.
El flujo de trabajo puede usar la acción Respuesta en cualquier lugar , excepto dentro de bucles Foreach , bucles Until , incluidos bucles secuenciales y ramas paralelas.
La solicitud original obtiene la respuesta del flujo de trabajo solo cuando todas las acciones requeridas por la acción respuesta finalizan dentro del límite de tiempo de espera 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 Respuesta y un patrón de respuesta sincrónico, el flujo de trabajo tampoco puede usar el comando splitOn en la definición del desencadenador porque ese comando crea varias 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".
De lo 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 e inmediatamente devuelve una respuesta "202 ACCEPTED".
Cuando 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 marca como "Error" debido al conflicto. Y, como resultado, la ejecución de la aplicación lógica también se marcará con el estado "Erróneo".
Seleccionar acción
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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < arreglo> | 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 crea una matriz vacía. |
| < key-name> | String | Nombre de propiedad asignado al resultado de la <expresión> Para agregar una nueva propiedad en todos los objetos de la matriz de salida, proporcione un < nombre > para esa propiedad y una <expresión> para el valor de propiedad. Para quitar una propiedad de todos los objetos de la matriz, omita el < nombre > de esa propiedad. |
| < expresión> | String | Expresión que transforma el elemento en 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 quiera usar esta salida debe aceptar una matriz o convertir la matriz en el tipo que acepta la acción de 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.
Example
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, pase esta salida a una acción De redacción :
"Compose": {
"type": "Compose",
"inputs": "@body('Select')",
"runAfter": {
"Select": [ "Succeeded" ]
}
},
A continuación, puede usar la salida de la acción Redactar en otras acciones, 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| <CSV o HTML> | String | El formato de la tabla que desea crear |
| < arreglo> | Array | La matriz o expresión que proporciona los elementos de origen de la tabla. Nota: Si la matriz de origen está vacía, la acción crea una tabla vacía. |
Optional
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 | Type | Description |
|---|---|---|
| < nombre de columna> | 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:
| ID | Product_Name |
|---|---|
| 0 | Apples |
| 1 | Oranges |
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_ID | Description |
|---|---|
| 0 | Manzanas orgánicas |
| 1 | Naranjas orgánicas |
Acción finalizar
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 Finalizar cuando la aplicación lógica debe salir completamente de un estado de error. Esta acción no afecta a las acciones ya completadas y no puede aparecer dentro de los bucles Foreach y Until , incluidos los bucles secuenciales.
"Terminate": {
"type": "Terminate",
"inputs": {
"runStatus": "<status>",
"runError": {
"code": "<error-code-or-name>",
"message": "<error-message>"
}
},
"runAfter": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < estado> | String | El estado que se devolverá para la ejecución: "Erróneo", "Cancelado" o "Correcto" |
Optional
Las propiedades del objeto "runError" solo se aplican cuando la propiedad "runStatus" está establecida en estado "Failed".
| Value | Type | Description |
|---|---|---|
| < error-code-or-name> | String | El código o nombre del error |
| < mensaje de error> | String | El mensaje o el texto que describe el error y las acciones que el usuario de la aplicación puede realizar |
Example
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 de espera
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": {}
},
Required
| Value | Type | Description |
|---|---|---|
| < número de unidades> | Integer | Para la acción Retraso , el número de unidades que se van a esperar |
| < intervalo> | String | Para la acción Retraso , el intervalo para esperar: "Second", "Minute", "Hour", "Day", "Week", "Month" |
| < date-time-stamp> | String | Para la acción Retrasar hasta , la fecha y hora de reanudación de 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 de flujo de trabajo
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 siguen 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 se pueda llamar a la aplicación lógica anidada, como 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < 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 |
| < Grupo de recursos de Azure> | String | El nombre del grupo de recursos de Azure para la aplicación lógica anidada |
Optional
| Value | Type | Description |
|---|---|---|
| < encabezado-contenido> | 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 |
Outputs
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.
Example
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>"
}
Required
| Value | Type | Description |
|---|---|---|
| < acción-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 |
Optional
| Value | Type | Description |
|---|---|---|
| < contar> | Integer | De forma predeterminada, las iteraciones de bucle "for each" se ejecutan al mismo tiempo (simultáneamente o en paralelo) hasta el límite predeterminado. Para cambiar este límite estableciendo un nuevo < valor de recuento>, consulte Cambio de la simultaneidad de bucles "for each". |
| < operation-option> | String | Para ejecutar un bucle "for each" secuencialmente, en lugar de en paralelo, establezca <> en Sequential o <count> en 1, pero no en ambos. Para más información, consulte Ejecución secuencial de bucles "for each". |
Example
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 pasa como salida del 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>']
Si es una acción
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 | Type | Description |
|---|---|---|
| < condición> | Objeto JSON | La condición que se va a evaluar, que puede ser una expresión |
| < action-1> | Objeto JSON | Acción que se va a ejecutar cuando <la condición> se evalúa como true |
| < action-definition> | Objeto JSON | La definición de la acción |
| < action-2> | Objeto JSON | Acción que se va a ejecutar cuando <la condición> 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
Example
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 | Result |
|---|---|
| "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 solo se ejecuta cuando la salida de < acción > es mayor que el valor de <umbral>. |
| "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 cuando la salida de < acción > es mayor que el valor de <umbral> o menos de 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 ámbito
Esta acción agrupa lógicamente las acciones en ámbitos, que obtienen su propio estado después de que las acciones de ese á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": {}
}
}
}
Required
| Value | Type | Description |
|---|---|---|
| < acción interna-1... n> | Objeto JSON | Una o varias acciones que se ejecutan dentro del ámbito |
| < action-inputs> | Objeto JSON | Las entradas de cada acción |
Cambiar acción
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 uno. 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 Cambiar busca un caso coincidente, el flujo de trabajo solo ejecuta las acciones de ese caso. Cada vez que se ejecuta la acción Switch , solo existe un caso coincidente o no existe ninguna coincidencia. Si no existen coincidencias, la acción Cambiar ejecuta 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": {}
}
Required
| Value | Type | Description |
|---|---|---|
| < expression-object-or-token> | Varies | 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> | Varies | El valor que se compara con el resultado evaluado |
Optional
| Value | Type | Description |
|---|---|---|
| < 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 |
Example
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". En función de esta opción, la acción Cambiar ejecuta las acciones para el caso coincidente, que es enviar otro correo electrónico al respondedor, pero con diferentes palabras 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"
]
}
}
Hasta la acción
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 | Type | Description |
|---|---|---|
| < action-name> | String | El nombre de la acción que desea ejecutar dentro del bucle |
| < tipo de acción> | String | El tipo de acción que desea ejecutar |
| < action-inputs> | Various | Las entradas para que la acción se ejecute |
| < condición> | 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> | Integer | 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. |
| < tiempo de espera de bucle> | 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. |
Note
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.
Example
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 donde 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.
| Property | Type | Description | Desencadenador o acción |
|---|---|---|---|
runtimeConfiguration.concurrency.runs |
Integer | Cambie el límite predeterminado en el número de instancias de flujo de trabajo que se pueden ejecutar al mismo tiempo (simultáneamente 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 |
Integer | Cambie el límite predeterminado en el número de instancias de flujo de trabajo que deben esperar a ejecutarse cuando la aplicación lógica ya esté ejecutando el 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 |
Integer | Cambie el límite predeterminado en el número de iteraciones de bucle "for each" que se pueden ejecutar al mismo tiempo (simultáneamente 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". |
Action: Foreach |
runtimeConfiguration.paginationPolicy.minimumItemCount |
Integer | Para acciones específicas que admiten y tienen activada la paginación, 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: variada |
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: variada |
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 operación | Type | Description | 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. |
Actions: ApiConnection, HTTP, Response |
IncludeAuthorizationHeadersInOutputs |
String | En el caso de las aplicaciones lógicas que habilitar OAuth con Microsoft Entra ID autorizar el acceso a las llamadas entrantes a un punto de conexión de desencadenador basado en solicitudes, incluya el encabezado Authorization 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. |
Triggers: Request, HTTP Webhook |
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". |
Action: 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 manera predeterminada, Azure Logic Apps incluye encabezados de metadatos adicionales con el prefijo x-ms- en el nombre del 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. |
Actions: HTTP, Function, APIManagement |
SuppressWorkflowHeadersOnResponse |
String | No envíe encabezados de metadatos x-ms-* en respuestas a solicitudes de desencadenador de entrada. De manera predeterminada, Azure Logic Apps envía respuestas a solicitudes entrantes que incluyen encabezados de metadatos adicionales con el prefijo x-ms- 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. |
Triggers: Request, HTTP Webhook |
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 que se ejecutan simultáneamente 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 propiedad runtimeConfiguration.concurrency.runs 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 se habilita la simultaneidad, la división en el límite se reduce significativamente para las matrices de desagrupación. Si el número de elementos supera este límite, la funcionalidad Dividir en se deshabilita.
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 antiguas que todavía se están ejecutando.
En el menú de la aplicación lógica, seleccione Información general.
En la sección Historial de ejecuciones , seleccione la instancia más antigua que todavía se está ejecutando, por ejemplo:
Tip
Para ver solo las instancias que siguen en ejecución, abra la lista Todos y seleccione En ejecución.
En Ejecución de aplicación lógica, seleccione Cancelar 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:
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, a continuación, seleccione Configuración.
En Tiempo de espera, especifique la duración del tiempo de espera en formato ISO 8601.
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 propiedadoperationOptionsdel desencadenador enSingleInstanceen 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
En la esquina superior derecha del desencadenador, seleccione el botón de puntos suspensivos (...) y, a continuación, seleccione Configuración.
En Control de simultaneidad, establezca Límite en Activado.
Arrastre el control deslizante Grado de paralelismo al valor que desee. Para ejecutar la aplicación lógica secuencialmente, 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 simultáneamente 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 al cambiar la configuración de simultaneidad a través del diseñador se agrega o actualiza la propiedad runtimeConfiguration.concurrency.repetitions 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.
Note
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
En la acción Para cada acción, en la esquina superior derecha, seleccione el botón de puntos suspensivos (...) y, a continuación, seleccione Configuración.
En Control de simultaneidad, establezca Control de simultaneidad en Activado.
Arrastre el control deslizante Grado de paralelismo al valor que desee. Para ejecutar la aplicación lógica secuencialmente, 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: demasiadas solicitudes erroresy 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 propiedad runtimeConfiguration.concurrency.runs en la definición del desencadenador subyacente y viceversa.
Note
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
}
}
}
-or-
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
En la esquina superior derecha del desencadenador, seleccione el botón de puntos suspensivos (...) y, a continuación, seleccione Configuración.
En Control de simultaneidad, establezca Límite en Activado.
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 propiedad runtimeConfiguration.concurrency.repetitions en la definición de acción subyacente y viceversa.
Note
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
}
}
}
-or-
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
En la esquina superior derecha de cada acción, seleccione el botón de puntos suspensivos (...) y, a continuación, seleccione Configuración.
En Control de simultaneidad, establezca Control de simultaneidad en Activado.
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 patrón 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 devuelve 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 location encabezado que especifica la dirección URL y un identificador 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 deje de procesarse y devuelva una respuesta 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 aplicaciones lógicas, la acción HTTP, las acciones APIConnection y la acción Respuesta tienen la configuración Patrón 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:
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.
Busque la configuración Patrón asincrónico .
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:
- Evitar los tiempos de espera de HTTP para las tareas de ejecución prolongada
- Deshabilitar la comprobación de encabezados de ubicación
En estos casos, puede hacer que una acción se ejecute de forma sincrónica mediante estas opciones:
Reemplace la versión de sondeo de esa acción por una versión de webhook, si está disponible.
Deshabilite el comportamiento asincrónico de la acción mediante cualquiera de las opciones siguientes:
En el Diseñador de aplicación lógica, desactive la configuración Modelo asincrónico.
En la definición JSON subyacente de la acción, agregue la opción de operación
"DisableAsyncPattern".
Desactivar la configuración de patrón asincrónico
En el Diseñador de aplicaciones lógicas, 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.
Busque la configuración Patrón asincrónico , active la configuración en Desactivado si está habilitado y seleccione Listo.
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 de "inputs" 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
- Obtenga más información sobre el lenguaje de definición de flujo de trabajo.