Skip to content

Commit 45c544a

Browse files
authored
Merge pull request #125588 from DieterGobeyn/main
Consistency updates and clarifications on application/x-www-form-urlencoded handling
2 parents c5e9f57 + 6841f14 commit 45c544a

12 files changed

+27
-30
lines changed

articles/logic-apps/ai-resources.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ For more information, see the following resources:
161161

162162
## Ingest documents and chat with data
163163

164-
Data is the cornerstone for any AI application and unique for each organization. When you build any AI application, efficient data ingestion is critical for success. Regardless where your data resides and with little or no code, you can more easily integrate AI into new and existing business processes by building Standard workflows with Azure Logic Apps.
164+
Data is the cornerstone for any AI application and unique for each organization. When you build any AI application, efficient data ingestion is critical for success. No matter where your data resides, you can integrate AI into new and existing business processes using little or no code by building Standard workflows with Azure Logic Apps.
165165

166166
With over 1,400 enterprise connectors and operations, Azure Logic Apps makes it possible for you to quickly access and perform tasks with a wide range of services, systems, applications, and databases. When you use these connectors alongside AI services, such as Azure OpenAI and Azure AI Search, your organization can transform workloads such as automating routine tasks, enhancing customer interactions with chat capabilities, providing access to organizational data when necessary, and generating intelligent insights or responses. Along with these operations, Azure Logic Apps also offers prebuilt workflow templates that ingest data from many common data sources, such as SharePoint, Azure File Storage, Blob Storage, SFTP, and more, to help you quickly build and your applications.
167167

articles/logic-apps/handle-throttling-problems-429-errors.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ ms.date: 01/10/2024
1212

1313
[!INCLUDE [logic-apps-sku-consumption-standard](../../includes/logic-apps-sku-consumption-standard.md)]
1414

