Skip to content

Commit be8758f

Browse files
authored
Merge branch 'main' into testEngine-testSuite
2 parents 3037513 + 8d3bd3b commit be8758f

File tree

711 files changed

+17204
-5330
lines changed

Some content is hidden

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

711 files changed

+17204
-5330
lines changed

.openpublishing.redirection.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{
22
"redirections": [
3+
{
4+
"source_path": "powerapps-docs/developer/data-platform/upsertmultiple.md",
5+
"redirect_url": "bulk-operations#upsertmultiple",
6+
"redirect_document_id": "false"
7+
},
38
{
49
"source_path": "powerapps-docs/developer/data-platform/org-service/extend-code-generation-tool.md",
510
"redirect_url": "/dynamics365/customerengagement/on-premises/developer/org-service/extend-code-generation-tool",
@@ -8749,6 +8754,26 @@
87498754
"source_path": "powerapps-docs/maker/canvas-apps/performance-tips.md",
87508755
"redirect_url": "/power-apps/maker/canvas-apps/create-performant-apps-overview",
87518756
"redirect_document_id": false
8757+
},
8758+
{
8759+
"source_path": "powerapps-docs/maker/data-platform/azure-synapse-link-troubleshooting-guide.md",
8760+
"redirect_url": "/power-apps/maker/data-platform/export-data-lake-faq",
8761+
"redirect_document_id": false
8762+
},
8763+
{
8764+
"source_path": "powerapps-docs/maker/canvas-apps/slow-performance-sources.md",
8765+
"redirect_url": "/power-apps/maker/canvas-apps/create-performant-apps-overview",
8766+
"redirect_document_id": false
8767+
},
8768+
{
8769+
"source_path": "powerapps-docs/maker/portals/configure/create-show-portal-content.md",
8770+
"redirect_url": "/power-pages/",
8771+
"redirect_document_id": false
8772+
},
8773+
{
8774+
"source_path": "powerapps-docs/maker/portals/admin/update-portal-___domain.md",
8775+
"redirect_url": "/power-pages/",
8776+
"redirect_document_id": false
87528777
}
87538778
]
87548779
}

CODEOWNERS

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
# Lines starting with '#' are comments.
22
# Each line is a file pattern followed by one or more owners.
33

4-
/powerapps-docs/ @KumarVivek
5-
/powerapps-docs/administrator/ @jimholtz @KumarVivek
6-
/powerapps-docs/developer/ @PHecke @KumarVivek @JimDaly
7-
/powerapps-docs/developer/data-platform/cli @JimDaly @KumarVivek
8-
/powerapps-docs/developer/data-platform/cli @JimDaly @KumarVivek
9-
/powerapps-docs/developer/model-driven-apps @JimDaly @KumarVivek
10-
/powerapps-docs/maker/canvas-apps @tapanm-msft @KumarVivek
11-
/powerapps-docs/maker/data-platform @Mattp123 @KumarVivek
12-
/powerapps-docs/maker/model-driven-apps @Mattp123 @KumarVivek
13-
/powerapps-docs/maker/common @Mattp123 @tapanm-msft @KumarVivek
14-
/powerapps-docs/maker/portals @nickdoelman @KumarVivek
15-
/powerapps-docs/user/ @mduelae @KumarVivek
16-
/powerapps-docs/teams/ @tapanm-msft @KumarVivek
4+
/powerapps-docs/ @tapanm-msft
5+
/powerapps-docs/cards @tapanm-msft @mduelae
6+
/powerapps-docs/developer/ @PHecke @leeclontz @JimDaly
7+
/powerapps-docs/developer/data-platform/cli @JimDaly @leeclontz
8+
/powerapps-docs/developer/data-platform/cli @JimDaly @leeclontz
9+
/powerapps-docs/developer/model-driven-apps @JimDaly @leeclontz
10+
/powerapps-docs/guidance @tapanm-msft @mduelae @Mattp123
11+
/powerapps-docs/maker/canvas-apps @tapanm-msft @mduelae
12+
/powerapps-docs/maker/data-platform @Mattp123 @tapanm-msft
13+
/powerapps-docs/maker/model-driven-apps @Mattp123 @tapanm-msft
14+
/powerapps-docs/maker/common @Mattp123 @tapanm-msft @mduelae
15+
/powerapps-docs/maker/portals @professorkendrick @tapanm-msft
16+
/powerapps-docs/mobile @tapanm-msft @sericks007
17+
/powerapps-docs/sample-apps @tapanm-msft @mduelae
18+
/powerapps-docs/user @sericks007 @tapanm-msft
19+
/powerapps-docs/teams @tapanm-msft @mduelae

