Skip to content

Commit 867fcad

Browse files
committed
Merge branch 'master' of https://github.com/MicrosoftDocs/powerapps-docs-pr into kabala-timeline-feature
2 parents 1d554ab + 3e60ee6 commit 867fcad

File tree

859 files changed

+6246
-3703
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

859 files changed

+6246
-3703
lines changed

.openpublishing.redirection.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
{
22
"redirections": [
3+
{
4+
"source_path": "powerapps-docs/maker/portals/configure/view-email-in-timeline.md",
5+
"redirect_url": "view-all-activities-in-portal-timeline",
6+
"redirect_document_id": "false"
7+
},
8+
{
9+
"source_path": "powerapps-docs/maker/canvas-apps/working-with-environments.md",
10+
"redirect_url": "/power-platform/admin/working-with-environments",
11+
"redirect_document_id": "false"
12+
},
313
{
414
"source_path": "powerapps-docs/developer/component-framework/updating-tooling.md",
515
"redirect_url": "get-powerapps-cli#update-microsoft-powerapps-cli-to-the-latest-version",

powerapps-docs/administrator/TOC.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
items:
44
- name: Getting started
55
items:
6-
- name: What's the role of a PowerApps administrator?
6+
- name: What's the role of a Power Apps administrator?
77
href: overview-role-powerapps-admin.md
8-
- name: PowerApps enterprise deployment whitepaper
8+
- name: Power Apps enterprise deployment whitepaper
99
href: admin-powerapps-enterprise-deployment.md
1010
- name: Licensing
1111
items:
@@ -15,7 +15,7 @@
1515
href: signup-question-and-answer.md
1616
- name: Purchase PowerApps
1717
href: signup-for-powerapps-admin.md
18-
# - name: PowerApps for US Government
18+
# - name: Power Apps for US Government
1919
# href: powerapps-for-us-govt.md
2020
- name: Manage PowerApps
2121
items:
@@ -25,7 +25,7 @@
2525
href: admin-manage-apps.md
2626
- name: Move an app between tenants or environments
2727
href: environment-and-tenant-migration.md
28-
- name: PowerShell support for PowerApps (preview)
28+
- name: PowerShell support for Power Apps (preview)
2929
href: powerapps-powershell.md
3030
- name: Activity logging for PowerApps
3131
href: https://docs.microsoft.com/power-platform/admin/logging-powerapps
@@ -41,7 +41,7 @@
4141
href: powerapps-gdpr-dsr-guide-systemlogs.md
4242
- name: Data integrations for Common Data Service
4343
href: data-integration-gdpr-dsr-guide.md
44-
- name: PowerApps customer data
44+
- name: Power Apps customer data
4545
href: powerapps-gdpr-dsr-guide.md
4646
items:
4747
- name: Export data

powerapps-docs/administrator/app-analytics.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: View analytics reports for your app | Microsoft Docs
3-
description: View reports to see the usage and performance of your PowerApps apps.
3+
description: View reports to see the usage and performance of your Power Apps apps.
44
author: jamesol-msft
55
manager: kvivek
66
ms.service: powerapps
@@ -19,14 +19,14 @@ search.app:
1919
# View analytics reports for your app
2020
Have you built an app and shared it out to your organization? Are you curious how many of your colleagues are using it on a daily basis?
2121

22-
Introducing the first PowerApps analytics report that is now available from [make.powerapps.com](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc); the **App usage report**.
22+
Introducing the first Power Apps analytics report that is now available from [make.powerapps.com](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc); the **App usage report**.
2323

2424
The App usage report gives you the ability to track how many users are using your app over the past 30 days broken down by day, device platform and ___location.
2525

2626
![App usage report](./media/app-analytics/analytics.png)
2727

2828
## How do I get access to my app's reports?
29-
All reports are available to any user with "Can edit" permission to the app, but the user must have a PowerApps Plan 2 or PowerApps Plan 2 trial license in order to access the reports.
29+
All reports are available to any user with "Can edit" permission to the app, but the user must have a Power Apps Plan 2 or Power Apps Plan 2 trial license in order to access the reports.
3030

3131
## Where do I find my app's reports?
3232
You can view your app's reports via the following steps:
@@ -50,5 +50,5 @@ Yes, you are able to download a .csv file with the data for any chart in a repor
5050
## Are there going to be any other reports?
5151
Yes! In fact we are planning to develop similar reports around app performance and error reporting.
5252

53-
If you have specific feedback, questions, or requests we would love to hear about them on our [PowerApps Ideas forum](https://powerusers.microsoft.com/t5/PowerApps-Ideas/idb-p/PowerAppsIdeas).
53+
If you have specific feedback, questions, or requests we would love to hear about them on our [Power Apps Ideas forum](https://powerusers.microsoft.com/t5/PowerApps-Ideas/idb-p/PowerAppsIdeas).
5454

powerapps-docs/breadcrumb/toc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
href: /power-platform/
77
topichref: /power-platform/
88
items:
9-
- name: PowerApps
9+
- name: Power Apps
1010
tocHref: /powerapps/
1111
topicHref: /powerapps/
1212
items:

powerapps-docs/developer/common-data-service/TOC.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
href: optimistic-concurrency.md
5858
- name: Impersonate another user
5959
href: impersonate-another-user.md
60+
- name: Service protection API limits
61+
href: api-limits.md
6062
- name: Best Practices
6163
href: best-practices/work-with-data/index.md
6264
- name: Add and remove sample data
@@ -344,7 +346,7 @@
344346
href: package-deployer/create-packages-package-deployer.md
345347
- name: Verify quality of solutions and packages
346348
items:
347-
- name: Use the PowerApps checker web API
349+
- name: Use the Power Apps checker web API
348350
href: checker/webapi/overview.md
349351
- name: Invoke the analysis
350352
href: checker/webapi/analyze.md

powerapps-docs/developer/common-data-service/api-limits.md

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,107 @@
11
---
2-
title: "API Limits (Common Data Service) | Microsoft Docs"
3-
description: "Understand the limits for API requests."
2+
title: "Service Protection API Limits (Common Data Service) | Microsoft Docs"
3+
description: "Understand the service protection limits for API requests."
44
ms.custom: ""
5-
ms.date: 03/21/2019
5+
ms.date: 11/23/2019
66
ms.reviewer: "kvivek"
77
ms.service: powerapps
88
ms.topic: "article"
99
author: "JimDaly"
10-
ms.author: "bsimons"
11-
manager: "annbe"
10+
ms.author: "jdaly"
11+
manager: "ryjones"
1212
search.audienceType:
1313
- developer
1414
search.app:
1515
- PowerApps
1616
- D365CE
1717
---
18-
# API Limits
18+
# Service Protection API Limits
1919

20-
We limit the number of API requests made by each user, per organization instance, within a five minute sliding window. Additionally, we limit the number of concurrent requests that may come in at one time. When one of these limits is exceeded, an exception will be thrown by the platform.
20+
To ensure consistent availability and performance for everyone we apply some limits to how APIs are used. We limit the number of concurrent connections per user account, the number of API requests per connection, and the amount of execution time that can be used for each connection. These are evaluated within a five minute sliding window. When one of these limits is exceeded, an exception will be thrown by the platform.
2121

22-
The limit will help ensure that users running applications cannot interfere with each other based on resource constraints. The limits will not affect normal users of the platform. Only applications that perform a large number of API requests may be affected. The limit will help provide a level of protection from random and unexpected surges in request volumes that threaten the availability and performance characteristics of the Common Data Service platform.
22+
Service protection API limits help ensure that users running applications cannot interfere with each other based on resource constraints. The limits will not affect normal users of the platform. Only applications that perform a large number of API requests may be affected. The limits provide a level of protection from random and unexpected surges in request volumes that threaten the availability and performance characteristics of the Common Data Service platform.
2323

24-
Since plug-ins and custom workflow activities execute on the server independent of a logged on user, API calls made from plug-in code will not count against this external API request limit.
24+
Since plug-ins and custom workflow activities execute on the server independent of a logged on user, API calls made from plug-in code will not count against service protection API limits.
2525

26-
If your application has the potential to exceed the limit, please consider the guidance given in the [What should I do if my application exceeds the limit?](#what-should-i-do-if-my-application-exceeds-the-limit) section below.
26+
## Limits
27+
28+
> [!IMPORTANT]
29+
> These limits are applied per web server. Each scale group has multiple web servers that may process each request depending on load balancing. These numbers represent a single web server and therefore the lowest possible level of throughput due to these limits. Your actual throughput should be higher.
30+
>
31+
> You will see significant differences between trial environments and production environments. Trial environments have fewer resources allocated to them so they will encounter these limits more easily than production environments.
32+
>
33+
> Don't focus too much on the numbers here. The important thing to understand is that applications which depend on high volume data operations should be designed to respond to signals that the server will send to indicate when limits are reached. Don't try to hard-code solutions based on the numbers here. Instead use the techniques described below to get the highest possible throughput by responding to the signals the service will send.
34+
35+
Service protection limits expect that the application uses multiple threads to maximize performance. Each thread represents a separate connection and each connection is evaluated on a 5 minute (300 second) sliding window.
36+
37+
Within that 5 minute sliding window, there are three aspects that are measured as described in the following table:
38+
39+
|Measure|Description|Limit per web server|
40+
|--|--|--|
41+
|Number of requests|The actual number of requests made per connection.|6000|
42+
|Execution time|The combined duration for all connections using the same user account| 20 minutes (1200 seconds)|
43+
|Number of connections|The number of connections using the same user account|52|
44+
45+
The combination of **Number of requests** and **Execution time** accounts for the fact that some operations require more system resources than others. Performing a complex query requires more system resources that creating or updating a single record.
46+
47+
While API calls made from plug-in code will not be counted against the number of requests, the execution time of those calls will be applied to the originating call.
48+
49+
Some known long-running system operations, such as ImportSolution, will not have the full execution time included in the calculation of the limit. The contribution of these calls towards the limit calculation is capped at 5 minutes if the actual execution time is greater.
50+
51+
If your application has the potential to exceed these limits, please apply the guidance given in the [What should I do if my application exceeds the limit?](#what-should-i-do-if-my-application-exceeds-the-limit) section below.
52+
53+
Depending on the nature of the data you are processing, you can adjust the number of concurrent connections to get the maximum throughput. If each operation is relatively quick, use more connections.
2754

2855
## What happens when the limit is exceeded?
2956

30-
When the limit is exceeded, all requests for the same user will return error responses.
57+
When the limit is exceeded, all requests for the same connection will return error responses.
3158

3259
If you use the .NET SDK assemblies, the platform will respond with a `FaultException<OrganizationServiceFault>` WCF Fault.
3360

3461
| Error Code | Message |
3562
|------------|-------------------------------------|
36-
|`-2147015902`|`Number of requests exceeded the limit of 4000, measured over time window of 300 seconds.`|
63+
|`-2147015902`|`Number of requests exceeded the limit of 6000, measured over time window of 300 seconds.`|
3764
|`-2147015903`|`Combined execution time of incoming requests exceeded limit of 1,200,000 milliseconds over time window of 300 seconds. Decrease number of concurrent requests or reduce the duration of requests and try again later.`|
38-
|`-2147015898`|`Number of concurrent requests exceeded the limit of X`|
65+
|`-2147015898`|`Number of concurrent requests exceeded the limit of 52`|
3966

40-
If you use HTTP requests, the response will include the same messages, but with:<br />
67+
If you use HTTP requests with the Web API, the response will include the same messages, but with:<br />
4168
`StatusCode` : `429`
4269

4370
All requests will return these error responses until the volume of API requests falls below the limit. If you get these responses, your application should stop sending API requests until the volume of requests is below the limit.
4471

72+
> [!TIP]
73+
> If you are using HTTP requests with the Web API, you can track the remaining limit values with the following HTTP response headers:
74+
>
75+
> |Header |Value Description |
76+
> |---------|---------|
77+
> |`x-ms-ratelimit-burst-remaining-xrm-requests` |The remaining number of requests for this connection|
78+
> |`x-ms-ratelimit-time-remaining-xrm-requests` |The remaining combined duration for all connections using the same user account|
79+
4580
## What should I do if my application exceeds the limit?
4681

47-
When your application exceeds the limit, the error response from the server may specify the amount of time you should wait before sending more requests. The response object is slightly different if you are using SDK assemblies or HTTP requests.
82+
When your application exceeds the limit, the error response from the server may specify the amount of time you should wait before sending more requests. The response object is slightly different if you are using SDK assemblies or HTTP requests with the Web API.
4883

4984
For a discussion of best practices, see [Azure Architecture Best Practices Transient fault handling](/azure/architecture/best-practices/transient-faults)
5085

5186
[The Polly Project](https://www.thepollyproject.org/) is a library which includes capabilities for dealing with transient faults using execution policies.
5287

53-
### HTTP requests
88+
### HTTP requests with the Web API
5489

55-
If you are using HTTP requests, you can look for the `Retry-After` HTTP header included in the error response. This will contain a value in seconds indicating how long you should wait before making a follow-up request. More information [MDN web docs Retry-After](https://developer.mozilla.org/docs/Web/HTTP/Headers/Retry-After)
90+
If you encounter a 429 error code you can look for the `Retry-After` HTTP header included in the error response. This will contain a value in seconds indicating how long you should wait before making a follow-up request. More information [MDN web docs Retry-After](https://developer.mozilla.org/docs/Web/HTTP/Headers/Retry-After)
5691

5792
### SDK assemblies
5893

59-
If you are using the SDK assemblies, you can look for the `Retry-After` delay in the <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault>.<xref:Microsoft.Xrm.Sdk.BaseServiceFault.ErrorDetails> property, using the key `"Retry-After"`. The value returned is a [TimeSpan](/dotnet/api/system.timespan) object.
94+
> [!NOTE]
95+
> You do not need to apply these patterns when:
96+
>
97+
> - Your code will run within a plug-in or custom workflow activity. You do not need to apply these patterns because service protection limits are not applied in these cases.
98+
> - You use the <xref:Microsoft.Xrm.Tooling.Connector>.<xref:Microsoft.Xrm.Tooling.Connector.CrmServiceClient>. These patterns are built-in to that client. This is the recommended proxy class to use for client applications.
99+
>
100+
> You need to apply these patterns if you use the <xref:Microsoft.Xrm.Sdk.Client>.<xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy> or <xref:Microsoft.Xrm.Sdk.WebServiceClient>.<xref:Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient> proxy classes.
101+
102+
If you are using the SDK assemblies with the <xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy> or <xref:Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient> proxy classes, you can look for the `Retry-After` delay value in the <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault>.<xref:Microsoft.Xrm.Sdk.BaseServiceFault.ErrorDetails> property, using the key `"Retry-After"`. The value returned is a [TimeSpan](/dotnet/api/system.timespan) object.
60103

61-
### .NET SDK Assembly Example
104+
## .NET SDK Assembly Example
62105

63106
The following example uses the [Retry class](#retry-class) described below to retrieve one account using the <xref:Microsoft.Xrm.Sdk.IOrganizationService>.<xref:Microsoft.Xrm.Sdk.IOrganizationService.RetrieveMultiple*> method. If the request fails because an API limit has been exceeded, the `Retry` class will wait according to a delay specified by the server and try again.
64107

@@ -67,7 +110,7 @@ var qe = new QueryExpression("account") { TopCount = 1 };
67110
EntityCollection result = Retry.Do(() => service.RetrieveMultiple(qe));
68111
```
69112

70-
#### Retry class
113+
### Retry class
71114

72115
The `Retry` class demonstrates how to retry requests that fail with transient errors based on known <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault> error codes. The `Retry` class waits before retrying. If the fault specifies a retry delay, wait according to the delay specified by the server. Else use exponential backoff to calculate the delay based on the number of retry attempts made.
73116

@@ -133,7 +176,7 @@ public class Retry
133176

134177
### See also
135178

179+
[Administer Power Platform / Licensing and license management / Requests limits and allocations](/power-platform/admin/api-request-limits-allocations)<br />
180+
[Common Data Service API limits overview](../../maker/common-data-service/api-limits-overview.md)<br />
136181
[Use Common Data Service Web API](webapi/overview.md)<br />
137-
[Use Common Data Service Organization Service](org-service/overview.md)<br />
138-
[Execute batch operations using the Web API](webapi/execute-batch-operations-using-web-api.md)<br />
139-
[Use ExecuteMultiple to improve performance for bulk data load](org-service/execute-multiple-requests.md)
182+
[Use Common Data Service Organization Service](org-service/overview.md)

0 commit comments

Comments
 (0)