Skip to content

Commit 014e743

Browse files
Merge branch 'main' into 2684293
2 parents 2d491da + 3c68edc commit 014e743

Some content is hidden

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

41 files changed

+1176
-561
lines changed

powerapps-docs/developer/component-framework/reference/dataset/addColumn.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ Model-driven apps
2727

2828
## Parameters
2929

30-
| Parameter Name | Type | Required | Description |
31-
| -------------- | -------- | -------- | -------------------- |
32-
| name | `string` | Yes | Name of the column. |
33-
| columnAlias | `string` | No | Alias of the column. |
30+
| Parameter Name | Type | Required | Description |
31+
| -------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
32+
| name | `string` | Yes | Name of the column. For linked entities concatenate linking entity alias and the column name, for example: `contact_alias.firstname`. |
33+
| columnAlias | `string` | No | Alias of the column. |
3434

3535
## Return value
3636

powerapps-docs/developer/data-platform/application-insights-ilogger.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,13 @@ namespace ILoggerExample
168168
169169
HttpResponseMessage response = client
170170
.GetAsync(webAddress)
171-
.ConfigureAwait(false)
172171
.GetAwaiter()
173172
.GetResult(); //Make sure it is synchronous
174173
175174
response.EnsureSuccessStatusCode();
176175

177176
string responseText = response.Content
178177
.ReadAsStringAsync()
179-
.ConfigureAwait(false)
180178
.GetAwaiter()
181179
.GetResult(); //Make sure it is synchronous
182180

powerapps-docs/developer/data-platform/best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ using (HttpClient client = new HttpClient())
5656
client.DefaultRequestHeaders.ConnectionClose = true; //Set KeepAlive to false
5757
5858

59-
HttpResponseMessage response = client.GetAsync(webAddress).ConfigureAwait(false).GetAwaiter().GetResult(); //Make sure it is synchronous
59+
HttpResponseMessage response = client.GetAsync(webAddress).GetAwaiter().GetResult(); //Make sure it is synchronous
6060
response.EnsureSuccessStatusCode();
6161

62-
string responseText = response.Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); //Make sure it is synchronous
62+
string responseText = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); //Make sure it is synchronous
6363
tracingService.Trace(responseText);
6464
//Log success in the Plugin Trace Log:
6565
tracingService.Trace("HttpClientPlugin completed successfully.");

powerapps-docs/developer/data-platform/create-custom-api-maker-portal.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "Create a Custom API in Power Apps (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Create a Custom API definition with the maker portal" # 115-145 characters including spaces. This abstract displays in the search result.
44
ms.custom: ""
5-
ms.date: 03/21/2022
5+
ms.date: 04/19/2022
66
ms.reviewer: "jdaly"
77
ms.topic: "article"
88
author: "divka78" # GitHub ID
@@ -71,7 +71,7 @@ For example, if your Custom API Unique name is `sample_CustomAPIExample`, it wil
7171

7272
## Observe the result in the service document
7373

74-
If you haven't set the `IsPrivate` property for your Custom API, you can now retrieve the service definition from the [CSDL $metadata document](webapi/web-api-types-operations.md#csdl-metadata-document) using a GET request, even from your browser. If the url for your environment is `https://yourorg.crm.dynamics.com`, you can type this URL in your browser address field to retrieve the $metadata: `https://yourorg.crm.dynamics.com/api/data/v9.1/$metadata`.
74+
If you haven't set the `IsPrivate` property for your Custom API, you can now retrieve the service definition from the [CSDL $metadata document](webapi/web-api-service-documents.md#csdl-metadata-document) using a `GET` request, even from your browser. If the url for your environment is `https://yourorg.crm.dynamics.com`, you can type this URL in your browser address field to retrieve the $metadata: `https://yourorg.crm.dynamics.com/api/data/v9.1/$metadata`.
7575

7676
Search the result to find the name of the Custom API. For example, the API defined using the steps above looks like this:
7777