powerapps-docs/developer/data-platform/TOC.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949
- name: Bulk Operation messages
5050
href: bulk-operations.md
5151
items:
52-
- name: Use UpsertMultiple (preview)
53-
href: upsertmultiple.md
5452
- name: Use DeleteMultiple (preview)
5553
href: deletemultiple.md
5654
- name: Create your own messages
@@ -379,9 +377,9 @@
379377
href: create-auto-number-attributes.md
380378
- name: Choices
381379
href: multi-select-picklist.md
382-
- name: File columns
380+
- name: File column definitions
383381
href: file-attributes.md
384-
- name: Image columns
382+
- name: Image column definitions
385383
href: image-attributes.md
386384
- name: Define custom state model transitions
387385
href: define-custom-state-model-transitions.md

powerapps-docs/developer/data-platform/best-practices/business-logic/avoid-batch-requests-plugin.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
---
2-
title: "Do not use batch request types in plug-ins and workflow activities | MicrosoftDocs"
2+
title: "Don't use batch request types in plug-ins and workflow activities | MicrosoftDocs"
33
description: "You shouldn't use ExecuteMultipleRequest or ExecuteTransactionRequest message request classes within the context of a plug-in or workflow activity."
4-
services: ''
54
suite: powerapps
6-
documentationcenter: na
75
author: jowells
8-
editor: ''
9-
tags: ''
10-
11-
ms.devlang: na
12-
ms.topic: article
13-
ms.tgt_pltfrm: na
14-
ms.workload: na
15-
ms.date: 12/06/2019
6+
ms.date: 02/08/2024
167
ms.subservice: dataverse-developer
178
ms.author: jowells
189
search.audienceType:
1910
- developer
2011
---
21-
# Do not use batch request types in plug-ins and workflow activities
22-
23-
12+
# Don't use batch request types in plug-ins and workflow activities
2413

2514
**Category**: Usage, Reliability, Performance
2615

@@ -30,28 +19,38 @@ search.audienceType:
3019

3120
## Symptoms
3221

33-
Due to their long-running nature, using <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> or <xref:Microsoft.Xrm.Sdk.Messages.ExecuteTransactionRequest> message request classes within the context of a plug-in or workflow activity expose sandbox-isolated plug-in types to the two-minute (120000ms) channel timeout exception and can degrade the user experience for synchronous registrations.
22+
User experiences are degraded and time out errors might occur when you use *batch request types* in plug-ins and workflow activities that occur within synchronous operations.
23+
24+
The following message request classes are considered *batch request types* because they perform operations on multiple records within a single request:
25+
26+
- <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest>
27+
- <xref:Microsoft.Xrm.Sdk.Messages.ExecuteTransactionRequest>
28+
- <xref:Microsoft.Xrm.Sdk.Messages.CreateMultipleRequest>
29+
- <xref:Microsoft.Xrm.Sdk.Messages.UpdateMultipleRequest>
30+
- <xref:Microsoft.Xrm.Sdk.Messages.UpsertMultipleRequest>
3431

3532

3633
<a name='guidance'></a>
3734

3835
## Guidance
3936

40-
Use these batch messages where code is being executed outside of the platform execution pipeline, such as integration scenarios where network latency would likely reduce the throughput and increase the duration of larger, bulk operations.
37+
Use these batch messages in client applications to perform operations on multiple records. Don't use these messages within code that Dataverse invokes during the execution of another operation: a plug-in or workflow activity registered for a synchronous step.
4138

4239
More specifically, use them in the following scenarios:
4340

4441
- Use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> to bulk load data or external processes that are intentional about executing long-running operations (greater than two minutes).
4542

46-
- Use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> to minimize the round trips between custom client and Dynamics 365 servers, thereby reducing the cumulative latency incurred.
43+
- Use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> to minimize the round trips between custom client and Dataverse servers, to reduce the cumulative latency incurred.
44+
45+
- Use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteTransactionRequest> for external clients that require the batch of operations to be committed as a single, atomic database transaction or rollback if any exception is encountered. Be aware of the potential for database blocking during the long-running transaction.
4746