15-
If your logic app workflow experiences throttling, which happens when the number of requests exceed the rate at which the destination can handle over a specific amount of time, you get the ["HTTP 429 Too many requests" error](https://developer.mozilla.org/docs/Web/HTTP/Status/429). Throttling can create problems such as delayed data processing, reduced performance speed, and errors such as exceeding the specified retry policy.
15+
If your logic app workflow experiences throttling, which happens when the number of requests exceeds the rate at which the destination can handle over a specific amount of time, you get the ["HTTP 429 Too many requests" error](https://developer.mozilla.org/docs/Web/HTTP/Status/429). Throttling can create problems such as delayed data processing, reduced performance speed, and errors such as exceeding the specified retry policy.
1616

1717
For example, the following SQL Server action in a Consumption workflow shows a 429 error, which reports a throttling problem:
1818

@@ -80,7 +80,7 @@ To handle throttling at this level, you have the following options:
8080

8181
* Refactor actions into multiple, smaller workflows.
8282

83-
As mentioned earlier, a Consumption logic app workflow is limited to a [default number of actions that can run over a 5-minute period](logic-apps-limits-and-config.md#throughput-limits). Although you can increase this limit by enabling [high throughput mode](logic-apps-limits-and-config.md#run-high-throughput-mode), you might also consider whether you want to break down your workflow's actions into smaller workflows so that the number of actions that run in each workflow stays under the limit. That way, you reduce the burden on a single workflow and distribute the load across multiple workflows. This solution works better for actions that handle large data sets or spin up so many concurrently running actions, loop iterations, or actions inside each loop iteration that they exceed action execution limit.
83+
As mentioned earlier, a Consumption logic app workflow is limited to a [default number of actions that can run over a 5-minute period](logic-apps-limits-and-config.md#throughput-limits). Although you can increase this limit by enabling [high throughput mode](logic-apps-limits-and-config.md#run-high-throughput-mode), you might also consider whether you want to break down your workflow's actions into smaller workflows so that the number of actions that run in each workflow stays under the limit. That way, you reduce the burden on a single workflow and distribute the load across multiple workflows. This solution works better for actions that handle large data sets or spin up so many concurrently running actions, loop iterations, or actions inside each loop iteration that they exceed the action execution limit.
8484

8585
For example, the following Consumption workflow does all the work to get tables from a SQL Server database and gets the rows from each table. The **For each** loop concurrently iterates through each table so that the **Get rows** action returns the rows for each table. Based on the amounts of data in those tables, these actions might exceed the limit on action executions.
8686

@@ -162,7 +162,7 @@ To handle throttling at this level, you have the following options:
162162

163163
While a connector has its own throttling limits, the destination service or system that's called by the connector might also have throttling limits. For example, some APIs in Microsoft Exchange Server have stricter throttling limits than the Office 365 Outlook connector.
164164

165-
By default, a logic app's workflow instances and any loops or branches inside those instances, run *in parallel*. This behavior means that multiple instances can call the same endpoint at the same time. Each instance doesn't know about the other's existence, so attempts to retry failed actions can create [race conditions](https://en.wikipedia.org/wiki/Race_condition) where multiple calls try to run at same time, but to succeed, those calls must arrive at the destination service or system before throttling starts to happen.
165+
By default, a logic app's workflow instances and any loops or branches inside those instances, run *in parallel*. This behavior means that multiple instances can call the same endpoint at the same time. Each instance doesn't know about the other's existence, so attempts to retry failed actions can create [race conditions](https://en.wikipedia.org/wiki/Race_condition) where multiple calls try to run at the same time, but to succeed, those calls must arrive at the destination service or system before throttling starts to happen.
166166

167167
For example, suppose you have an array that has 100 items. You use a "For each" loop to iterate through the array and turn on the loop's concurrency control so that you can restrict the number of parallel iterations to 20 or the [current default limit](logic-apps-limits-and-config.md#concurrency-looping-and-debatching-limits). Inside that loop, an action inserts an item from the array into a SQL Server database, which permits only 15 calls per second. This scenario results in a throttling problem because a backlog of retries builds up and never gets to run.
168168

@@ -192,7 +192,7 @@ To handle throttling at this level, you have the following options:
192192

193193
Why? A polling trigger continues to check the destination service or system at specific intervals. A very frequent interval, such as every second, can create throttling problems. However, a webhook trigger or action, such as [HTTP Webhook](../connectors/connectors-native-webhook.md), creates only a single call to the destination service or system, which happens at subscription time and requests that the destination notifies the trigger or action only when an event happens. That way, the trigger or action doesn't have to continually check the destination.
194194

195-
So, if the destination service or system supports webhooks or provides a connector that has a webhook version, this option is better than using the polling version. To identify webhook triggers and actions, confirm that they have the `ApiConnectionWebhook` type or that they don't require that you specify a recurrence. For more information, see [APIConnectionWebhook trigger](logic-apps-workflow-actions-triggers.md#apiconnectionwebhook-trigger) and [APIConnectionWebhook action](logic-apps-workflow-actions-triggers.md#apiconnectionwebhook-action).
195+
So, if the destination service or system supports webhooks or provides a connector that has a webhook version, this option is better than using the polling version. To identify webhook triggers and actions, confirm that they have the `ApiConnectionWebhook` type or that they don't require that you specify a recurrence. For more information, see [ApiConnectionWebhook trigger](logic-apps-workflow-actions-triggers.md#apiconnectionwebhook-trigger) and [ApiConnectionWebhook action](logic-apps-workflow-actions-triggers.md#apiconnectionwebhook-action).
196196

197197
## Next steps
198198

articles/logic-apps/logic-apps-author-definitions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Before you can work on a Consumption workflow definition in Visual Studio, make
4242

4343
1. Open the Visual Studio solution, or [Azure Resource Group](/azure/azure-resource-manager/management/overview) project, that contains your logic app.
4444

45-
1. Find and open your workflow definition, which by default, appears in an [Resource Manager template](/azure/azure-resource-manager/templates/overview), named **LogicApp.json**.
45+
1. Find and open your workflow definition, which by default, appears in a [Resource Manager template](/azure/azure-resource-manager/templates/overview), named **LogicApp.json**.
4646

4747
You can use and customize this template for deployment to different environments.
4848

@@ -133,7 +133,7 @@ These steps describe how this example processes this string, working from the in
133133

134134
## Map list items to property values, then use maps as parameters
135135

136-
To get different results based a property's value, you can create a map that matches each property value to a result, then use that map as a parameter.
136+
To get different results based on a property's value, you can create a map that matches each property value to a result, then use that map as a parameter.
137137

138138
For example, this workflow defines some categories as parameters and a map that matches those categories with a specific URL. First, the workflow gets a list of articles. Then, the workflow uses the map to find the URL matching the category for each article.
139139

articles/logic-apps/logic-apps-azure-resource-manager-templates-overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ Here is the structure inside the parameters file, which includes a key vault ref
206206
"keyVault": {
207207
"id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/Microsoft.KeyVault/vaults/<key-vault-name>"
208208
},
209-
"secretName: "<secret-name>"
209+
"secretName": "<secret-name>"
210210
}
211211
},
212212
<other-parameter-values>
@@ -405,7 +405,7 @@ This syntax shows where you can declare parameters at both the template and work
405405
"type": "<trigger-type>",
406406
"inputs": {
407407
// Workflow definition parameter reference
408-
"<attribute-name>": "@parameters('<workflow-definition-parameter-name')"
408+
"<attribute-name>": "@parameters('<workflow-definition-parameter-name>')"
409409
}
410410
}
411411
},

articles/logic-apps/logic-apps-content-type.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ for example:
3434
## application/json
3535