powerapps-docs/developer/data-platform/create-custom-api-prt.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Create a Custom API using the plug-in registration tool (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Create a Custom API using the plug-in registration tool" # 115-145 characters including spaces. This abstract displays in the search result.
4-
ms.date: 03/13/2022
4+
ms.date: 04/19/2022
55
ms.reviewer: "jdaly"
66
ms.topic: "article"
77
author: "marcelbf" # GitHub ID
@@ -120,7 +120,7 @@ In the list of **Request parameters** or **Response properties**, select this co
120120

121121
## Next steps
122122

123-
If you haven't set the `IsPrivate` property for your Custom API, after you have created your Custom API you can retrieve the service definition from the [CSDL $metadata document](webapi/web-api-types-operations.md#csdl-metadata-document) using a GET request, even from your browser. If the url for your environment is `https://yourorg.crm.dynamics.com`, you can type this URL in your browser address field to retrieve the $metadata: `https://yourorg.crm.dynamics.com/api/data/v9.1/$metadata`.
123+
If you haven't set the `IsPrivate` property for your Custom API, after you have created your Custom API you can retrieve the service definition from the [CSDL $metadata document](webapi/web-api-service-documents.md#csdl-metadata-document) using a `GET` request, even from your browser. If the url for your environment is `https://yourorg.crm.dynamics.com`, you can type this URL in your browser address field to retrieve the $metadata: `https://yourorg.crm.dynamics.com/api/data/v9.1/$metadata`.
124124

125125
Search the result to find the name of the Custom API and you will find the Action or Function created together with any related ComplexType to represent the return value. For example:
126126

powerapps-docs/developer/data-platform/custom-api.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "Create and use Custom APIs (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Custom API is a new code-first way to define custom messages for the Microsoft Dataverse" # 115-145 characters including spaces. This abstract displays in the search result.
44
ms.custom: ""
5-
ms.date: 03/21/2022
5+
ms.date: 04/19/2022
66
ms.reviewer: "pehecke"
77
ms.topic: "article"
88
author: "divka78" # GitHub ID
@@ -137,7 +137,7 @@ You may want to keep a Custom API private until you are sure that you will not n
137137
You can leave **Is Private** set to false in your development environment so you can see the output in the $metadata service document or generate classes for your own use. However, before you ship the Custom API in your managed solution, you should set **Is Private** to true.
138138

139139
More information:
140-
- [CSDL $metadata document](webapi/web-api-types-operations.md#csdl-metadata-document)
140+
- [CSDL $metadata document](webapi/web-api-service-documents.md#csdl-metadata-document)
141141
- [Generate early-bound classes for the Organization service](org-service/generate-early-bound-classes.md)
142142
- [Private Messages](org-service/use-messages.md#private-messages)
143143

@@ -453,7 +453,7 @@ A: You cannot. Although these records have the common **Status** and **Status Re
453453

454454
### Q: How can I use my private messages if they are not included in the Web API $metadata service document?
455455

456-
A: Your private messages will work regardless of whether they are advertised in the Web API [CSDL $metadata document](webapi/web-api-types-operations.md#csdl-metadata-document) or not. While you develop your solution, you can leave the `IsPrivate` value set to `false`. This way you can refer to the `$metadata` listing and use code generation tools that depend on this data. However, you should set the `CustomAPI.IsPrivate` value to `true` before you ship your solution for others to use. If you later decide that you wish to support other applications to use the message, you can change the `CustomAPI.IsPrivate` value to `false`.
456+
A: Your private messages will work regardless of whether they are advertised in the Web API [CSDL $metadata document](webapi/web-api-service-documents.md#csdl-metadata-document) or not. While you develop your solution, you can leave the `IsPrivate` value set to `false`. This way you can refer to the `$metadata` listing and use code generation tools that depend on this data. However, you should set the `CustomAPI.IsPrivate` value to `true` before you ship your solution for others to use. If you later decide that you wish to support other applications to use the message, you can change the `CustomAPI.IsPrivate` value to `false`.
457457

458458
More information:
459459

powerapps-docs/developer/data-platform/entities.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
---
22
title: Work with Dataverse tables using code | Microsoft Docs
33
description: Learn about programmatically working with tables in Microsoft Dataverse.
4-
author: "mayadumesh" # GitHub ID
5-
manager: kvivek
6-
7-
ms.date: 03/28/2021
4+
author: mayadumesh # GitHub ID
5+
manager: sunilg
6+
ms.date: 04/19/2022
87
ms.subservice: dataverse-developer
9-
ms.author: jdaly
8+
ms.author: mayadu
109
search.audienceType:
1110
- developer
1211
search.app:
@@ -72,7 +71,7 @@ The table definition includes the following information:
7271
7372
## Private tables
7473

75-
Dataverse contains some tables that are not intended for third-party developers to use. These tables are added by Microsoft to enable feature functionality. Private tables are indicated by the <xref:Microsoft.Xrm.Sdk.Metadata.EntityMetadata>.<xref:Microsoft.Xrm.Sdk.Metadata.EntityMetadata.IsPrivate> property. These tables are not included in the Web API [CSDL $metadata document](webapi/web-api-types-operations.md#csdl-metadata-document). However, you will find them when querying entity metadata.
74+
Dataverse contains some tables that are not intended for third-party developers to use. These tables are added by Microsoft to enable feature functionality. Private tables are indicated by the <xref:Microsoft.Xrm.Sdk.Metadata.EntityMetadata>.<xref:Microsoft.Xrm.Sdk.Metadata.EntityMetadata.IsPrivate> property. These tables are not included in the Web API [CSDL $metadata document](webapi/web-api-service-documents.md#csdl-metadata-document). However, you will find them when querying entity metadata.
7675

7776
> [!CAUTION]
7877
> You should not use private tables in your solutions. By marking a table as private, Microsoft is explicitly indicating that we do not support other apps to use the table. Microsoft may remove the table or introduce breaking changes at any time. Use of these tables by anyone other than Microsoft is not supported.

powerapps-docs/developer/data-platform/reference/about-entity-reference.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "Dataverse table/entity reference | Microsoft Docs"
33
description: "Use this reference to understand the available operations that can be performed for specific tables, the default columns/attributes of each table/entity and the relationships between tables in Microsoft Dataverse"
44
author: phecke
55
ms.topic: reference
6-
ms.date: 04/03/2022
6+
ms.date: 04/19/2022
77
ms.author: pehecke
88
ms.reviewer: jdaly
99
manager: kvivek
@@ -65,7 +65,7 @@ For each one-to-many relationship, the following properties are included:
6565
|`ReferencingAttribute`|The logical name of the column in the related table that contains a reference to primary key of the primary table.|
6666
|`IsHierarchical`|Whether the relationship represents a self-referential hierarchical relationship|
6767
|`IsCustomizable`|Whether the properties of the relationship can be changed.|
68-
|`ReferencedEntityNavigationPropertyName`|The name of the Web API collection-valued navigation property for this relationship.<br />More information:[Navigation properties](../webapi/web-api-types-operations.md#navigation-properties)|
68+
|`ReferencedEntityNavigationPropertyName`|The name of the Web API collection-valued navigation property for this relationship.<br />More information: [Web API Navigation Properties](../webapi/web-api-navigation-properties.md)|
6969
|`AssociatedMenuConfiguration`|Data used by model-driven apps to control whether and how the related entity data can be accessed in the UI from the primary entity.|
7070
|`CascadeConfiguration`|Data that describes which operations performed on the parent entity will cascade down to related entities.<br />More information: [Cascade configuration](../entity-relationship-metadata.md#cascade-configuration)|
7171

@@ -80,7 +80,7 @@ For each many-to-many relationship the following properties are included:
8080
|`IntersectEntityName`|The logical name of the intersect table that supports this many-to-many relationship|
8181
|`Entity1LogicalName`|The logical name for the first table in the relationship.|
8282
|`Entity1IntersectAttribute`|The logical name of the intersect table column that includes a reference to the primary key of the first table.|
83-
|`Entity1NavigationPropertyName`|The name of the Web API collection-valued navigation property for this relationship.<br />More information: [Navigation properties](../webapi/web-api-types-operations.md#navigation-properties)|
83+
|`Entity1NavigationPropertyName`|The name of the Web API collection-valued navigation property for this relationship.<br />More information: [Web API Navigation Properties](../webapi/web-api-navigation-properties.md)|
8484
|`Entity1AssociatedMenuConfiguration`|Data used by model-driven apps to control whether and how the first table data can be accessed in the UI from the second table.|
8585
|`Entity2LogicalName`|The logical name for the second table in the relationship.|
8686
|`Entity2IntersectAttribute`|The logical name of the intersect table column that includes a reference to the primary key of the second table.|

powerapps-docs/developer/data-platform/troubleshoot-plug-in.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ This error simply means that the worker process running your plug-in code crashe
3838

3939
As mentioned in [Handle exceptions in plug-ins](handle-exceptions.md), when you write a plug-in you should try to anticipate which operations may fail and wrap them in a try-catch block. When any errors occur, you should use the <xref:Microsoft.Xrm.Sdk.InvalidPluginExecutionException> to gracefully terminate the operation with an error meaningful to the user.
4040

41-
A common scenario for this is when using a the [HttpClient.SendAsync Method](/dotnet/api/system.net.http.httpclient.sendasync?view=netframework-4.6.2) or [HttpClient.GetAsync Method](/dotnet/api/system.net.http.httpclient.getasync?view=netframework-4.6.2) which are asynchronous operations that returns a [Task](/dotnet/api/system.threading.tasks.task-1?view=netframework-4.6.2). To make this work in a plug-in where code needs to be synchronous, people may use the [Task&lt;TResult&gt;.Result Property](/dotnet/api/system.threading.tasks.task-1.result?view=netframework-4.6.2). When an error occurs, this returns an [AggregateException](/dotnet/api/system.aggregateexception?view=netframework-4.6.2) which consolidates multiple failures into a single exception which can be difficult to handle. A better design is to use [Task&lt;TResult&gt;.ConfigureAwait(false)](/dotnet/api/system.threading.tasks.task-1.configureawait?view=netframework-4.6.2).[GetAwaiter()](/dotnet/api/system.aggregateexception?view=netframework-4.6.2).[GetResult()](/dotnet/api/system.runtime.compilerservices.taskawaiter-1.getresult?view=netframework-4.6.2) because it propagates the results as the specific error that caused the failure.
41+
A common scenario for this is when using a the [HttpClient.SendAsync Method](/dotnet/api/system.net.http.httpclient.sendasync?view=netframework-4.6.2) or [HttpClient.GetAsync Method](/dotnet/api/system.net.http.httpclient.getasync?view=netframework-4.6.2) which are asynchronous operations that returns a [Task](/dotnet/api/system.threading.tasks.task-1?view=netframework-4.6.2). To make this work in a plug-in where code needs to be synchronous, people may use the [Task&lt;TResult&gt;.Result Property](/dotnet/api/system.threading.tasks.task-1.result?view=netframework-4.6.2). When an error occurs, this returns an [AggregateException](/dotnet/api/system.aggregateexception?view=netframework-4.6.2) which consolidates multiple failures into a single exception which can be difficult to handle. A better design is to use [Task&lt;TResult&gt;.GetAwaiter()](/dotnet/api/system.threading.tasks.task-1.getawaiter?view=netframework-4.6.2).[GetResult()](/dotnet/api/system.runtime.compilerservices.taskawaiter-1.getresult?view=netframework-4.6.2) because it propagates the results as the specific error that caused the failure.
4242

4343
The following example shows the correct way to manage the exception and an outbound call using [HttpClient.GetAsync Method](/dotnet/api/system.net.http.httpclient.getasync?view=netframework-4.6.2). This plug-in will attempt to get the response text for a Url set in the unsecure config for a step registered for it.
4444

@@ -93,12 +93,12 @@ namespace ErrorRepro
9393
client.Timeout = TimeSpan.FromMilliseconds(15000); //15 seconds
9494
client.DefaultRequestHeaders.ConnectionClose = true; //Set KeepAlive to false
9595
96-
HttpResponseMessage response = client.GetAsync(webAddress).ConfigureAwait(false).GetAwaiter().GetResult(); //Make sure it is synchronous
96+
HttpResponseMessage response = client.GetAsync(webAddress).GetAwaiter().GetResult(); //Make sure it is synchronous
9797
response.EnsureSuccessStatusCode();
9898

9999
tracingService.Trace($"ErrorRepro.AsyncError.GetWebResponse succeeded.");
100100

101-
string responseContent = response.Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); //Make sure it is synchronous
101+
string responseContent = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); //Make sure it is synchronous
102102
103103
tracingService.Trace($"ErrorRepro.AsyncError.GetWebResponse responseContent parsed successfully.");
104104

powerapps-docs/developer/data-platform/use-change-tracking-synchronize-data-external-systems.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Use change tracking to synchronize data with external systems (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "The change tracking feature provides a way to keep the data synchronized in an efficient manner by detecting what data has changed since the data was initially extracted or last synchronized" # 115-145 characters including spaces. This abstract displays in the search result.
4-
ms.date: 03/22/2022
4+
ms.date: 04/19/2022
55
ms.reviewer: "pehecke"
66
ms.topic: "article"
77
author: "Peakerbl" # GitHub ID
@@ -19,8 +19,6 @@ contributors:
1919
---
2020
# Use change tracking to synchronize data with external systems
2121

22-
23-
2422
The change tracking feature in Microsoft Dataverse provides a way to keep the data synchronized in an efficient manner by detecting what data has changed since the data was initially extracted or last synchronized. Previously, without this new feature, it was difficult to build a reliable and efficient mechanism to determine what records had changed in Dataverse. This article discusses how to retrieve changes for a table.
2523

2624
## Enable change tracking for a table
@@ -30,7 +28,7 @@ The change tracking feature in Microsoft Dataverse provides a way to keep the da
3028
```http
3129
GET [Organization URI]/api/data/v9.0/$metadata?annotations=true
3230
```
33-
Read more about metadata annotations on [Metadata annotations](webapi/web-api-types-operations.md#bkmk_metannot).
31+
Read more about metadata annotations on [Metadata annotations](webapi/web-api-service-documents.md#metadata-annotations).
3432

3533
For more information about using the customization user interface (UI), see [Enable change tracking to control data synchronization](/power-platform/admin/enable-change-tracking-control-data-synchronization).
3634

0 commit comments

Comments
 (0)