48-
- Use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteTransactionRequest> for external clients that require the batch of operations to be committed as a single, atomic database transaction or rollback if any exception is encountered. Be aware of the potential for database blocking for the duration of the long-running transaction.
47+
- [Use bulk operation messages](../../bulk-operations.md) (<xref:Microsoft.Xrm.Sdk.Messages.CreateMultipleRequest>, <xref:Microsoft.Xrm.Sdk.Messages.UpdateMultipleRequest>, and <xref:Microsoft.Xrm.Sdk.Messages.UpsertMultipleRequest>) for the same scenarios and to achieve a higher level of throughput.
4948

5049
<a name='problem'></a>
5150

5251
## Problematic patterns
5352

54-
Below is an example usage of <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> in the context of a plug-in.
53+
The following example shows using <xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest> in the context of a plug-in.
5554

5655
> [!WARNING]
5756
> This scenario should be avoided.
@@ -100,11 +99,13 @@ This example includes usage of the type directly with the `Execute` method. The
10099

101100
## Additional information
102101

103-
`ExecuteMultiple` and `ExecuteTransaction` messages are considered batch request messages. Their purpose is to minimize round trips between client and server over high-latency connections. Plug-ins either execute directly within the application process or in close proximity when sandbox-isolated, meaning latency is rarely an issue. Plug-in code should be very focused operations that execute quickly and minimize blocking to avoid exceeding timeout thresholds and ensure a responsive system for synchronous scenarios. Simply submit each request directly instead of batching them and submitting as a single request.
102+
The purpose of the `ExecuteMultiple` message is to minimize round trips between client and server over high-latency connections. Plug-ins either execute directly within the application process or in close proximity when sandbox-isolated, meaning latency is rarely an issue. Plug-in code should be focused operations that execute quickly and minimize blocking to avoid exceeding timeout thresholds and ensure a responsive system for synchronous scenarios. Submit each request directly instead of batching them and submitting as a single request.
104103

105104
For example: `foreach (request in requests) service.Execute(request)`
106105

107-
On the server side, the operations included in a batch request are executed sequentially and aren't done in parallel. This is the case even if the <xref:Microsoft.Xrm.Sdk.ExecuteMultipleSettings>.<xref:Microsoft.Xrm.Sdk.ExecuteMultipleSettings.ReturnResponses> property is set to false. Developers tend to use batch requests in this manner assuming that it will allow for parallel processing. Batch requests won't accomplish this objective. Another common motivator is an attempt to ensure that each operation is included in a transaction. This is unnecessary because the plug-in is often already being executed within the context of a database transaction, negating the need to use the `ExecuteTransaction` message.
106+
On the server side, the operations included in a batch request are executed sequentially and aren't done in parallel. This is the case even if the <xref:Microsoft.Xrm.Sdk.ExecuteMultipleSettings>.<xref:Microsoft.Xrm.Sdk.ExecuteMultipleSettings.ReturnResponses> property is set to false. Developers tend to use batch requests in this manner assuming that it allows for parallel processing. Batch requests don't accomplish this objective.
107+
108+
People use <xref:Microsoft.Xrm.Sdk.Messages.ExecuteTransactionRequest> to ensure that each operation is included in a transaction. This is unnecessary within a synchronous plug-in step because the plug-in already being executed within the context of a database transaction, negating the need to use the `ExecuteTransaction` message.
108109

109110
<a name='seealso'></a>
110111

powerapps-docs/developer/data-platform/build-and-package.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Build and package plug-in code
33
description: Learn about building plug-in code into assemblies and packages for later registration and upload to the Microsoft Dataverse service.
4-
ms.date: 11/02/2023
4+
ms.date: 02/20/2024
55
ms.reviewer: pehecke
66
ms.topic: article
77
author: divkamath
@@ -73,7 +73,6 @@ When you register individual plug-in assemblies without the dependent assemblies
7373
The following limitations apply when using plug-in dependent assemblies.
7474

7575
- [Workflow extensions](workflow/workflow-extensions.md), also known as *custom workflow activities* aren't supported when using the dependent assemblies capability.
76-
- Plug-ins for virtual table data providers aren't supported.
7776
- On-premises environments aren't supported.
7877
- Un-managed code isn't supported. You can't include references to unmanaged resources.
7978

0 commit comments

Comments
 (0)