3636
Logic Apps stores and handles any request with the *application/json*
37-
content type as a JavaScript Notation (JSON) object.
37+
content type as a JavaScript Object Notation (JSON) object.
3838
By default, you can parse JSON content without any casting.
3939
To parse a request that has a header with the "application/json" content type,
4040
you can use an expression. This example returns the value `dog` from the
4141
`animal-type` array without casting:
4242

43-
`@body('myAction')['animal-type'][0]`
43+
`@body('myAction')['client']['animal-type'][0]`
4444

4545
```json
4646
{
@@ -56,7 +56,7 @@ you can manually cast that data to JSON by using the
5656
[json() function](../logic-apps/workflow-definition-language-functions-reference.md#json),
5757
for example:
5858

59-
`@json(triggerBody())['animal-type']`
59+
`@json(triggerBody())['client']['animal-type']`
6060

6161
### Create tokens for JSON properties
6262

@@ -196,7 +196,7 @@ For example, if you receive an HTTP request
196196
where `Content-Type` set to `application/xml`,
197197
such as this content:
198198

199-
```html
199+
```xml
200200
<?xml version="1.0" encoding="UTF-8" ?>
201201
<CustomerName>Frank</CustomerName>
202202
```

articles/logic-apps/logic-apps-control-flow-branches.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ This guide shows how to create parallel branches in a workflow and rejoin those
2121
> [!TIP]
2222
>
2323
> If your workflow trigger receives an array, and you want to run a workflow instance
24-
> instance for each item in the array, rather than create parallel branches, you can
24+
> for each item in the array, rather than create parallel branches, you can
2525
> [*debatch* that array instead by using the **SplitOn** trigger property](logic-apps-workflow-actions-triggers.md#split-on-debatch).
2626
2727
## Prerequisites

articles/logic-apps/logic-apps-control-flow-conditional-statement.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ The following code shows the high-level JSON definition for the **Condition** ac
162162
"Condition": [
163163
"Succeeded"
164164
]
165-
},
165+
}
166166
}
167167
},
168168
```

articles/logic-apps/logic-apps-control-flow-loops.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -489,16 +489,13 @@ if any of the following conditions happen:
489489
"body": {
490490
"resourceId": "@triggerBody()"
491491
},
492-
"url": "https://domain.com/provisionResource/create-resource",
493-
"body": {
494-
"resourceId": "@triggerBody()"
495-
}
492+
"url": "https://domain.com/provisionResource/create-resource"
496493
},
497494
"runAfter": {},
498495
"type": "ApiConnection"
499496
}
500497
},
501-
"expression": "@equals(triggerBody(), 'Completed')",
498+
"expression": "@equals(body('Create_new_resource'), 'Completed')",
502499
"limit": {
503500
"count": 10,
504501
"timeout": "PT2H"

articles/logic-apps/logic-apps-control-flow-switch-statement.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ email to an approver. Based on whether the approver selects
5555

5656
## Add a switch action
5757

58-
1. For this example, add a switch action at the end
58+
1. For this example, add a switch action at the end of
5959
your sample workflow. After the last step, choose **New step**.
6060

6161
When you want to add a switch action between steps,

articles/logic-apps/logic-apps-create-api-app.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ that you can call from workflows:
2424
* Expand the reach, discoverability, and use for your service.
2525

2626
Basically, connectors are web APIs that use REST for pluggable interfaces,
27-
[Swagger metadata format](https://swagger.io/specification/) for documentation,
27+
[OpenAPI metadata format](https://swagger.io/specification/) for documentation,
2828
and JSON as their data exchange format. Because connectors are REST APIs
2929
that communicate through HTTP endpoints, you can use any language to build connectors,
3030
such as .NET, Java, Python, or Node.js.
@@ -64,7 +64,7 @@ easy API hosting.
6464

6565
Custom APIs and [custom connectors](../logic-apps/custom-connector-overview.md)
6666
are web APIs that use REST for pluggable interfaces,
67-
[Swagger metadata format](https://swagger.io/specification/) for documentation,
67+
[OpenAPI metadata format](https://swagger.io/specification/) for documentation,
6868
and JSON as their data exchange format. And because these APIs and connectors
6969
are REST APIs that communicate through HTTP endpoints, you can use any language,
7070
like .NET, Java, Python, or Node.js, for building custom APIs and connectors.
@@ -93,7 +93,7 @@ For more information, review the following documentation:
9393
## Helpful tools
9494

9595
A custom API works best with logic apps when the API also has a
96-
[Swagger document](https://swagger.io/specification/)
96+
[OpenAPI document](https://swagger.io/specification/)
9797
that describes the API's operations and parameters.
9898
Many libraries, like [Swashbuckle](https://github.com/domaindrivendev/Swashbuckle),
9999
can automatically generate the Swagger file for you.

0 commit comments

Comments
 (0)