diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index 55a9044954..38600d7ba7 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -1,21 +1,51 @@
{
"redirections": [
{
- "source_path": "powerapps-docs/developer/test-engine/overview.md",
- "redirect_url": "/power-platform/test-engine/overview",
+ "source_path": "powerapps-docs/developer/data-platform/org-service/samples/enable-field-security-entity.md",
+ "redirect_url": "column-level-security",
"redirect_document_id": "false"
},
{
- "source_path": "powerapps-docs/developer/test-engine/powerfx.md",
- "redirect_url": "/power-platform/test-engine/powerfx",
+ "source_path": "powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-permissions.md",
+ "redirect_url": "column-level-security",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-sharing-records.md",
+ "redirect_url": "column-level-security",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/field-security-entities.md",
+ "redirect_url": "column-level-security",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/calculated-rollup-attributes.md",
+ "redirect_url": "specialized-columns.md",
"redirect_document_id": "false"
},
{
- "source_path": "powerapps-docs/developer/test-engine/yaml.md",
- "redirect_url": "/power-platform/test-engine/yaml",
+ "source_path": "powerapps-docs/developer/data-platform/deletemultiple.md",
+ "redirect_url": "bulk-operations#deletemultiple",
"redirect_document_id": "false"
},
{
+ "source_path": "powerapps-docs/developer/test-engine/overview.md",
+ "redirect_url": "/power-platform/test-engine/overview",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/test-engine/powerfx.md",
+ "redirect_url": "/power-platform/test-engine/powerfx",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/test-engine/yaml.md",
+ "redirect_url": "/power-platform/test-engine/yaml",
+ "redirect_document_id": "false"
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/quick-start-register-configure-simplespa-application-msal-js.md",
"redirect_url": "webapi/quick-start-js-spa",
"redirect_document_id": "false"
@@ -4122,7 +4152,7 @@
},
{
"source_path": "powerapps-docs/developer/common-data-service/field-security-entities.md",
- "redirect_url": "../data-platform/field-security-entities",
+ "redirect_url": "../data-platform/column-level-security",
"redirect_document_id": false
},
{
@@ -8957,7 +8987,7 @@
},
{
"source_path": "powerapps-docs/maker/canvas-apps/working-with-dynamic-schema.md",
- "redirect_url": "/power-apps/maker/canvas-apps/untyped-and-dynamic-objects#converting-formulas-that-return-untyped-objects-that-previously-returned-boolean",
+ "redirect_url": "/power-apps/maker/canvas-apps/untyped-and-dynamic-objects#converting-formulas-that-return-dynamic-values-that-previously-returned-boolean",
"redirect_document_id": false
},
{
@@ -9170,6 +9200,16 @@
"redirect_url": "/power-platform/responsible-ai-overview",
"redirect_document_id": "false"
},
+ {
+ "source_path": "powerapps-docs/user/cs-template-options.md",
+ "redirect_url": "/power-apps/user/email-template-create",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/user/cs-email-template-builder.md",
+ "redirect_url": "/power-apps/user/email-template-create",
+ "redirect_document_id": "false"
+ },
{
"source_path": "powerapps-docs/maker/portals/control-portal-creation.md",
"redirect_url": "/power-pages/admin/control-site-creation",
@@ -9574,6 +9614,26 @@
"source_path": "powerapps-docs/user/smartGrid.md",
"redirect_url": "../../power-apps/maker/model-driven-apps/power-apps-grid-control",
"redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/user/well-written-input-text-copilot.md",
+ "redirect_url": "/power-apps/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/common/faq-draft-with-copilot.md",
+ "redirect_url": "/power-apps/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/common-performance-issue-resolutions.md",
+ "redirect_url": "../../../power-apps/maker/canvas-apps/create-performant-apps-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/model-driven-apps/build-app-three-steps.md",
+ "redirect_url": "../../../power-apps/maker/model-driven-apps/build-first-model-driven-app",
+ "redirect_document_id": false
}
]
}
\ No newline at end of file
diff --git a/powerapps-docs/cards/send-a-card/send-card-with-flow.md b/powerapps-docs/cards/send-a-card/send-card-with-flow.md
index 1fc6a6bf4a..9f8f1af9b5 100644
--- a/powerapps-docs/cards/send-a-card/send-card-with-flow.md
+++ b/powerapps-docs/cards/send-a-card/send-card-with-flow.md
@@ -42,7 +42,7 @@ The **Cards for Power Apps** connector is used to create instances of cards to s
## Send a card for Power Apps in Teams chat or channel
-Sending a card in Teams froma flow requires a card instance. To crearte a card instance, use the **Cards for Power Apps** connector actions. The **Create card instance** action has `Card` dynamic content that can be used with the **Teams** connector **Post card in a chat or channel** action.
+Sending a card in Teams from a flow requires a card instance. To create a card instance, use the **Cards for Power Apps** connector actions. The **Create card instance** action has `Card` dynamic content that can be used with the **Teams** connector **Post card in a chat or channel** action.
1. Create or modify an existing flow, or use **Send** > **Send from a flow** on cards for Power Apps **Play** page to start with a template.
1. Make sure the flow has a trigger. In the screenshot below, the trigger is when a new account record is created.
diff --git a/powerapps-docs/developer/component-framework/bring-intelligence-using-agent-apis.md b/powerapps-docs/developer/component-framework/bring-intelligence-using-agent-apis.md
new file mode 100644
index 0000000000..27b9c5aabe
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/bring-intelligence-using-agent-apis.md
@@ -0,0 +1,49 @@
+---
+title: "Bring intelligence into your components using Agent APIs (preview)"
+description: "Learn about how you can integrate Copilot Studio topics into your custom components using Agent APIs"
+author: adrianorth
+ms.author: aorth
+ms.date: 07/07/2025
+ms.reviewer: jdaly
+ms.topic: conceptual
+ms.subservice: pcf
+search.audienceType:
+ - developer
+contributors:
+ - JimDaly
+---
+
+# Bring intelligence into your component using Agent APIs (preview)
+
+[!INCLUDE [preview-note-pp](~/../shared-content/shared/preview-includes/preview-note-pp.md)]
+
+Agent APIs are a set of interfaces introduced in Microsoft Power Apps that allow components to interact with topics created in Microsoft Copilot Studio. These APIs are available in two forms:
+
+- `Context.Copilot` methods used for PCF controls. This is the subject of this article.
+- [Xrm.Copilot namespace used for client scripts in model-driven apps.](../model-driven-apps/clientapi/bring-intelligence-using-agent-apis.md)
+
+These APIs are designed to enhance integration with Microsoft Copilot Studio, enabling more intelligent and responsive app experiences. The APIs use a single Copilot Studio agent that is either:
+- Interactive agent selected in the model app designer of custom apps. See more at [Working with an interactive agent](../../maker/model-driven-apps/add-agents-to-app.md#working-with-an-interactive-agent).
+- Model app containing lead or opportunity table, which implicitly uses the "Copilot in Dynamics 365 Sales" agent.
+
+|API|Description|
+|---------|---------|
+|[copilot.executeEvent](reference/copilot/executeevent.md)|[!INCLUDE [executeevent-description](reference/copilot/includes/executeevent-description.md)]|
+|[copilot.executePrompt](reference/copilot/executeprompt.md)|[!INCLUDE [executeprompt-description](reference/copilot/includes/executeprompt-description.md)]|
+
+## Accessibility
+
+When creating a code component, ensure the following best practices in [code component accessibility checks](code-components-best-practices.md#check-accessibility) are followed to have an accessible experience.
+
+### Related articles
+
+[FAQ for Agent APIs and Agent Response component](../../maker/common/faq-agent-api-component.md)
+[Copilot](reference/copilot.md)
+[executeEvent](reference/copilot/executeevent.md)
+[executePrompt](reference/copilot/executeprompt.md)
+[Working with an interactive agent](../../maker/model-driven-apps/add-agents-to-app.md#working-with-an-interactive-agent)
+[Power Apps component framework overview](overview.md)
+[Create your first code component](implementing-controls-using-typescript.md)
+[Learn Power Apps component framework](/training/paths/use-power-apps-component-framework)
+[Xrm.Copilot (Client API reference)](../model-driven-apps/clientapi/reference/xrm-copilot.md)
+[Add agent response with the form designer (preview)](../../maker/model-driven-apps/form-designer-add-configure-agent-response.md)
diff --git a/powerapps-docs/developer/component-framework/component-framework-for-canvas-apps.md b/powerapps-docs/developer/component-framework/component-framework-for-canvas-apps.md
index 806cc823c5..31e103254b 100644
--- a/powerapps-docs/developer/component-framework/component-framework-for-canvas-apps.md
+++ b/powerapps-docs/developer/component-framework/component-framework-for-canvas-apps.md
@@ -4,7 +4,7 @@ description: Learn how to create code components using Power Apps component fram
keywords:
author: anuitz
ms.author: anuitz
-ms.date: 05/27/2022
+ms.date: 07/01/2025
ms.reviewer: jdaly
ms.topic: how-to
ms.subservice: pcf
@@ -14,7 +14,7 @@ contributors:
# Code components for canvas apps
-Professional developers can use Power Apps component framework to create code components that can be used in their canvas apps. More information: [Power Apps component framework overview](overview.md)
+Professional developers can use Power Apps component framework to create code components that can be used in their canvas apps. More information: [Power Apps component framework overview](overview.md).
App makers can use Power Apps component framework to create, import, and add code components to canvas apps by using [Microsoft Power Platform CLI](get-powerapps-cli.md). Certain APIs might not be available in canvas apps. We recommend that you check each API to determine where it's available.
@@ -23,7 +23,7 @@ App makers can use Power Apps component framework to create, import, and add cod
> [!WARNING]
> Code components contain code that may not be generated by Microsoft and can potentially access security tokens and data when rendered in Power Apps Studio. When adding code components to a canvas app, make sure that the code component solutions are from a trusted source. This vulnerability does not exist when playing the canvas app.
-When you open a canvas app that contains code components in Power Apps Studio, a warning message about potentially unsafe code appears. Code components in the Power Apps Studio environment have access to security tokens; hence only components from trusted sources should be opened. Administrators and system customizers should review and validate all code components before importing those components in an environment and making them available for makers to use in their apps. The `Default` publisher is shown when you import code components by using an unmanaged solution or when you have used [pac pcf push](/power-platform/developer/cli/reference/pcf#pac-pcf-push) to install your code component.
+When you open a canvas app that contains code components in Power Apps Studio, a warning message about potentially unsafe code appears. Code components in the Power Apps Studio environment have access to security tokens; hence only components from trusted sources should be opened. Administrators and system customizers should review and validate all code components before importing those components in an environment and making them available for makers to use in their apps. The `Default` publisher is shown when you import code components by using an unmanaged solution or when you have used [pac pcf push](/power-platform/developer/cli/reference/pcf#pac-pcf-push) to install your code component.

@@ -39,13 +39,13 @@ To add code components to an app, you need to enable the Power Apps component fr
1. Sign in to [Power Apps](https://powerapps.microsoft.com/).
2. Select **Settings** , and then select **Admin Center**.
-
+
> [!div class="mx-imgBorder"]
- > 
+ > 
3. On the left pane, select **Environments**, select the environment where you want to enable this feature, and then select **Settings**.
-4. Expand **Product**, and select **Features**.
+4. Expand **Product**, and select **Features**.
5. From the list of available features, turn on **Power Apps component framework for canvas apps**, and then select **Save**.
@@ -56,6 +56,8 @@ To add code components to an app, you need to enable the Power Apps component fr
After you enable the Power Apps component framework feature in your environment, you can start implementing the logic for code components. For a step-by-step tutorial, go to [Create your first code component](implementing-controls-using-typescript.md).
+We recommend that you check the [limitations](limitations.md) of code components in canvas apps before starting implementation.
+
## Add components to a canvas app
1. Go to Power Apps Studio.
@@ -65,8 +67,8 @@ After you enable the Power Apps component framework feature in your environment,
> [!IMPORTANT]
> Make sure the solution .zip file containing the code components has already been [imported](../../maker/data-platform/import-update-export-solutions.md) into Microsoft Dataverse before you proceed to the next step.
-3. On the left pane, select **Add** (**+**), and then select **Get more components**.
-
+3. On the left pane, select **Add** (**+**), and then select **Get more components**.
+
> [!div class="mx-imgBorder"]
> 
@@ -82,26 +84,26 @@ After you enable the Power Apps component framework feature in your environment,
> [!NOTE]
> You can also add components by selecting **Insert** > **Custom** > **Import component**. This option will be removed in a future release, so we suggest using the flow described above.
- >
+ >
-On the **Properties** tab, you'll notice the code component properties are displayed.
+On the **Properties** tab, you'll notice the code component properties are displayed.
> [!div class="mx-imgBorder"]
> 
> [!NOTE]
-> Existing code components can be re-imported by updating the code component's manifest version if you want the properties to be available in the default **Properties** tab. As before, the properties will continue to be available on the **Advanced** properties tab.
+> Existing code components can be re-imported by updating the code component's manifest version if you want the properties to be available in the default **Properties** tab. As before, the properties will continue to be available on the **Advanced** properties tab.
## Delete a code component from a canvas app
-1. Open the app where you've added the code component.
-1. On the left pane, select **Tree view**, and then select the screen where you've added the code component.
+1. Open the app where you've added the code component.
+1. On the left pane, select **Tree view**, and then select the screen where you've added the code component.
1. Next to the component, select **More** (**...**), and then select **Delete**.
> [!div class="mx-imgBorder"]
> 
-1. Save the app to see the changes.
+1. Save the app to see the changes.
## Update existing code components
@@ -116,5 +118,4 @@ Whenever you update the code components and want to see the runtime changes, you
[Create your first code component](implementing-controls-using-typescript.md)
[Learn Power Apps component framework](/training/paths/use-power-apps-component-framework)
-
[!INCLUDE[footer-include](../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/component-framework/issues-and-workarounds.md b/powerapps-docs/developer/component-framework/issues-and-workarounds.md
index 7bebadc833..2c81b5f21a 100644
--- a/powerapps-docs/developer/component-framework/issues-and-workarounds.md
+++ b/powerapps-docs/developer/component-framework/issues-and-workarounds.md
@@ -3,7 +3,7 @@ title: Common issues and workarounds (Power Apps Component Framework) | Microsof
description: Provides information on known issues and workarounds some come across while working with Power Apps component framework and CLI
author: anuitz
ms.author: anuitz
-ms.date: 10/28/2024
+ms.date: 07/01/2025
ms.reviewer: jdaly
ms.topic: article
ms.subservice: pcf
@@ -164,13 +164,13 @@ Power Apps component framework dataset component currently does not properly sho
No workaround as of now. We are working on pushing a fix to our deployment trains.-->
-## Authentication for third party services fails in Canvas
+## Custom authentication fails in Canvas
-PCF authentication for third parties isn't supported.
+Custom authentication within PCF controls is not supported within canvas apps.
**Workaround**
-Use combination of a [custom page](../../maker/model-driven-apps/model-app-page-overview.md) and a [connector](../../maker/canvas-apps/connections-list.md).
+Use [connectors](../../maker/canvas-apps/connections-list.md) to handle authentication.
## Control can't finish loading
diff --git a/powerapps-docs/developer/component-framework/limitations.md b/powerapps-docs/developer/component-framework/limitations.md
index 5968350865..6785aac149 100644
--- a/powerapps-docs/developer/component-framework/limitations.md
+++ b/powerapps-docs/developer/component-framework/limitations.md
@@ -3,7 +3,7 @@ title: "Limitations of Power Apps component framework | MicrosoftDocs"
description: "Limitations using Power Apps component framework"
author: anuitz
ms.author: anuitz
-ms.date: 12/04/2024
+ms.date: 07/01/2025
ms.reviewer: jdaly
ms.topic: article
ms.subservice: pcf
@@ -21,6 +21,8 @@ With Power Apps component framework, you can create your own code components to
3. Code components should not use the HTML web storage objects, like `window.localStorage` and `window.sessionStorage`, to store data. Data stored locally on the user's browser or mobile client is not secure and not guaranteed to be available reliably.
+4. Custom auth in code components is not supported in Power Apps canvas applications. Use connectors to get data and take actions instead.
+
## Related topics
[Power Apps component framework API reference](reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/reference/context.md b/powerapps-docs/developer/component-framework/reference/context.md
index 7cdc2f99c5..714ab5fb54 100644
--- a/powerapps-docs/developer/component-framework/reference/context.md
+++ b/powerapps-docs/developer/component-framework/reference/context.md
@@ -3,7 +3,7 @@ title: Context (Power Apps component framework API reference) | Microsoft Docs
description: Provides all the properties and methods available in the Power Apps component framework
author: anuitz
ms.author: anuitz
-ms.date: 05/27/2022
+ms.date: 06/16/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
@@ -28,6 +28,12 @@ Model-driven apps, canvas apps, & portals.
[!INCLUDE [client-description](includes/client-description.md)]
**Type**: [Client](client.md)
+### copilot
+
+[!INCLUDE [copilot-description](includes/copilot-description.md)]
+
+**Type**: [Copilot](copilot.md)
+
### device
[!INCLUDE [device-description](includes/device-description.md)]
diff --git a/powerapps-docs/developer/component-framework/reference/copilot.md b/powerapps-docs/developer/component-framework/reference/copilot.md
new file mode 100644
index 0000000000..d1a941e6fc
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot.md
@@ -0,0 +1,41 @@
+---
+title: Copilot (Power Apps component framework API reference) (preview)
+description: Provides methods to execute registered Microsoft Copilot Studio Topics.
+author: aorth
+ms.author: aorth
+ms.date: 06/16/2025
+ms.reviewer: jdaly
+ms.topic: reference
+ms.subservice: pcf
+contributors:
+ - JimDaly
+---
+
+# Copilot (Power Apps component framework API reference) (preview)
+
+[!INCLUDE [preview-note-pp](~/../shared-content/shared/preview-includes/preview-note-pp.md)]
+
+[!INCLUDE [copilot-description](includes/copilot-description.md)]
+
+## Available for
+
+Model-driven apps
+
+## Syntax
+
+`context.copilot`
+
+## Methods
+
+| Method| Description|
+| --- | --- |
+| [executeEvent](copilot/executeevent.md) | [!INCLUDE [executeevent-description](copilot/includes/executeevent-description.md)] |
+| [executePrompt](copilot/executeprompt.md) | [!INCLUDE [executeprompt-description](copilot/includes/executeprompt-description.md)] |
+
+
+### Related articles
+
+[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework overview](../overview.md)
+
+[!INCLUDE[footer-include](../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/component-framework/reference/copilot/executeevent.md b/powerapps-docs/developer/component-framework/reference/copilot/executeevent.md
new file mode 100644
index 0000000000..9f55710d90
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot/executeevent.md
@@ -0,0 +1,73 @@
+---
+title: executeEvent (Power Apps component framework API reference) (preview)
+description: Executes a Microsoft Copilot Studio topic based on the registered Event Name.
+author: adrianorth
+ms.author: aorth
+ms.date: 07/07/2025
+ms.reviewer: jdaly
+ms.topic: reference
+ms.subservice: pcf
+contributors:
+ - JimDaly
+---
+
+# executeEvent (preview)
+
+[!INCLUDE [preview-note-pp](~/../shared-content/shared/preview-includes/preview-note-pp.md)]
+
+[!INCLUDE[./includes/executeevent-description.md](./includes/executeevent-description.md)]
+
+## Available for
+
+Model-driven apps
+
+## Syntax
+
+`context.copilot.executeEvent(eventName, eventParameters).then(successCallback, errorCallback);`
+
+## Parameters
+
+| Parameter Name| Type| Required | Description|
+| --- | --- | --- | --- |
+| `eventName` | string | Yes | Event Name registered in the Copilot Studio topic |
+| `eventParameters` | Unknown | Yes | Parameters needed for the event execution. These depend on what the topic does.|
+| `successCallback` | Function | Yes | A function to call when the operation succeeds.|
+| `errorCallback` | Function | Yes | A function to call when the operation fails.|
+
+## Return Value
+
+Type: `Promise<`[MCSResponse](mcsresponse.md)`>`
+
+See [Promise](https://developer.mozilla.org/docs/Web/JavaScript/reference/Global_Objects/Promise) and [MCSResponse](mcsresponse.md)
+
+## Accessing app context
+
+When an Agent API is called, context for the app is passed to the Copilot Studio topic through a set of variables. The following are context variables available as [Copilot Studio global variables](/microsoft-copilot-studio/authoring-variables-bot).
+
+[!INCLUDE [app-context-table](../../../model-driven-apps/clientapi/includes/app-context-table.md)]
+
+For example, using `Global.PA__Copilot_Model_PageContext.pageContext.id.guid` and `Global.PA__Copilot_Model_PageContext.pageContext.entityTypeName`, the form's record can be retrieved from Dataverse.
+
+[!INCLUDE [accessing-event-parameters](../../../model-driven-apps/clientapi/includes/accessing-event-parameters.md)]
+
+### Example
+
+In Microsoft Copilot Studio, where a topic is registered that accepts an ID (entity record ID) as an input parameter. Based on the input, it retrieves the related activities of that entity record and returns the results as an Copilot Studio event activity. The PCF context API enables the execution of these methods within the context of PCF controls.
+
+```javascript
+const response = await context.copilot.executeEvent(
+ "Microsoft.PowerApps.Copilot.RelatedActivities",
+ { id:"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"});
+```
+
+[!INCLUDE [accessing-event-parameters-response](../../../model-driven-apps/clientapi/includes/accessing-event-parameters-response.md)]
+
+
+### Related articles
+
+[Copilot](../copilot.md)
+[executePrompt](executeprompt.md)
+[Power Apps component framework API reference](../../reference/index.md)
+[Power Apps component framework overview](../../overview.md)
+
+[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/component-framework/reference/copilot/executeprompt.md b/powerapps-docs/developer/component-framework/reference/copilot/executeprompt.md
new file mode 100644
index 0000000000..282ce2ab15
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot/executeprompt.md
@@ -0,0 +1,73 @@
+---
+title: executePrompt (Power Apps component framework API reference) (preview)
+description: Executes a Microsoft Copilot Studio topic based on the trigger queries registered in the topic.
+author: adrianorth
+ms.author: aorth
+ms.date: 06/16/2025
+ms.reviewer: jdaly
+ms.topic: reference
+ms.subservice: pcf
+contributors:
+ - JimDaly
+---
+
+# executePrompt (preview)
+
+[!INCLUDE [preview-note-pp](~/../shared-content/shared/preview-includes/preview-note-pp.md)]
+
+[!INCLUDE[./includes/executeprompt-description.md](./includes/executeprompt-description.md)]
+
+## Available for
+
+Model-driven apps
+
+## Syntax
+
+`context.copilot.executeEvent(promptText).then(successCallback, errorCallback);`
+
+## Parameters
+
+| Parameter Name| Type| Required | Description|
+| --- | --- | --- | --- |
+| `promptText` | string | Yes | The text that is registered as a trigger query in the MCS topic. |
+| `successCallback` | Function | Yes | A function to call when the operation succeeds.|
+| `errorCallback` | Function | Yes | A function to call when the operation fails.|
+
+## Return Value
+
+Type: `Promise<`[MCSResponse](mcsresponse.md)`>`
+
+See [Promise](https://developer.mozilla.org/docs/Web/JavaScript/reference/Global_Objects/Promise) and [MCSResponse](mcsresponse.md)
+
+## Example
+
+In Microsoft Copilot Studio, when a topic is triggered by queries like "hello" or "hi." When `executePrompt` runs with matching `promptText`, it activates the topic and returns a Message activity with the response text.
+
+```typescript
+const response = await context.copilot.executePrompt("hello");
+```
+
+### Response
+
+```json
+[
+ {
+ "type": "message",
+ "timestamp": "2025-02-05T16:46:07.7799759+00:00",
+ "replyToId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
+ "attachments": [],
+ "textFormat": "markdown",
+ "text": "Hello, how can I help you today?",
+ "speak": "Hello, how can I help?"
+ }
+]
+```
+
+### Related articles
+
+[Copilot](../copilot.md)
+[executeEvent](executeevent.md)
+[Power Apps component framework API reference](../../reference/index.md)
+[Power Apps component framework overview](../../overview.md)
+
+[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/component-framework/reference/copilot/includes/executeevent-description.md b/powerapps-docs/developer/component-framework/reference/copilot/includes/executeevent-description.md
new file mode 100644
index 0000000000..f14865b3a6
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot/includes/executeevent-description.md
@@ -0,0 +1 @@
+Executes a Microsoft Copilot Studio topic based on the registered Event Name. Returns an array of type [MCSResponse](../mcsresponse.md).
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/reference/copilot/includes/executeprompt-description.md b/powerapps-docs/developer/component-framework/reference/copilot/includes/executeprompt-description.md
new file mode 100644
index 0000000000..c0ed81bd8d
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot/includes/executeprompt-description.md
@@ -0,0 +1 @@
+Executes a Microsoft Copilot Studio topic based on the trigger queries registered in the topic. Returns an array of type [MCSResponse](../mcsresponse.md).
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/reference/copilot/mcsresponse.md b/powerapps-docs/developer/component-framework/reference/copilot/mcsresponse.md
new file mode 100644
index 0000000000..7297d75dac
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/copilot/mcsresponse.md
@@ -0,0 +1,54 @@
+---
+title: "MCSResponse Interface (Power Apps component framework API reference) (preview)"
+description: The interface that describes the properties of contains data returned by the context.executeEvent and context.executePrompt methods.
+author: adrianorth
+ms.author: aorth
+ms.date: 06/16/2025
+ms.reviewer: jdaly
+ms.topic: reference
+applies_to: "Dynamics 365 (online)"
+search.audienceType:
+ - developer
+contributors:
+ - JimDaly
+---
+
+# MCSResponse Interface (Power Apps component framework API reference) (preview)
+
+[!INCLUDE [preview-note-pp](~/../shared-content/shared/preview-includes/preview-note-pp.md)]
+
+An interface that describes the data returned by the [executeEvent](executeevent.md) and [executePrompt](executeprompt.md) methods.
+
+
+
+## Properties
+
+The following table describes the `MCSResponse` properties. Only the `type` property will always be present.
+
+
+| Name| Type| Description|
+|---|---|---|
+| `type`| `string`| **Required.** The type of the response.|
+| `id`| `string`| Unique identifier for the response.|
+| `locale`| `string`| Locale information (e.g., language or region).|
+| `replyToId`| `string`| ID of the message this is replying to.|
+| `timestamp`| `string`| Timestamp of the response.|
+| `speak`| `string`| Text to be spoken by a speech synthesizer.|
+| `text`| `string`| Text content of the response.|
+| `textFormat`| `plain` \| `markdown` \| `xml` | Format of the text content.|
+| `suggestedActions` | `{ actions: any[]; to?: string[] }` | Suggested actions for the user to take.|
+| `value`| `unknown`| Custom payload or data.|
+| `valueType`| `string`| Type of the value payload.|
+| `name`| `string`| Name of the response or action.|
+| `attachmentLayout` | `list` \| `carousel` | Layout style for displaying attachments.|
+| `attachments`| [Attachment](#attachment-interface)[]| Array of attachments included in the response.|
+
+### Attachment Interface
+
+| Name| Type| Description|
+|---|---|---|
+| `content`| `unknown` | **Required.** The content of the attachment. |
+| `contentType`| `string` | Describes the type of content. |
+
+
diff --git a/powerapps-docs/developer/component-framework/reference/includes/copilot-description.md b/powerapps-docs/developer/component-framework/reference/includes/copilot-description.md
new file mode 100644
index 0000000000..81c6808b1b
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/reference/includes/copilot-description.md
@@ -0,0 +1 @@
+Provides methods to execute registered Microsoft Copilot Studio Topics.
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/reference/webapi/retrievemultiplerecords.md b/powerapps-docs/developer/component-framework/reference/webapi/retrievemultiplerecords.md
index 8fedb81311..35e23496d6 100644
--- a/powerapps-docs/developer/component-framework/reference/webapi/retrievemultiplerecords.md
+++ b/powerapps-docs/developer/component-framework/reference/webapi/retrievemultiplerecords.md
@@ -55,7 +55,7 @@ Model-driven apps & portals.
maxPageSize |
Number |
No |
-Specify a positive number that indicates the number of table records to be returned per page. If you do not specify this parameter, the default value is passed as 5000.
+ | Specify a positive number that indicates the number of table records to be returned per page. If you do not specify this parameter, the default value is passed as 5,000.
If the number of records being retrieved is more than the specified maxPageSize value, nextLink column in the returned promise object will contain a link to retrieve the next set of tables. |
diff --git a/powerapps-docs/developer/component-framework/toc.yml b/powerapps-docs/developer/component-framework/toc.yml
index d5622cce5f..a65dfb5986 100644
--- a/powerapps-docs/developer/component-framework/toc.yml
+++ b/powerapps-docs/developer/component-framework/toc.yml
@@ -62,6 +62,8 @@ items:
href: publish-components-app-source.md
- name: Customize the editable grid control
href: customize-editable-grid-control.md
+ - name: Bring intelligence into your components using Agent APIs
+ href: bring-intelligence-using-agent-apis.md
- name: Troubleshooting
items:
- name: Common issues and workarounds
@@ -154,6 +156,15 @@ items:
href: reference/controlattributes.md
- name: ControlAttributesType
href: reference/controlattributestype.md
+ - name: Copilot
+ href: reference/copilot.md
+ items:
+ - name: executeEvent
+ href: reference/copilot/executeevent.md
+ - name: executePrompt
+ href: reference/copilot/executeprompt.md
+ - name: MCSResponse
+ href: reference/copilot/mcsresponse.md
- name: DataProviderCapabilities
href: reference/dataprovidercapabilities.md
- name: DataSet
diff --git a/powerapps-docs/developer/data-platform/TOC.yml b/powerapps-docs/developer/data-platform/TOC.yml
index de8bac174c..7be9f6d78e 100644
--- a/powerapps-docs/developer/data-platform/TOC.yml
+++ b/powerapps-docs/developer/data-platform/TOC.yml
@@ -24,6 +24,8 @@
href: security-access-coding.md
- name: Security roles and templates
href: security-roles.md
+ - name: Column-level security
+ href: column-level-security.md
- name: Microsoft Entra ID group teams
href: aad-group-team.md
- name: Work with data using code
@@ -137,11 +139,8 @@
- name: "Dataverse SQL"
href: how-dataverse-sql-differs-from-transact-sql.md
- name: Bulk Operation messages
- displayName: CreateMultiple, UpdateMultiple, UpsertMultiple
+ displayName: CreateMultiple, UpdateMultiple, UpsertMultiple, DeleteMultiple
href: bulk-operations.md
- items:
- - name: Use DeleteMultiple (preview)
- href: deletemultiple.md
- name: Restore deleted records (preview)
displayName: RecycleBin, Restore
href: restore-deleted-records.md
@@ -411,8 +410,6 @@
href: time-zone-entities.md
- name: BusinessUnit table
href: businessunit-entity.md
- - name: Field security tables
- href: field-security-entities.md
- name: Use access teams and owner teams to collaborate and share information
href: use-access-teams-owner-teams-collaborate-share-information.md
- name: Azure AD user tables
@@ -442,8 +439,8 @@
href: entity-attribute-metadata-messages.md
- name: Behavior and format of the date and time column
href: behavior-format-date-time-attribute.md
- - name: Formula, calculated, and rollup columns
- href: calculated-rollup-attributes.md
+ - name: Specialized columns
+ href: specialized-columns.md
- name: Create auto-number columns
href: create-auto-number-attributes.md
- name: Choices
diff --git a/powerapps-docs/developer/data-platform/aaduser-entity.md b/powerapps-docs/developer/data-platform/aaduser-entity.md
index ca07df0d7f..02a734eab1 100644
--- a/powerapps-docs/developer/data-platform/aaduser-entity.md
+++ b/powerapps-docs/developer/data-platform/aaduser-entity.md
@@ -1,14 +1,13 @@
---
-title: "Azure Active Directory user (AADUser) table (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "An Azure Active Directory user virtual table in Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.custom: ""
+title: "Azure Active Directory user (AADUser) table (Microsoft Dataverse) | Microsoft Docs"
+description: "An Azure Active Directory user virtual table in Microsoft Dataverse."
ms.date: 04/20/2022
ms.reviewer: "pehecke"
ms.topic: "article"
-author: "NHelgren" # GitHub ID
+author: "NHelgren"
ms.service: powerapps
ms.subservice: dataverse-developer
-ms.author: "nhelgren" # MSFT alias of Microsoft employees only
+ms.author: "nhelgren"
search.audienceType:
- developer
---
diff --git a/powerapps-docs/developer/data-platform/access-web-services.md b/powerapps-docs/developer/data-platform/access-web-services.md
index 7f19a66531..e21a9f3d81 100644
--- a/powerapps-docs/developer/data-platform/access-web-services.md
+++ b/powerapps-docs/developer/data-platform/access-web-services.md
@@ -2,16 +2,16 @@
title: "Access external web services (Microsoft Dataverse) | MicrosoftDocs"
description: "Learn how to access a web service from a custom plug-in or workflow activity."
ms.custom: ""
-ms.date: 01/24/2025
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
+ms.date: 06/10/2025
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: "pehecke"
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
- - PHecke
+ - phecke
---
# Access external web services
@@ -22,7 +22,7 @@ Plug-ins and custom workflow activities can access the network through the HTTP
- Access to localhost (loopback) isn't permitted.
- IP addresses can't be used. You must use a named web address that requires DNS name resolution.
- Anonymous authentication is supported and recommended. There's no provision for prompting the logged on user for credentials, or saving those credentials.
-- Your server must allow connections from [Power Platform and Dynamics 365 services IP address values specified under the AzureCloud service tag](/power-platform/admin/online-requirements#ip-addresses-required).
+- Your server must allow connections from Power Platform and Dynamics 365 services [IP address values](/power-platform/admin/online-requirements#ip-addresses-required) specified under the `PowerPlatformPlex` service tag.
Other methods of accessing web services include the use of Webhooks and the [!INCLUDE [pn_azure_service_bus](../../includes/pn_azure_service_bus.md)]. Refer to the links provided in the next sections for more information on those topics.
diff --git a/powerapps-docs/developer/data-platform/analyze-performance.md b/powerapps-docs/developer/data-platform/analyze-performance.md
index fda75ee8a8..cd4cd17224 100644
--- a/powerapps-docs/developer/data-platform/analyze-performance.md
+++ b/powerapps-docs/developer/data-platform/analyze-performance.md
@@ -1,12 +1,12 @@
---
title: "Analyze plug-in performance (Microsoft Dataverse) | Microsoft Docs"
description: "Learn how to find and analyze performance data on plug-ins execution."
-ms.date: 08/15/2023
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
+ms.date: 06/20/2025
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: "pehecke"
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -14,16 +14,16 @@ contributors:
---
# Analyze plug-in performance
-When you add business logic to your plug-in you should be aware of the impact your plug-ins will have on overall system performance.
+When you add business logic to your plug-in you should be aware of the impact your plug-ins have on overall system performance.
## Time and resource constraints
-There is a hard **2-minute time limit** for a Dataverse message operation to complete. This limit includes executing the intended message operation and all registered synchronous plug-ins. There are also limitations on the amount of CPU and memory resources that can be used by extensions. If the limits are exceeded an exception is thrown and the entire message operation will be cancelled (rolled back).
+There's a hard **2-minute time limit** for a Dataverse message operation to complete. This limit includes executing the intended message operation and all registered synchronous plug-ins. There are also limitations on the amount of CPU and memory resources that extensions can use. If the limits are exceeded, Dataverse throws an exception and the entire message operation is canceled (rolled back).
-If the time limit is exceeded, an will be thrown. If any custom extension exceeds threshold CPU, memory, or handle limits or is otherwise unresponsive, that process will be killed by the platform. At that point any current extension in that process will fail with exceptions. However, the next time that the extension is executed it will run normally.
+If the time limit is exceeded, Dataverse throws a . If any custom extension exceeds threshold CPU, memory, or handle limits or is otherwise unresponsive, Dataverse kills that process. At that point any current extension in that process fails with exceptions. However, the next time that the extension is executed it will run normally.
> [!IMPORTANT]
-> You cannot control how long the message operation or other synchronous registered plug-ins take to execute. You can only control how long your plug-in takes to execute based on its design and coding.
+> You can't control how long the message operation or other synchronous registered plug-ins take to execute. You can only control how long your plug-in takes to execute based on its design and coding.
>
> Our general recommendation is to limit the time your plug-in takes to execute to no more than 2 seconds.
>
@@ -34,7 +34,7 @@ More information: [Best practices and guidance regarding plug-in and workflow de
## Monitor performance
> [!IMPORTANT]
-> This feature is no longer operational or supported. Do not use.
+> This feature is no longer operational or supported. Don't use.
>
> This section will be removed in a future article update.
diff --git a/powerapps-docs/developer/data-platform/api-limits.md b/powerapps-docs/developer/data-platform/api-limits.md
index 17090a6c3c..a60977575c 100644
--- a/powerapps-docs/developer/data-platform/api-limits.md
+++ b/powerapps-docs/developer/data-platform/api-limits.md
@@ -4,9 +4,9 @@ description: "Understand what a developer needs to do to manage service protecti
ms.date: 11/26/2024
ms.reviewer: jdaly
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/application-insights-ilogger.md b/powerapps-docs/developer/data-platform/application-insights-ilogger.md
index 7ebcf4e1fa..449fb1cc29 100644
--- a/powerapps-docs/developer/data-platform/application-insights-ilogger.md
+++ b/powerapps-docs/developer/data-platform/application-insights-ilogger.md
@@ -1,9 +1,9 @@
---
title: "Write Telemetry to your Application Insights resource using ILogger (Microsoft Dataverse) | Microsoft Docs"
description: "When you enable Application Insights for your organization, any plug-ins written using the ILogger Interface provided in the SDK writes telemetry to your Application Insights resource."
-ms.date: 03/10/2023
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
ms.subservice: dataverse-developer
@@ -17,12 +17,12 @@ contributors:
# Write Telemetry to your Application Insights resource using ILogger
> [!IMPORTANT]
-> To use this capability you must first enable the Application Insights integration feature. More information: [Analyze model-driven apps and Microsoft Dataverse telemetry with Application Insights](/power-platform/admin/analyze-telemetry)
-> There is presently no support of `ILogger` within a plug-in profiling/debug session of the Plug-in Registration tool or the Power Platform Tools extension for Visual Studio.
+> To use this capability, you must first enable the Application Insights integration feature using an administrator account. Ensure that the user enabling the feature has the necessary privileges to modify the Dataverse organization (such as System Administrator role or being a Power Platform/Dynamics 365 admin) and has contributor access to the Application Insights resource. If a user without the necessary permissions enables the integration, telemetry data will not be written to Application Insights. More information: [Analyze model-driven apps and Microsoft Dataverse telemetry with Application Insights](/power-platform/admin/analyze-telemetry)
+> There's presently no support of `ILogger` within a plug-in profiling/debug session of the Plug-in Registration tool or the Power Platform Tools extension for Visual Studio.
When you enable Application Insights for your organization, any plug-ins written using the [ILogger Interface](/dotnet/api/microsoft.xrm.sdk.plugintelemetry.ilogger) provided in the SDK for .NET assemblies write telemetry to your Application Insights resource.
-The Dataverse platform captures the Dataverse and model-driven app telemetry data and exports it to your Application Insights resource. There's some latency between the time it was captured and when it becomes available to you in Application Insights. Because Microsoft gathers this telemetry, you don't need to write any code to enable it.
+The Dataverse platform captures the Dataverse and model-driven app telemetry data and exports it to your Application Insights resource. There's some latency between the time it was captured and when it becomes available to you in Application Insights. Because Microsoft gathers this telemetry, you don't need to write any code to enable it.
Telemetry data that comes from plug-ins using the ILogger interface is different in two ways:
@@ -37,24 +37,24 @@ Using ILogger provides true telemetry data and is intended to work together with
|---------|---------|---------|
|Intended use|Capture telemetry over time for analysis and debugging.|While developing and debugging plug-ins|
|How long data is stored|According to your Application Insights data retention period, which is 90 days by default|24 hours|
-|Available|Only for organizations that have subscribed to Application Insights integration.|Available for any organization when Plug-in tracing is enabled.|
-|Amount of data|Each log message can pass a String value.|Only 10 kb of text can be written for each plug-in execution. Any more is truncated.|
+|Available|Only for organizations that subscribe to Application Insights integration.|Available for any organization when Plug-in tracing is enabled.|
+|Amount of data|Each log message can pass a String value.|Only 10 kb of text can be written for each plug-in execution. The text is truncated after the first 10 kb.|
|Available in runtime errors|No|Available in model-driven app client errors and as annotations in Web API. More information: [Include more details with errors](webapi/compose-http-requests-handle-errors.md#include-more-details-with-errors)|
You should continue to use the [ITracingService.Trace](xref:Microsoft.Xrm.Sdk.ITracingService.Trace%2A) to write to the Plug-in Trace Log table when needed. Not every organization enables Application Insights. If your plug-in code uses the ILogger interface and the organization doesn't have Application Insights integration enabled, nothing is written. So, it's important to continue to use the ITracingService Trace method in your plug-ins. Plug-in trace logs continue to be an important way to capture data while developing and debugging plug-ins, but they were never intended to provide telemetry data. More information: [Plug-ins: Tracing and logging](logging-tracing.md)
You should use [ILogger](xref:Microsoft.Xrm.Sdk.PluginTelemetry.ILogger) because it provides telemetry about what happens within a plug-in. This telemetry is integrated with the larger scope of data captured with the Application Insights integration. The Application Insights integration tells you when a plug-in executes, how long it takes to run and whether it makes any external http requests, but Microsoft can't add any telemetry code within the plug-ins that you write to extend the behavior of the platform.
-If you're an ISV with a product that includes plug-ins, your customers who enable Application Insights appreciate being able to see what is going on within your plug-ins and this data may help you support them if there are issues. But data captured using ILogger is only sent to the subscribing customer's resource. You'll only be able to see data captured for your own environments when you have Application Insights enabled.
+If you're an ISV with a product that includes plug-ins, your customers who enable Application Insights appreciate being able to see what is going on within your plug-ins and this data might help you support them if there are issues. But data captured using ILogger is only sent to the subscribing customer's resource. You'll only be able to see data captured for your own environments when you have Application Insights enabled.
## Use ILogger
-ILogger is a common interface for capturing log information. The implementation provided with the SDK for .NET assemblies provides common methods to support establishing a scope and different levels of logging. There's currently no setting to control what level of logs are written. The levels can be used within Application Insights to filter which logs to view.
+ILogger is a common interface for capturing log information. The implementation provided with the SDK for .NET assemblies provides common methods to support establishing a scope and different levels of logging. There's currently no setting to control what level of logs are written. The levels can be used within Application Insights to filter the logs to view.
-The following is an example of a plug-in using both ILogger and ITracingService.Trace.
+The following example plug-in shows using both ILogger and ITracingService.Trace.
> [!NOTE]
-> Make sure you include `using Microsoft.Xrm.Sdk.PluginTelemetry;`. Don't use `using Microsoft.Extensions.Logging;`, otherwise the `ILogger` instance will be null.
+> Make sure you include `using Microsoft.Xrm.Sdk.PluginTelemetry;`. Don't use `using Microsoft.Extensions.Logging;`, otherwise the `ILogger` instance is null.
```csharp
using Microsoft.Xrm.Sdk;
@@ -206,7 +206,7 @@ When this plug-in is registered on a synchronous `PostOperation` step for the `C
You can filter items for a single operation using the `operation_ParentId` that represents the request ID of the response header.
-:::image type="content" source="media/application-insights-ilogger-trace-operation_parentid.png" alt-text="Filter items for a single operation using the operation_ParentId .":::
+:::image type="content" source="media/application-insights-ilogger-trace-operation_parentid.png" alt-text="Filter items for a single operation using the operation_ParentId.":::
The corresponding plug-in trace log entry looks like this:
@@ -232,7 +232,7 @@ And this query limits the results to the logs added during the `OutboundCall` sc
## Logging Exceptions
-At the bottom of the plug-in code example above, the following code uses [LogError](/dotnet/api/microsoft.xrm.sdk.plugintelemetry.ilogger.logerror) to log a caught exception and throws an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception):
+At the bottom of the previous plug-in code example, the following code uses [LogError](/dotnet/api/microsoft.xrm.sdk.plugintelemetry.ilogger.logerror) to log a caught exception and throws an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception):
```csharp
catch (Exception e)
@@ -250,7 +250,7 @@ Using the plug-in code above, you can cause an exception by passing an invalid v
This value overrides the default value (`https://www.bing.com`) and cause the outbound call to fail.
-There's nothing wrong with the request that a client may send:
+There's nothing wrong with the request that a client might send:
```http
POST [Organization URI]/api/data/v9.1/accounts HTTP/1.1
@@ -326,7 +326,7 @@ Within Application Insights, if you view traces scoped to this request and with
:::image type="content" source="media/application-insights-ilogger-trace-error.png" alt-text="View traces scoped to this request and with the scope set to OutboundCall.":::
-Within Application Insights, when you switch your query to use `exceptions` rather than `traces`, you'll see three exceptions logged:
+Within Application Insights, when you switch your query to use `exceptions` rather than `traces`, you see three exceptions logged:
:::image type="content" source="media/application-insights-ilogger-cause-error-exceptions.png" alt-text="Switch your query to use exceptions rather than traces.":::
diff --git a/powerapps-docs/developer/data-platform/apply-business-logic-with-code.md b/powerapps-docs/developer/data-platform/apply-business-logic-with-code.md
index 8741fb4a6c..463000f8f7 100644
--- a/powerapps-docs/developer/data-platform/apply-business-logic-with-code.md
+++ b/powerapps-docs/developer/data-platform/apply-business-logic-with-code.md
@@ -2,8 +2,8 @@
title: Apply business logic using code (Microsoft Dataverse)| Microsoft Docs
description: Learn how to write code to customize business data processing in Microsoft Dataverse.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
suite: powerapps
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/auditing/configure.md b/powerapps-docs/developer/data-platform/auditing/configure.md
index f9110c935b..147f12b852 100644
--- a/powerapps-docs/developer/data-platform/auditing/configure.md
+++ b/powerapps-docs/developer/data-platform/auditing/configure.md
@@ -1,7 +1,7 @@
---
title: Configure auditing
description: Learn how to programmatically configure auditing settings for the organization, tables, and columns in Microsoft Dataverse.
-ms.date: 06/02/2023
+ms.date: 06/10/2025
ms.topic: overview
ms.subservice: dataverse-developer
author: paulliew
@@ -21,7 +21,7 @@ Microsoft Dataverse auditing uses settings in the [Organization table](../refere
## Configure organization settings
-Four properties in the [Organization table](../reference/entities/organization.md) control how auditing is enabled for an environment. The organization table contains a single row. The `organizationid` column is the primary key. Query the row directly to get the key value, or execute the `WhoAmI` message and take the value of the `WhoAmIResponse.OrganizationId` property.
+Five properties in the [Organization table](../reference/entities/organization.md) control how auditing is enabled for an environment. The organization table contains a single row. The `organizationid` column is the primary key. Query the row directly to get the key value, or execute the `WhoAmI` message and take the value of the `WhoAmIResponse.OrganizationId` property.
The following table describes the organization table columns that control auditing behavior.
@@ -31,6 +31,7 @@ The following table describes the organization table columns that control auditi
|`AuditRetentionPeriodV2`
`auditretentionperiodv2`
**Audit Retention Period Settings**|Integer|The number of days to retain audit log records
The default value is 30. Valid values are between 1 and 365,000 days (~1,000 years). If the value is set to -1, the records are retained forever.
[Administrator's guide: Start/stop auditing and set retention policy](/power-platform/admin/manage-dataverse-auditing#startstop-auditing-for-a-dataverse-environment-and-set-retention-policy)|
|`IsUserAccessAuditEnabled`
`isuseraccessauditenabled`
**Is User Access Auditing Enabled**|Boolean|Whether user access logging is enabled
Auditing for the environment must be enabled for user access logging to be enabled.|
|`UserAccessAuditingInterval`
`useraccessauditinginterval`
**User Authentication Auditing Interval**|Integer|How often user access is logged, in hours
The default value is 4.|
+|`AuditSettings`
`auditsettings`
**Audit Settings**|String|Json format string. Contains audit feature related settings.|
### Retrieve organization settings
@@ -42,6 +43,7 @@ Use the following queries to retrieve your organization settings.
```http
GET [Organization URI]/api/data/v9.2/organizations?$select=
+auditsettings,
isauditenabled,
auditretentionperiodv2,
isuseraccessauditenabled,
@@ -59,10 +61,11 @@ If-None-Match: null
HTTP/1.1 200 OK
{
- "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#organizations(isauditenabled,auditretentionperiodv2,isuseraccessauditenabled,useraccessauditinginterval)",
+ "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#organizations(auditsettings,isauditenabled,auditretentionperiodv2,isuseraccessauditenabled,useraccessauditinginterval)",
"value": [
{
"@odata.etag": "W/\"67404512\"",
+ "auditsettings": "{\"IsSqlAuditWriteDisabled\":true}",
"isauditenabled": true,
"auditretentionperiodv2": 30,
"isuseraccessauditenabled": true,
@@ -84,16 +87,17 @@ Learn more about:
///
/// Shows Auditing Configuration properties
///
-/// The IOrganizationService instance to use.
-static void ShowAuditingConfig(IOrganizationService svc)
+/// The IOrganizationService instance to use.
+static void ShowAuditingConfig(IOrganizationService service)
{
WhoAmIResponse whoAmIResponse =
- (WhoAmIResponse)svc.Execute(new WhoAmIRequest());
+ (WhoAmIResponse)service.Execute(new WhoAmIRequest());
- Entity organization = svc.Retrieve(
+ Entity organization = service.Retrieve(
entityName: "organization",
id: whoAmIResponse.OrganizationId,
columnSet: new ColumnSet(
+ "auditsettings",
"isauditenabled",
"auditretentionperiodv2",
"isuseraccessauditenabled",
@@ -101,6 +105,8 @@ static void ShowAuditingConfig(IOrganizationService svc)
)
);
+ Console.WriteLine($"auditsettings: " +
+ $"{organization["auditsettings"]}");
Console.WriteLine($"isauditenabled: " +
$"{organization["isauditenabled"]}");
Console.WriteLine($"auditretentionperiodv2: " +
@@ -123,13 +129,70 @@ Learn more about:
### Change organization settings
-Change the column values in the organization table to change how auditing works for the environment. You must have the System Administrator or System Customizer role to change these settings.
+Change the column values in the organization table to change how auditing works for the environment. You must have the System Administrator or System Customizer role to change these settings. [Learn more about reading and updating environment settings](../organization-table.md)
-You can use Web API or Dataverse SDK for .NET to change your organization settings:
+#### Change AuditSettings
+
+[Organization.AuditSettings](../reference/entities/organization.md#BKMK_AuditSettings) contains a json string to store settings to enable different capabilities. You can enable some capabilities by updating the `auditsettings` column of the organization record. The following table specifies what audit settings exist, what they're used for, and whether they can be changed.
+
+| Setting | Description | Updatable |
+|-----------|-----------|-----------|
+| `StoreLabelNameforPicklistAudits` | For audits of picklist values, audit both option value and option name. Otherwise only the option value. The original user selected label choice persists in the audit records. | Yes |
+| `IsSqlAuditWriteDisabled` | If NoSql audits are enabled, stop writing data to sql audit table | No, throws an error. |
+| `ApplyRetentionToExistingLogs` | Apply new retention policy to existing audit records | No, is ignored. |
+
+Use the following examples to set your organization settings. You'll need the `organizationid` value. See [Retrieve organization settings](#retrieve-organization-settings) for how to obtain it.
+
+##### [Web API](#tab/webapi)
+
+**Request:**
+
+```http
+PATCH [Organization URI]/api/data/v9.2/organizations([Organization ID]) HTTP/1.1
+Content-Type: application/json
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+If-Match: *
+
+{
+ "auditsettings": "{\"StoreLabelNameforPicklistAudits\":true}"
+}
+```
+
+**Response:**
+
+```http
+HTTP/1.1 204 No content
+```
+
+Learn more about:
- [Update and delete table rows using the Web API](../webapi/update-delete-entities-using-web-api.md)
+
+##### [SDK for .NET](#tab/sdk)
+
+```csharp
+///
+/// Sets audit settings
+///
+/// The IOrganizationService instance to use.
+static void SetAuditSettings(IOrganizationService service)
+{
+ WhoAmIResponse whoAmIResponse =
+ (WhoAmIResponse)service.Execute(new WhoAmIRequest());
+
+ var organization = new Entity("organization", whoAmIResponse.OrganizationId);
+ organization["auditsettings"] = "{\"StoreLabelNameforPicklistAudits\":true}";
+ service.Update(organization);
+}
+```
+
+Learn more about:
+
- [Update and delete table rows using the SDK for .NET](../org-service/entity-operations-update-delete.md)
+---
+
## Configure tables and columns
When auditing is enabled for the organization, any tables that are enabled for auditing write audit data for all columns that are enabled for auditing. The primary control is at the organization and then the table level.
@@ -215,8 +278,8 @@ Learn more about:
/// Lists the tables that can be enabled for auditing and
/// the tables that cannot be enabled for auditing.
///
-/// The IOrganizationService instance to use.
-static void ShowTableAuditConfigurations(IOrganizationService svc)
+/// The IOrganizationService instance to use.
+static void ShowTableAuditConfigurations(IOrganizationService service)
{
//Define properties to return
MetadataPropertiesExpression EntityProperties =
@@ -247,7 +310,7 @@ static void ShowTableAuditConfigurations(IOrganizationService svc)
};
RetrieveMetadataChangesResponse response =
- (RetrieveMetadataChangesResponse)svc.Execute(request);
+ (RetrieveMetadataChangesResponse)service.Execute(request);
Console.WriteLine("These tables can be enabled for auditing:");
response.EntityMetadata.ToList().ForEach(x =>
@@ -325,10 +388,10 @@ Learn more about: [Query table definitions using the Web API](../webapi/query-me
/// Lists the columns of a table that can be enabled for auditing and
/// the columns that cannot be enabled for auditing.
///
-/// The IOrganizationService instance to use.
+/// The IOrganizationService instance to use.
/// The logical name of the table.
static void ShowColumnAuditConfigurations(
-IOrganizationService svc,
+IOrganizationService service,
string tableLogicalName)
{
@@ -379,7 +442,7 @@ RetrieveMetadataChangesRequest request =
};
RetrieveMetadataChangesResponse response =
- (RetrieveMetadataChangesResponse)svc.Execute(request);
+ (RetrieveMetadataChangesResponse)service.Execute(request);
response.EntityMetadata.ToList().ForEach(x =>
{
@@ -472,7 +535,7 @@ PublishXmlRequest request = new PublishXmlRequest()
"
};
-svc.Execute(request);
+service.Execute(request);
```
Learn more about:
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/do-not-use-parallel-execution-in-plug-ins.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/do-not-use-parallel-execution-in-plug-ins.md
index e86ad7c0d3..133eecd4a6 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/do-not-use-parallel-execution-in-plug-ins.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/do-not-use-parallel-execution-in-plug-ins.md
@@ -1,9 +1,9 @@
---
-title: "Do not use parallel execution within plug-ins and workflow activities | MicrosoftDocs"
-description: "Multi or parallel threading within plug-ins or custom workflow activities is not supported."
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+title: "Don't use parallel execution within plug-ins and workflow activities | MicrosoftDocs"
+description: "Multi or parallel threading within plug-ins or custom workflow activities isn't supported."
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: article
ms.subservice: dataverse-developer
@@ -13,7 +13,7 @@ contributors:
- JimDaly
- phecke
---
-# Do not use parallel execution within plug-ins and workflow activities
+# Don't use parallel execution within plug-ins and workflow activities
**Category**: Design, Performance, Security, Supportability
@@ -23,18 +23,18 @@ contributors:
## Symptoms
-Multi-threading or parallel calls within plug-ins or custom workflow activities can cause corruption of those the connections. As an example, executing parallel threads can log exceptions such as:
+Multi-threading or parallel calls within plug-ins or custom workflow activities can cause corruption of those the connections. As an example, executing parallel threads can log exceptions such as:
`Generic SQL error.`
`The transaction active in this session has been committed or aborted by another session.`
-Also, non-thread safe objects such as items in the [System.Collections Namespace](/dotnet/api/system.collections) can become corrupted by parallel threads.
+Also, nonthread safe objects such as items in the [System.Collections Namespace](/dotnet/api/system.collections) can become corrupted by parallel threads.
## Guidance
-The sandbox service has been designed to execute calls in a specific order as part of a transaction. Developing plug-ins or custom workflow activities to make parallel or multi-threaded calls is not supported. Develop your plug-ins and custom workflow activities knowing that the calls will be performed sequentially and may need to be rolled back.
+The sandbox service is designed to execute calls in a specific order as part of a transaction. Developing plug-ins or custom workflow activities to make parallel or multi-threaded calls isn't supported. Develop your plug-ins and custom workflow activities knowing that the calls are performed sequentially and might need to be rolled back.
> [!NOTE]
> Using parallel execution from a client program is a supported practice to optimize performance as needed. This guidance is specific to code written to be executed within a plug-in or custom workflow activity.
@@ -43,7 +43,7 @@ The sandbox service has been designed to execute calls in a specific order as pa
## Problematic patterns
-Plug-ins and custom workflow activities run within a single transaction and multiple threads introduced by parallel execution can corrupt the transaction. The following are examples of patterns and practices that should not be used within plug-ins and custom workflow activities:
+Plug-ins and custom workflow activities run within a single transaction and multiple threads introduced by parallel execution can corrupt the transaction. The following are examples of patterns and practices that shouldn't be used within plug-ins and custom workflow activities:
- Using [Task-based asynchronous pattern (TAP)](/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap)
- Using [Task Parallel Library (TPL)](/dotnet/standard/parallel-programming/task-parallel-library-tpl)
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md
index d7a15b1cbc..8534c9e85c 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md
@@ -3,8 +3,8 @@ title: "Implement all types of queries when filtering results using PreOperation
description: "For best performance and consistent results for all applications you must implement filtering for all types of queries that can be used with plug-ins that are registered for the PreOperation stage of RetrieveMultiple."
suite: powerapps
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: article
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/manage-plug-ins-single-solution.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/manage-plug-ins-single-solution.md
index c8d77a54bc..f2e7278ce5 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/manage-plug-ins-single-solution.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/manage-plug-ins-single-solution.md
@@ -2,8 +2,8 @@
title: "Manage plug-ins in a single solution | MicrosoftDocs"
description: "The definition of a Plug-in assembly should be maintained within a single solution. You may want to have a separate solution that contains only plug-in definitions to help manage the plugin definitions."
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
suite: powerapps
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/optimize-assembly-development.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/optimize-assembly-development.md
index 1d0e4b0374..d26c1841b3 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/optimize-assembly-development.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/optimize-assembly-development.md
@@ -2,9 +2,9 @@
title: "Optimize custom assembly development | MicrosoftDocs"
description: "Consider merging separate plug-ins/custom workflow activities into a single custom assembly to improve performance and maintainability and move plug-ins/custom workflow activities into multiple custom assemblies if an assembly size is near the sandbox assembly size constraints."
suite: powerapps
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
ms.subservice: dataverse-developer
@@ -16,8 +16,6 @@ contributors:
---
# Optimize assembly development
-
-
**Category**: Performance, Maintainability, Design
**Impact potential**: Low
@@ -26,7 +24,7 @@ contributors:
## Symptoms
-When developing custom assemblies, there are a couple of considerations to take in:
+Consider the following points when developing custom assemblies:
1. Assemblies with a large number of custom workflow activities can take a long time to upload when being registered.
1. Multiple different custom assemblies
@@ -41,9 +39,9 @@ When developing custom assemblies, there are a couple of considerations to take
### Limit the number of Custom Workflow Activities in a Single assembly
-When an assembly that contains custom workflow activities is uploaded during plug-in registration, additional checks are required for custom workflow activities.
+When an assembly that contains custom workflow activities is uploaded during plug-in registration, more checks are required for custom workflow activities.
-While an assembly with hundreds of ordinary plug-in types may be uploaded very quickly, an assembly with more than 100 custom workflow activities may take several minutes or even time out when being registered or updated. We recommend including no more than 50 custom workflow activities in a single assembly.
+While an assembly with hundreds of ordinary plug-in types might be uploaded quickly, an assembly with more than 100 custom workflow activities might take several minutes or even time out when being registered or updated. We recommend including no more than 50 custom workflow activities in a single assembly.
### Consolidate Plug-ins or Custom Workflow Activities into a Single Assembly
@@ -56,7 +54,7 @@ Plug-ins and custom workflow activities developed for a Dataverse solution shoul
### Move Plug-ins/Custom Workflow Activities into Multiple Assemblies
-Power Apps and Dynamics 365 (online) has an assembly size constraint of 16 MB which cannot be changed. If your assembly size is nearing 16 MB, consider moving plug-in/custom workflow activities into multiple assemblies.
+Power Apps and Dynamics 365 (online) has an assembly size constraint of 16 MB, which can't be changed. If your assembly size is nearing 16 MB, consider moving plug-in/custom workflow activities into multiple assemblies.
@@ -64,24 +62,25 @@ Power Apps and Dynamics 365 (online) has an assembly size constraint of 16 MB wh
### Assemblies take a long time to upload when being registered
-When a custom workflow activity type plug-in is uploaded while being registered, each type requires additional validation checking. When an assembly contains more than a hundred custom workflow activity type plug-ins, it could require several minutes to complete the checks and is at risk of timing out.
+When a custom workflow activity type plug-in is uploaded while being registered, each type requires more validation checking. When an assembly contains more than a hundred custom workflow activity type plug-ins, it could require several minutes to complete the checks and is at risk of timing out.
### Multiple assemblies
Having multiple assemblies has a couple of areas that can be impacted:
-1. Performance - each assembly has a lifecycle that is managed by Dataverse. This includes loading, caching, and unloading the assemblies. Having more than one assembly causes more work to be done on the server, loading and caching an assembly, and could affect the overall plug-in/custom workflow activity execution length.
+1. Performance - Dataverse manages the lifecycle of each assembly. This includes loading, caching, and unloading the assemblies. Having more than one assembly causes more work to be done on the server, loading and caching an assembly, and could affect the overall plug-in/custom workflow activity execution length.
2. Maintainability - having more than one plug-in/custom workflow activity Visual Studio project leads to more complex application lifecycle management (ALM). It increases the risk and the amount of time when updating/patching the appropriate project for a specific plug-in/custom workflow activity, packaging the plug-ins/custom workflow activities within a solution, and managing plug-ins/custom workflow activities within a deployment.
### Assembly larger than 16 MB
-You will not be able to register a custom assembly within Dataverse that is larger than 16 MB.
+
+You won't be able to register a custom assembly within Dataverse that is larger than 16 MB.
## Additional information
-Quite often, developers create a new Visual Studio project for each plug-in/custom workflow activity. In turn, this causes a separate assembly to be generated for each plug-in/custom workflow activity.
+Often, developers create a new Visual Studio project for each plug-in/custom workflow activity. In turn, this causes a separate assembly to be generated for each plug-in/custom workflow activity.
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md
index 5924d5f34a..9a188b6a75 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md
@@ -1,9 +1,9 @@
---
title: "Set Timeout when making external calls in a plug-in | MicrosoftDocs"
-description: "Limit the time period that external calls will expect a response within plug-ins"
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+description: "Limit the time period that external calls expect a response within plug-ins"
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
suite: powerapps
ms.topic: how-to
@@ -25,25 +25,25 @@ contributors:
## Symptoms
-If a plug-in makes external web requests that fail to respond quickly, the plug-in will wait for the full default timeout period before failing. This duration may cause a long transaction that can effect other operations. If the plug-in is registered:
+If a plug-in makes external web requests that fail to respond quickly, the plug-in waits for the full default timeout period before failing. This duration might cause a long transaction that can effect other operations. If the plug-in is registered:
-- Synchronously, users may experience:
+- Synchronously, users might experience:
- Unresponsive model-driven apps
- Slow client interactions
- The browser stops responding
-- Asynchronously, plug-in executions may take an extended period of time before failing.
+- Asynchronously, plug-in executions might take an extended period of time before failing.
## Guidance
-The default timeout value for .Net Http clients is 100 seconds, just 20 seconds short of the time available for the plug-in to complete. It is best to establish an expected baseline time that a calling service will respond. The longer it exceeds this normal response time, the higher the probability it will ultimately fail. As a performance best practice, it is best to fail quickly rather than allow the default timeout period to expire. You should control the period that your call to the external service will wait.
+The default timeout value for .NET Http clients is 100 seconds, just 20 seconds short of the time available for the plug-in to complete. It's best to establish an expected baseline time that a calling service responds. The longer it exceeds this normal response time, the higher the probability it will fail. As a performance best practice, it's best to fail quickly rather than allow the default timeout period to expire. You should control the period that your call to the external service waits.
-The timeout value you should set will depend on the service. For example, if you can monitor the performance of the service you may determine a duration where 99.999% of requests succeed and set your timeout period to that duration with a few seconds buffer. This will prevent the occasional outliers from having an inordinate impact on the performance of your plug-in.
+The timeout value you should set depends on the service. For example, if you can monitor the performance of the service you might determine a duration where 99.999% of requests succeed and set your timeout period to that duration with a few seconds buffer. This prevents the occasional outliers from having an inordinate impact on the performance of your plug-in.
-If you are using [System.Net.Http.HttpClient Class](/dotnet/api/system.net.http.httpclient), you can set the `Timeout` value explicitly, as shown in this example setting the timeout to 15 seconds.
+If you're using [System.Net.Http.HttpClient Class](/dotnet/api/system.net.http.httpclient), you can set the `Timeout` value explicitly, as shown in this example setting the timeout to 15 seconds.
```csharp
using (HttpClient client = new HttpClient())
@@ -62,7 +62,7 @@ using (HttpClient client = new HttpClient())
}
```
-If you are using [System.Net.WebClient Class](/dotnet/api/system.net.webclient), you need to create a derived class and override the base [GetWebRequest Method](/dotnet/api/system.net.webclient.getwebrequest) to set the timeout:
+If you're using [System.Net.WebClient Class](/dotnet/api/system.net.webclient), you need to create a derived class and override the base [GetWebRequest Method](/dotnet/api/system.net.webclient.getwebrequest) to set the timeout:
```csharp
///
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/use-invalidpluginexecutionexception-plugin-workflow-activities.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/use-invalidpluginexecutionexception-plugin-workflow-activities.md
index c02c6478bd..e790b1a124 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/use-invalidpluginexecutionexception-plugin-workflow-activities.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/use-invalidpluginexecutionexception-plugin-workflow-activities.md
@@ -1,9 +1,9 @@
---
title: "Use InvalidPluginExecutionException in plug-ins and workflow activities | MicrosoftDocs"
description: "Use InvalidPluginExecutionException when raising errors within the context of a plug-in or workflow activity."
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
suite: powerapps
ms.topic: article
@@ -25,11 +25,11 @@ contributors:
## Symptoms
-If a synchronous plug-in returns an exception other than back to the platform, in a Power Apps client an error is displayed to the user with the message of the exception and the stack trace. This provides an unfriendly user experience in what is likely already a frustrating situation.
+If a synchronous plug-in returns an exception other than back to the platform, a Power Apps client displays an error to the user with the message of the exception and the stack trace. This provides an unfriendly user experience in what is likely already a frustrating situation.
-If you are using to intentionally cancel the operation because of data validation logic issue, you should provide guidance applicable to the application user so that they can correct the issue and continue.
+If you're using to intentionally cancel the operation because of data validation logic issue, you should provide guidance applicable to the application user so that they can correct the issue and continue.
-If the error is unexpected, it is still recommended to catch the exception, convert it into a , and then throw the new exception so that applications can show a friendly error message with guidance to help a user or technical staff quickly identify the issue.
+If the error is unexpected, it's still recommended to catch the exception, convert it into a , and then throw the new exception so that applications can show a friendly error message with guidance to help a user or technical staff quickly identify the issue.
@@ -40,11 +40,11 @@ Plug-ins should only return an returns to the caller with a friendly message and an `IsvAborted` error code. Failure to catch and convert an exception into a will result in an `IsvUnExpected` error code with no friendly message displayed to the user from a Power Apps client.
+A thrown returns to the caller with a friendly message and an `IsvAborted` error code. Failure to catch and convert an exception into a results in an `IsvUnExpected` error code with no friendly message displayed to the user from a Power Apps client.
### Handle errors from functions called in plug-ins
-Within your plug-in you will commonly call other functions to re-use code. How you handle errors in these functions is very important because an unhandled error may cause the worker process to crash. This will not only terminate your plug-in, but may also terminate any concurrent plug-ins running for your organization. More information: [Error: Sandbox Worker process crashed](../../troubleshoot-plug-in.md#error-sandbox-worker-process-crashed)
+Plug-ins commonly call other functions to reuse code. How you handle errors in these functions is important because an unhandled error might cause the worker process to crash. This crashing worker process not only terminates your plug-in, but might also terminate any concurrent plug-ins running for your organization. More information: [Error: Sandbox Worker process crashed](../../troubleshoot-plug-in.md#error-sandbox-worker-process-crashed)
@@ -53,9 +53,9 @@ Within your plug-in you will commonly call other functions to re-use code. How y
> [!WARNING]
> These patterns should be avoided.
-Do not use HTML within error message text.
+Don't use HTML within error message text.
-Web applications which access Dataverse data should HTML encode any error message text before they display it to a user. This will prevent any HTML in your message from rendered as you intend. It will just show the HTML code.
+Web applications that access Dataverse data should HTML encode any error message text before they display it to a user. This encoding prevents any HTML in your message from rendered as you intend. It just shows the HTML code.
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/verify-certification-dependencies.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/verify-certification-dependencies.md
index 2883b7df62..8f8fe68f32 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/verify-certification-dependencies.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/verify-certification-dependencies.md
@@ -1,9 +1,9 @@
---
title: "Verify certification dependencies for plug-ins making outbound calls | MicrosoftDocs"
description: "Ensure that any certificates that your code depends on for outbound calls has a valid chain of certificates."
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
suite: powerapps
ms.topic: article
@@ -26,7 +26,7 @@ contributors:
## Symptoms
-You may get this error when your plug-in makes an https call to an external resource:
+You might get this error when your plug-in makes an https call to an external resource:
`WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.`
@@ -42,9 +42,9 @@ You should verify that the site you want to connect with has a valid chain of ce
## Additional information
-You may encounter this when connecting to a new endpoint for the first time or when something about the certificate has changed.
+You might encounter this error when connecting to a new endpoint for the first time or when something about the certificate changed.
-When the code in your plug-in running in the sandbox attempts to connect to an external endpoint using https, the Dataverse Sandbox will start SSL/TLS negotiation. The endpoint presents a certificate to use for encryption. If the certificate has one or more intermediate certificates it must present the entire chain to successfully complete SSL/TLS negotiation. If the complete chain is not presented SSL/TLS communication cannot be established.
+When the code in your plug-in running in the sandbox attempts to connect to an external endpoint using https, the Dataverse Sandbox starts SSL/TLS negotiation. The endpoint presents a certificate to use for encryption. If the certificate has one or more intermediate certificates it must present the entire chain to successfully complete SSL/TLS negotiation. If the complete chain isn't presented SSL/TLS communication can't be established.
For more information about requirements, see [Server cipher suites and TLS requirements](/power-platform/admin/server-cipher-tls-requirements).
diff --git a/powerapps-docs/developer/data-platform/best-practices/work-with-data/index.md b/powerapps-docs/developer/data-platform/best-practices/work-with-data/index.md
index c20f6725be..666a62b869 100644
--- a/powerapps-docs/developer/data-platform/best-practices/work-with-data/index.md
+++ b/powerapps-docs/developer/data-platform/best-practices/work-with-data/index.md
@@ -1,8 +1,8 @@
---
title: "Developers: Best practices and guidance around working with data for Microsoft Dataverse | Microsoft Docs"
description: Best practices and guidance around working with data for developers of Microsoft Dataverse.
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: best-practice
ms.date: 03/26/2021
diff --git a/powerapps-docs/developer/data-platform/best-practices/work-with-data/invalidcharactersinfield.md b/powerapps-docs/developer/data-platform/best-practices/work-with-data/invalidcharactersinfield.md
index ce12e64c9e..c3ebdd841e 100644
--- a/powerapps-docs/developer/data-platform/best-practices/work-with-data/invalidcharactersinfield.md
+++ b/powerapps-docs/developer/data-platform/best-practices/work-with-data/invalidcharactersinfield.md
@@ -1,10 +1,10 @@
---
title: "Manage invalid characters | Microsoft Docs"
description: "Describes how to manage invalid characters with the Dataverse API. Only allowed characters can be used or an error is thrown."
-ms.date: 03/22/2022
+ms.date: 06/20/2025
ms.topic: article
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.subservice: dataverse-developer
search.audienceType:
@@ -15,18 +15,18 @@ contributors:
# Manage invalid characters
-There are a set of characters that cannot be saved in string or memo columns. When an application saves data containing these characters to Dataverse, the following error will occur:
+There is a set of characters that can't be saved in string or memo columns. When an application saves data containing these characters to Dataverse, the following error occurs:
Name: `InvalidCharactersInField`
-Hexadecimal error code : `80040278`
+Hexadecimal error code: `80040278`
Error Number: `-2147220872`
Description: `The field '{0}' contains one or more invalid characters.`
Dataverse uses the [System.Xml.XmlConvert.VerifyXmlChars(String) Method](/dotnet/api/system.xml.xmlconvert.verifyxmlchars) for every string value passed to these columns. This error is thrown on the first invalid character encountered.
-You may encounter these characters in email content that includes replies or when text is copied from another source which may have characters to control presentation.
+You might encounter these characters in email content that includes replies or when text is copied from another source that might have characters to control presentation.
-To prevent this error you can:
+To prevent this error, you can:
- HTML encode the content before saving.
diff --git a/powerapps-docs/developer/data-platform/build-and-package.md b/powerapps-docs/developer/data-platform/build-and-package.md
index 4efdd171d4..f0c5981e5a 100644
--- a/powerapps-docs/developer/data-platform/build-and-package.md
+++ b/powerapps-docs/developer/data-platform/build-and-package.md
@@ -3,8 +3,8 @@ title: Build and package plug-in code
description: Learn about building and packaging plug-in code for Microsoft Dataverse, including assembly constraints and dependent assembly limitations.
ms.date: 04/04/2025
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.subservice: dataverse-developer
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/bulk-operations.md b/powerapps-docs/developer/data-platform/bulk-operations.md
index 34486d555b..1cb0d38a2f 100644
--- a/powerapps-docs/developer/data-platform/bulk-operations.md
+++ b/powerapps-docs/developer/data-platform/bulk-operations.md
@@ -1,9 +1,9 @@
---
title: Use bulk operation messages
description: Learn how to use special APIs to perform operations on multiple rows of data in a Microsoft Dataverse table.
-ms.date: 01/31/2025
-author: MicroSri
-ms.author: sriknair
+ms.date: 07/07/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: how-to
ms.subservice: dataverse-developer
@@ -20,8 +20,8 @@ To get the best performance when you run operations on multiple rows of a Micros
- [`CreateMultiple`](#createmultiple): Creates multiple records of the same type in a single request.
- [`UpdateMultiple`](#updatemultiple): Updates multiple records of the same type in a single request.
-- [`UpsertMultiple`](upsertmultiple.md): Creates or updates multiple records of the same type in a single request.
-- [`DeleteMultiple` (preview)](deletemultiple.md): For elastic tables only. Deletes multiple records of the same type in a single request.
+- [`UpsertMultiple`](#upsertmultiple): Creates or updates multiple records of the same type in a single request.
+- [`DeleteMultiple`](#deletemultiple): For elastic tables only. Deletes multiple records of the same type in a single request.
> [!NOTE]
> For guidance about options when performing bulk operations, such when to use these APIs compared to batch APIs like `ExecuteMultiple`, see [Optimize performance for bulk operations](optimize-performance-create-update.md).
@@ -374,6 +374,107 @@ These queries will not return results for the `UpsertMultiple` message. A table
Multiple records with the same primary key or alternate key values in the payload are not supported with `UpsertMultiple`. When more than one record in the `Targets` parameter is uniquely identified by a primary or alternate key, `UpsertMultiple` will return an error. [This behavior is different from `UpdateMultiple`](#duplicate-records-in-updatemultiple-targets-parameter).
+### DeleteMultiple
+
+Delete multiple rows of data in elastic tables with a single request.
+
+##### [SDK for .NET](#tab/sdk)
+
+You must use the [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest) because the [SDK for .NET](org-service/overview.md) doesn't have a `DeleteMultipleRequest` class. Learn how to [use messages with the SDK for .NET](org-service/use-messages.md).
+
+The following `DeleteMultipleExample` static method uses the `DeleteMultiple` message with the [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest) to delete multiple rows from the `contoso_SensorData` elastic table using the alternate key to include the `partitionid` to uniquely identify the rows.
+
+```csharp
+public static void DeleteMultipleExample(IOrganizationService service)
+{
+ string tableLogicalName = "contoso_sensordata";
+
+ List entityReferences = new() {
+ {
+ new EntityReference(logicalName: tableLogicalName,
+ keyAttributeCollection: new KeyAttributeCollection
+ {
+ { "contoso_sensordataid", "3f56361a-b210-4a74-8708-3c664038fa41" },
+ { "partitionid", "deviceid-001" }
+ })
+ },
+ { new EntityReference(logicalName: tableLogicalName,
+ keyAttributeCollection: new KeyAttributeCollection
+ {
+ { "contoso_sensordataid", "e682715b-1bba-415e-b2bc-de9327308423" },
+ { "partitionid", "deviceid-002" }
+ })
+ }
+ };
+
+ OrganizationRequest request = new(requestName:"DeleteMultiple")
+ {
+ Parameters = {
+ {"Targets", new EntityReferenceCollection(entityReferences)}
+ }
+ };
+
+ service.Execute(request);
+}
+```
+
+##### [Web API](#tab/webapi)
+
+The following example shows how to use the [DeleteMultiple action](xref:Microsoft.Dynamics.CRM.DeleteMultiple) to delete multiple rows from the `contoso_SensorData` elastic table including the `partitionid` to uniquely identify the rows.
+
+**Request:**
+
+```http
+POST [Organization Uri]/api/data/v9.2/contoso_sensordatas/Microsoft.Dynamics.CRM.DeleteMultiple
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+If-None-Match: null
+Accept: application/json
+Content-Type: application/json; charset=utf-8
+Content-Length: 603
+
+{
+ "Targets": [
+ {
+ "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
+ "contoso_sensordataid": "6114ca58-0928-ee11-9965-6045bd5cd155",
+ "partitionid": "Device-ABC-1234"
+ },
+ {
+ "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
+ "contoso_sensordataid": "6214ca58-0928-ee11-9965-6045bd5cd155",
+ "partitionid": "Device-ABC-1234"
+ },
+ {
+ "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
+ "contoso_sensordataid": "6314ca58-0928-ee11-9965-6045bd5cd155",
+ "partitionid": "Device-ABC-1234"
+ }
+ ]
+}
+```
+
+**Response:**
+
+```http
+HTTP/1.1 204 NoContent
+OData-Version: 4.0
+```
+
+---
+
+#### DeleteMultiple availability
+
+`DeleteMultiple` is supported only for elastic tables. Elastic tables don't support [table relationship cascading behavior](configure-entity-relationship-cascading-behavior.md), which can result in unpredictable execution times for delete operations. If you use `DeleteMultiple` on a standard table, you get the error: `DeleteMultiple has not yet been implemented.`
+
+
+#### DeleteMultiple examples
+
+You can find sample code on GitHub in [github.com/microsoft/PowerApps-Samples](https://github.com/microsoft/PowerApps-Samples):
+
+- [Elastic table sample code](elastic-table-samples.md)
+- Within [Sample: SDK for .NET Use bulk operations](org-service/samples/create-update-multiple.md) or [Sample: Web API Use bulk operations](webapi/samples/create-update-multiple.md), change the `Settings.cs` config file and choose the `UseElastic` option.
+
## Standard and elastic table usage
@@ -384,7 +485,7 @@ Both standard and elastic tables benefit from a significant performance boost wh
| [Number of records](#number-of-records) | Operations are more efficient with a larger number of records. There's no limit on the number of records, but there are message size and time limits. We recommend sending 100 - 1000 records at a time.| We recommend sending 100 records at a time. |
| [On Error behavior](#on-error-behavior) | All operations roll back on error. | Partial success is possible. |
| [Availability](#availability) | Not all standard tables support these messages. | Messages are available for all elastic tables. |
-| [DeleteMultiple](deletemultiple.md) | Not available. Use the SDK [BulkDeleteRequest class](xref:Microsoft.Crm.Sdk.Messages.BulkDeleteRequest) or the Web API [BulkDelete action](xref:Microsoft.Dynamics.CRM.BulkDelete) instead. [Learn how to delete data in bulk](delete-data-bulk.md). | Available using the SDK [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest). The Web API `DeleteMultiple` action is private, but you can use it now. It will become public soon. |
+| [DeleteMultiple](#deletemultiple) | Not available. Use the SDK [BulkDeleteRequest class](xref:Microsoft.Crm.Sdk.Messages.BulkDeleteRequest) or the Web API [BulkDelete action](xref:Microsoft.Dynamics.CRM.BulkDelete) instead. [Learn how to delete data in bulk](delete-data-bulk.md). | Use the SDK [DeleteMultipleRequest Class](/dotnet/api/microsoft.xrm.sdk.messages.deletemultiplerequest) or Web API [DeleteMultiple Action](/power-apps/developer/data-platform/webapi/reference/deletemultiple)|
Standard and elastic table usage is different because standard tables use Azure SQL and support transactions. Elastic tables use Azure Cosmos DB, which doesn't support transactions but is able to handle large amounts of data at high levels of throughput with low latency. The following sections provide more details. [Learn more about bulk operations on elastic tables](use-elastic-tables.md#bulk-operations-with-elastic-tables).
@@ -445,9 +546,6 @@ When you use the Web API to perform a bulk operation on an elastic table, you ne
Bulk operation message availability depends on whether you're using standard tables or elastic tables. All elastic tables support the `CreateMultiple`, `UpdateMultiple`, `UpsertMultiple`, and `DeleteMultiple` messages.
-See also:
-- [DeleteMultiple Availability](deletemultiple.md#availability)
-
#### Availability with standard tables
You can use the `CreateMultiple` and `UpdateMultiple` bulk operation messages with custom standard tables and many common standard tables, but not all. You should test whether individual standard tables support these messages. The following examples show you how to do that.
@@ -626,8 +724,6 @@ These limits are based on data changes: `Create`, `Update`, and `Delete` operati
### See also
-[Use UpsertMultiple (preview)](upsertmultiple.md)
-[Use DeleteMultiple (preview)](deletemultiple.md)
[Elastic tables](elastic-tables.md)
[Write plug-ins for CreateMultiple and UpdateMultiple](write-plugin-multiple-operation.md)
[Sample: SDK for .NET Use bulk operations](org-service/samples/create-update-multiple.md)
diff --git a/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md b/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md
index 814058d351..811ad0aff4 100644
--- a/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md
+++ b/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md
@@ -4,9 +4,9 @@ description: "Make data changes which bypass custom Dataverse logic."
ms.date: 12/04/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md b/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md
index 6d74447894..b12746bc4f 100644
--- a/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md
+++ b/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md
@@ -4,9 +4,9 @@ description: "Make data changes that don't trigger Power Automate flows."
ms.date: 07/01/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/column-level-security.md b/powerapps-docs/developer/data-platform/column-level-security.md
new file mode 100644
index 0000000000..0570ffaddc
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/column-level-security.md
@@ -0,0 +1,782 @@
+---
+title: Column-level security with code
+description: "Learn how developers use code to secure data for specific columns or fields in a table so that only specified users and teams can view or set the values."
+ms.date: 07/29/2025
+ms.reviewer: jdaly
+ms.topic: article
+author: paulliew
+ms.subservice: dataverse-developer
+ms.author: paulliew
+search.audienceType:
+ - developer
+---
+# Column-level security with code
+
+Column-level security is applied for columns that contain sensitive information. Passwords, bank account numbers, government ID, telephone numbers, or email addresses can be secured at the column level.
+
+This article explains how developers can work with column-level security capabilities using code and the Dataverse SDK for .NET or Web API. You don't need to write code to use this feature. [Learn how to configure column-level security to control access](/power-platform/admin/field-level-security). Developers should also understand how to configure column-level security using [Power Apps](https://powerapps.microsoft.com/).
+
+## Discover which columns are secured
+
+Detect which columns are secured by retrieving the definition of the column and examining the boolean [AttributeMetadata.IsSecured property](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata.issecured).
+
+There are two ways to discover which columns are secured with code. These ways are described in the following two sections:
+
+- [Retrieve column data filtered on IsSecured](#retrieve-column-data-filtered-on-issecured)
+- [Retrieve FieldSecurityProfile for System Administrator role](#retrieve-fieldsecurityprofile-for-system-administrator-role)
+
+### Retrieve column data filtered on IsSecured
+
+This method queries the organization's metadata to identify columns marked with the `IsSecured` property set to `true`. Everyone has access to view this data. [Learn how to Query schema definitions](query-schema-definitions.md)
+
+The resulting CSV file contains two columns: **Table** and **Column**, representing the schema names of the tables and their secured
+columns, respectively.
+
+#### [SDK for .NET](#tab/sdk)
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="GetSecuredColumns":::
+
+#### [Web API](#tab/webapi)
+
+This JSON represents the [EntityQueryExpression](/power-apps/developer/data-platform/webapi/reference/entityqueryexpression) data used with the `Query` parameter with the [RetrieveMetadataChanges Function](/power-apps/developer/data-platform/webapi/reference/retrievemetadatachanges) to return data about columns that are secured using the [AttributeMetadata](/power-apps/developer/data-platform/webapi/reference/attributemetadata)`.IsSecured` property.
+
+```json
+{
+ "Properties": {
+ "AllProperties": false,
+ "PropertyNames": ["SchemaName","Attributes"]
+ },
+ "Criteria": {
+ "FilterOperator": "And",
+ "Conditions": []
+ },
+ "AttributeQuery": {
+ "Properties": {
+ "AllProperties": false,
+ "PropertyNames": [
+ "SchemaName", "IsSecured"
+ ]
+ },
+ "Criteria": {
+ "FilterOperator": "And",
+ "Conditions": [
+ {
+ "ConditionOperator": "Equals",
+ "PropertyName": "IsSecured",
+ "Value": {
+ "Type": "System.Boolean",
+ "Value": "true"
+ }
+ }
+ ]
+ }
+ }
+}
+```
+
+**Request**:
+
+This JSON is URL encoded before sending:
+
+```http
+GET [ORGANIZATION URI]/api/data/v9.2/RetrieveMetadataChanges(Query=@p1)?@p1=%7b+%22Properties%22%3a+%7b+%22AllProperties%22%3a+false%2c+%22PropertyNames%22%3a+%5b%22SchemaName%22%2c%22Attributes%22%5d+%7d%2c+%22Criteria%22%3a+%7b+%22FilterOperator%22%3a+%22And%22%2c+%22Conditions%22%3a+%5b%5d+%7d%2c+%22AttributeQuery%22%3a+%7b+%22Properties%22%3a+%7b+%22AllProperties%22%3a+false%2c+%22PropertyNames%22%3a+%5b+%22SchemaName%22%2c+%22IsSecured%22+%5d+%7d%2c+%22Criteria%22%3a+%7b+%22FilterOperator%22%3a+%22And%22%2c+%22Conditions%22%3a+%5b+%7b+%22ConditionOperator%22%3a+%22Equals%22%2c+%22PropertyName%22%3a+%22IsSecured%22%2c+%22Value%22%3a+%7b+%22Type%22%3a+%22System.Boolean%22%2c+%22Value%22%3a+%22true%22+%7d+%7d+%5d+%7d+%7d+%7d HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+```
+
+**Response**:
+
+> [!NOTE]
+> The data represented in this response was edited to remove null property values returned in the `EntityMetadata` property and it only returns a single representative secured column. In reality, the total amount of data returned is large depending on the number of tables in your environment.
+
+This example shows how the [Account.OpenDeals column](/dynamics365/developer/reference/entities/account#BKMK_OpenDeals) is one of the secured columns.
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json; odata.metadata=minimal
+OData-Version: 4.0
+Content-Length: 5324876
+
+{
+ "@odata.context": "[ORGANIZATION URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveMetadataChangesResponse",
+ "ServerVersionStamp": "152647645!07/11/2025 22:09:13",
+ "DeletedMetadata": {
+ "Count": 0,
+ "IsReadOnly": false,
+ "Keys": [],
+ "Values": []
+ },
+ "EntityMetadata": [
+ {
+ "SchemaName": "Account",
+ "MetadataId": "70816501-edb9-4740-a16c-6a5efbc05d84",
+ "Attributes": [
+ {
+ "SchemaName": "OpenDeals",
+ "MetadataId": "e10cdd44-5c7f-4ac8-a5d1-b2118926f2bd",
+ "IsSecured": true
+ }
+ ]
+ },
+ Truncated for brevity...
+ ]
+}
+```
+
+---
+
+### Retrieve FieldSecurityProfile for System Administrator role
+
+
+This method queries the Dataverse field permission table to identify columns that the [Field Security Profile (FieldSecurityProfile)](reference/entities/fieldsecurityprofile.md) record with ID `572329c1-a042-4e22-be47-367c6374ea45` secures. This record manages access to secured columns for system administrators. Typically, only system administrators have the `prvReadFieldPermission` privilege to retrieve this data.
+
+#### [SDK for .NET](#tab/sdk)
+
+The static `GetSecuredColumnList` method returns fully qualified column names in the format `TableName.ColumnName`, sorted alphabetically.
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="GetSecuredColumnList":::
+
+#### [Web API](#tab/webapi)
+
+
+**Request**:
+
+```http
+GET https://[ORGANIZATION URI]/api/data/v9.2/fieldsecurityprofiles(572329c1-a042-4e22-be47-367c6374ea45)/lk_fieldpermission_fieldsecurityprofileid?$select=entityname,attributelogicalname&$count=true HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+Prefer: odata.include-annotations="*"
+OData-Version: 4.0
+OData-MaxVersion: 4.0
+```
+
+**Response**:
+
+The results in this example were edited for brevity to show only one example column ([Account.OpenDeals column](/dynamics365/developer/reference/entities/account#BKMK_OpenDeals)).
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json; odata.metadata=minimal
+OData-Version: 4.0
+Preference-Applied: odata.include-annotations="*"
+
+{
+ "@odata.context": "[ORGANIZATION URI]/api/data/v9.2/$metadata#fieldpermissions(entityname,attributelogicalname)",
+ "@odata.count": 20,
+ "@Microsoft.Dynamics.CRM.totalrecordcount": 20,
+ "@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false,
+ "value": [
+ {
+ "@odata.etag": "W/\"15577006\"",
+ "entityname@OData.Community.Display.V1.FormattedValue": "Account",
+ "entityname": "account",
+ "attributelogicalname": "opendeals",
+ "fieldpermissionid": "9b2606bb-0144-413a-ac56-be26922d4edb"
+ },
+ Truncated for brevity...
+ ]
+}
+```
+
+---
+
+## Discover which columns can be secured
+
+You can't secure every column. When you [enable column security](/power-platform/admin/field-level-security#enable-column-security) using [Power Apps](https://make.powerapps.com/), the **Enable column security** checkbox is disabled for certain fields. You don't need to manually check each column to find out if you can secure it. Write a query to retrieve which columns you can secure.
+
+Three boolean [AttributeMetadata](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata) properties control whether you can secure any column:
+
+- [CanBeSecuredForCreate](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata.canbesecuredforcreate)
+- [CanBeSecuredForRead](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata.canbesecuredforread)
+- [CanBeSecuredForUpdate](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata.canbesecuredforupdate)
+
+When all of these properties are false, the column can't be secured. Some columns might only be secured for one or two of the three operations: `Create`, `Read`, and `Update`.
+
+The following queries return this data so you can discover which columns in your environment can be secured:
+
+### [SDK for .NET](#tab/sdk)
+
+This static `DumpColumnSecurityInfo` method retrieves metadata about entity attributes, including security-related properties, and writes the information to a CSV file. The output file contains details such as whether columns are secured, can be secured for create, update, or read operations, and other relevant metadata.
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="DumpColumnSecurityInfo":::
+
+### [Web API](#tab/webapi)
+
+This JSON represents the [EntityQueryExpression](/power-apps/developer/data-platform/webapi/reference/entityqueryexpression) data used with the `Query` parameter with the [RetrieveMetadataChanges Function](/power-apps/developer/data-platform/webapi/reference/retrievemetadatachanges) to return data about whether columns can be secured using the [AttributeMetadata](/power-apps/developer/data-platform/webapi/reference/attributemetadata)`.IsSecured` property.
+
+```json
+{
+ "Properties": {
+ "AllProperties": false,
+ "PropertyNames": ["SchemaName","Attributes"]
+ },
+ "Criteria": {
+ "FilterOperator": "And",
+ "Conditions": [
+ {
+ "ConditionOperator": "Equals",
+ "PropertyName": "IsPrivate",
+ "Value": {
+ "Type": "System.Boolean",
+ "Value": "false"
+ }
+ }
+ ]
+ },
+ "AttributeQuery": {
+ "Properties": {
+ "AllProperties": false,
+ "PropertyNames": [
+ "SchemaName",
+ "AttributeTypeName",
+ "IsPrimaryName",
+ "IsSecured",
+ "CanBeSecuredForCreate",
+ "CanBeSecuredForUpdate",
+ "CanBeSecuredForRead"
+ ]
+ },
+ "Criteria": {
+ "FilterOperator": "And",
+ "Conditions": [
+ {
+ "ConditionOperator": "NotEquals",
+ "PropertyName": "AttributeTypeName",
+ "Value": {
+ "Type": "Microsoft.Xrm.Sdk.Metadata.AttributeTypeDisplayName",
+ "Value": "VirtualType"
+ }
+ }
+ ]
+ }
+ }
+}
+```
+
+**Request**:
+
+```http
+GET [ORGANIZATION URI]/api/data/v9.2/RetrieveMetadataChanges(Query=@p1)?@p1=+%7b+%22Properties%22%3a+%7b+%22AllProperties%22%3a+false%2c+%22PropertyNames%22%3a+%5b%22SchemaName%22%2c%22Attributes%22%5d+%7d%2c+%22Criteria%22%3a+%7b+%22FilterOperator%22%3a+%22And%22%2c+%22Conditions%22%3a+%5b+%7b+%22ConditionOperator%22%3a+%22Equals%22%2c+%22PropertyName%22%3a+%22IsPrivate%22%2c+%22Value%22%3a+%7b+%22Type%22%3a+%22System.Boolean%22%2c+%22Value%22%3a+%22false%22+%7d+%7d+%5d+%7d%2c+%22AttributeQuery%22%3a+%7b+%22Properties%22%3a+%7b+%22AllProperties%22%3a+false%2c+%22PropertyNames%22%3a+%5b+%22SchemaName%22%2c+%22AttributeTypeName%22%2c+%22IsPrimaryName%22%2c+%22IsSecured%22%2c+%22CanBeSecuredForCreate%22%2c+%22CanBeSecuredForUpdate%22%2c+%22CanBeSecuredForRead%22+%5d+%7d%2c+%22Criteria%22%3a+%7b+%22FilterOperator%22%3a+%22And%22%2c+%22Conditions%22%3a+%5b+%7b+%22ConditionOperator%22%3a+%22NotEquals%22%2c+%22PropertyName%22%3a+%22AttributeTypeName%22%2c+%22Value%22%3a+%7b+%22Type%22%3a+%22Microsoft.Xrm.Sdk.Metadata.AttributeTypeDisplayName%22%2c+%22Value%22%3a+%22VirtualType%22+%7d+%7d+%5d+%7d+%7d+%7d HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+```
+
+**Response**:
+
+> [!NOTE]
+> The data in this response is edited to remove null property values returned in the `EntityMetadata` property and it only returns a single representative column from one table. In reality, the total amount of data returned is large depending on the number of tables and columns in your environment.
+
+This example shows the requested properties of the [Account.AccountCategoryCode column](/power-apps/developer/data-platform/reference/entities/account#BKMK_AccountCategoryCode) is one of the secured columns.
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json; odata.metadata=minimal
+OData-Version: 4.0
+
+{
+ "@odata.context": "[ORGANIZATION URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveMetadataChangesResponse",
+ "ServerVersionStamp": "152647645!07/11/2025 23:37:54",
+ "DeletedMetadata": {
+ "Count": 0,
+ "IsReadOnly": false,
+ "Keys": [],
+ "Values": []
+ },
+ "EntityMetadata": [
+ {
+ "SchemaName": "Account",
+ "MetadataId": "70816501-edb9-4740-a16c-6a5efbc05d84",
+ "Attributes": [
+ {
+ "CanBeSecuredForRead": true,
+ "CanBeSecuredForCreate": true,
+ "CanBeSecuredForUpdate": true,
+ "IsPrimaryName": false,
+ "IsSecured": false,
+ "LogicalName": "accountcategorycode",
+ "SchemaName": "AccountCategoryCode",
+ "MetadataId": "118771ca-6fb9-4f60-8fd4-99b6124b63ad",
+ "AttributeTypeName": {
+ "Value": "PicklistType"
+ }
+ },
+ Truncated for brevity...
+ ]
+ },
+ Truncated for brevity...
+ ]
+}
+```
+
+[Learn how to Query schema definitions](query-schema-definitions.md)
+
+---
+
+## Secure a column with code
+
+It's easiest to [Secure a column](/power-platform/admin/field-level-security#enable-column-securit) using [Power Apps](https://make.powerapps.com/). If you need to automate securing a column, use code to update the column definition to set the [AttributeMetadata.IsSecured property](/dotnet/api/microsoft.xrm.sdk.metadata.attributemetadata.issecured) property as shown in the following examples:
+
+
+### [SDK for .NET](#tab/sdk)
+
+This static `SetColumnIsSecured` method retrieves the current definition of the specified column and updates its security status only if the provided value differs from the current value. If the column is already set to the specified security status, no update request is sent.
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="SetColumnIsSecured":::
+
+[Learn how to update a column using the SDK for .NET](org-service/metadata-attributemetadata.md#update-a-column)
+
+### [Web API](#tab/webapi)
+
+The following `Set-ColumnIsSecured-Example` PowerShell function retrieves the current definition of the specified column and updates its security status only if the provided value differs from the current value. If the column is already set to the specified security status, no update request is sent.
+
+This function depends on [Get-Column](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/webapi/PS/README.md#get-column-function) and [Update-Column](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/webapi/PS/README.md#update-column-function) functions defined by the [Dataverse Web API PowerShell Helper functions](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/webapi/PS/README.md) used by other PowerShell samples.
+
+:::code language="powershell" source="~/../PowerApps-Samples/dataverse/webapi/PS/ColumnLevelSecurity/Examples.ps1" id="SetColumnIsSecuredExample":::
+
+[Learn how to update a column using the Web API](webapi/create-update-column-definitions-using-web-api.md#update-a-column)
+
+---
+
+## Provide access to secured columns
+
+By default, when a column is secured, only people who have the system administrator security role can read or set the value. A system administrator can provide other users access to secured columns in two ways:
+
+- [Manage access using field security profiles](#manage-access-using-field-security-profiles): Use field security profiles to give access to column data for all records to groups.
+- [Share data in secured fields](#share-data-in-secured-fields): Use field sharing to give a specific principal or team access to data in a secure column for a specific record.
+
+### Manage access using field security profiles
+
+This approach is the most common when you have different groups of users who require different levels of access. See the [Column-level security example](/power-platform/admin/column-level-security-example) that describes how to secure fields for different users using the Power Platform admin center.
+
+To do this using code, create [Field Security Profile (FieldSecurityProfile)](reference/entities/fieldsecurityprofile.md) records that associate principals (users and teams) with [Field Permission (FieldPermission)](reference/entities/fieldpermission.md) records that control which data operations can be performed on that column for any record.
+
+
+
+
+
+:::image type="content" source="media/fieldsecurityprofile-erd.png" alt-text="entity relationship diagram for the fieldsecurityprofile table and related tables":::
+
+You can associate system users and teams to your field security profile using the [systemuserprofiles_association](/power-apps/developer/data-platform/reference/entities/fieldsecurityprofile#BKMK_systemuserprofiles_association) and [teamprofiles_association](/power-apps/developer/data-platform/reference/entities/fieldsecurityprofile#BKMK_teamprofiles_association) many-to-many relationships respectively.
+
+Associate field permissions to the field security profiles using the [`lk_fieldpermission_fieldsecurityprofileid` one-to-many relationship](reference/entities/fieldsecurityprofile.md#BKMK_lk_fieldpermission_fieldsecurityprofileid). The following table describes important field permission table columns:
+
+
+|Column |Type |Description |
+|---------|---------|---------|
+|`FieldSecurityProfileId`|Lookup|Refers to the field security profile this field permission applies to.|
+|`EntityName`|String|The logical name of the table that contains the secured column.|
+|`AttributeLogicalName`|String|The logical name of the secured column.|
+|`CanCreate`|Choice|Whether create access is allowed. See [Field security permission type options](#field-security-permission-type-options)|
+|`CanRead`|Choice|Whether read access is allowed. See [Field security permission type options](#field-security-permission-type-options)|
+|`CanUpdate`|Choice|Whether update access is allowed. See [Field security permission type options](#field-security-permission-type-options)|
+|`CanReadUnmasked`|Choice|Whether an unmasked value can be retrieved when `CanRead` is **Allowed**.|
+
+#### Field security permission type options
+
+The `CanCreate`, `CanRead`, and `CanUpdate` choice columns use the values defined by the `field_security_permission_type` global choice:
+
+- `0` **Not Allowed**
+- `4` **Allowed**
+
+> [!NOTE]
+> Don't set `CanReadUnmasked` column unless you're using the [display masked data](#display-masked-data) feature and you want to enable an app to return the unmasked value.
+
+### Share data in secured fields
+
+Create [Field Sharing (PrincipalObjectAttributeAccess)](reference/entities/principalobjectattributeaccess.md) records to share access to a secured field for a specific record with someone else.
+
+> [!NOTE]
+> Conceptually, this process is similar to the [PrincipalObjectAccess](reference/entities/principalobjectaccess.md) table that manages sharing of records. The difference is that with *record sharing* you use the `GrantAccess`, `ModifyAccess`, and `RevokeAccess` messages to add, modify, and remove records from the `PrincipalObjectAccess` table. [Learn more about sharing records](security-sharing-assigning.md#sharing-records)
+>
+> With *field sharing*, use the `PrincipalObjectAttributeAccess` table to grant, modify, and revoke field access using create, update, and delete operations on a table row.
+
+The `PrincipalObjectAttributeAccess` table has these columns:
+
+|Column |Type |Description |
+|---------|---------|---------|
+|`AttributeId`|Guid|The [AttributeMetadata.MetadataId](/dotnet/api/microsoft.xrm.sdk.metadata.metadatabase.metadataid) of the secured column. |
+|`ObjectId`|Lookup|A reference to the record that contains the secured column.|
+|`PrincipalId`|Lookup|A reference to the principal (user or team) you're granting access to.|
+|`ReadAccess`|Bool|Whether to grant read access to the field data|
+|`UpdateAccess`|Bool|Whether to grant update access to the field data|
+
+
+#### Getting column AttributeId
+
+The `PrincipalObjectAttributeAccess.AttributeId` column uses the [AttributeMetadata.MetadataId](/dotnet/api/microsoft.xrm.sdk.metadata.metadatabase.metadataid) rather than the column logical name. You need to retrieve this value from the metadata. If your application has a metadata cache, you can include this data and access it as needed.
+
+#### Retrieve column AttributeId example
+
+This example shows how to get the [AttributeMetadata.MetadataId](/dotnet/api/microsoft.xrm.sdk.metadata.metadatabase.metadataid) value you need to set the `PrincipalObjectAttributeAccess.AttributeId` column value.
+
+##### [SDK for .NET](#tab/sdk)
+
+The [Grant column access](#grant-column-access-example), [Modify column access](#modify-column-access-example), and [Revoke column access](#revoke-column-access-example) SDK for .NET examples use the `RetrieveColumnId` static method to retrieve the [AttributeMetadata.MetadataId](/dotnet/api/microsoft.xrm.sdk.metadata.metadatabase.metadataid) value used in the `PrincipalObjectAttributeAccess.AttributeId` column.
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="RetrieveColumnId":::
+
+[Learn how to query schema definitions](query-schema-definitions.md)
+
+
+##### [Web API](#tab/webapi)
+
+This example returns the column `MetadataId` when the table `LogicalName` is `account` and the column `LogicalName` is `name`.
+
+**Request**:
+
+```http
+GET [Organization URL]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes(LogicalName='name')/MetadataId HTTP/1.1
+Accept: application/json
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+```
+
+**Response**:
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json; odata.metadata=minimal
+OData-Version: 4.0
+
+{
+ "@odata.context": "[Organization URL]/api/data/v9.2/$metadata#EntityDefinitions('account')/Attributes('name')/MetadataId",
+ "value": "a1965545-44bc-4b7b-b1ae-93074d0e3f2a"
+}
+```
+
+---
+
+
+#### Grant column access example
+
+These examples create a new [Field Sharing (PrincipalObjectAttributeAccess)](reference/entities/principalobjectattributeaccess.md) record to share access to the specified field.
+
+##### [SDK for .NET](#tab/sdk)
+
+This method allows you to share read and/or update permissions for a secured column in a Dataverse table with a specific principal (user or team). The column must be configured as a secured field in Dataverse.
+
+This example depends on the `RetrieveColumnId` example function found in [Retrieve column AttributeId example](#retrieve-column-attributeid-example).
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="GrantColumnAccess":::
+
+##### [Web API](#tab/webapi)
+
+This example grants the user with `systemuserid` value of `d93e9712-5c0b-f011-bae2-7c1e526458ff` read access to the value of the column that has `AttributeMetadata.MetadataId` of `0134fc5f-cb61-f011-bec2-00224823101f` for the `sample_example` table record with primary key value of `eccf556c-cb61-f011-bec2-7ced8d1ef7ad`.
+
+
+**Request**:
+
+```http
+POST [ORGANIZATION URI]/api/data/v9.2/principalobjectattributeaccessset HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-Version: 4.0
+OData-MaxVersion: 4.0
+Content-Type: application/json
+
+{
+ "objectid_sample_example@odata.bind": "/sample_examples(eccf556c-cb61-f011-bec2-7ced8d1ef7ad)",
+ "attributeid": "0134fc5f-cb61-f011-bec2-00224823101f",
+ "updateaccess": false,
+ "principalid_systemuser@odata.bind": "/systemusers(d93e9712-5c0b-f011-bae2-7c1e526458ff)",
+ "@odata.type": "Microsoft.Dynamics.CRM.principalobjectattributeaccess",
+ "readaccess": true
+}
+```
+
+**Response**:
+
+The primary key value for the created record is `784a01b1-cb61-f011-bec2-00224823101f`. Use this value to identify records to modify or delete access.
+
+```http
+HTTP/1.1 204 No Content
+OData-Version: 4.0
+OData-EntityId: [ORGANIZATION URI]/api/data/v9.2/principalobjectattributeaccessset(784a01b1-cb61-f011-bec2-00224823101f)
+```
+
+[Learn to create a table row using the Web API](webapi/create-entity-web-api.md)
+
+---
+
+#### Modify column access example
+
+These examples retrieve and update an existing [Field Sharing (PrincipalObjectAttributeAccess)](reference/entities/principalobjectattributeaccess.md) record to modify access to the specified field.
+
+##### [SDK for .NET](#tab/sdk)
+
+This example depends on the `RetrieveColumnId` example function found in [Retrieve column AttributeId example](#retrieve-column-attributeid-example).
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="ModifyColumnAccess":::
+
+##### [Web API](#tab/webapi)
+
+This example modifies the access granted in the [Grant column access example](#grant-column-access-example) to include update access.
+
+**Request**:
+
+```http
+PATCH [ORGANIZATION URI]/api/data/v9.2/principalobjectattributeaccessset(784a01b1-cb61-f011-bec2-00224823101f) HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-Version: 4.0
+If-Match: *
+OData-MaxVersion: 4.0
+Content-Type: application/json
+
+{
+ "updateaccess": true
+}
+```
+
+**Response**:
+
+```http
+HTTP/1.1 204 No Content
+OData-Version: 4.0
+```
+
+[Learn how to update a record using Web API](webapi/update-delete-entities-using-web-api.md#basic-update)
+
+---
+
+#### Revoke column access example
+
+These examples retrieve and delete an existing [Field Sharing (PrincipalObjectAttributeAccess)](reference/entities/principalobjectattributeaccess.md) record to revoke access to the specified field.
+
+##### [SDK for .NET](#tab/sdk)
+
+This example depends on the `RetrieveColumnId` example function found in [Retrieve column AttributeId example](#retrieve-column-attributeid-example).
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="RevokeColumnAccess":::
+
+##### [Web API](#tab/webapi)
+
+This example removes the access that was granted in the [Grant column access example](#grant-column-access-example).
+
+
+**Request**:
+
+```http
+DELETE [ORGANIZATION URI]/api/data/v9.2/principalobjectattributeaccessset(784a01b1-cb61-f011-bec2-00224823101f) HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-MaxVersion: 4.0
+OData-Version: 4.0
+```
+
+**Response**:
+
+```http
+HTTP/1.1 204 No Content
+OData-Version: 4.0
+```
+
+[Learn to delete a record using Web API](webapi/update-delete-entities-using-web-api.md#basic-delete)
+
+---
+
+## Display Masked data
+
+The default API behavior when returning a value for a secured column is to return no data. The calling application can't distinguish between a value that is secured and a value that is null.
+
+[There's now a preview feature](/power-platform/admin/create-manage-masking-rules) you can use to specify that a string value is returned when data exists. This string might totally obfuscate the value or show portions of the data depending on masking rules you define. In this way, the application can better manage sensitive data.
+
+With this feature, you can configure [Field Permission (FieldPermission)](reference/entities/fieldpermission.md) records to create field security profiles that enable applications to send requests to retrieve records with the masking removed so that the data can be shown under controlled circumstances. [Learn more about retrieving unmasked data](#retrieve-unmasked-data)
+
+### Create a secure masking rule
+
+Every column that displays masked data needs to refer to a [Secured Masking Rule (MaskingRule)](reference/entities/maskingrule.md) table row. You can create secure masking rules in Power Apps and add them to your solution, or you can use any of the existing rules.
+
+Create [Secured Masking Column (AttributeMaskingRule)](reference/entities/attributemaskingrule.md) table records to specify which masking rule a secure column should use.
+
+The following diagram describes these tables:
+
+:::image type="content" source="media/maskingrule-attributemaskingrule-erd.png" alt-text="Diagram showing columns and relationships between the MaskingRule and AttributeMaskingRule tables":::
+
+
+
+
+#### Secured Masking Rule columns
+
+The [Secured Masking Rule (MaskingRule)](reference/entities/maskingrule.md) table has these write-able columns:
+
+|Column|Type|Description|
+|---|---|---|
+|`Name`|String|The unique name of the secured masking rule.|
+|`Description`|String|Description of the secured masking rule.|
+|`DisplayName`|String|The display name of the secured masking rule.|
+|`MaskedCharacter`|String|Character used to mask.|
+|`RegularExpression`|String|Regular Expression in C#.|
+|`IsCustomizable`|BooleanManagedProperty|Information that specifies whether this component can be customized. [Learn more about managed properties](/power-platform/alm/managed-properties-alm)|
+|`RichTestData`|String|Set rich text test data to test this secured masking rule.|
+|`MaskedRichTestData`|String|`RichTestData` column data evaluated by this secured masking rule.|
+|`TestData`|String|Set test data to test this secured masking rule.|
+|`MaskedTestData`|String|`TestData` column data evaluated by a secured masking rule.|
+
+> [!NOTE]
+> The `RichTestData`, `MaskedRichTestData`, `TestData`, and `MaskedTestData` columns exist to support the experience to test masking rules in [Power Apps](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc). [Learn more about creating masking rules](/power-platform/admin/create-manage-masking-rules#create-masking-rules).
+
+#### Secured Masking Column columns
+
+The [Secured Masking Column (AttributeMaskingRule)](reference/entities/attributemaskingrule.md) table has these write-able columns:
+
+|Column|Type|Description|
+|---|---|---|
+|`AttributeLogicalName`|String|Logical name of the column for which the secured masking rule is used.|
+|`EntityName`|String|Logical name of the table that contains the column.|
+|`MaskingRuleId`|Lookup|The masking rule that the column uses|
+|`UniqueName`|String|The unique name of the secured masking column.|
+|`IsCustomizable`|BooleanManagedProperty|Information that specifies whether this component can be customized. [Learn more about managed properties](/power-platform/alm/managed-properties-alm)|
+
+
+### Retrieve unmasked data
+
+When a [Field Permission (FieldPermission)](reference/entities/fieldpermission.md) record `CanRead` column is **Allowed**, you can set the `CanReadUnmasked` choice column when the column has an [Secured Masking Column (AttributeMaskingRule)](reference/entities/attributemaskingrule.md) record associated with it.
+
+The `CanReadUnmasked` column supports the following options defined by the `field_security_permission_readunmasked` global choice.
+
+|Value|Label|Description|
+|---|---|---|
+|0|**Not Allowed**|The default value. If there isn't an `AttributeMaskingRule` for the column, you can't set any other value.|
+|1|**One Record**|Unmasked data can be returned using the a `Retrieve` operation only.|
+|3|**All Records**|Unmasked data can be returned using the a `Retrieve` and `RetrieveMultiple` operations.|
+
+
+#### Retrieve unmasked data example
+
+The following examples show how to use the [`UnMaskedData` optional parameter](optional-parameters.md#return-unmasked-data) to request that the unmasked value is returned when the configuration of the field permission allows it.
+
+### [SDK for .NET](#tab/sdk)
+
+The `GetUnmaskedExampleRows` example returns unmasked values for any of the requested columns where the field permission `CanReadUnmasked` column value is set to **All Records** because the optional `UnMaskedData` parameter is added to the `RetrieveMultiple` request.
+
+This method queries the `sample_example` table and retrieves specific columns, including sensitive data such as government ID and date of birth. The query results are ordered by the `sample_name` column in descending order.
+
+:::code language="csharp" source="~/../PowerApps-Samples/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/Examples.cs" id="GetUnmaskedExampleRows":::
+
+### [Web API](#tab/webapi)
+
+**Request:**
+
+```http
+GET [ORGANIZATION URI]/api/data/v9.2/sample_examples?$select=sample_name,sample_email,sample_governmentid,sample_telephonenumber,sample_dateofbirth&$orderby=sample_name%20desc&UnMaskedData=true HTTP/1.1
+Accept: application/json
+Authorization: Bearer [Redacted]
+Prefer: odata.include-annotations="*"
+OData-Version: 4.0
+OData-MaxVersion: 4.0
+```
+
+**Response:**
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json; odata.metadata=minimal
+OData-Version: 4.0
+Preference-Applied: odata.include-annotations="*"
+
+{
+ "@odata.context": "[ORGANIZATION URI]/api/data/v9.2/$metadata#sample_examples(sample_name,sample_email,sample_governmentid,sample_telephonenumber,sample_dateofbirth)",
+ "@Microsoft.Dynamics.CRM.totalrecordcount": -1,
+ "@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false,
+ "@Microsoft.Dynamics.CRM.globalmetadataversion": "153019637",
+ "value": [
+ {
+ "@odata.etag": "W/\"153019647\"",
+ "sample_email": "jaydenp@adatum.com",
+ "sample_governmentid": "***-**-5353",
+ "sample_dateofbirth": "3/25/1974",
+ "sample_name": "Jayden Phillips",
+ "sample_exampleid": "eccf556c-cb61-f011-bec2-7ced8d1ef7ad",
+ "sample_telephonenumber": "(736) 555-9012"
+ },
+ {
+ "@odata.etag": "W/\"153012339\"",
+ "sample_email": "benjamin@adventure-works.com",
+ "sample_governmentid": "***-**-7508",
+ "sample_dateofbirth": "6/18/1984",
+ "sample_name": "Benjamin Stuart",
+ "sample_exampleid": "edcf556c-cb61-f011-bec2-7ced8d1ef7ad",
+ "sample_telephonenumber": "(195) 555-7901"
+ },
+ {
+ "@odata.etag": "W/\"153012340\"",
+ "sample_email": "avery@alpineskihouse.com",
+ "sample_governmentid": "***-**-1720",
+ "sample_dateofbirth": "9/4/1994",
+ "sample_name": "Avery Howard",
+ "sample_exampleid": "eecf556c-cb61-f011-bec2-7ced8d1ef7ad",
+ "sample_telephonenumber": "(152) 555-5591"
+ }
+ ]
+}
+```
+
+---
+
+### Related articles
+
+[Security and data access](security-model.md)
+[Sharing and assigning](security-sharing-assigning.md)
+[Sample: Column-level security using Dataverse SDK for .NET](org-service/samples/column-level-security.md)
+[Sample: Column-level security using Dataverse Web API (PowerShell)](webapi/samples/column-level-security-powershell.md)
diff --git a/powerapps-docs/developer/data-platform/community-tools.md b/powerapps-docs/developer/data-platform/community-tools.md
index bdbf553f06..870ce15c03 100644
--- a/powerapps-docs/developer/data-platform/community-tools.md
+++ b/powerapps-docs/developer/data-platform/community-tools.md
@@ -1,12 +1,12 @@
---
title: "Community tools for Microsoft Dataverse (Dataverse) | Microsoft Docs"
description: "Read about the community built tools that help you perform various tasks with Microsoft Dataverse."
-ms.date: 03/15/2021
+ms.date: 06/20/2025
ms.reviewer: pehecke
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
---
@@ -15,11 +15,11 @@ search.audienceType:
The Power Apps community creates tools!
> [!IMPORTANT]
-> Tools created by the community are not supported by Microsoft. If you have questions or issues with community tools, contact the publisher of the tool.
+> Tools created by the community aren't supported by Microsoft. If you have questions or issues with community tools, contact the publisher of the tool.
## XrmToolBox
-Many of the most popular ones are distributed in the [XrmToolBox](https://www.xrmtoolbox.com/). XrmToolBox is a Windows application that connects to Dataverse, providing tools to ease customization, configuration, and operation tasks. It's shipped with more than 30 plugins to make administration, customization, or configuration tasks easier and less time consuming.
+Many of the most popular ones are distributed in the [XrmToolBox](https://www.xrmtoolbox.com/). XrmToolBox is a Windows application that connects to Dataverse, providing tools to ease customization, configuration, and operation tasks. It includes more than 30 plugins to make administration, customization, or configuration tasks easier and less time consuming.
The following list of selected community tools is distributed via the XrmToolBox that you can use with Dataverse.
@@ -48,14 +48,12 @@ The [Level up](https://chrome.google.com/webstore/detail/level-up-for-dynamics-3
## Visual Studio Code Extensions
-With the popularity of building own's extension for Visual Studio Code the community has built several of them.
-
-The following is a selected list of community tools available for Visual Studio Code:
+The following table contains a selected list of community tools available for Visual Studio Code:
|Tool |Description |
|---------|---------|
|[Dataverse DevTools](https://marketplace.visualstudio.com/items?itemName=danish-naglekar.dataverse-devtools)|The all-in-one tool to develop code for Dataverse/Dynamics 365. Helps you connect to a Dataverse environment, generate TypeScript definitions for entities, create different type of Dataverse-specific projects, and much more.|
|[Power Apps Portal Helper](https://marketplace.visualstudio.com/items?itemName=oleksandr-olashyn.portal-helper-vscode)|Set of commands that simplify working with Power Apps CLI for Portals|
-|[PCF Builder](https://marketplace.visualstudio.com/items?itemName=danish-naglekar.pcf-builder)|Helps with initializing, building and testing Power Apps Component Framework components|
+|[PCF Builder](https://marketplace.visualstudio.com/items?itemName=danish-naglekar.pcf-builder)|Helps with initializing, building, and testing Power Apps Component Framework components|
[!INCLUDE[footer-include](../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/create-custom-api-maker-portal.md b/powerapps-docs/developer/data-platform/create-custom-api-maker-portal.md
index f75699e282..c5619583fd 100644
--- a/powerapps-docs/developer/data-platform/create-custom-api-maker-portal.md
+++ b/powerapps-docs/developer/data-platform/create-custom-api-maker-portal.md
@@ -1,34 +1,33 @@
---
-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
+title: "Create a custom API in Power Apps (Microsoft Dataverse) | Microsoft Docs"
description: "Create a custom API definition using Power Apps (make.powerapps.com)"
-ms.custom: ""
-ms.date: 04/19/2022
-ms.reviewer: "jdaly"
+ms.date: 06/20/2025
+ms.reviewer: jdaly
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
---
# Create a custom API in Power Apps
-When creating a custom API, you must use a solution. If you are not familiar with solutions, first read [Create a solution](../../maker/data-platform/create-solution.md).
+When creating a custom API, you must use a solution. If you aren't familiar with solutions, first read [Create a solution](../../maker/data-platform/create-solution.md).
-Your solution must be associated with a publisher. The publisher will have a specific customization prefix associated with it. You must use a customization prefix when creating a custom API and this prefix should be the same used by the publisher of your solution. The instructions below will use the value `sample` as the customization prefix because it is the one set for the publisher.
+Your solution must be associated with a publisher. The publisher has a specific customization prefix associated with it. You must use a customization prefix when creating a custom API and this prefix should be the same used by the publisher of your solution. The following instructions use the value `sample` as the customization prefix because it's the one set for the publisher.
> [!IMPORTANT]
-> - There is now a better experience for creating custom API. You can use a designer within the Plug-in registration tool. More information: [Create a custom API using the plug-in registration tool](create-custom-api-prt.md)
-> - Many fields related to creating custom API cannot be changed after you create them. You should carefully plan the design of the custom API before you start. If you later decide that you need to change things after you create the custom API, you may need to delete the existing record and re-create the custom API. Review the information about the columns that cannot be changed here: [CustomAPI tables](custom-api-tables.md)
+> - There's now a better experience for creating custom API. You can use a designer within the Plug-in registration tool. More information: [Create a custom API using the plug-in registration tool](create-custom-api-prt.md)
+> - Many fields related to creating custom API can't be changed after you create them. You should carefully plan the design of the custom API before you start. If you later decide that you need to change things after you create the custom API, you might need to delete the existing record and re-create the custom API. Review the information about the columns that can't be changed here: [CustomAPI tables](custom-api-tables.md)
## Create a custom API record
-1. In your solution, click **New** > **More** > **Other** > **custom API** from the drop-down.
-1. Edit the fields to set the properties of your custom API. You must set values for the following fields. For more information see [Custom API table columns](custom-api-tables.md#custom-api-table-columns)
+1. In your solution, select **New** > **More** > **Other** > **custom API** from the drop-down.
+1. Edit the fields to set the properties of your custom API. You must set values for the following fields. For more information, see [Custom API table columns](custom-api-tables.md#custom-api-table-columns)
- You cannot set values for **Plug-in Type** unless you have already created the plug-in. You can change this later.
+ You can't set values for **Plug-in Type** before you create the plug-in. You can change this later.
-1. Click **Save**. Your form should look something like this:
+1. Select **Save**. Your form should look something like this:
:::image type="content" source="media/saved-customapi-form.png" alt-text="Saved Custom API form.":::
@@ -36,26 +35,26 @@ Your solution must be associated with a publisher. The publisher will have a spe
A custom API doesn't require parameters. Create as many parameters as you need to pass data needed for your logic.
-1. In your solution, click **New** > **More** > **Other** > **Custom API Request Parameter** from the drop-down.
-1. Edit the fields to set the properties of your custom API Request Parameter. For more information see [CustomAPIRequestParameter Table Columns](custom-api-tables.md#customapirequestparameter-table-columns)
+1. In your solution, select **New** > **More** > **Other** > **Custom API Request Parameter** from the drop-down.
+1. Edit the fields to set the properties of your custom API Request Parameter. For more information, see [CustomAPIRequestParameter Table Columns](custom-api-tables.md#customapirequestparameter-table-columns)
-1. Click **Save**. Your form should look something like this:
+1. Select **Save**. Your form should look something like this:
:::image type="content" source="media/customapi-request-parameter-form.png" alt-text="Example of a custom API Request Parameter Form.":::
## Create any Response Properties
-A custom API that represents an Action doesn't require response properties. A Function must have at least one. If the operation succeeds, it will return a success response. If it fails, it will return an error. You should define response properties for any data that your API will return.
+A custom API that represents an Action doesn't require response properties. A Function must have at least one. If the operation succeeds, it returns a success response. If it fails, it returns an error. You should define response properties for any data that your API returns.
-If there is only a single **Entity** or **EntityCollection** response property defined, the response will be of that type. If there are multiple properties, or one or more property of a simple type, the API will return a complex type where each response property will be a property of that complex type.
+If there's only a single **Entity** or **EntityCollection** response property defined, the response is of that type. If there are multiple properties, or one or more properties of a simple type, the API returns a complex type where each response property is a property of that complex type.
-For example, if your custom API Unique name is `sample_CustomAPIExample`, it will return a complex type named `sample_CustomAPIExampleResponse` with properties for each response property you define.
+For example, if your custom API Unique name is `sample_CustomAPIExample`, it returns a complex type named `sample_CustomAPIExampleResponse` with properties for each response property you define.
-1. In your solution, click **New** > **More** > **Other** > **Custom API Response Property** from the drop-down.
-1. Edit the fields to set the properties of your custom API Response Property. For more information see [CustomAPIResponseProperty Table Columns](customapiresponseproperty-table-columns.md)
+1. In your solution, select **New** > **More** > **Other** > **Custom API Response Property** from the drop-down.
+1. Edit the fields to set the properties of your custom API Response Property. For more information, see [CustomAPIResponseProperty Table Columns](customapiresponseproperty-table-columns.md)
-1. Click **Save**. Your form should look something like this:
+1. Select **Save**. Your form should look something like this:
:::image type="content" source="media/customapi-response-property-form.png" alt-text="Custom API Response Property Form.":::
@@ -78,26 +77,26 @@ Search the result to find the name of the custom API. For example, the API defin
## Test your custom API
-Now that you have created your custom API you can try it. Even if you haven't set a plug-in type to define the main operation, you can test it now to verify that you can call it correctly. Any response properties will return their default value, such as null. More information: [Invoking custom APIs](custom-api.md#invoking-custom-apis).
+After you create your custom API you can try it. Even if you haven't set a plug-in type to define the main operation, you can test it now to verify that you can call it correctly. Any response properties return their default value, such as null. More information: [Invoking custom APIs](custom-api.md#invoking-custom-apis).
## Update the custom API Plugin Type
For information about how to write a plug-in for a custom api, see [Write a Plug-in for your custom API](custom-api.md#write-a-plug-in-for-your-custom-api).
-After you have registered your assembly, you need to set the **Plugin Type** value for the custom API you created. This is a lookup property, so you just need to find the Plug-in Type that represents the type created when you registered the assembly.
+After you register your assembly, you need to set the **Plugin Type** value for the custom API you created. This is a lookup property, so you just need to find the Plug-in Type that represents the type created when you registered the assembly.
:::image type="content" source="media/set-custom-api-type.png" alt-text="Set the custom API Plugin Type Lookup.":::
-Once you have set the **Plugin Type**, you can test your custom API to verify the correct results are returned.
+Once you set the **Plugin Type**, you can test your custom API to verify the correct results are returned.
## Other ways to create custom APIs
The plugin registration tool provides a custom API designer. More information: [Create a custom API using the plug-in registration tool](create-custom-api-prt.md)
-You may have requirements to create a client application which will allow creation of custom APIs outside of the designer. Because the data for custom APIs is stored in tables, you can create them using code. More information: [Create a custom API with code](create-custom-api-with-code.md).
+You might have requirements to create a client application that allows creation of custom APIs outside of the designer. Because the data for custom APIs is stored in tables, you can create them using code. More information: [Create a custom API with code](create-custom-api-with-code.md).
-Your ALM process may be better served by creating custom APIs by editing solution files. More information: [Create a custom API with solution files](create-custom-api-solution.md).
+Your ALM process might be better served by creating custom APIs by editing solution files. More information: [Create a custom API with solution files](create-custom-api-solution.md).
### See also
diff --git a/powerapps-docs/developer/data-platform/create-custom-api-solution.md b/powerapps-docs/developer/data-platform/create-custom-api-solution.md
index b212ac6ab0..ab6977f86e 100644
--- a/powerapps-docs/developer/data-platform/create-custom-api-solution.md
+++ b/powerapps-docs/developer/data-platform/create-custom-api-solution.md
@@ -4,9 +4,9 @@ description: "You can write create custom APIs by editing solution files."
ms.date: 07/14/2023
ms.reviewer: jdaly
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -213,7 +213,7 @@ See the information in [CustomAPIResponseProperty Table Columns](customapirespon
1. Wait a few minutes while the solution import completes.
> [!NOTE]
- > It is possible you will see an error if another solution is being installed at the same time. More information: [The solution installation or removal failed due to the installation or removal of another solution at the same time](https://support.microsoft.com/help/4343228/the-solution-installation-or-removal-failed-due-to-the-installation-or)
+ > It is possible you will see an error if another solution is being installed at the same time. More information: [Concurrent solution operation failures](/troubleshoot/power-platform/dataverse/working-with-solutions/concurrent-solution-operation-failures)
## Step 8: Verify that the custom API was added to your solution
diff --git a/powerapps-docs/developer/data-platform/create-custom-api-with-code.md b/powerapps-docs/developer/data-platform/create-custom-api-with-code.md
index dfaa9ba9e8..81f9612ec6 100644
--- a/powerapps-docs/developer/data-platform/create-custom-api-with-code.md
+++ b/powerapps-docs/developer/data-platform/create-custom-api-with-code.md
@@ -1,9 +1,9 @@
---
-title: "Create a custom API with code (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "You can write code create custom APis." # 115-145 characters including spaces. This abstract displays in the search result.
-author: MicroSri
-ms.author: sriknair
-ms.date: 09/27/2022
+title: "Create a custom API with code (Microsoft Dataverse) | Microsoft Docs"
+description: "You can write code create custom APIs."
+author: MsSQLGirl
+ms.author: jukoesma
+ms.date: 06/20/2025
ms.topic: how-to
ms.subservice: dataverse-developer
ms.reviewer: jdaly
@@ -15,11 +15,11 @@ contributors:
# Create a custom API with code
> [!NOTE]
-> This is an advanced topic that assumes you have already read and understood these topics:
+> Creating an API with code is an advanced subject that assumes you read and understood these articles:
> - [Create and use custom APIs](custom-api.md)
> - [Create a custom API using the plug-in registration tool](create-custom-api-prt.md)
>
-> You should also understand how to create Microsoft Dataverse records, using either the Web API or SDK for .NET. For more information see:
+> You should also understand how to create Microsoft Dataverse records, using either the Web API or SDK for .NET. For more information, see:
> - [Create an entity record using the Web API](webapi/create-entity-web-api.md)
> - [Create entities using the SDK for .NET](org-service/entity-operations-create.md)
@@ -29,7 +29,7 @@ The tables in [Custom API tables](custom-api-tables.md) describe all the propert
#### [SDK for .NET](#tab/sdk)
-This code uses the with a early-bound programming style. You can also use . More information:
+This code uses the with an early-bound programming style. You can also use . More information:
- [Use CrmServiceClient constructors to connect to Dataverse](xrm-tooling/use-crmserviceclient-constructors-connect.md)
- [Late-bound and Early-bound programming using the SDK for .NET](org-service/early-bound-programming.md)
@@ -37,7 +37,7 @@ This code uses the with
This example shows the creation of a custom API action with one request parameter and one response property in a single operation. More information: [Create related entities in one operation](org-service/entity-operations-create.md#create-related-entities-in-one-operation)
-This custom api is created as part of a solution with the uniquename `CustomAPIExample` and is associated with a plug-in type with id = `00000000-0000-0000-0000-000000000001`.
+This custom API is created as part of a solution with the uniquename `CustomAPIExample` and is associated with a plug-in type with ID = `00000000-0000-0000-0000-000000000001`.
```csharp
string conn = $@"
@@ -111,7 +111,7 @@ Guid customAPIId = ((CreateResponse)service.Execute(createReq)).id;
This example shows the creation of a custom API action with one request parameter and one response property in a single operation. More information: [Create related table rows in one operation](webapi/create-entity-web-api.md#create-related-table-rows-in-one-operation)
-This custom api is created as part of a solution with the uniquename `CustomAPIExample` and is associated with a plug-in type with id = `00000000-0000-0000-0000-000000000001`.
+This custom API is created as part of a solution with the uniquename `CustomAPIExample` and is associated with a plug-in type with ID = `00000000-0000-0000-0000-000000000001`.
**Request:**
diff --git a/powerapps-docs/developer/data-platform/create-elastic-tables.md b/powerapps-docs/developer/data-platform/create-elastic-tables.md
index 52c233c1b5..d0a2355757 100644
--- a/powerapps-docs/developer/data-platform/create-elastic-tables.md
+++ b/powerapps-docs/developer/data-platform/create-elastic-tables.md
@@ -3,8 +3,8 @@ title: Create elastic tables using code
description: Learn how to create Dataverse elastic tables with code.
ms.topic: how-to
ms.date: 02/22/2024
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/custom-actions.md b/powerapps-docs/developer/data-platform/custom-actions.md
index 5f341cfb0b..446aaf943c 100644
--- a/powerapps-docs/developer/data-platform/custom-actions.md
+++ b/powerapps-docs/developer/data-platform/custom-actions.md
@@ -1,14 +1,12 @@
---
-title: "Create your own messages (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn about creating your own custom Microsoft Dataverse messages to be executed from your applications, and how these custom messages differ from using the custom API feature." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.custom: ""
-ms.date: 03/21/2022
-ms.reviewer: "jdaly"
-
-ms.topic: "article"
-author: MicroSri
+title: "Create your own messages (Microsoft Dataverse) | Microsoft Docs"
+description: "Learn about creating your own custom Microsoft Dataverse messages to be executed from your applications, and how these custom messages differ from using the custom API feature."
+ms.date: 06/20/2025
+ms.reviewer: jdaly
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
---
@@ -17,7 +15,7 @@ search.audienceType:
[!INCLUDE[cc-terminology](includes/cc-terminology.md)]
-Microsoft Dataverse exposes APIs using *messages*. There are many out-of-box messages available for you to use. Custom messages are typically used to add new domain specific functionality to combine multiple message requests into a single request. For example, in a support call center, you may want to combine the `Create`, `Assign`, and `Update` messages into a single new `Escalate` message.
+Microsoft Dataverse exposes APIs using *messages*. There are many out-of-box messages available for you to use. Custom messages are typically used to add new domain specific functionality to combine multiple message requests into a single request. For example, in a support call center, you might want to combine the `Create`, `Assign`, and `Update` messages into a single new `Escalate` message.
There are now two ways to define custom messages:
@@ -36,17 +34,17 @@ The following table describes some of the different capabilities.
|Capability |Custom Process Action |Custom API |Description |
|---------|---------|---------|---------|
|Declarative logic with workflow |Yes|No|Workflow Actions can have logic defined without writing code using the Classic Workflow designer.
Custom APIs require a plug-in written in .NET to implement logic that is applied on the server.|
-|Require specific privilege|No|Yes|With custom API you can designate that a user must have a specific privilege to call the message. If the user doesn't have that privilege through their security roles or team membership, an error will be returned.|
-|Define main operation logic with code|Yes|Yes|With Custom Process Actions the main operation processes the Workflow definition which may include custom workflow activities. The code in these custom workflow activities is processed in the main operation together with any other logic in the workflow.
When the custom process action doesn't contain any custom workflow activities, developers frequently add logic to the Post-Operation stage in the event pipeline to define logic.
With custom API the message creator simply associates their plug-in type with the custom API to provide the main operation logic.
More information: [Event execution pipeline](event-framework.md#event-execution-pipeline)|
-|Block Extension by other plug-ins|Yes|Yes| With Custom Process actions set the [IsCustomProcessingStepAllowedForOtherPublishers](reference/entities/workflow.md#BKMK_IsCustomProcessingStepAllowedForOtherPublishers) managed property to `true` if you wish to allow 3rd party plug-ins to run when registered on the message for your custom process action. When set to `false`, only plug-ins from the same solution publisher will run when a plug-in step is registered for the message.
For custom API, set the [AllowedCustomProcessingStepType](reference/entities/customapi.md#BKMK_AllowedCustomProcessingStepType) to control whether any plug-ins steps may be registered, or if only asynchronous plug-ins may be registered. More information: [Select a Custom Processing Step Type](custom-api.md#select-a-custom-processing-step-type)|
-|Make message private|No|Yes|When you create a message using a Custom Process Action, it is exposed publicly in the endpoint for anyone else to discover and use. If someone else takes a dependency on the message you created, their code will be broken if you remove, rename, or change the input or output parameter signature in the future.
If you do not intend for your message to be used by anyone else, you can mark it as a private message. This will indicate that you do not support others using the message you create, and it will not be included in definitions of available functions or actions exposed by the Web API $metadata service definition. Classes for calling these messages will not be generated using code generation tools, but you will still be able to use it. More information: [When to make your custom API private](custom-api.md#when-to-make-your-custom-api-private)|
-|Localizable names and descriptions|No|Yes|While Custom Process Actions provide for a friendly name for the custom action and any input and output parameters it uses, these values are not localizable. With custom API you can provide localizable names and descriptions. These localized strings can then be bound to controls that provide a UI to use the message. More information: [Localized Label values](custom-api.md#localized-label-values)|
-|Create OData Function|No|Yes| The Dataverse Web API is an OData web service. OData provides for two types of operations: *Actions* & *Functions*.
- An **Action** is an operation that makes changes to data in the system. It is invoked using the Http POST method and parameters are passed in the body of the request.
- A **Function** is an operation that makes no change to data, for example an operation that simply retrieves data. It is invoked using an Http GET method and the parameters are passed in the URL of the request
Custom Process Actions are always Actions. Custom API provides the option to define custom Functions.
More information: [When to create a Function](custom-api.md#when-to-create-a-function)|
-|Create a global operation not bound to a table|Yes|Yes|Both provide the ability to define a global message not bound to a table.|
-|Bind an operation to a table|Yes|Yes|Both provide the ability to pass a reference to a specific table record by binding it to a table.|
-|Bind an operation to a table collection|No|Yes|Binding an operation to a table collection allows for another way to define the signature for the custom API. While this does not pass a collection of entities as an input parameter, it restricts the context of the operation to that type of table collection. Use this when your operation works with a collection of a specific type of table or your operation will return a collection of that type.|
-|Compose or modify a custom API by editing a solution|No|Yes|ISVs who build and maintain products that work with the Power Platform apply ALM practices that involve solutions. The data within a solution is commonly checked into a source code repository and checked out by a developer applying changes.
A Custom Process Action is defined by a XAML Windows Workflow Foundation document which is transported as part of a solution. However, creating new or editing existing workflow definitions outside of the workflow designer is not supported.
Custom API definitions are solution aware components included in a solution through a set of folders and XML documents. These files and the file structure enable transport the API from one environment to another. Because these are plain text files, changes can be made to them, or new APIs can be defined by working with these files. This method of defining custom APIs is supported. More information: [Create a custom API with solution files](create-custom-api-solution.md).|
-|Subject to 2 minute time limit|No|Yes|A plug-in that implements the main operation for a custom API is subject to the 2 minute time limit to complete execution.
A Custom Process Action is not technically limited to two minutes. If a step in the Workflow logic contains a custom workflow activity, *that part* will be limited to two minutes. But the entire workflow cannot run indefinitely. There are other limitations that will cause long-running Custom Process Actions to fail. More information: [Watch out for long running actions](workflow-custom-actions.md#watch-out-for-long-running-actions)|
+|Require specific privilege|No|Yes|With custom API, you can designate that a user must have a specific privilege to call the message. If the user doesn't have that privilege through their security roles or team membership, an error is returned.|
+|Define main operation logic with code|Yes|Yes|With Custom Process Actions, the main operation processes the Workflow definition that might include custom workflow activities. The code in these custom workflow activities is processed in the main operation together with any other logic in the workflow.
When the custom process action doesn't contain any custom workflow activities, developers frequently add logic to the Post-Operation stage in the event pipeline to define logic.
With custom API, the message creator simply associates their plug-in type with the custom API to provide the main operation logic.
More information: [Event execution pipeline](event-framework.md#event-execution-pipeline)|
+|Block Extension by other plug-ins|Yes|Yes| With Custom Process actions set the [IsCustomProcessingStepAllowedForOtherPublishers](reference/entities/workflow.md#BKMK_IsCustomProcessingStepAllowedForOtherPublishers) managed property to `true` if you wish to allow third party plug-ins to run when registered on the message for your custom process action. When set to `false`, only plug-ins from the same solution publisher runs when a plug-in step is registered for the message.
For custom API, set the [AllowedCustomProcessingStepType](reference/entities/customapi.md#BKMK_AllowedCustomProcessingStepType) to control whether any plug-ins steps might be registered, or if only asynchronous plug-ins might be registered. More information: [Select a Custom Processing Step Type](custom-api.md#select-a-custom-processing-step-type)|
+|Make message private|No|Yes|When you create a message using a Custom Process Action, it's exposed publicly in the endpoint for anyone else to discover and use. If someone else takes a dependency on the message you created, their code will be broken if you remove, rename, or change the input or output parameter signature in the future.
If you don't intend for your message to be used by anyone else, you can mark it as a private message. This indicates that you don't support others using the message you create, and it isn't included in definitions of available functions or actions exposed by the Web API $metadata service definition. Classes for calling these messages won't be generated using code generation tools, but you'll still be able to use it. More information: [When to make your custom API private](custom-api.md#when-to-make-your-custom-api-private)|
+|Localizable names and descriptions|No|Yes|While Custom Process Actions provide for a friendly name for the custom action and any input and output parameters it uses, these values aren't localizable. With custom API, you can provide localizable names and descriptions. These localized strings can then be bound to controls that provide a UI to use the message. More information: [Localized Label values](custom-api.md#localized-label-values)|
+|Create OData Function|No|Yes| The Dataverse Web API is an OData web service. OData provides for two types of operations: *Actions* & *Functions*.
- An **Action** is an operation that makes changes to data in the system. It's invoked using the Http POST method and parameters are passed in the body of the request.
- A **Function** is an operation that makes no change to data, for example, an operation that simply retrieves data. It's invoked using an Http GET method and the parameters are passed in the URL of the request
Custom Process Actions are always Actions. Custom API provides the option to define custom Functions.
More information: [When to create a Function](custom-api.md#when-to-create-a-function)|
+|Create a global operation not bound to a table|Yes|Yes|You can use both to define a global message not bound to a table.|
+|Bind an operation to a table|Yes|Yes|You can use both to pass a reference to a specific table record by binding it to a table.|
+|Bind an operation to a table collection|No|Yes|Binding an operation to a table collection allows for another way to define the signature for the custom API. While this doesn't pass a collection of entities as an input parameter, it restricts the context of the operation to that type of table collection. Use this when your operation works with a collection of a specific type of table or your operation returns a collection of that type.|
+|Compose or modify a custom API by editing a solution|No|Yes|ISVs who build and maintain products that work with the Power Platform apply ALM practices that involve solutions. The data within a solution is commonly checked into a source code repository and checked out by a developer applying changes.
A XAML Windows Workflow Foundation document contains the data that defines the Custom Process Action transported as part of a solution. However, creating new or editing existing workflow definitions outside of the workflow designer isn't supported.
Custom API definitions are solution aware components included in a solution through a set of folders and XML documents. These files and the file structure enable transport the API from one environment to another. Because these are plain text files, changes can be made to them, or new APIs can be defined by working with these files. This method of defining custom APIs is supported. More information: [Create a custom API with solution files](create-custom-api-solution.md).|
+|Subject to 2-minute time limit|No|Yes|A plug-in that implements the main operation for a custom API is subject to the 2-minute time limit to complete execution.
A Custom Process Action isn't technically limited to two minutes. If a step in the Workflow logic contains a custom workflow activity, *that part* is limited to two minutes. But the entire workflow can't run indefinitely. There are other limitations that cause long-running Custom Process Actions to fail. More information: [Watch out for long running actions](workflow-custom-actions.md#watch-out-for-long-running-actions)|
## Next Steps
diff --git a/powerapps-docs/developer/data-platform/custom-api-tables.md b/powerapps-docs/developer/data-platform/custom-api-tables.md
index 4cc487cca0..67bca44c6d 100644
--- a/powerapps-docs/developer/data-platform/custom-api-tables.md
+++ b/powerapps-docs/developer/data-platform/custom-api-tables.md
@@ -4,9 +4,9 @@ description: "Describes the tables and column values to use when creating custom
ms.date: 02/24/2023
ms.reviewer: jdaly
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/custom-api.md b/powerapps-docs/developer/data-platform/custom-api.md
index 91e1ca429c..3fb3c237ff 100644
--- a/powerapps-docs/developer/data-platform/custom-api.md
+++ b/powerapps-docs/developer/data-platform/custom-api.md
@@ -1,8 +1,8 @@
---
title: "Create and use custom APIs (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Custom API is a code-first way to define custom messages for Microsoft Dataverse" # 115-145 characters including spaces. This abstract displays in the search result.
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.date: 11/26/2024
ms.reviewer: jdaly
ms.topic: how-to
diff --git a/powerapps-docs/developer/data-platform/dataverse-sql-query.md b/powerapps-docs/developer/data-platform/dataverse-sql-query.md
index b362eb07db..cf70167717 100644
--- a/powerapps-docs/developer/data-platform/dataverse-sql-query.md
+++ b/powerapps-docs/developer/data-platform/dataverse-sql-query.md
@@ -1,7 +1,7 @@
---
title: "Use SQL to query data (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Learn how to query Microsoft Dataverse table data using SQL." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 12/06/2024
+ms.date: 05/27/2025
ms.reviewer: "pehecke"
ms.topic: how-to
author: "pnghub" # GitHub ID
@@ -97,7 +97,7 @@ Dataverse choice columns are represented as \Name and \Label i
> After making changes to labels for a choice column, the table needs to have customizations published.
> [!NOTE]
-> Including a large number of choice labels in your query will have significant impact on performance. It is best to use less than 10 labels if possible. Because choice labels are localized, the localized string is more expensive to return.
+> Including a large number of choice labels in your query have significant impact on performance. It's best to use less than 10 labels if possible. Because choice labels are localized, the localized string is more expensive to return.
### Reported SQL version
@@ -131,7 +131,7 @@ The Dataverse TDS endpoint no longer has a hard maximum size limit. Instead, the
> To help keep the size of the returned data within acceptable limits, use as few multi-line text columns and choice columns as possible.
> [!WARNING]
-> The five (5) minute timeout can be adjusted to two (2) minutes depending on the query complexity. For example, queries containing `SELECT *`, `NESTED FROMs and/or JOINs` will automatically adjust the timeout limit to two (2) minutes as those queries put too much pressure on the server when left running for a long time. It is advised to avoid using these patterns in SQL for maximum performance.
+> The five (5) minute timeout can be adjusted to two (2) minutes depending on the query complexity. For example, queries containing `SELECT *`, `NESTED FROMs and/or JOINs` automatically adjust the timeout limit to two (2) minutes as those queries put too much pressure on the server when left running for a long time. It's advised to avoid using these patterns in SQL for maximum performance.
Dates returned in query results are formatted as Universal Time Coordinated (UTC). Previously, dates were returned in local time.
@@ -154,13 +154,13 @@ Only Microsoft Entra ID authentication is supported on the Dataverse endpoint SQ
- Error returned when using **Microsoft Entra ID – Integrated** authentication.
-"Login failed: The HTTP request was forbidden with client authentication scheme 'Anonymous'.
+"Sign-in failed: The HTTP request was forbidden with client authentication scheme 'Anonymous'.
RequestId: TDS;81d8a4f7-0d49-4d21-8f50-04364bddd370;2
Time: 2020-12-17T01:10:59.8628578Z (.Net SqlClient Data Provider)"
- Error returned when using **SQL Server** authentication.
-"Login failed: Request is not authenticated.
+"Sign-in failed: Request is not authenticated.
RequestId: TDS;918aa372-ccc4-438a-813e-91b086355343;1
Time: 2020-12-17T01:13:14.4986739Z (.Net SqlClient Data Provider)"
diff --git a/powerapps-docs/developer/data-platform/debug-plug-in.md b/powerapps-docs/developer/data-platform/debug-plug-in.md
index 4546c79c12..2806800292 100644
--- a/powerapps-docs/developer/data-platform/debug-plug-in.md
+++ b/powerapps-docs/developer/data-platform/debug-plug-in.md
@@ -1,12 +1,12 @@
---
-title: "Debug plug-ins (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn how to debug plug-ins using the Plug-in Registration tool." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 05/10/2022
-ms.reviewer: "pehecke"
+title: "Debug plug-ins (Microsoft Dataverse) | Microsoft Docs"
+description: "Learn how to debug plug-ins using the Plug-in Registration tool."
+ms.date: 06/20/2025
+ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -32,7 +32,7 @@ The process of writing, registering, and debugging a plug-in is:
1. **Verify expected trace logs are written**
1. **Debug the assembly as needed**
-Content in this topic coverts the steps **in bold** above and supports the following tutorials:
+Content in this article coverts the previous steps **in bold** and supports the following tutorials:
- [Tutorial: Write and register a plug-in](tutorial-write-plug-in.md)
- [Tutorial: Debug a plug-in](tutorial-debug-plug-in.md)
@@ -40,20 +40,20 @@ Content in this topic coverts the steps **in bold** above and supports the follo
## Test your assembly
-The simplest way to test your assembly may simply be to manually perform the operation using the app. But you should also be aware that events that cause plug-ins to execute can be initiated in multiple ways, such as a table created from a workflow, or from the web services.
+The simplest way to test your assembly might be to manually perform the operation using the app. But you should also know that events that cause plug-ins to execute can be initiated in multiple ways, such as a table created from a workflow, or from the web services.
-Execution context information may be different depending on how the action is performed. When writing your plug-in, make sure you practice defensive programming practices and don't assume that every value you expect will always be there.
+Execution context information might be different depending on how the action is performed. When writing your plug-in, make sure you practice defensive programming practices and don't assume that every value you expect is always there.
-You may want to write a program that will automate performing the operations that will cause your plug-in to fire and include a number of possible variations.
+You might want to write a program that automates performing the operations that cause your plug-in to fire and include many possible variations.
-If you want to use a test automation framework, you will find that the community has created some tools for this. More information: [Testing tools for server-side development](testing-tools-server.md)
+If you want to use a test automation framework, you'll find that the community created some tools for automated testing. More information: [Testing tools for server-side development](testing-tools-server.md)
## Use Tracing
As described in [Tracing service](write-plug-in.md#tracing-service), you can write messages to the [PluginTraceLog Table](reference/entities/plugintracelog.md) within the code of your plug-in by using the . method.
-Before you will be able to use this service, you must enable tracing in your Microsoft Dataverse environment. The process is described in [View trace logs](tutorial-write-plug-in.md#view-trace-logs).
+Before you'll be able to use this service, you must enable tracing in your Microsoft Dataverse environment. The process is described in [View trace logs](tutorial-write-plug-in.md#view-trace-logs).
> [!NOTE]
> Trace logging takes up organization storage space especially when many traces and exceptions are generated. You should only turn trace logging on for debugging and troubleshooting, and turn it off after your investigation is completed.
@@ -62,7 +62,7 @@ While debugging, you can easily query the trace logs for a given plug-in class u
`GET /api/data/v9.0/plugintracelogs?$select=messageblock&$filter=startswith(typename,'BasicPlugin.FollowUpPlugin')`
-The JSON results will be returned to your browser like so:
+The JSON results are returned to your browser like so:
```json
@@ -76,28 +76,28 @@ The JSON results will be returned to your browser like so:
```
> [!TIP]
-> This works best if you install a browser plug-in that will format the returned JSON. Or you may want to use an API client like Postman or [Insomnia](webapi/insomnia.md), or you may want to use [VS Code with PowerShell](webapi/quick-start-ps.md).
+> This works best if you install a browser extension that formats the returned JSON. Or you might want to use an API client like Postman or [Insomnia](webapi/insomnia.md), or you might want to use [VS Code with PowerShell](webapi/quick-start-ps.md).
>
-> You may prefer to use the [XrmToolbox Plugin Trace Viewer](https://www.xrmtoolbox.com/plugins/Cinteros.XrmToolBox.PluginTraceViewer/). This community tool is not supported by Microsoft. If you have questions pertaining to this tool, contact the publisher.
+> You might prefer to use the [XrmToolbox Plugin Trace Viewer](https://www.xrmtoolbox.com/plugins/Cinteros.XrmToolBox.PluginTraceViewer/). This community tool isn't supported by Microsoft. If you have questions pertaining to this tool, contact the publisher.
Tracing messages can also be found in the log file that can be downloaded when a synchronous plug-in or custom workflow assembly throws an error that results in an error dialog that is displayed to the user. The user can select the **Download Log File** button to view the log containing details of the exception and the trace output.
For asynchronous registered plug-ins and workflow assemblies that return an exception, the tracing information is shown in the details area of the **System Job** form in the web application.
> [!NOTE]
-> If your custom code executes within a database transaction, and an exception occurs that causes a transaction rollback, all table data changes by your code will be undone. However, the `PluginTraceLog` table records will remain after the rollback completes.
+> If your custom code executes within a database transaction, and an exception occurs that causes a transaction rollback, all table data changes by your code are undone. However, the `PluginTraceLog` table records will remain after the rollback completes.
## Use Plug-in profiler
-Plug-in profiler is a solution that you can install on your environment that enables you to capture the execution context of a plug-in and then use that data to re-play the event within Visual Studio while debugging.
+Plug-in profiler is a solution that you can install on your environment that enables you to capture the execution context of a plug-in and then use that data to replay the event within Visual Studio while debugging.
You can find instructions to install and use Plug-in profiler in the [Tutorial: Debug a plug-in](tutorial-debug-plug-in.md). See [Install plug-in profiler](tutorial-debug-plug-in.md#install-plug-in-profiler) and [Debug your plug-in](tutorial-debug-plug-in.md#debug-your-plug-in)
### View Plug-in Profile data
-After you have installed the Plug-in profiler and captured some profiles, you can view the event context and replay data that is used when you debug. Viewing this data can help you understand the execution context data that your plug-in can use.
+After you install the Plug-in profiler and captured some profiles, you can view the event context and replay data that is used when you debug. Viewing this data can help you understand the execution context data that your plug-in can use.
-You can view this data using the Plug-in Registration tool by selecting the **View Plug-in Profile** command. This will open the Plugin Profile dialog
+You can view this data using the Plug-in Registration tool by selecting the **View Plug-in Profile** command. This opens the Plugin Profile dialog

@@ -107,7 +107,7 @@ Select the  icon and in the **Se
And then select **View** in the **Plugin Profile** dialog.
-This will download an open an XML file with the profile information. The `Context` element represents the execution context passed to the plug-in.
+This downloads and opens an XML file with the profile information. The `Context` element represents the execution context passed to the plug-in.

diff --git a/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md b/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md
index abe2c2174a..8c85dcdeda 100644
--- a/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md
+++ b/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md
@@ -4,9 +4,9 @@ description: "The topic explains about how to create alternate keys for a table.
ms.date: 09/23/2024
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
---
diff --git a/powerapps-docs/developer/data-platform/deletemultiple.md b/powerapps-docs/developer/data-platform/deletemultiple.md
deleted file mode 100644
index 2f489fa37b..0000000000
--- a/powerapps-docs/developer/data-platform/deletemultiple.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-title: Use DeleteMultiple (preview)
-description: Learn how to use Delete to delete multiple rows of data in a Microsoft Dataverse elastic table.
-ms.date: 09/03/2024
-author: pnghub
-ms.author: gned
-ms.reviewer: jdaly
-ms.topic: how-to
-ms.subservice: dataverse-developer
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - sumantb-msft
-ms.custom: bap-template
----
-
-# Use DeleteMultiple (preview)
-
-[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)]
-
-> [!IMPORTANT]
-> This is a preview feature.
->
-> [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)]
-
-### DeleteMultiple
-
-Delete multiple rows of data in elastic tables with a single request.
-
-##### [SDK for .NET](#tab/sdk)
-
-You must use the [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest) because the [SDK for .NET](org-service/overview.md) doesn't have a `DeleteMultipleRequest` class. Learn how to [use messages with the SDK for .NET](org-service/use-messages.md).
-
-The following `DeleteMultipleExample` static method uses the `DeleteMultiple` message with the [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest) to delete multiple rows from the `contoso_SensorData` elastic table using the alternate key to include the `partitionid` to uniquely identify the rows.
-
-```csharp
-public static void DeleteMultipleExample(IOrganizationService service)
-{
- string tableLogicalName = "contoso_sensordata";
-
- List entityReferences = new() {
- {
- new EntityReference(logicalName: tableLogicalName,
- keyAttributeCollection: new KeyAttributeCollection
- {
- { "contoso_sensordataid", "3f56361a-b210-4a74-8708-3c664038fa41" },
- { "partitionid", "deviceid-001" }
- })
- },
- { new EntityReference(logicalName: tableLogicalName,
- keyAttributeCollection: new KeyAttributeCollection
- {
- { "contoso_sensordataid", "e682715b-1bba-415e-b2bc-de9327308423" },
- { "partitionid", "deviceid-002" }
- })
- }
- };
-
- OrganizationRequest request = new(requestName:"DeleteMultiple")
- {
- Parameters = {
- {"Targets", new EntityReferenceCollection(entityReferences)}
- }
- };
-
- service.Execute(request);
-}
-```
-
-##### [Web API](#tab/webapi)
-
-The following example shows how to use the [DeleteMultiple action](xref:Microsoft.Dynamics.CRM.DeleteMultiple) to delete multiple rows from the `contoso_SensorData` elastic table including the `partitionid` to uniquely identify the rows.
-
-**Request:**
-
-```http
-POST [Organization Uri]/api/data/v9.2/contoso_sensordatas/Microsoft.Dynamics.CRM.DeleteMultiple
-OData-MaxVersion: 4.0
-OData-Version: 4.0
-If-None-Match: null
-Accept: application/json
-Content-Type: application/json; charset=utf-8
-Content-Length: 603
-
-{
- "Targets": [
- {
- "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
- "contoso_sensordataid": "6114ca58-0928-ee11-9965-6045bd5cd155",
- "partitionid": "Device-ABC-1234"
- },
- {
- "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
- "contoso_sensordataid": "6214ca58-0928-ee11-9965-6045bd5cd155",
- "partitionid": "Device-ABC-1234"
- },
- {
- "@odata.type": "Microsoft.Dynamics.CRM.contoso_sensordata",
- "contoso_sensordataid": "6314ca58-0928-ee11-9965-6045bd5cd155",
- "partitionid": "Device-ABC-1234"
- }
- ]
-}
-```
-
-**Response:**
-
-```http
-HTTP/1.1 204 NoContent
-OData-Version: 4.0
-```
-
----
-
-## Availability
-
-`DeleteMultiple` is supported only for elastic tables. Elastic tables don't support [table relationship cascading behavior](configure-entity-relationship-cascading-behavior.md), which can result in unpredictable execution times for delete operations. If you use `DeleteMultiple` on a standard table, you get the error: `DeleteMultiple has not yet been implemented.`
-
-
-## Examples
-
-You can find sample code on GitHub in [github.com/microsoft/PowerApps-Samples](https://github.com/microsoft/PowerApps-Samples):
-
-- [Elastic table sample code](elastic-table-samples.md)
-- Within [Sample: SDK for .NET Use bulk operations](org-service/samples/create-update-multiple.md) or [Sample: Web API Use bulk operations](webapi/samples/create-update-multiple.md), change the `Settings.cs` config file and choose the `UseElastic` option.
-
-### See also
-
-[Use bulk operation messages](bulk-operations.md)
-[Elastic tables](elastic-tables.md)
-[Elastic table sample code](elastic-table-samples.md)
-[Sample: SDK for .NET Use bulk operations](org-service/samples/create-update-multiple.md)
-[Sample: Web API Use bulk operations](webapi/samples/create-update-multiple.md)
\ No newline at end of file
diff --git a/powerapps-docs/developer/data-platform/download-tools-nuget.md b/powerapps-docs/developer/data-platform/download-tools-nuget.md
index 9958fc048c..b7849fd2db 100644
--- a/powerapps-docs/developer/data-platform/download-tools-nuget.md
+++ b/powerapps-docs/developer/data-platform/download-tools-nuget.md
@@ -1,7 +1,7 @@
---
title: "Dataverse development tools (Microsoft Dataverse) | Microsoft Docs"
description: "Download and launch the Plug-in Registration, Package Deployment, and other Dataverse development tools."
-ms.date: 10/14/2024
+ms.date: 05/27/2025
ms.reviewer: pehecke
ms.topic: article
author: davidjenni # GitHub ID
diff --git a/powerapps-docs/developer/data-platform/elastic-table-samples.md b/powerapps-docs/developer/data-platform/elastic-table-samples.md
index f440bee56e..aa5d17233e 100644
--- a/powerapps-docs/developer/data-platform/elastic-table-samples.md
+++ b/powerapps-docs/developer/data-platform/elastic-table-samples.md
@@ -3,8 +3,8 @@ title: Elastic table sample code
description: Learn about the sample code that is available on GitHub for Dataverse elastic table operations and the ExecuteCosmosSqlQuery message.
ms.topic: article
ms.date: 12/04/2023
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
contributors:
- sumantb-msft
@@ -23,6 +23,9 @@ The following sample applications on GitHub show how to use code to work with el
- Use the `ExecuteCosmosSqlQuery` message.
- Use the `DeleteMultiple` message with the [OrganizationRequest class](xref:Microsoft.Xrm.Sdk.OrganizationRequest) to delete elastic table records in bulk.
+> [!NOTE]
+> The [DeleteMultipleRequest Class](/dotnet/api/microsoft.xrm.sdk.messages.deletemultiplerequest) is now available to use.
+
> [!div class="nextstepaction"]
> [SDK for .NET elastic tables sample](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/orgsvc/CSharp-NETCore/ElasticTableOperations/README.md)
@@ -33,7 +36,7 @@ The following sample applications on GitHub show how to use code to work with el
- Use the [CreateMultiple action](xref:Microsoft.Dynamics.CRM.CreateMultiple) to create elastic table records.
- Use the [UpdateMultiple action](xref:Microsoft.Dynamics.CRM.UpdateMultiple) to set JSON data for a column.
- Use the [ExecuteCosmosSqlQuery function](xref:Microsoft.Dynamics.CRM.ExecuteCosmosSqlQuery) to query JSON data in columns.
-- Use the `DeleteMultiple` action to delete elastic table records in bulk.
+- Use the [DeleteMultiple action](xref:Microsoft.Dynamics.CRM.DeleteMultiple) to delete elastic table records in bulk.
> [!div class="nextstepaction"]
> [Web API elastic tables sample](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/webapi/CSharp-NETx/ElasticTableOperations/README.md)
diff --git a/powerapps-docs/developer/data-platform/elastic-tables.md b/powerapps-docs/developer/data-platform/elastic-tables.md
index bf7ff15dc4..0b7b3e7a52 100644
--- a/powerapps-docs/developer/data-platform/elastic-tables.md
+++ b/powerapps-docs/developer/data-platform/elastic-tables.md
@@ -3,8 +3,8 @@ title: Elastic tables for developers
description: This article provides information to developers about Dataverse elastic tables and how to use elastic tables using code.
ms.topic: article
ms.date: 12/04/2023
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
contributors:
- sumantb-msft
diff --git a/powerapps-docs/developer/data-platform/entity-attribute-metadata.md b/powerapps-docs/developer/data-platform/entity-attribute-metadata.md
index 438a77f699..9b76df0323 100644
--- a/powerapps-docs/developer/data-platform/entity-attribute-metadata.md
+++ b/powerapps-docs/developer/data-platform/entity-attribute-metadata.md
@@ -118,15 +118,18 @@ Because `RequiredLevel` is a managed property, as a publisher of a managed solut
More information: [Managed Properties](/power-platform/alm/managed-properties-alm)
-## Formula, rollup, and calculated columns
+## Specialized columns
Formula, rollup, and calculated columns free the user from having to manually perform calculations and focus on their work. System administrators can define a column to contain the value of many common calculations without having to work with a developer. Developers can also use the platform capabilities to perform these calculations rather than within their own code.
+A prompt column is an AI-powered data type in Microsoft Dataverse that enables you to define natural language prompts tied to other columns in your table.
+
More information:
- [Define rollup columns that aggregate values](../../maker/data-platform/define-rollup-fields.md)
- [Define calculated columns to automate calculations](../../maker/data-platform/define-calculated-fields.md)
-- [Formula, rollup, and calculated columns](calculated-rollup-attributes.md)
+- [Prompt columns (preview)](../../maker/data-platform/prompt-column.md)
+- [Specialized columns using code](specialized-columns.md)
## Column format
diff --git a/powerapps-docs/developer/data-platform/fetchxml/aggregate-data.md b/powerapps-docs/developer/data-platform/fetchxml/aggregate-data.md
index c479d13e35..22feb3c97f 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/aggregate-data.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/aggregate-data.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to retrieve aggregated data from Microsof
ms.date: 02/29/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/count-rows.md b/powerapps-docs/developer/data-platform/fetchxml/count-rows.md
index 65ac925485..04f55b3a78 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/count-rows.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/count-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to count rows from Microsoft Dataverse ta
ms.date: 02/29/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -18,7 +18,7 @@ contributors:
---
# Count rows using FetchXml
-Use the [fetch element](reference/fetch.md) boolean `returntotalrecordcount` attribute to specify that the result include a count of all the records that meet the filter criteria, up to 5000. Use this when retrieving paged results to estimate the total number of pages to display.
+Use the [fetch element](reference/fetch.md) boolean `returntotalrecordcount` attribute to specify that the result include a count of all the records that meet the filter criteria, up to 5,000. Use this when retrieving paged results to estimate the total number of pages to display.
You can't apply the [fetch element](reference/fetch.md) `top` attribute together with `returntotalrecordcount`.
@@ -31,7 +31,7 @@ When the `returntotalrecordcount` attribute value is `true`, the |The total number of records up to 5000; otherwise the value is -1.|
+||The total number of records up to 5,000; otherwise the value is -1.|
||`true` if the results of the query exceeds the total record count; otherwise, `false`.|
@@ -40,7 +40,7 @@ When the `returntotalrecordcount` attribute value is `true`, the or `@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded`) value is useful when you need to calculate how many more paged requests you need to send to get all the results when ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) equals 5000.
+The ( or `@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded`) value is useful when you need to calculate how many more paged requests you need to send to get all the results when ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) equals the maximum page size for the type of table you are working with.
-If your page size is less than the maximum and ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) is equal to or less than 5000, you can calculate how many more paged requests you must send to get all the records.
+If your page size is less than the maximum and ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) is equal to or less than the maximum, you can calculate how many more paged requests you must send to get all the records.
-When ( or `@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded`) is `true` and ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) equals 5000, you can't perform this calculation.
+When ( or `@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded`) is `true` and ( or `@Microsoft.Dynamics.CRM.totalrecordcount`) equals the maximum, you can't perform this calculation.
> [!TIP]
diff --git a/powerapps-docs/developer/data-platform/fetchxml/filter-rows.md b/powerapps-docs/developer/data-platform/fetchxml/filter-rows.md
index b21b635c9e..205c48c560 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/filter-rows.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/filter-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to filter rows when you retrieve data fro
ms.date: 04/01/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/join-tables.md b/powerapps-docs/developer/data-platform/fetchxml/join-tables.md
index ec1234e9e9..b4d6ba311f 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/join-tables.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/join-tables.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to join tables when you retrieve data fro
ms.date: 03/22/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/optimize-performance.md b/powerapps-docs/developer/data-platform/fetchxml/optimize-performance.md
index 740cec91cb..a937f089fa 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/optimize-performance.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/optimize-performance.md
@@ -4,9 +4,9 @@ description: Learn how to optimize performance when you retrieve data from Micro
ms.date: 01/06/2025
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/order-rows.md b/powerapps-docs/developer/data-platform/fetchxml/order-rows.md
index 649ca5d9ab..d250f8cbb1 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/order-rows.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/order-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to order rows when you retrieve data from
ms.date: 03/06/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/overview.md b/powerapps-docs/developer/data-platform/fetchxml/overview.md
index d4899f6449..9658e05dc3 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/overview.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/overview.md
@@ -4,9 +4,9 @@ description: Learn to compose a query using FetchXml, a proprietary XML based la
ms.date: 03/05/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -39,7 +39,7 @@ This query returns the [Name column](../reference/entities/account.md#BKMK_Name)
## Limit the number of rows
-To limit the number of rows returned, use the [fetch element](reference/fetch.md) `top` attribute. Without the `top` attribute, Dataverse returns up to 5,000 rows.
+To limit the number of rows returned, use the [fetch element](reference/fetch.md) `top` attribute. Without the `top` attribute, Dataverse returns up to 5,000 standard tables rows, 500 elastic tables rows.
Alternatively, specify a number of records to return using *paging*. Don't use the `top` attribute when you request pages of data. [Learn how to request paged results](page-results.md)
diff --git a/powerapps-docs/developer/data-platform/fetchxml/page-results.md b/powerapps-docs/developer/data-platform/fetchxml/page-results.md
index 1888966a38..158b7ae436 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/page-results.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/page-results.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to page results when you retrieve data fr
ms.date: 12/04/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -21,7 +21,7 @@ contributors:
You can specify a limit on the number of rows retrieved for each request by setting a page size. Using paging, you can retrieve consecutive pages of data representing all the records that match the criteria of a query in a performant manner.
-The default and maximum page size is 5,000 rows. If you don't set a page size, Dataverse will return up to 5,000 rows of data at a time. To get more rows, you must send additional requests.
+The default and maximum page size is 5,000 for standard tables, 500 for elastic tables. If you don't set a page size, Dataverse will return either 5,000 or 500 rows of data at a time, depending on the type of table. To get more rows, you must send additional requests.
> [!NOTE]
>
@@ -110,7 +110,7 @@ After each request, the method checks the [EntityCollection.MoreRecords property
///
/// The authenticated IOrganizationService instance.
/// The fetchXml Query string
-/// The page size to use. Default is 5000
+/// The page size to use. Default is 5,000
/// All the records that match the criteria
static EntityCollection RetrieveAll(IOrganizationService service, string fetchXml, int pageSize = 5000)
{
@@ -424,7 +424,7 @@ When using C# with [HttpClient](xref:System.Net.Http.HttpClient), the following
/// The authenticated HttpClient instance.
/// The EntitySetName for the table used in the fetchXml
/// The FetchXml query string
-/// The page size to use. Default is 5000
+/// The page size to use. Default is 5,000
/// All the records that match the criteria
///
static async Task> RetrieveAll(HttpClient client,
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/all-attributes.md b/powerapps-docs/developer/data-platform/fetchxml/reference/all-attributes.md
index be7a05731a..b32228e8c6 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/all-attributes.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/all-attributes.md
@@ -1,8 +1,8 @@
---
title: all-attributes element
description: Use this element to specify that all columns in the containing entity or link-entity element should be returned.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/attribute.md b/powerapps-docs/developer/data-platform/fetchxml/reference/attribute.md
index 30f439abf3..dfcda04634 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/attribute.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/attribute.md
@@ -1,8 +1,8 @@
---
title: attribute element
-description: Use this element to specify which columns in the containing entity or link-entity element should be returned.
-author: pnghub
-ms.author: gned
+description: Use this element to specify which columns in the containing entity or link-entity element to return.
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 07/12/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/condition.md b/powerapps-docs/developer/data-platform/fetchxml/reference/condition.md
index f7a5e0ddb2..d13928f961 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/condition.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/condition.md
@@ -1,8 +1,8 @@
---
title: condition element
description: Use this element to specify a condition to be evaluated as part of a filter for each row in the containing entity or link-entity elements to be returned.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/entity.md b/powerapps-docs/developer/data-platform/fetchxml/reference/entity.md
index 1eb049e0a3..735eaca495 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/entity.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/entity.md
@@ -1,8 +1,8 @@
---
title: entity element
description: Use this element to specify the entity of the query.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/fetch.md b/powerapps-docs/developer/data-platform/fetchxml/reference/fetch.md
index f19b928f61..2c5b1f971d 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/fetch.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/fetch.md
@@ -1,8 +1,8 @@
---
title: fetch element
description: Use this element as the root element in the query.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/filter.md b/powerapps-docs/developer/data-platform/fetchxml/reference/filter.md
index 28e0914a39..cee06598b8 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/filter.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/filter.md
@@ -1,8 +1,8 @@
---
title: filter element
description: Use this element to specify a set of conditions to be evaluated for each row of the containing entity or link-entity element that determines if the row is returned.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/index.md b/powerapps-docs/developer/data-platform/fetchxml/reference/index.md
index e012e83d7d..a842732a27 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/index.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/index.md
@@ -1,8 +1,8 @@
---
title: FetchXml reference
description: The articles in this section describe elements you use to compose a query using FetchXml. FetchXml is a proprietary XML based language that is used in Microsoft Dataverse to retrieve data.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/link-entity.md b/powerapps-docs/developer/data-platform/fetchxml/reference/link-entity.md
index 4b7ed8667a..ba5777f1f4 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/link-entity.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/link-entity.md
@@ -1,8 +1,8 @@
---
title: link-entity element
description: Use this element to join tables with the containing entity or link-entity element.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/operators.md b/powerapps-docs/developer/data-platform/fetchxml/reference/operators.md
index bc65a10eed..4ae8c4fe14 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/operators.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/operators.md
@@ -1,8 +1,8 @@
---
title: condition operator values
description: Use these values in a condition element operator attribute to specify how to evaluate the condition.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 03/08/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/order.md b/powerapps-docs/developer/data-platform/fetchxml/reference/order.md
index 10848c5a35..d090d43692 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/order.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/order.md
@@ -1,8 +1,8 @@
---
title: order element
description: Use this element to specify the sort order of rows from the containing entity or link-entity element.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/reference/value.md b/powerapps-docs/developer/data-platform/fetchxml/reference/value.md
index 735f25b5fc..ee2ef2181e 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/reference/value.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/reference/value.md
@@ -1,8 +1,8 @@
---
title: value element
description: Use this element to specify the values to evaluate with a condition.
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.date: 02/29/2024
ms.topic: reference
diff --git a/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md b/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md
index 5db87dde29..0a87f80a42 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md
@@ -4,9 +4,9 @@ description: Learn how to use the Dataverse SDK for .NET or Web API to send a re
ms.date: 01/26/2025
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/sample.md b/powerapps-docs/developer/data-platform/fetchxml/sample.md
index 5d28f349f2..336f8192dd 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/sample.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/sample.md
@@ -4,9 +4,9 @@ description: Try using FetchXML to retrieve Dataverse data using this sample cod
ms.date: 12/04/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/fetchxml/select-columns.md b/powerapps-docs/developer/data-platform/fetchxml/select-columns.md
index 67efeaca93..270f08f1e1 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/select-columns.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/select-columns.md
@@ -4,9 +4,9 @@ description: Learn how to use FetchXml to select columns when you retrieve data
ms.date: 02/29/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/field-security-entities.md b/powerapps-docs/developer/data-platform/field-security-entities.md
deleted file mode 100644
index b7d5a58638..0000000000
--- a/powerapps-docs/developer/data-platform/field-security-entities.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Field security entities (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn about using field security entities to apply field-level security, which restricts field access to specified users and teams." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.custom: ""
-ms.date: 03/27/2021
-ms.reviewer: "pehecke"
-
-ms.topic: how-to
-author: "paulliew" # GitHub ID
-ms.subservice: dataverse-developer
-ms.author: "jdaly" # MSFT alias of Microsoft employees only
-search.audienceType:
- - developer
----
-# Field security tables
-
-[!INCLUDE[cc-terminology](includes/cc-terminology.md)]
-
-You use field security tables to apply field-level security, which restricts field access to specified users and teams. The scope of field-level security is global, which means that it applies to all records within the organization, regardless of the business unit hierarchical level to which the record or the user belongs. Field security works in all Microsoft Dataverse clients, including the Web client, Dynamics 365 for Outlook, and Dynamics. It applies to all components, such as the Dataverse web services, reports, search, offline, filtered views, auditing, and duplicate detection. For this release, field security can be applied to both custom fields and many out-of-box (OOB) fields.
-
-> [!IMPORTANT]
-> Field-level security profiles prevent unintended users from getting access to Dataverse data based on the profile definitions. If the SQL Server ACLs are misconfigured, or if there is a SQL injection issue, adversaries can get direct access to data in SQL Server thereby bypassing field level security restrictions. For more information, see [Overview of Web Application Security Threats](/previous-versions/f13d73y6(v=vs.140)).
-
-
-
-## Set up and use field security
- To use field security you must do the following:
-
-1. Create a field security profile record.
-
-2. Add users or teams to the profile.
-
-3. Find a columns that can be secured at the field level.
-
-4. Secure the column, either when you create the column or by updating the column definition.
-
-5. Publish the customizations.
-
-6. Create a field permission record that defines what access (create, update, read) the profile will have for the custom column.
-
- For sample code about how to perform these steps, see [Sample: Enable Field Security For An Entity](org-service/samples/enable-field-security-entity.md).
-
- Use the following field permission columns to set whether the specified field security profile can create, read, or update a column.
- You can set or compare the value for these columns by using the `field_security_permission_type` global choice:
-
-- `FieldPermission`.`CanCreate`
-
-- `FieldPermission`.`CanRead`
-
-- `FieldPermission`.`CanUpdate`
-
-> [!IMPORTANT]
-> If low privilege users are given Read access to the field security profile entity, they can see what profiles other users have and find other users with access to secured attributes they are interested in. They can then use social engineering techniques to get assigned a profile with access to those secured attributes.
-
-
-
-## Which attributes can be secured?
- To see which columns can be secured, you can query the table definition for the following properties:
-
--
-
--
-
--
-
- There are a few additional rules that apply to certain attribute data types:
-
-- Boolean attributes can be secured for create and update operations but not for read.
-
-- Option set attributes can be secured for create, update, and read when a default value is unspecified.
-
- There are thousands of columns that can be secured, so there are two easier ways to look for this information. To view the table definition for your organization, install the Table definition browser solution described in [Browse table definition in your environment](browse-your-metadata.md). You can also browse the reference documentation for entities in the [Table/entity reference](reference/about-entity-reference.md).
-
-
-## Share secured fields
- You can share secured fields much as you can share records. To do this, you create, update, or delete a `PrincipalObjectAttributeAccess` (field sharing) record, where you specify the user or team, the entity, and the permissions.
-
- The following table lists the corresponding methods for securing a field compared to securing a record.
-
-|Record sharing|Field access sharing|
-|--------------------|--------------------------|
-|Use the message to grant record access for a user or team.|Use the message or the . method to grant secured field access for a user or team.|
-|Use the message to update record access for a user or team.|Use the message or the . method to update secured field access for a user or team.|
-|Use the message to remove record access for a user or team.|Use the message or the . method to remove secured field access for a user or team.|
-
-### See also
- [Security and data access](security-model.md)
- [FieldSecurityProfile Entity](reference/entities/fieldsecurityprofile.md)
- [FieldPermission Entity](reference/entities/fieldpermission.md)
- [PrincipalObjectAttributeAccess Entity](reference/entities/principalobjectattributeaccess.md)
-
-
-[!INCLUDE[footer-include](../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/handle-exceptions.md b/powerapps-docs/developer/data-platform/handle-exceptions.md
index 6412368438..4497a3e008 100644
--- a/powerapps-docs/developer/data-platform/handle-exceptions.md
+++ b/powerapps-docs/developer/data-platform/handle-exceptions.md
@@ -2,8 +2,8 @@
title: "Handle exceptions in a plug-in (Microsoft Dataverse) | Microsoft Docs"
description: "Understand system behavior when a plug-in passes an exception back to the caller."
ms.date: 02/05/2024
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/impersonate-a-user.md b/powerapps-docs/developer/data-platform/impersonate-a-user.md
index 8dea73b930..243dc3b43d 100644
--- a/powerapps-docs/developer/data-platform/impersonate-a-user.md
+++ b/powerapps-docs/developer/data-platform/impersonate-a-user.md
@@ -2,8 +2,8 @@
title: "Impersonate a user (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Learn how to write plug-in code to act on behalf of a specific user."
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/impersonate-another-user.md b/powerapps-docs/developer/data-platform/impersonate-another-user.md
index c5d9e9375f..44b666b0db 100644
--- a/powerapps-docs/developer/data-platform/impersonate-another-user.md
+++ b/powerapps-docs/developer/data-platform/impersonate-another-user.md
@@ -2,11 +2,11 @@
title: "Impersonate another user (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Use impersonation to execute business logic on behalf of another Microsoft Dataverse user." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 03/22/2022
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/includes/cc-ordering-paging.md b/powerapps-docs/developer/data-platform/includes/cc-ordering-paging.md
index b976fa2f7b..0e090f87c0 100644
--- a/powerapps-docs/developer/data-platform/includes/cc-ordering-paging.md
+++ b/powerapps-docs/developer/data-platform/includes/cc-ordering-paging.md
@@ -68,7 +68,7 @@ Because this query orders unique column values, the order is consistent.
> [!NOTE]
> When possible, queries should order on the primary key for the table because Dataverse is optimized for ordering on the primary key by default. Ordering by non-unique or complex fields cause excess overhead and slower queries.
-When you retrieve a limited set of data to display in an application, or if you need to return more than 5,000 rows of data, you need to page the results. The choices you make in determining the order of the results can determine whether the rows in each page of data you retrieve overlaps with other pages. Without proper ordering, the same record can appear in more than one page.
+When you retrieve a limited set of data to display in an application, or if you need to return more than 5,000 rows of data ([500 for elastic tables](../use-elastic-tables.md#query-rows-of-an-elastic-table)), you need to page the results. The choices you make in determining the order of the results can determine whether the rows in each page of data you retrieve overlaps with other pages. Without proper ordering, the same record can appear in more than one page.
To prevent the same record from appearing in more than one page, apply the following best practices:
diff --git a/powerapps-docs/developer/data-platform/includes/data-service-error-codes.md b/powerapps-docs/developer/data-platform/includes/data-service-error-codes.md
index f656cd8b8e..11814cbf76 100644
--- a/powerapps-docs/developer/data-platform/includes/data-service-error-codes.md
+++ b/powerapps-docs/developer/data-platform/includes/data-service-error-codes.md
@@ -16,7 +16,7 @@
|`0x8006041c`
`-2147089380`|Name: **ActionStepInvalidProcessAction**
Message: `ActionStep {0} references invalid Process Action {1}.`|
|`0x8006040d`
`-2147089395`|Name: **ActionStepInvalidProcessid**
Message: `ActionStep references invalid Process Id.`|
|`0x8006040c`
`-2147089396`|Name: **ActionStepInvalidStageid**
Message: `ActionStep references invalid Stage Id.`|
-|`0x80060382`
`-2147089534`|Name: **ActionSupportNotEnabled**
Message: ` Business Processes containing an Action Step cannot be exported because Action Step support is still a Public Preview feature and it is not currently enabled for this organization.`|
+|`0x80060382`
`-2147089534`|Name: **ActionSupportNotEnabled**
Message: `Business Processes containing an Action Step cannot be exported because Action Step support is still a Public Preview feature and it is not currently enabled for this organization.`|
|`0x80061001`
`-2147086335`|Name: **ActivePropertyValidationFailed**
Message: `You can't create a property instance for an inactive property.`|
|`0x80040526`
`-2147220186`|Name: **ActiveQueueItemAlreadyExists**
Message: `An active queue item already exists for the given object. Cannot create more than one active queue item for this object.`|
|`0x8004F871`
`-2147157903`|Name: **ActiveSlaCannotEdit**
Message: `You can't edit an active SLA. Deactivate the SLA, and then try editing it.`|
@@ -74,6 +74,7 @@
|`0x80048547`
`-2147187385`|Name: **AppEntityLimitExceeded**
Message: `This operation failed since it exceeded the maximum entity limit of {0} total entities for the app {1} set by its owning publisher {2}.`|
|`0x80048552`
`-2147187374`|Name: **AppEntityLimitExceededInSiteMap**
Message: `You cannot save or publish the sitemap. The publisher ({0}) of the app ({1}) allows only up to {2} additional entities to be added.`|
|`0x80095FFC`
`-2146869252`|Name: **ApplicationBasedAccessControlError**
Message: `Access to Dataverse API is restricted for this application Id : '{0}'. Please contact your administrator for more information.`|
+|`0x80090922`
`-2146891486`|Name: **ApplicationBasedAccessControlUserDoesNotHaveMappedRolesError**
Message: `User with SystemUserId = {0} and AccessResultType = {1} has not been explictly or implictly assigned any roles that are mapped to ApplicationId = {2}. Please assign the appropriate roles to grant access and try again.`|
|`0x8005F231`
`-2147093967`|Name: **ApplicationMetadataConverterFailed**
Message: `Sorry, something went wrong. Please try again, or restart the app.`|
|`0x8005F233`
`-2147093965`|Name: **ApplicationMetadatadaCreateFailed**
Message: `Sorry, something went wrong. Please try again, or restart the app.`|
|`0x8005F232`
`-2147093966`|Name: **ApplicationMetadatadaNullData**
Message: `Sorry, something went wrong. Please try again, or restart the app.`|
@@ -236,84 +237,84 @@
|`0x80043b03`
`-2147206397`|Name: **BaseUnitNotDeletable**
Message: `The base unit of a schedule cannot be deleted.`|
|`0x80043b17`
`-2147206377`|Name: **BaseUnitNotNull**
Message: `Do not use a base unit as the value for a primary unit. This value should always be null.`|
|`0x80043810`
`-2147207152`|Name: **BaseUomNameNotSpecified**
Message: `baseuomname not specified`|
-|`0x8004B540`
`-2147175104`|Name: **BDK_E_ADDRESS_VALIDATION_FAILURE**
Message: `{0} `|
-|`0x8004B541`
`-2147175103`|Name: **BDK_E_AGREEMENT_ALREADY_SIGNED**
Message: `{0} `|
-|`0x8004B542`
`-2147175102`|Name: **BDK_E_AUTHORIZATION_FAILED**
Message: `{0} `|
-|`0x8004B543`
`-2147175101`|Name: **BDK_E_AVS_FAILED**
Message: `{0} `|
-|`0x8004B544`
`-2147175100`|Name: **BDK_E_BAD_CITYNAME_LENGTH**
Message: `{0} `|
-|`0x8004B545`
`-2147175099`|Name: **BDK_E_BAD_STATECODE_LENGTH**
Message: `{0} `|
-|`0x8004B546`
`-2147175098`|Name: **BDK_E_BAD_ZIPCODE_LENGTH**
Message: `{0} `|
-|`0x8004B547`
`-2147175097`|Name: **BDK_E_BADXML**
Message: `{0} `|
-|`0x8004B548`
`-2147175096`|Name: **BDK_E_BANNED_PAYMENT_INSTRUMENT**
Message: `{0} `|
-|`0x8004B549`
`-2147175095`|Name: **BDK_E_BANNEDPERSON**
Message: `{0} `|
-|`0x8004B54A`
`-2147175094`|Name: **BDK_E_CANNOT_EXCEED_MAX_OWNERSHIP**
Message: `{0} `|
-|`0x8004B54B`
`-2147175093`|Name: **BDK_E_COUNTRY_CURRENCY_PI_MISMATCH**
Message: `{0} `|
-|`0x8004B54C`
`-2147175092`|Name: **BDK_E_CREDIT_CARD_EXPIRED**
Message: `{0} `|
-|`0x8004B54D`
`-2147175091`|Name: **BDK_E_DATE_EXPIRED**
Message: `{0} `|
-|`0x8004B54E`
`-2147175090`|Name: **BDK_E_ERROR_COUNTRYCODE_MISMATCH**
Message: `{0} `|
-|`0x8004B54F`
`-2147175089`|Name: **BDK_E_ERROR_COUNTRYCODE_REQUIRED**
Message: `{0} `|
-|`0x8004B550`
`-2147175088`|Name: **BDK_E_EXTRA_REFERRAL_DATA**
Message: `{0} `|
-|`0x8004B551`
`-2147175087`|Name: **BDK_E_GUID_EXISTS**
Message: `{0} `|
-|`0x8004B552`
`-2147175086`|Name: **BDK_E_INVALID_ADDRESS_ID**
Message: `{0} `|
+|`0x8004B540`
`-2147175104`|Name: **BDK_E_ADDRESS_VALIDATION_FAILURE**
Message: `{0}`|
+|`0x8004B541`
`-2147175103`|Name: **BDK_E_AGREEMENT_ALREADY_SIGNED**
Message: `{0}`|
+|`0x8004B542`
`-2147175102`|Name: **BDK_E_AUTHORIZATION_FAILED**
Message: `{0}`|
+|`0x8004B543`
`-2147175101`|Name: **BDK_E_AVS_FAILED**
Message: `{0}`|
+|`0x8004B544`
`-2147175100`|Name: **BDK_E_BAD_CITYNAME_LENGTH**
Message: `{0}`|
+|`0x8004B545`
`-2147175099`|Name: **BDK_E_BAD_STATECODE_LENGTH**
Message: `{0}`|
+|`0x8004B546`
`-2147175098`|Name: **BDK_E_BAD_ZIPCODE_LENGTH**
Message: `{0}`|
+|`0x8004B547`
`-2147175097`|Name: **BDK_E_BADXML**
Message: `{0}`|
+|`0x8004B548`
`-2147175096`|Name: **BDK_E_BANNED_PAYMENT_INSTRUMENT**
Message: `{0}`|
+|`0x8004B549`
`-2147175095`|Name: **BDK_E_BANNEDPERSON**
Message: `{0}`|
+|`0x8004B54A`
`-2147175094`|Name: **BDK_E_CANNOT_EXCEED_MAX_OWNERSHIP**
Message: `{0}`|
+|`0x8004B54B`
`-2147175093`|Name: **BDK_E_COUNTRY_CURRENCY_PI_MISMATCH**
Message: `{0}`|
+|`0x8004B54C`
`-2147175092`|Name: **BDK_E_CREDIT_CARD_EXPIRED**
Message: `{0}`|
+|`0x8004B54D`
`-2147175091`|Name: **BDK_E_DATE_EXPIRED**
Message: `{0}`|
+|`0x8004B54E`
`-2147175090`|Name: **BDK_E_ERROR_COUNTRYCODE_MISMATCH**
Message: `{0}`|
+|`0x8004B54F`
`-2147175089`|Name: **BDK_E_ERROR_COUNTRYCODE_REQUIRED**
Message: `{0}`|
+|`0x8004B550`
`-2147175088`|Name: **BDK_E_EXTRA_REFERRAL_DATA**
Message: `{0}`|
+|`0x8004B551`
`-2147175087`|Name: **BDK_E_GUID_EXISTS**
Message: `{0}`|
+|`0x8004B552`
`-2147175086`|Name: **BDK_E_INVALID_ADDRESS_ID**
Message: `{0}`|
|`0x8004B553`
`-2147175085`|Name: **BDK_E_INVALID_BILLABLE_ACCOUNT_ID**
Message: `{0} The specified Billing account is invalid. Or, although the objectID is of the correct type, the account it identifies does not exist in the system.`|
-|`0x8004B554`
`-2147175084`|Name: **BDK_E_INVALID_BUF_SIZE**
Message: `{0} `|
-|`0x8004B555`
`-2147175083`|Name: **BDK_E_INVALID_CATEGORY_NAME**
Message: `{0} `|
-|`0x8004B556`
`-2147175082`|Name: **BDK_E_INVALID_COUNTRY_CODE**
Message: `{0} `|
-|`0x8004B557`
`-2147175081`|Name: **BDK_E_INVALID_CURRENCY**
Message: `{0} `|
-|`0x8004B558`
`-2147175080`|Name: **BDK_E_INVALID_CUSTOMER_TYPE**
Message: `{0} `|
-|`0x8004B559`
`-2147175079`|Name: **BDK_E_INVALID_DATE**
Message: `{0} `|
-|`0x8004B55A`
`-2147175078`|Name: **BDK_E_INVALID_EMAIL_ADDRESS**
Message: `{0} `|
-|`0x8004B55B`
`-2147175077`|Name: **BDK_E_INVALID_FILTER**
Message: `{0} `|
-|`0x8004B55C`
`-2147175076`|Name: **BDK_E_INVALID_GUID**
Message: `{0} `|
-|`0x8004B55D`
`-2147175075`|Name: **BDK_E_INVALID_INPUT_TO_TAXWARE_OR_VERAZIP**
Message: `{0} `|
-|`0x8004B55E`
`-2147175074`|Name: **BDK_E_INVALID_LOCALE**
Message: `{0} `|
+|`0x8004B554`
`-2147175084`|Name: **BDK_E_INVALID_BUF_SIZE**
Message: `{0}`|
+|`0x8004B555`
`-2147175083`|Name: **BDK_E_INVALID_CATEGORY_NAME**
Message: `{0}`|
+|`0x8004B556`
`-2147175082`|Name: **BDK_E_INVALID_COUNTRY_CODE**
Message: `{0}`|
+|`0x8004B557`
`-2147175081`|Name: **BDK_E_INVALID_CURRENCY**
Message: `{0}`|
+|`0x8004B558`
`-2147175080`|Name: **BDK_E_INVALID_CUSTOMER_TYPE**
Message: `{0}`|
+|`0x8004B559`
`-2147175079`|Name: **BDK_E_INVALID_DATE**
Message: `{0}`|
+|`0x8004B55A`
`-2147175078`|Name: **BDK_E_INVALID_EMAIL_ADDRESS**
Message: `{0}`|
+|`0x8004B55B`
`-2147175077`|Name: **BDK_E_INVALID_FILTER**
Message: `{0}`|
+|`0x8004B55C`
`-2147175076`|Name: **BDK_E_INVALID_GUID**
Message: `{0}`|
+|`0x8004B55D`
`-2147175075`|Name: **BDK_E_INVALID_INPUT_TO_TAXWARE_OR_VERAZIP**
Message: `{0}`|
+|`0x8004B55E`
`-2147175074`|Name: **BDK_E_INVALID_LOCALE**
Message: `{0}`|
|`0x8004B55F`
`-2147175073`|Name: **BDK_E_INVALID_OBJECT_ID**
Message: `{0} The Billing system cannot find the object (e.g. account or subscription or offering).`|
-|`0x8004B560`
`-2147175072`|Name: **BDK_E_INVALID_OFFERING_GUID**
Message: `{0} `|
-|`0x8004B561`
`-2147175071`|Name: **BDK_E_INVALID_PAYMENT_INSTRUMENT_STATUS**
Message: `{0} `|
-|`0x8004B562`
`-2147175070`|Name: **BDK_E_INVALID_PAYMENT_METHOD_ID**
Message: `{0} `|
-|`0x8004B563`
`-2147175069`|Name: **BDK_E_INVALID_PHONE_TYPE**
Message: `{0} `|
-|`0x8004B564`
`-2147175068`|Name: **BDK_E_INVALID_POLICY_ID**
Message: `{0} `|
-|`0x8004B565`
`-2147175067`|Name: **BDK_E_INVALID_REFERRALDATA_XML**
Message: `{0} `|
-|`0x8004B566`
`-2147175066`|Name: **BDK_E_INVALID_STATE_FOR_COUNTRY**
Message: `{0} `|
+|`0x8004B560`
`-2147175072`|Name: **BDK_E_INVALID_OFFERING_GUID**
Message: `{0}`|
+|`0x8004B561`
`-2147175071`|Name: **BDK_E_INVALID_PAYMENT_INSTRUMENT_STATUS**
Message: `{0}`|
+|`0x8004B562`
`-2147175070`|Name: **BDK_E_INVALID_PAYMENT_METHOD_ID**
Message: `{0}`|
+|`0x8004B563`
`-2147175069`|Name: **BDK_E_INVALID_PHONE_TYPE**
Message: `{0}`|
+|`0x8004B564`
`-2147175068`|Name: **BDK_E_INVALID_POLICY_ID**
Message: `{0}`|
+|`0x8004B565`
`-2147175067`|Name: **BDK_E_INVALID_REFERRALDATA_XML**
Message: `{0}`|
+|`0x8004B566`
`-2147175066`|Name: **BDK_E_INVALID_STATE_FOR_COUNTRY**
Message: `{0}`|
|`0x8004B567`
`-2147175065`|Name: **BDK_E_INVALID_SUBSCRIPTION_ID**
Message: `{0} The subscription id specified is invalid. Or, although the objectID is of correct type and also points to a valid account in SCS, the subscription it identifies does not exist in SCS.`|
-|`0x8004B568`
`-2147175064`|Name: **BDK_E_INVALID_TAX_EXEMPT_TYPE**
Message: `{0} `|
-|`0x8004B569`
`-2147175063`|Name: **BDK_E_MEG_CONFLICT**
Message: `{0} `|
-|`0x8004B56A`
`-2147175062`|Name: **BDK_E_MULTIPLE_CITIES_FOUND**
Message: `{0} `|
-|`0x8004B56B`
`-2147175061`|Name: **BDK_E_MULTIPLE_COUNTIES_FOUND**
Message: `{0} `|
-|`0x8004B56C`
`-2147175060`|Name: **BDK_E_NON_ACTIVE_ACCOUNT**
Message: `{0} `|
+|`0x8004B568`
`-2147175064`|Name: **BDK_E_INVALID_TAX_EXEMPT_TYPE**
Message: `{0}`|
+|`0x8004B569`
`-2147175063`|Name: **BDK_E_MEG_CONFLICT**
Message: `{0}`|
+|`0x8004B56A`
`-2147175062`|Name: **BDK_E_MULTIPLE_CITIES_FOUND**
Message: `{0}`|
+|`0x8004B56B`
`-2147175061`|Name: **BDK_E_MULTIPLE_COUNTIES_FOUND**
Message: `{0}`|
+|`0x8004B56C`
`-2147175060`|Name: **BDK_E_NON_ACTIVE_ACCOUNT**
Message: `{0}`|
|`0x8004B56D`
`-2147175059`|Name: **BDK_E_NOPERMISSION**
Message: `{0} The calling partner does not have access to this method or when the requester does not have permission to search against the supplied search PUID.`|
-|`0x8004B56E`
`-2147175058`|Name: **BDK_E_OBJECT_ROLE_LIMIT_EXCEEDED**
Message: `{0} `|
-|`0x8004B56F`
`-2147175057`|Name: **BDK_E_OFFERING_ACCOUNT_CURRENCY_MISMATCH**
Message: `{0} `|
-|`0x8004B570`
`-2147175056`|Name: **BDK_E_OFFERING_COUNTRY_ACCOUNT_MISMATCH**
Message: `{0} `|
-|`0x8004B571`
`-2147175055`|Name: **BDK_E_OFFERING_NOT_PURCHASEABLE**
Message: `{0} `|
-|`0x8004B572`
`-2147175054`|Name: **BDK_E_OFFERING_PAYMENT_INSTRUMENT_MISMATCH**
Message: `{0} `|
-|`0x8004B573`
`-2147175053`|Name: **BDK_E_OFFERING_REQUIRES_PI**
Message: `{0} `|
-|`0x8004B574`
`-2147175052`|Name: **BDK_E_PARTNERNOTINBILLING**
Message: `{0} `|
-|`0x8004B575`
`-2147175051`|Name: **BDK_E_PAYMENT_PROVIDER_CONNECTION_FAILED**
Message: `{0} `|
-|`0x8004B577`
`-2147175049`|Name: **BDK_E_POLICY_DEAL_COUNTRY_MISMATCH**
Message: `{0} `|
-|`0x8004B576`
`-2147175050`|Name: **BDK_E_PRIMARY_PHONE_REQUIRED**
Message: `{0} `|
-|`0x8004B578`
`-2147175048`|Name: **BDK_E_PUID_ROLE_LIMIT_EXCEEDED**
Message: `{0} `|
-|`0x8004B579`
`-2147175047`|Name: **BDK_E_RATING_FAILURE**
Message: `{0} `|
-|`0x8004B57A`
`-2147175046`|Name: **BDK_E_REQUIRED_FIELD_MISSING**
Message: `{0} `|
-|`0x8004B57B`
`-2147175045`|Name: **BDK_E_STATE_CITY_INVALID**
Message: `{0} `|
-|`0x8004B57C`
`-2147175044`|Name: **BDK_E_STATE_INVALID**
Message: `{0} `|
-|`0x8004B57D`
`-2147175043`|Name: **BDK_E_STATE_ZIP_CITY_INVALID**
Message: `{0} `|
-|`0x8004B57E`
`-2147175042`|Name: **BDK_E_STATE_ZIP_CITY_INVALID2**
Message: `{0} `|
-|`0x8004B57F`
`-2147175041`|Name: **BDK_E_STATE_ZIP_CITY_INVALID3**
Message: `{0} `|
-|`0x8004B580`
`-2147175040`|Name: **BDK_E_STATE_ZIP_CITY_INVALID4**
Message: `{0} `|
-|`0x8004B581`
`-2147175039`|Name: **BDK_E_STATE_ZIP_COVERS_MULTIPLE_CITIES**
Message: `{0} `|
-|`0x8004B582`
`-2147175038`|Name: **BDK_E_STATE_ZIP_INVALID**
Message: `{0} `|
-|`0x8004B583`
`-2147175037`|Name: **BDK_E_TAXID_EXPDATE**
Message: `{0} `|
-|`0x8004B584`
`-2147175036`|Name: **BDK_E_TOKEN_BLACKLISTED**
Message: `{0} `|
-|`0x8004B585`
`-2147175035`|Name: **BDK_E_TOKEN_EXPIRED**
Message: `{0} `|
-|`0x8004B586`
`-2147175034`|Name: **BDK_E_TOKEN_NOT_VALID_FOR_OFFERING**
Message: `{0} `|
-|`0x8004B587`
`-2147175033`|Name: **BDK_E_TOKEN_RANGE_BLACKLISTED**
Message: `{0} `|
-|`0x8004B588`
`-2147175032`|Name: **BDK_E_TRANS_BALANCE_TO_PI_INVALID**
Message: `{0} `|
+|`0x8004B56E`
`-2147175058`|Name: **BDK_E_OBJECT_ROLE_LIMIT_EXCEEDED**
Message: `{0}`|
+|`0x8004B56F`
`-2147175057`|Name: **BDK_E_OFFERING_ACCOUNT_CURRENCY_MISMATCH**
Message: `{0}`|
+|`0x8004B570`
`-2147175056`|Name: **BDK_E_OFFERING_COUNTRY_ACCOUNT_MISMATCH**
Message: `{0}`|
+|`0x8004B571`
`-2147175055`|Name: **BDK_E_OFFERING_NOT_PURCHASEABLE**
Message: `{0}`|
+|`0x8004B572`
`-2147175054`|Name: **BDK_E_OFFERING_PAYMENT_INSTRUMENT_MISMATCH**
Message: `{0}`|
+|`0x8004B573`
`-2147175053`|Name: **BDK_E_OFFERING_REQUIRES_PI**
Message: `{0}`|
+|`0x8004B574`
`-2147175052`|Name: **BDK_E_PARTNERNOTINBILLING**
Message: `{0}`|
+|`0x8004B575`
`-2147175051`|Name: **BDK_E_PAYMENT_PROVIDER_CONNECTION_FAILED**
Message: `{0}`|
+|`0x8004B577`
`-2147175049`|Name: **BDK_E_POLICY_DEAL_COUNTRY_MISMATCH**
Message: `{0}`|
+|`0x8004B576`
`-2147175050`|Name: **BDK_E_PRIMARY_PHONE_REQUIRED**
Message: `{0}`|
+|`0x8004B578`
`-2147175048`|Name: **BDK_E_PUID_ROLE_LIMIT_EXCEEDED**
Message: `{0}`|
+|`0x8004B579`
`-2147175047`|Name: **BDK_E_RATING_FAILURE**
Message: `{0}`|
+|`0x8004B57A`
`-2147175046`|Name: **BDK_E_REQUIRED_FIELD_MISSING**
Message: `{0}`|
+|`0x8004B57B`
`-2147175045`|Name: **BDK_E_STATE_CITY_INVALID**
Message: `{0}`|
+|`0x8004B57C`
`-2147175044`|Name: **BDK_E_STATE_INVALID**
Message: `{0}`|
+|`0x8004B57D`
`-2147175043`|Name: **BDK_E_STATE_ZIP_CITY_INVALID**
Message: `{0}`|
+|`0x8004B57E`
`-2147175042`|Name: **BDK_E_STATE_ZIP_CITY_INVALID2**
Message: `{0}`|
+|`0x8004B57F`
`-2147175041`|Name: **BDK_E_STATE_ZIP_CITY_INVALID3**
Message: `{0}`|
+|`0x8004B580`
`-2147175040`|Name: **BDK_E_STATE_ZIP_CITY_INVALID4**
Message: `{0}`|
+|`0x8004B581`
`-2147175039`|Name: **BDK_E_STATE_ZIP_COVERS_MULTIPLE_CITIES**
Message: `{0}`|
+|`0x8004B582`
`-2147175038`|Name: **BDK_E_STATE_ZIP_INVALID**
Message: `{0}`|
+|`0x8004B583`
`-2147175037`|Name: **BDK_E_TAXID_EXPDATE**
Message: `{0}`|
+|`0x8004B584`
`-2147175036`|Name: **BDK_E_TOKEN_BLACKLISTED**
Message: `{0}`|
+|`0x8004B585`
`-2147175035`|Name: **BDK_E_TOKEN_EXPIRED**
Message: `{0}`|
+|`0x8004B586`
`-2147175034`|Name: **BDK_E_TOKEN_NOT_VALID_FOR_OFFERING**
Message: `{0}`|
+|`0x8004B587`
`-2147175033`|Name: **BDK_E_TOKEN_RANGE_BLACKLISTED**
Message: `{0}`|
+|`0x8004B588`
`-2147175032`|Name: **BDK_E_TRANS_BALANCE_TO_PI_INVALID**
Message: `{0}`|
|`0x8004B589`
`-2147175031`|Name: **BDK_E_UNKNOWN_SERVER_FAILURE**
Message: `{0} Unknown server failure.`|
-|`0x8004B58A`
`-2147175030`|Name: **BDK_E_UNSUPPORTED_CHAR_EXIST**
Message: `{0} `|
+|`0x8004B58A`
`-2147175030`|Name: **BDK_E_UNSUPPORTED_CHAR_EXIST**
Message: `{0}`|
|`0x8004B58F`
`-2147175025`|Name: **BDK_E_USAGE_COUNT_FOR_TOKEN_EXCEEDED**
Message: `{0} Billing token is already spent.`|
-|`0x8004B58B`
`-2147175029`|Name: **BDK_E_VATID_DOESNOTHAVEEXPDATE**
Message: `{0} `|
-|`0x8004B58C`
`-2147175028`|Name: **BDK_E_ZIP_CITY_MISSING**
Message: `{0} `|
+|`0x8004B58B`
`-2147175029`|Name: **BDK_E_VATID_DOESNOTHAVEEXPDATE**
Message: `{0}`|
+|`0x8004B58C`
`-2147175028`|Name: **BDK_E_ZIP_CITY_MISSING**
Message: `{0}`|
|`0x8004B58D`
`-2147175027`|Name: **BDK_E_ZIP_INVALID**
Message: `{0} Billing zip code error.`|
|`0x8004B58E`
`-2147175026`|Name: **BDK_E_ZIP_INVALID_FOR_ENTERED_STATE**
Message: `{0} Billing zip code error.`|
|`0x8005E003`
`-2147098621`|Name: **BidsAuthenticationError**
Message: `An error occured while authenticating with server {0}.`|
@@ -421,7 +422,7 @@
|`0x8004030a`
`-2147220726`|Name: **CampaignNotSpecifiedForCampaignResponse**
Message: `RegardingObjectId is a required field.`|
|`0x8006099E`
`-2147087970`|Name: **CanAssociateOnlyMobileOfflineEnabledEntityToProfileItem**
Message: `{0} needs to be enabled for mobile offline.`|
|`0x8006099C`
`-2147087972`|Name: **CanAssociateOnlyMobileOfflineEnableEntityToProfileItem**
Message: `This entity needs to be enabled for mobile offline.`|
-|`0x8006099D`
`-2147087971`|Name: **CanAssociateOnlyOneEntityPerProfileItem**
Message: `You can only add one mobile offline profile item record per entity to a mobile offline profile record. `|
+|`0x8006099D`
`-2147087971`|Name: **CanAssociateOnlyOneEntityPerProfileItem**
Message: `You can only add one mobile offline profile item record per entity to a mobile offline profile record.`|
|`0x8003F451`
`-2147224495`|Name: **CancelActiveChildCaseFirst**
Message: `Cancel active child case before canceling parent case.`|
|`0x80044F03`
`-2147201277`|Name: **CancelAsyncOperationsRetriableError**
Message: `Failed to cancel targeted system jobs, will be retried later.`|
|`0x80044F04`
`-2147201276`|Name: **CancelAsyncOperationsTerminalError**
Message: `Failed to cancel targeted system jobs.`|
@@ -537,7 +538,7 @@
|`0x80055005`
`-2147135483`|Name: **CannotCreateSLAForEntity**
Message: `You can't create a service level agreement (SLA) for this entity because it’s not enabled for creating SLAs`|
|`0x80041d4d`
`-2147214003`|Name: **CannotCreateSyncUserIsLicensedField**
Message: `The property IsLicensed cannot be set for Sync User Creation.`|
|`0x80041d4b`
`-2147214005`|Name: **CannotCreateSyncUserObjectMissing**
Message: `This is not a valid Microsoft Online Services ID for this organization.`|
-|`0x80090481`
`-2146892671`|Name: **CannotCreateSystemFieldOnEntityUpdate**
Message: `Attribute {0} cannot be created on an existing entity {1} because it is not a custom field. `|
+|`0x80090481`
`-2146892671`|Name: **CannotCreateSystemFieldOnEntityUpdate**
Message: `Attribute {0} cannot be created on an existing entity {1} because it is not a custom field.`|
|`0x800608D5`
`-2147088171`|Name: **CannotCreateSystemOrDefaultTheme**
Message: `You can’t create system or default themes. System or default theme can only be created out of box.`|
|`0x80044804`
`-2147203068`|Name: **CannotCreateUpdateSourceAttribute**
Message: `Source Attribute Not Valid For Create/Update if Metric Type is Count.`|
|`0x8004027a`
`-2147220870`|Name: **CannotDeactivateDefaultView**
Message: `Default views cannot be deactivated.`|
@@ -637,12 +638,13 @@
|`0x8004852C`
`-2147187412`|Name: **CannotExecuteRequestBecauseHttpsIsRequired**
Message: `HTTPS protocol is required for this type of request, please enable HTTPS protocol and try again.`|
|`0x80090474`
`-2146892684`|Name: **CannotExportRoutingRuleForNonCaseEntity**
Message: `Exporting routing rules is only available for cases when using basic routing rulesets.`|
|`0x8004F847`
`-2147157945`|Name: **CannotExportRuleOnAnyEntityRoutingRuleFCBOff**
Message: `Unable to export routing rule set record for entities (except case entity) as the feature control bit for entity records routing is disabled.`|
+|`0x80041155`
`-2147217067`|Name: **CannotFilterOnMaskedAttribute**
Message: `Filtering on masked attributes without the read unmasked column permission is not allowed.`|
|`0x8004F083`
`-2147159933`|Name: **CannotFindBaseFromUpgrade**
Message: `Cannot find the data for the previous version of the holding solution: [{0}].`|
|`0x80044342`
`-2147204286`|Name: **CannotFindDomainAccount**
Message: `Invalid domain account`|
|`0x8004F060`
`-2147159968`|Name: **CannotFindLayerToMerge**
Message: `Cannot find a suitable layer to merge Component: [{0}] with Id: [{1}]. Cannot continue with the operation. Check the layers of the component.`|
|`0x800404eb`
`-2147220245`|Name: **CannotFindObjectInQueue**
Message: `The object was not found in the given queue`|
|`0x800404ec`
`-2147220244`|Name: **CannotFindUserQueue**
Message: `Cannot find user queue`|
-|`0x8004F6A3`
`-2147158365`|Name: **CannotFollowInactiveEntity**
Message: `Can't follow inactive record. `|
+|`0x8004F6A3`
`-2147158365`|Name: **CannotFollowInactiveEntity**
Message: `Can't follow inactive record.`|
|`0x80090012`
`-2146893806`|Name: **CannotGenerateFileSasUrl**
Message: `Cannot generate SAS url for this file.`|
|`0x80048446`
`-2147187642`|Name: **CannotGrantAccessToAddressBookFilters**
Message: `Cannot grant access to address book filters`|
|`0x80040271`
`-2147220879`|Name: **CannotGrantAccessToOfflineFilters**
Message: `Cannot grant access to offline filters`|
@@ -761,7 +763,8 @@
|`0x80061114`
`-2147086060`|Name: **CannotUpdateExternalPartyWithSameCorrelationKey**
Message: `An external party record already exists with the same correlation key value.`|
|`0x80044901`
`-2147202815`|Name: **CannotUpdateGoalPeriodInfoChildGoal**
Message: `You cannot update goal period related attributes on a child goal.`|
|`0x80044910`
`-2147202800`|Name: **CannotUpdateGoalPeriodInfoClosedGoal**
Message: `You cannot change the time period of this goal because there are one or more closed subordinate goals.`|
-|`0x80048461`
`-2147187615`|Name: **CannotUpdateLogicalAttribute**
Message: `Cannot update logical attribute {0} `|
+|`0x80048362`
`-2147187870`|Name: **CannotUpdateLicenseStateForUser**
Message: `User with SystemUserId={0} and SystemManagedUserType={1} cannot have their licensed state updated.`|
+|`0x80048461`
`-2147187615`|Name: **CannotUpdateLogicalAttribute**
Message: `Cannot update logical attribute {0}`|
|`0x8004F024`
`-2147160028`|Name: **CannotUpdateManagedSolution**
Message: `Cannot update solution '{0}' because it is a managed solution.`|
|`0x80044900`
`-2147202816`|Name: **CannotUpdateMetricOnChildGoal**
Message: `You cannot update metric on a child goal.`|
|`0x80044902`
`-2147202814`|Name: **CannotUpdateMetricOnGoalWithChildren**
Message: `You cannot update metric on a goal which has associated child goals.`|
@@ -801,6 +804,7 @@
|`0x8005F214`
`-2147093996`|Name: **CantSaveRecordInOffline**
Message: `You can't save this record while you're offline.`|
|`0x8006111A`
`-2147086054`|Name: **CantSetIsGuestProfile**
Message: `You can’t set or change the value of the IsGuestProfile field because it’s for internal use only.`|
|`0x8005F224`
`-2147093980`|Name: **CantUpdateOnlineRecord**
Message: `You can’t update this record because it doesn’t exist in the offline mode.`|
+|`0x80072360`
`-2147015840`|Name: **CanvasAppCouldNotBeDeletedDueToBeingARequiredDependency**
Message: `The {0} with name '{1}' cannot be deleted because it is a required dependency by one or more components (from managed or active layer) outside this solution.`|
|`0x80050121`
`-2147155679`|Name: **CanvasAppNotPartOfAppModule**
Message: `The custom page being opened is not part of this app.`|
|`0x80072356`
`-2147015850`|Name: **CanvasAppsExpectedFileMissing**
Message: `The solution specified an expected assets file but that file was missing or invalid.`|
|`0x80072354`
`-2147015852`|Name: **CanvasAppsInvalidSolutionFileContent**
Message: `The request to import a canvas app should contain at least one asset file.`|
@@ -873,6 +877,7 @@
|`0x80061771`
`-2147084431`|Name: **CloneSolutionPatchException**
Message: `Patch '{0}' has a matching or higher version ({1}) than that of the patch being installed.`|
|`0x80071112`
`-2147020526`|Name: **CloneTitleTooLong**
Message: `A validation error occurred. The length of the Name attribute of the mobileofflineprofile entity exceeded the maximum allowed length of 200.`|
|`0x8003F452`
`-2147224494`|Name: **CloseActiveChildCaseFirst**
Message: `Close active child case before closing parent case.`|
+|`0x80098020`
`-2146861024`|Name: **ClusteringFeatureNotAvailable**
Message: `This operation couldn't be completed because {0} feature is not enabled for your organization as {1}.`|
|`0x80090019`
`-2146893799`|Name: **CmkStatusMismatch**
Message: `The CMK status does not match. Input: {0}, expected: {1}`|
|`0x80061500`
`-2147085056`|Name: **ColorStripAttributesExceeded**
Message: `Color Strip section cannot have more than 1 attribute`|
|`0x80061502`
`-2147085054`|Name: **ColorStripAttributesInvalid**
Message: `Color Strip section can only have attributes of type Two Options, Option Set and Status Reason`|
@@ -992,7 +997,7 @@
|`0x80050300`
`-2147155200`|Name: **CrmLicensingError**
Message: `A failure occurred during licensing check.`|
|`0x80050307`
`-2147155193`|Name: **CrmLicensingNoAccessViaEntitlementBilling**
Message: `This user with userId={0} does not have an appropriate license to access this application uniqueName={1} with Id={2} from publisher={3}. An appropriate license is required or the user needs to have sufficient per app licenses allocated, for accessing custom applications. For more information, please refer https://go.microsoft.com/fwlink/p/?linkid=2122607 Error=CrmLicensingNoAccessViaEntitlementBilling.`|
|`0x80050303`
`-2147155197`|Name: **CrmLicensingNoRestrictedServicePlan**
Message: `This application {0}({1}) requires an appropriate license. Technical Information: This user with user Id {2} does not have appropriate license(s) to access this application from publisher {3}. An appropriate license is required with one of these service plans : {4}. Error=CrmLicensingNoRestrictedServicePlan.`|
-|`0x80050301`
`-2147155199`|Name: **CrmLicensingNoServicePlan**
Message: `This user with userId={0} does not have appropriate license(s) to access this application uniqueName={1} with Id={2} from publisher={3}. An appropriate license is required with one of these service plans : {5}. For more information, please refer https://go.microsoft.com/fwlink/p/?linkid=2122607 Error=CrmLicensingNoServicePlan.`|
+|`0x80050301`
`-2147155199`|Name: **CrmLicensingNoServicePlan**
Message: `This user with userId={0} does not have appropriate license(s) to access this application uniqueName={1} with Id={2} from publisher={3}. An appropriate license is required with one of these service plans: {5}. For additional troubleshooting steps, please refer https://go.microsoft.com/fwlink/p/?linkid=2314633. For a mapping of all licenses to service plans, refer https://go.microsoft.com/fwlink/p/?linkid=2307706 Error=CrmLicensingNoServicePlan.`|
|`0x80050302`
`-2147155198`|Name: **CrmLicensingNoUserPass**
Message: `This user with userId={0} does not have an appropriate license to access this application uniqueName={1} with Id={2} from publisher={3}. An appropriate license is required or the organization instance needs to have sufficient per app licenses assigned, for accessing custom applications. For more information, please refer https://go.microsoft.com/fwlink/p/?linkid=2122607 Error=CrmLicensingNoUserPass.`|
|`0x8004B056`
`-2147176362`|Name: **CrmLiveAddOnAddLicenseLimitReached**
Message: `Your subscription has the maximum number of user licenses available. For additional licenses, please contact our sales organization at 1-877-Dynamics 365-CHOICE (276-2464).`|
|`0x8004B057`
`-2147176361`|Name: **CrmLiveAddOnAddStorageLimitReached**
Message: `Your storage consumption has reached the maximum storage limit allotted to this environment. Trial environments are allocated with limited resources. If you are not using a trial environment, please contact support.`|
@@ -1093,20 +1098,21 @@
|`0x80071156`
`-2147020458`|Name: **CyclicDependency**
Message: `Cyclic component dependency detected. Please check the exception for more details. Fix the invalid dependencies and try the operation one more time. Detaisl: {0}`|
|`0x8004417F`
`-2147204737`|Name: **CyclicReferencesNotSupported**
Message: `The input contains a cyclic reference, which is not supported.`|
|`0x80072401`
`-2147015679`|Name: **DatabaseCallsBlockedFailure**
Message: `This invocation may lead to calls to Database which is not allowed.`|
+|`0x80048564`
`-2147187356`|Name: **DatabaseUnavailable**
Message: `Database is currently unavailable. This operation should be retried later. Database connection exception message: {0}`|
|`0x8004B065`
`-2147176347`|Name: **DatacenterNotAvailable**
Message: `This datacenter endpoint is not currently available for this organization.`|
|`0x80040345`
`-2147220667`|Name: **DataColumnsNumberMismatch**
Message: `The number of fields differs from the number of column headings.`|
-|`0x80048744`
`-2147186876`|Name: **DataEngineComputedColumnQueryThrottling**
Message: `This query cannot be executed because it conflicts with Query Throttling; the query uses a computed column in a filter condition, which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
+|`0x80048744`
`-2147186876`|Name: **DataEngineComputedColumnQueryThrottling**
Message: `This query is throttled as it negatively impacts the database health; the query uses a computed column in a filter condition, which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
|`0x80048589`
`-2147187319`|Name: **DataEngineCreateIndexCannotQueue**
Message: `The adhoc request already exists`|
|`0x80048588`
`-2147187320`|Name: **DataEngineCreateIndexMetadataAlreadyExists**
Message: `The requested index already Exists in Index Metadata. The index will be created during the nightly job.`|
|`0x80048590`
`-2147187312`|Name: **DataEngineCreateIndexSqlIndexAlreadyExists**
Message: `The Index or a super-set index already exists in sql.`|
|`0x80048586`
`-2147187322`|Name: **DataEngineIndexMGMTApisForbidden**
Message: `Forbidden: Invalid User for endpoint`|
|`0x80048587`
`-2147187321`|Name: **DataEngineIndexMGMTApisInvalidInput**
Message: `Input Invalid: {0}`|
-|`0x80048644`
`-2147187132`|Name: **DataEngineLeadingWildcardQueryThrottling**
Message: `This query cannot be executed because it conflicts with Query Throttling; the query uses a leading wildcard value in a filter condition, which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
-|`0x80048745`
`-2147186875`|Name: **DataEnginePerformanceValidationIssuesQueryThrottling**
Message: `This query cannot be executed because it conflicts with Query Throttling; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
+|`0x80048644`
`-2147187132`|Name: **DataEngineLeadingWildcardQueryThrottling**
Message: `This query is throttled as it negatively impacts the database health; the query uses a leading wildcard value in a filter condition, which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
+|`0x80048745`
`-2147186875`|Name: **DataEnginePerformanceValidationIssuesQueryThrottling**
Message: `This query is throttled as it negatively impacts the database health; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
|`0x80049544`
`-2147183292`|Name: **DataEngineQueryBlocking**
Message: `This query cannot be executed because it was blocked by the platform. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
|`0x80049545`
`-2147183291`|Name: **DataEngineQueryBlockingQDS**
Message: `This query cannot be executed because it was blocked by the platform. This was blocked due to query complexity leading to timeouts. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
-|`0x80048544`
`-2147187388`|Name: **DataEngineQueryThrottling**
Message: `This query cannot be executed because it conflicts with Query Throttling. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
-|`0x80050544`
`-2147154620`|Name: **DataEngineSerializeQueryThrottling**
Message: `This query cannot be executed because it conflicts with Query Throttling. The query is restricted to limited parallel executions. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
+|`0x80048544`
`-2147187388`|Name: **DataEngineQueryThrottling**
Message: `This query is throttled as it negatively impacts the database health. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
+|`0x80050544`
`-2147154620`|Name: **DataEngineSerializeQueryThrottling**
Message: `This query is throttled as it negatively impacts the database health. The query is restricted to limited parallel executions. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952`|
|`0x80160021`
`-2146041823`|Name: **DataFieldNameIsMissing**
Message: `Required attribute \datafieldname\ is missing for control. More Details:{0}`|
|`0x8006041b`
`-2147089381`|Name: **DatafieldNameShouldBeNull**
Message: `ActionStep {0} references invalid DataFieldName {1}.`|
|`0x80160022`
`-2146041822`|Name: **DataFieldSpecifiedIsNotALookup**
Message: `The datafieldname attribute {0} is not of type lookup. More Details:{1}`|
@@ -1156,7 +1162,7 @@
|`0x80090910`
`-2146891504`|Name: **DelegatedAuthorizationTeamNotFound**
Message: `Matching delegated authorization team not found for delegated authorization '{0}'.`|
|`0x80097208`
`-2146864632`|Name: **DelegatedTeamMembershipNotAllowed**
Message: `Team '{0}' is associated to a delegated authorization and cannot have members.`|
|`0x8004501A`
`-2147200998`|Name: **DeleteActiveWorkflowTemplateDependency**
Message: `Cannot delete workflow dependency from a published workflow template .`|
-|`0x80049950`
`-2147182256`|Name: **DeletedItemRefMarkedInvalid**
Message: `Deleted item ref '{0}' has been marked invalid for restore. This entity cannot be restored. `|
+|`0x80049950`
`-2147182256`|Name: **DeletedItemRefMarkedInvalid**
Message: `Deleted item ref '{0}' has been marked invalid for restore. This entity cannot be restored.`|
|`0x80097262`
`-2146864542`|Name: **DeleteElasticTableDataError**
Message: `DeleteElasticTableData failed with Status code : '{0}'`|
|`0x80045006`
`-2147201018`|Name: **DeletePublishedWorkflowDefinitionWorkflowDependency**
Message: `Cannot delete a workflow dependency for a published workflow definition.`|
|`0x80045004`
`-2147201020`|Name: **DeleteWorkflowActivation**
Message: `Cannot delete a workflow activation.`|
@@ -1204,6 +1210,7 @@
|`0x80048cf8`
`-2147185416`|Name: **DiscountTypeAndPriceLevelCurrencyNotEqual**
Message: `The currency of the discount needs to match the currency of the price list for discount type amount.`|
|`0x80050124`
`-2147155676`|Name: **DiskSpaceNotEnough**
Message: `There is not enough space in the Temp Folder.`|
|`0x80040c06`
`-2147218426`|Name: **DistinctClauseUnsupportedForMultiPartitionQuery**
Message: `Distinct clause is not supported for multi-partition query.`|
+|`0x80040c0c`
`-2147218420`|Name: **DistinctWithGroupByClauseUnsupportedForMultiPartitionQuery**
Message: `Distinct with group by clause is not supported for multi-partition query.`|
|`0x80072531`
`-2147015375`|Name: **DistinctWithImageAttributeError**
Message: `Distinct is not allowed when image attributes are selected.`|
|`0x80048453`
`-2147187629`|Name: **DistributeListAssociatedVary**
Message: `This campaign activity cannot be distributed. Mail merge activities can be done only on marketing lists that are all the same record type. For this campaign activity, remove marketing lists so that the remaining ones are the same record type, and then try again.`|
|`0x80048454`
`-2147187628`|Name: **DistributeNoListAssociated**
Message: `This campaign activity cannot be distributed. No marketing lists are associated with it. Add at least one marketing list and try again.`|
@@ -1374,8 +1381,8 @@
|`0x80060421`
`-2147089375`|Name: **EntityIsNotBusinessProcessFlowEnabled**
Message: `The IsBusinessProcessEnabled property of the {0} entity is false.`|
|`0x80047008`
`-2147192824`|Name: **EntityIsNotCustomizable**
Message: `The specified entity is not customizable`|
|`0x8006111B`
`-2147086053`|Name: **EntityIsNotEnabledForExternalParty**
Message: `You can't create/update an external party item associated to an entity that is not enabled for external party.`|
-|`0x8004F6A2`
`-2147158366`|Name: **EntityIsNotEnabledForFollow**
Message: `This entity is not enabled to be followed. `|
-|`0x8004F6A1`
`-2147158367`|Name: **EntityIsNotEnabledForFollowUser**
Message: `This entity is not enabled to be followed. `|
+|`0x8004F6A2`
`-2147158366`|Name: **EntityIsNotEnabledForFollow**
Message: `This entity is not enabled to be followed.`|
+|`0x8004F6A1`
`-2147158367`|Name: **EntityIsNotEnabledForFollowUser**
Message: `This entity is not enabled to be followed.`|
|`0x80043b1e`
`-2147206370`|Name: **EntityIsUnlocked**
Message: `This entity is already unlocked.`|
|`0x80090110`
`-2146893552`|Name: **EntityKeyAttributeNotValidForCreate**
Message: `Attribute of an entity key must be valid for create. Atribute Name = '{0}' Id = '{1}'`|
|`0x80090112`
`-2146893550`|Name: **EntityKeyAttributeNotValidForCreateAndUpdate**
Message: `Attribute of an entity key must be valid for create and update. Atribute Name = '{0}' Id = '{1}'`|
@@ -1392,7 +1399,7 @@
|`0x80040387`
`-2147220601`|Name: **EntityLoopBeingCreated**
Message: `Creating this parental association would create a loop in this entity hierarchy.`|
|`0x80040386`
`-2147220602`|Name: **EntityLoopExists**
Message: `Loop exists in this entity hierarchy.`|
|`0x8005F238`
`-2147093960`|Name: **EntityMetadataSyncFailed**
Message: `There were problems with the server configurations. There was a problem with the server configuration changes. We are unable to load the application, please contact your Dynamics 365 administrator.`|
-|`0x8005F239`
`-2147093959`|Name: **EntityMetadataSyncFailedWithContinue**
Message: `There were difficulties with the server configuration changes. You can continue to use the app with the older configuration, however, you may experience problems including errors when saving. Please contact your Dynamics 365 administrator. `|
+|`0x8005F239`
`-2147093959`|Name: **EntityMetadataSyncFailedWithContinue**
Message: `There were difficulties with the server configuration changes. You can continue to use the app with the older configuration, however, you may experience problems including errors when saving. Please contact your Dynamics 365 administrator.`|
|`0x80048334`
`-2147187916`|Name: **EntityNotEnabledForAutoCreatedAccessTeams**
Message: `The entity with logicalname {0} and ObjectTypeCode {1} is not enabled for auto created access teams.`|
|`0x8004E00C`
`-2147164148`|Name: **EntityNotEnabledForCharts**
Message: `Charts are not enabled on the specified primary entity type code: {0}.`|
|`0x8005F200`
`-2147094016`|Name: **EntityNotEnabledForThisDevice**
Message: `Entity not enabled to be viewed in this device`|
@@ -1594,12 +1601,13 @@
|`0x8009724D`
`-2146864563`|Name: **FilterOnSecuredAttributeCallerCantReadNotSupportedForElasticTables**
Message: `Caller does not have read permission on secured attribute ('{0}'). Filtering on this attribute without permission is not supported for Elastic Tables.`|
|`0x80060443`
`-2147089341`|Name: **FinalMergedEntityIsNull**
Message: `Error creating or updating Business Process: final merged entity cannot be null.`|
|`0x80090300`
`-2146893056`|Name: **FinanceAndOperationsVirtualEntityInvalidDataSource**
Message: `Unable to establish connection using data source: '{0}'. Failed to sync entity metadata. Ensure the data source is configured properly.`|
+|`0x80090318`
`-2146893032`|Name: **FinanceAndOperationsVirtualEntityInvalidDataSourceV2**
Message: `Unable to establish connection using data source: '{0}', Error: '{1}' Ensure the data source is configured properly.`|
|`0x80090301`
`-2146893055`|Name: **FinanceAndOperationsVirtualEntityInvalidEntities**
Message: `Unable to sync metadata for entities: '{0}'. Ensure the entities are available in data source: '{1}'.`|
|`0x80090302`
`-2146893054`|Name: **FinanceAndOperationsVirtualEntitySyncError**
Message: `Failed to sync entity metadata for entity '{0}'. Exception details: {1}.`|
-|`0x80097501`
`-2146863871`|Name: **FinOpsCallBackException**
Message: ` Finance and Operations returned an exception, Error Code "{0}".`|
-|`0x80097504`
`-2146863868`|Name: **FinOpsGrpcChannelGenericException**
Message: ` An error has occured when communicating with Finance And Operations.`|
-|`0x80097503`
`-2146863869`|Name: **FinOpsGrpcChannelRpcException**
Message: ` An error has occured when communicating with Finance And Operations. Error Detail- {0}.`|
-|`0x80097502`
`-2146863870`|Name: **FinOpsGrpcChannelTimeoutException**
Message: ` Timeout error has occured when communicating with Finance And Operations. Error Detail- {0}.`|
+|`0x80097501`
`-2146863871`|Name: **FinOpsCallBackException**
Message: `Finance and Operations returned an exception, Error Code "{0}".`|
+|`0x80097504`
`-2146863868`|Name: **FinOpsGrpcChannelGenericException**
Message: `An error has occured when communicating with Finance And Operations.`|
+|`0x80097503`
`-2146863869`|Name: **FinOpsGrpcChannelRpcException**
Message: `An error has occured when communicating with Finance And Operations. Error Detail- {0}.`|
+|`0x80097502`
`-2146863870`|Name: **FinOpsGrpcChannelTimeoutException**
Message: `Timeout error has occured when communicating with Finance And Operations. Error Detail- {0}.`|
|`0x80060456`
`-2147089322`|Name: **FirstStageIdInTraversedPathDoesNotMatchFirstStageIdInBusinessProcess**
Message: `First Stage ID in traversed path ‘{0}’ does not match first Stage ID in Business Process ‘{1}’. Please contact your system administrator.`|
|`0x80044903`
`-2147202813`|Name: **FiscalPeriodGoalMissingInfo**
Message: `For a goal of fiscal period type, the fiscal period attribute must be set.`|
|`0x80043809`
`-2147207159`|Name: **FiscalSettingsAlreadyUpdated**
Message: `Fiscal settings have already been updated. They can be updated only once.`|
@@ -1700,7 +1708,7 @@
|`0x80048060`
`-2147188640`|Name: **ImportCustomizationsBadZipFileError**
Message: `The solution file is invalid. The compressed file must contain the following files at its root: solution.xml, customizations.xml, and [Content_Types].xml. Customization files exported from previous versions of Microsoft Dynamics 365 are not supported.`|
|`0x8004E308`
`-2147163384`|Name: **ImportDashboardDeletedError**
Message: `A dashboard with the same id is marked as deleted in the system. Please first publish the system form entity and import again.`|
|`0x80048049`
`-2147188663`|Name: **ImportDefaultAsPackageError**
Message: `The package supplied for the default solution is trying to install it in managed mode. The default solution cannot be managed. In the XML for the default solution, set the Managed value back to "false" and try to import the solution again.`|
-|`0x80048034`
`-2147188684`|Name: **ImportDependencySolutionError**
Message: `{0} requires solutions that are not currently installed. Import the following solutions before Importing this one. {1} `|
+|`0x80048034`
`-2147188684`|Name: **ImportDependencySolutionError**
Message: `{0} requires solutions that are not currently installed. Import the following solutions before Importing this one. {1}`|
|`0x8004810c`
`-2147188468`|Name: **ImportDuplicateEntity**
Message: `This import has failed because a different entity with the identical name, {0}, already exists in the target organization.`|
|`0x8004800C`
`-2147188724`|Name: **ImportEmailTemplateError**
Message: `There was an error in parsing the email templates in Import Xml`|
|`0x8004802B`
`-2147188693`|Name: **ImportEmailTemplateErrorMissingFile**
Message: `E-mail Template '{0}' import: The attachment '{1}' was not found in the import zip file.`|
@@ -1765,6 +1773,7 @@
|`0x80048073`
`-2147188621`|Name: **ImportServiceEndpointError**
Message: `An error occurred while importing Service Endpoints.`|
|`0x80048011`
`-2147188719`|Name: **ImportSiteMapError**
Message: `An error occurred while importing the Site Map.`|
|`0x8004F868`
`-2147157912`|Name: **ImportSlaError**
Message: `An error occurred while importing SLAs.`|
+|`0x80072048`
`-2147016632`|Name: **ImportSolutionAfterAppUpdatesOperationFailed**
Message: `Solution import failed due to failure in installing required dependencies. Please see addition details in Solution history record of this solution import operation.`|
|`0x8004804C`
`-2147188660`|Name: **ImportSolutionBlockedByRunSafeInternalErrors**
Message: `An error occurred while trying to run solution checker enforcement on the importing solution. Try importing the solution again. If this problem persists, contact your system administrator.`|
|`0x8004803D`
`-2147188675`|Name: **ImportSolutionBlockedByRunSafeIssues**
Message: `Solution is blocked from importing due to critical violations. Fix these violations, then retry the import.`|
|`0x80048033`
`-2147188685`|Name: **ImportSolutionError**
Message: `An error occurred while importing a Solution.`|
@@ -1831,7 +1840,7 @@
|`0x80048502`
`-2147187454`|Name: **IncorrectSingleFileMultipleEntityMap**
Message: `There should be two or more Entity Mappings defined when EntitiesPerFile in ImportMap is set to Multiple`|
|`0x80048360`
`-2147187872`|Name: **IncorrectUserAzureState**
Message: `User with SystemUserId={0} and AzureActiveDirectoryObjectId={1} is present in Azure Active Directory with state {2}. AzureState can't be set to incorrect value={3}.`|
|`0x80060991`
`-2147087983`|Name: **IncreasingDaysWillResetMobileOfflineData**
Message: `Increasing the number of days will cause a reset of mobile offline data and a resynchronization with mobile devices.`|
-|`0x80048d40`
`-2147185344`|Name: **IndexExceedsMaxLength**
Message: `The index entry of length for the index exceeds the maximum length. Please try removing some columns or reduce the number of columns in the table. `|
+|`0x80048d40`
`-2147185344`|Name: **IndexExceedsMaxLength**
Message: `The index entry of length for the index exceeds the maximum length. Please try removing some columns or reduce the number of columns in the table.`|
|`0x8005E008`
`-2147098616`|Name: **IndexOutOfRange**
Message: `The index {0} is out of range for {1}. Number of elements present are {2}.`|
|`0x80060895`
`-2147088235`|Name: **IndexSizeConstraintViolated**
Message: `Index size exceeded the size limit of {0} bytes. The key is too large. Try removing some columns or making the strings in string columns shorter.`|
|`0x8004F800`
`-2147158016`|Name: **InitializeErrorNoReadOnSource**
Message: `The operation could not be completed because you donot have read access on some of the fields in {0} record.`|
@@ -2055,6 +2064,7 @@
|`0x80040396`
`-2147220586`|Name: **InvalidFileBadCharacters**
Message: `The file could not be uploaded because it contains invalid character(s)`|
|`0x80090000`
`-2146893824`|Name: **InvalidFileRangeRequested**
Message: `Chunk range used in this call is either not valid or it is bigger than allowed {0} MB.`|
|`0x80090015`
`-2146893803`|Name: **InvalidFileRangeRequestedSqlStorage**
Message: `{0} in multiple chunks is not supported for the files stored in the database.`|
+|`0x80072524`
`-2147015388`|Name: **InvalidFileRecordsFound**
Message: `Invalid file records found for requested {0}`|
|`0x80090011`
`-2146893807`|Name: **InvalidFileSasUrl**
Message: `SAS url has either expired or is invalid.`|
|`0x800608CC`
`-2147088180`|Name: **InvalidFileType**
Message: `Invalid File Type.`|
|`0x8004E01E`
`-2147164130`|Name: **InvalidFilterCriteriaForVisualization**
Message: `The visualization cannot be rendered for the given filter criteria.`|
@@ -2326,7 +2336,7 @@
|`0x80048511`
`-2147187439`|Name: **InvalidTransformationParameterEmptyCollection**
Message: `The transformation parameter: {0} has an invalid input value length: {1}. The parameter length cannot be an empty collection.`|
|`0x80040382`
`-2147220606`|Name: **InvalidTransformationParameterMapping**
Message: `The transformation parameter mapping defined is invalid. Check that the target attribute name exists.`|
|`0x8004037c`
`-2147220612`|Name: **InvalidTransformationParameterMappings**
Message: `One or more transformation parameter mappings are invalid or do not match the transformation parameter description.`|
-|`0x80048510`
`-2147187440`|Name: **InvalidTransformationParameterOutsideRange**
Message: `The transformation parameter: {0} has an invalid input value: {1}. The parameter is out of the permissible range: {2}. `|
+|`0x80048510`
`-2147187440`|Name: **InvalidTransformationParameterOutsideRange**
Message: `The transformation parameter: {0} has an invalid input value: {1}. The parameter is out of the permissible range: {2}.`|
|`0x80048512`
`-2147187438`|Name: **InvalidTransformationParameterOutsideRangeGeneric**
Message: `One or more input transformation parameter values are outside the permissible range: {0}.`|
|`0x80048507`
`-2147187449`|Name: **InvalidTransformationParametersGeneric**
Message: `The transformation parameter: {0} has an invalid input value: {1}. The parameter must be of type: {2}.`|
|`0x80048508`
`-2147187448`|Name: **InvalidTransformationParameterString**
Message: `The transformation parameter: {0} has an invalid input value: {1}. The parameter must be a string that is not empty.`|
@@ -2450,7 +2460,7 @@
|`0x8004F050`
`-2147159984`|Name: **LayerDesiredOrderInvalidXMLDetail**
Message: `The LayerDesiredOrder parameter contains an invalid XML schema. Check the property [{0}].`|
|`0x8004F052`
`-2147159982`|Name: **LayerDesiredOrderNotAllowedOnPatch**
Message: `The LayerDesiredOrder parameter cannot be used when importing a Patch. The parameter can only be used while importing a solution.`|
|`0x8004F048`
`-2147159992`|Name: **LayerDesiredOrderNotSamePublisher**
Message: `The solution [{0}] was used in the LayerDesiredOrder parameter, but its publisher [{1}] does not match the publisher of the solution being installed: [{2}]. This parameter can be used only by solutions from the same publisher.`|
-|`0x8004F065`
`-2147159963`|Name: **LayerDesiredOrderNotWhitelist**
Message: `The LayerDesiredOrder parameter is present in the import request of [{0}], but this solution is not allowed to use it. Solutions must be allow listed to use this feature.`|
+|`0x8004F065`
`-2147159963`|Name: **LayerDesiredOrderNotWhitelist**
Message: `The LayerDesiredOrder parameter is present in the import request of [{0}], but this solution is not allowed to use it. Solutions must be allow (white) listed to use this feature.`|
|`0x8004F047`
`-2147159993`|Name: **LayerDesiredOrderPendingUpgrade**
Message: `The solution [{0}] used in LayerDesiredOrder parameter has a pending upgrade. Please complete its upgrade before retrying this operation.`|
|`0x8004F056`
`-2147159978`|Name: **LayerDesiredOrderPublisherNotAllowed**
Message: `The publisher [{0}] is not allowed to use the LayerDesiredOrder parameter.`|
|`0x8004F058`
`-2147159976`|Name: **LayerDesiredOrderRestrictedSolution**
Message: `The LayerDesiredOrder parameter cannot be used on [{0}].`|
@@ -2477,6 +2487,7 @@
|`0x80090438`
`-2146892744`|Name: **LinkedAttributeOptionSetValueMismatch**
Message: `OptionSet value {2} is not found in linked attribute optionset for attribute {0} of entity {1}`|
|`0x80071120`
`-2147020512`|Name: **LinkedEntitiesAreNotAllowed**
Message: `The filter contains a link-entity with an invalid link-type. The link-type must be "Any" or "Not Any".`|
|`0x80071143`
`-2147020477`|Name: **LinkEntityCountExceeded**
Message: `The profile could not be published because one or more tables exceed the allowed number of relationships of {1}. Please reduce the number of relationships for the following table(s): {0}.`|
+|`0x80041d3a`
`-2147214022`|Name: **LinkEntityVirtualFilterNotPermitted**
Message: `RetrieveMultiple cannot accept LinkEntity which is virtual entity with filters defined outside of LinkEntity node. Move the filters inside.`|
|`0x8004D239`
`-2147167687`|Name: **LiveAdminUnknownCommand**
Message: `Unknown administration command {0}`|
|`0x8004D238`
`-2147167688`|Name: **LiveAdminUnknownObject**
Message: `Unknown administration target {0}`|
|`0x8004B524`
`-2147175132`|Name: **LivePlatformEmailInvalidBody**
Message: `The "Body" parameter is blank or null`|
@@ -2491,6 +2502,7 @@
|`0x80072454`
`-2147015596`|Name: **LocalDataSourceTimeOutError**
Message: `The operation timed out. Please try again.`|
|`0x80072043`
`-2147016637`|Name: **LockdownOfUnmanagedSolutionImports**
Message: `This environment doesn't allow unmanaged customizations. This was a choice made by your admin, and certain actions won't be available or will be view only. Learn more: https://go.microsoft.com/fwlink/?linkid=2251006`|
|`0x80072042`
`-2147016638`|Name: **LockdownOfUnmangedCustomization**
Message: `This environment doesn't allow unmanaged customizations. This was a choice made by your admin, and certain actions won't be available or will be view only. Learn more: https://go.microsoft.com/fwlink/?linkid=2251006`|
+|`0x80072046`
`-2147016634`|Name: **LockdownOfUnmangedCustomizationForClusteredEnvironments**
Message: `This clustered environment doesn't allow unmanaged customizations. This was a choice made by your admin, and certain actions won't be available or will be view only.`|
|`0x8004F703`
`-2147158269`|Name: **LockStatusNotValidForDynamicList**
Message: `Lock Status cannot be specified for a dynamic list.`|
|`0x800608D2`
`-2147088174`|Name: **LogoImageNodeDoesNotExist**
Message: `Logo Image node in organization cache theme data doesnot exist.`|
|`0x80040372`
`-2147220622`|Name: **LongParseRow**
Message: `The row is too long to import`|
@@ -2562,7 +2574,7 @@
|`0x8006088C`
`-2147088244`|Name: **MailboxTrackingFolderMappingCannotBeUpdated**
Message: `The mailbox tracking folder mapping cannot be updated.`|
|`0x8005E247`
`-2147098041`|Name: **MailboxUnsupportedEmailServerType**
Message: `Server-side synchronization for appointments, contacts, and tasks isn't supported for POP3 or SMTP server types. Select a supported email type or change the synchronization method for appointments, contacts, and tasks to None.`|
|`0x80097303`
`-2146864381`|Name: **MalformODataAnnotationHeader**
Message: `Error identified on the 'odata.include-annotations' value inside the 'Prefer' header. Refer to the following link for more details: https://go.microsoft.com/fwlink/?linkid=2300109. See exception message for more details '{0}'.`|
-|`0x80060383`
`-2147089533`|Name: **ManagedBpfDeletionInvalid**
Message: ` The business process flow is part of a managed solution and cannot be individually deleted. Uninstall the parent solution to remove the business process flow.`|
+|`0x80060383`
`-2147089533`|Name: **ManagedBpfDeletionInvalid**
Message: `The business process flow is part of a managed solution and cannot be individually deleted. Uninstall the parent solution to remove the business process flow.`|
|`0x8004A114`
`-2147180268`|Name: **ManagedIdentityCredentialSourceNotSupported**
Message: `The configured Credential Source for ManagedIdentity is not support`|
|`0x8004A119`
`-2147180263`|Name: **ManagedIdentityPublisherRestriction**
Message: `ManagedIdentity cannot be assigned to a component from different publisher.`|
|`0x80072457`
`-2147015593`|Name: **ManagedProcessDeletionError**
Message: `The process is part of a managed solution and cannot be individually deleted. Uninstall the parent solution to remove the process.`|
@@ -2813,6 +2825,7 @@
|`0x8004E123`
`-2147163869`|Name: **OccurrenceSkipsOverBackward**
Message: `Cannot reschedule an occurrence of the recurring appointment if it skips over an earlier occurrence of the same appointment.`|
|`0x8004E122`
`-2147163870`|Name: **OccurrenceSkipsOverForward**
Message: `Cannot reschedule an occurrence of the recurring appointment if it skips over a later occurrence of the same appointment.`|
|`0x8004E121`
`-2147163871`|Name: **OccurrenceTimeSpanTooBig**
Message: `Cannot perform the operation. An instance is outside of series effective expansion range.`|
+|`0x80040c0a`
`-2147218422`|Name: **ODataBatchChangeMultiplePartitionsNotSupported**
Message: `Request in OData $batch operations can't target more than one partition due to changeset transaction requirements. Requested partitions: '{0}'.`|
|`0x80040c00`
`-2147218432`|Name: **ODataBatchChangeSetPartitionedRequestNotSupported**
Message: `Request '{0}' in OData $batch changesets is targeting a remote partition '{1}' instead of local. This is not supported. Please directly execute the $batch operation on targeted organization instead of routing through this one.`|
|`0x80048d19`
`-2147185383`|Name: **ODataClientPayloadError**
Message: `Error identified in Payload provided by the user for Entity :'{0}', For more information on this error please follow this help link {2} ----> InnerException : {1}.`|
|`0x8004B00C`
`-2147176436`|Name: **OfferingCategoryAndTokenNull**
Message: `Offer category and Billing Token are both missing, but at least one is required.`|
@@ -2869,6 +2882,7 @@
|`0x80094007`
`-2146877433`|Name: **OptionSetValuesNotFound**
Message: `Could not find OptionSet values for Table: '{0}', AttributeMetadataId: '{1}'.`|
|`0x80048402`
`-2147187710`|Name: **OptionValuePrefixOutOfRange**
Message: `CustomizationOptionValuePrefix must be a number between {0} and {1}`|
|`0x80048d16`
`-2147185386`|Name: **OrderByColumnsMustBeUnique**
Message: `A column has been specified more than once in the order by list. Columns in the order by list must be unique.`|
+|`0x80040c0d`
`-2147218419`|Name: **OrderByNotSubSequenceOfGroupByInMultiPartitionQuery**
Message: `Order by columns must be a subsequence of group by columns in multi-partition queries.`|
|`0x8004804a`
`-2147188662`|Name: **OrganizationDataServiceDeprecatedError**
Message: `The Organization Data Service (OData v2.0 endpoint) has been removed. Please use the Dataverse Web API (OData v4.0) endpoint instead. See https://go.microsoft.com/fwlink/?linkid=2206384`|
|`0x8004A104`
`-2147180284`|Name: **OrganizationDisabled**
Message: `The Dynamics 365 organization you are attempting to access is currently disabled. Please contact your system administrator`|
|`0x8004B044`
`-2147176380`|Name: **OrganizationMigrationUnderway**
Message: `Organization migration is already underway.`|
@@ -2903,8 +2917,8 @@
|`0x80040361`
`-2147220639`|Name: **OwnerValueNotMapped**
Message: `The owner value is not mapped`|
|`0x80097379`
`-2146864263`|Name: **PackageEntityNotFound**
Message: `Package entity is not found in org, failed to validate dynamics billing context of workflow.`|
|`0x8005F21A`
`-2147093990`|Name: **PageNotFound**
Message: `Page not found. The record might not exist, or the link might be incorrect.`|
-|`0x80097505`
`-2146863867`|Name: **ParallelRequestsToFinOpsNotSupported**
Message: ` Concurrent sdk calls are not allowed. Please work with plugin owner to make sure multiple sdk calls in parallel are not made to avoid this error.`|
-|`0x80048d41`
`-2147185343`|Name: **ParamNotValidDataType**
Message: `The supplied value is not a valid instance of data type. Check the source data for invalid values and update the correct data type. `|
+|`0x80097505`
`-2146863867`|Name: **ParallelRequestsToFinOpsNotSupported**
Message: `Concurrent sdk calls are not allowed. Please work with plugin owner to make sure multiple sdk calls in parallel are not made to avoid this error.`|
+|`0x80048d41`
`-2147185343`|Name: **ParamNotValidDataType**
Message: `The supplied value is not a valid instance of data type. Check the source data for invalid values and update the correct data type.`|
|`0x80041d23`
`-2147214045`|Name: **ParentBusinessDoesNotExist**
Message: `The parent business Id is invalid.`|
|`0x8003F455`
`-2147224491`|Name: **ParentCaseNotAllowedAsAChildCase**
Message: `You can't add a parent case as a child case`|
|`0x80044905`
`-2147202811`|Name: **ParentChildMetricIdDiffers**
Message: `The metricid of child goal should be same as the parent goal.`|
@@ -2937,7 +2951,7 @@
|`0x8004431A`
`-2147204326`|Name: **PicklistValueOutOfRange**
Message: `The picklist value is out of the range.`|
|`0x80049949`
`-2147182263`|Name: **PicklistValueOutOfRangeRecycleBin**
Message: `Picklist value not valid, please add the invalid value back to the picklist before restoring record. See inner exception for details.`|
|`0x8005F212`
`-2147093998`|Name: **PingFailureErrorCode**
Message: `The system couldn't reconnect with your {#Brand_CRM} server.`|
-|`0x8004419e`
`-2147204706`|Name: **PipelineCancellationRequested**
Message: `The operation is cancelled as requested by the source - Sandbox`|
+|`0x8004419e`
`-2147204706`|Name: **PipelineCancellationRequested**
Message: `The request has been cancelled because it originated from a plugin that has already exceeded the 2 minute timeout limit.`|
|`0x80097622`
`-2146863582`|Name: **PlatformNotSupported**
Message: `The specified call has encountered an PlatformNotSupportedException, Retrying the operation may succeed or you can specify a request header "x-ms-select-stable-service" to be directed to the stable endpoint.`|
|`0x80072044`
`-2147016636`|Name: **PlatformSkuLockedForCustomization**
Message: `This is a platform environment and it only allows customizations from authorized Microsoft solutions.`|
|`0x8004418f`
`-2147204721`|Name: **PluginAssemblyContentSizeExceeded**
Message: `"The assembly content size '{0} bytes' has exceeded the maximum value allowed for isolated plug-ins '{1} bytes'."`|
@@ -2960,7 +2974,7 @@
|`0x80091007`
`-2146889721`|Name: **PluginSecureStoreTPSAssemblyNotRegistered**
Message: `Assembly is not registered in TPS`|
|`0x80091009`
`-2146889719`|Name: **PluginSecureStoreTPSClient**
Message: `Unable to create TPS Client`|
|`0x80091006`
`-2146889722`|Name: **PluginSecureStoreTPSKeyVaultUnconfigured**
Message: `KeyVaultURI was not configured for an Assembly in TPS`|
-|`0x80081118`
`-2146954984`|Name: **PluginTypeDisabled**
Message: `Plugin type {0} has been disabled. Please disable the steps registered on this plugin type. To re-enable plugin type, please contact Microsoft Dynamics 365 technical support.`|
+|`0x80081118`
`-2146954984`|Name: **PluginTypeDisabled**
Message: `Plugin type '{0}' has been disabled. Please disable the steps registered on this plugin type. To re-enable plugin type, please contact Microsoft Dynamics 365 technical support.`|
|`0x8004417C`
`-2147204740`|Name: **PluginTypeMustBeUnique**
Message: `Multiple plug-in types from the same assembly and with the same typename are not allowed.`|
|`0x80048116`
`-2147188458`|Name: **POAOperationConcurrentRequested**
Message: `More than one concurrent {0} requests detected for an Entity {1} and ObjectTypeCode {2}.`|
|`0x80090428`
`-2146892760`|Name: **PolymorphicLookupNotSupportedInSolutionAwareEntity**
Message: `The entity '{0}' is solution aware and cannot include the polymorphic lookup.`|
@@ -3010,13 +3024,14 @@
|`0x80041153`
`-2147217069`|Name: **PrivilegeChecker_CannotCreateRoleWithActiveRun**
Message: `Cannot create role using an active privilege checker run.`|
|`0x80041152`
`-2147217070`|Name: **PrivilegeChecker_CannotStartAnotherPrivilegeChecker**
Message: `A Privilege Checker run is already active for the specified user {0}.`|
|`0x80041151`
`-2147217071`|Name: **PrivilegeChecker_FeatureNotReady**
Message: `The Privilege Checker feature is not ready to be used yet.`|
+|`0x80041154`
`-2147217068`|Name: **PrivilegeChecker_OnlyUsersCanUse**
Message: `Only users can be traced for the privilege checker tool.`|
|`0x80040276`
`-2147220874`|Name: **PrivilegeCreateIsDisabledForOrganization**
Message: `Privilege Create is disabled for organization.`|
|`0x80040220`
`-2147220960`|Name: **PrivilegeDenied**
Message: `{5} {2}(Id = {3}) is missing {0} privilege on {1} entity(OTC={4}). Consider adding missing privilege to one of the principal (user/team) roles for the request to succeed.`|
|`0x80045054`
`-2147200940`|Name: **ProcessActionDoesNotExist**
Message: `Process Action does not exist.`|
|`0x80045053`
`-2147200941`|Name: **ProcessActionIsNotActive**
Message: `Process Action should be active to be used on Action Step.`|
|`0x80060379`
`-2147089543`|Name: **ProcessActionNameIncorrect**
Message: `Process Action “{0}” does not match the name configured: “{1}”. Contact your system administrator to check the configuration metadata if the error persists.`|
|`0x80045058`
`-2147200936`|Name: **ProcessActionWithInvalidInputOutputParam**
Message: `Process Action contains a parameter that is not supported. Name: {0}, type: {1}, direction: {2}.`|
-|`0x80045057`
`-2147200937`|Name: **ProcessActionWithInvalidInputParam**
Message: `Process Action contains a field in input parameter that is unsupported on Action Steps. Refer to {0} `|
+|`0x80045057`
`-2147200937`|Name: **ProcessActionWithInvalidInputParam**
Message: `Process Action contains a field in input parameter that is unsupported on Action Steps. Refer to {0}`|
|`0x80045056`
`-2147200938`|Name: **ProcessActionWithInvalidOutputParam**
Message: `Process Action contains a field in output parameter that is unsupported on Action Steps. Refer to {0}.`|
|`0x80060380`
`-2147089536`|Name: **ProcessActionWorkflowNotEnabledForOnDemand**
Message: `Process Action or Workflow must be enabled for on-demand execution to be available for action steps.`|
|`0x80060372`
`-2147089550`|Name: **ProcessControlDoesNotExistOnForm**
Message: `Process Control does not exist on form`|
@@ -3027,7 +3042,7 @@
|`0x80072553`
`-2147015341`|Name: **ProcessImageFailure**
Message: `Error occured when processing image. Reason: {0}`|
|`0x80060370`
`-2147089552`|Name: **ProcessInstanceNotFound**
Message: `Supplied process instance {0} does not match any existing instance on this entity {1}`|
|`0x80060398`
`-2147089512`|Name: **ProcessNameContainsInvalidCharacters**
Message: `The business process name contains invalid characters.`|
-|`0x80060418`
`-2147089384`|Name: **ProcessNameIsNullOrEmpty**
Message: `The business process flow name is NULL or empty. `|
+|`0x80060418`
`-2147089384`|Name: **ProcessNameIsNullOrEmpty**
Message: `The business process flow name is NULL or empty.`|
|`0x80060461`
`-2147089311`|Name: **ProcessStageIdIsEmpty**
Message: `Validation error: Primary Stage ID cannot be empty.`|
|`0x8004F995`
`-2147157611`|Name: **ProductCanOnlyBeUpdatedInDraft**
Message: `Product, product family and bundle can only be updated in draft state.`|
|`0x80061006`
`-2147086330`|Name: **ProductCloneFailed**
Message: `You can't clone a child record of a retired product family.`|
@@ -3062,6 +3077,9 @@
|`0x80061100`
`-2147086080`|Name: **ProfileRuleMissingRuleCriteria**
Message: `You can't activate this rule until you resolve any missing rule criteria information in the rule items.`|
|`0x80061103`
`-2147086077`|Name: **ProfileRulePublishedByOwner**
Message: `Your rule can't be activated until the current active rule is deactivated. The active rule can only be deactivated by the rule owner.`|
|`0x80061101`
`-2147086079`|Name: **ProfileRuleWorkflowAuthorGenericError**
Message: `An error occurred while authoring workflow. Please fix workflow definition and try again.`|
+|`0x80060569`
`-2147089047`|Name: **PromptFieldAdditionNotAllowed**
Message: `More than 5 columns of type Prompt filed are not allowed.`|
+|`0x80060567`
`-2147089049`|Name: **PromptFieldAIModelIDNotValid**
Message: `Provided AIModel Id as part of Formula defination {0} is not guid`|
+|`0x80060568`
`-2147089048`|Name: **PromptFieldDataTypeNotValid**
Message: `The {0} data type isn’t valid for the prompt field.`|
|`0x80160045`
`-2146041787`|Name: **PropertyBoundToNonExistingAttribute**
Message: `Property {0} is bound to a non-existent attribute {1} in entity {2}. More Details:{3}`|
|`0x80160051`
`-2146041775`|Name: **PropertyBoundToNonExistingAttributeInPrimaryAndRelatedEntitiesAndNotExistingAsFormParameter**
Message: `Property {0} is bound to a non-existent attribute {1} in current entity {2} or in related entity {3} and also not present as part of formParameters. More Details:{4}`|
|`0x80160046`
`-2146041786`|Name: **PropertyBoundToNonExistingEntity**
Message: `Property {0} is bound to an attribute in non-existent entity. More Details:{1}`|
@@ -3271,7 +3289,7 @@
|`0x80048469`
`-2147187607`|Name: **RelationshipRoleNodeNumberInvalid**
Message: `There must be two entity relationship role nodes when creating a new many-to-many entity relationship.`|
|`0x80048835`
`-2147186635`|Name: **RelationshipSchemaNameConflictWithFieldNameOnReferencedEntity**
Message: `RelationshipName {0} conflict with attribute name on entity {1} (entityid={2}). Please use unique name for relationship.`|
|`0x80090421`
`-2146892767`|Name: **RelationshipsMissingFromCreatePolymorphicLookupAttribute**
Message: `The OneToManyRelationships property must contain at least one relationship. Lookup attribute name '{0}', Relationships count '{1}'.`|
-|`0x8005F221`
`-2147093983`|Name: **RelatioshipAlreadyExists**
Message: `Selected Relationship {0} for entity already exists in profile under profile item association {1}. `|
+|`0x8005F221`
`-2147093983`|Name: **RelatioshipAlreadyExists**
Message: `Selected Relationship {0} for entity already exists in profile under profile item association {1}.`|
|`0x800608B8`
`-2147088200`|Name: **ReloginRequiredForSharePoint**
Message: `Relogin required. To continue use SharePoint integration, you need to relogin.`|
|`0x8004F075`
`-2147159947`|Name: **RemoveActiveCustomizationsFailedForEntity**
Message: `Entity '{0}' validation failed for property '{1}' which has value '{2}' on Active layer and value '{3}' on solution '{4}' layer. The values must match.`|
|`0x8004F059`
`-2147159975`|Name: **RemoveActiveCustomizationsNotSupported**
Message: `RemoveActiveCustomizations is not supported for components of type {0}.`|
@@ -3314,6 +3332,7 @@
|`0x80044302`
`-2147204350`|Name: **RequestIsNotAuthenticated**
Message: `Request is not authenticated.`|
|`0x8009732B`
`-2146864341`|Name: **RequestIsNotValidCustomApi**
Message: `{0} is not a valid Custom API.`|
|`0x8004418a`
`-2147204726`|Name: **RequestLengthTooLarge**
Message: `Request message length is too large.`|
+|`0x80040c0b`
`-2147218421`|Name: **RequestRequirePartitionId**
Message: `Entity {1} is a partitioned entity. {0} Request requires partition id to be provided.`|
|`0x80081009`
`-2146955255`|Name: **RequiredBundleItemCannotBeUpdated**
Message: `You can't delete this bundle item because it's a required product in the bundle.`|
|`0x80081008`
`-2146955256`|Name: **RequiredBundleProductCannotBeDeleted**
Message: `You can't delete this product record because it's a required product in a bundle.`|
|`0x8004F029`
`-2147160023`|Name: **RequiredChildReportHasOtherParent**
Message: `A category option for the reports was not found.`|
@@ -3325,14 +3344,14 @@
|`0x80160032`
`-2146041806`|Name: **RequiredPropertyDeclarationIsMissing**
Message: `Property {0} is required, but the declaration is missing. More Details:{1}`|
|`0x8004F600`
`-2147158528`|Name: **RequireValidImportMapForUpdate**
Message: `The update operation cannot be completed because the import map used for the update is invalid.`|
|`0x80005050`
`-2147463088`|Name: **RestoreJobInvalid**
Message: `Deleted item reference or bulk restore job not found for job id '{0}'`|
-|`0x80072533`
`-2147015373`|Name: **RestrictCustomPluginForVE**
Message: `Custom plugins are not allowed for Virtual Entity. `|
+|`0x80072533`
`-2147015373`|Name: **RestrictCustomPluginForVE**
Message: `Custom plugins are not allowed for Virtual Entity.`|
|`0x8004F022`
`-2147160030`|Name: **RestrictedSolutionName**
Message: `The solution unique name '{0}' is restricted and can only be used by internal solutions.`|
|`0x8004A121`
`-2147180255`|Name: **RestrictedToAccessCDSLiteNonOdataEndpoint**
Message: `The Application with Id:{appId} can only use Odata endpoint to access APIs of Dataverse for Teams organization.`|
|`0x80044152`
`-2147204782`|Name: **RestrictInheritedRole**
Message: `Inherited roles cannot be modified.`|
|`0x80097260`
`-2146864544`|Name: **RestrictNotSupportedDueToElasticTableInParentGraph**
Message: `Restrict configuration for delete is not supported as there is a cascade relationship between elastic table {0} and sql table {1}.`|
|`0x80090303`
`-2146893053`|Name: **RestrictSynchronousCustomPluginForVECUDEvents**
Message: `Only Asynchronous plugin steps are allowed for virtual entity external events.`|
-|`0x80072535`
`-2147015371`|Name: **RestrictVEInBatch**
Message: `Write operation for Virtual Entity is not allowed in Batch request. `|
-|`0x80072534`
`-2147015372`|Name: **RestrictVEPluginOnNestedPipelineAtRunTime**
Message: `Custom plugin execution is not allowed in nested pipeline for Virtual Entity. `|
+|`0x80072535`
`-2147015371`|Name: **RestrictVEInBatch**
Message: `Write operation for Virtual Entity is not allowed in Batch request.`|
+|`0x80072534`
`-2147015372`|Name: **RestrictVEPluginOnNestedPipelineAtRunTime**
Message: `Custom plugin execution is not allowed in nested pipeline for Virtual Entity.`|
|`0x80097250`
`-2146864560`|Name: **RetainNotSupportedForSQLAudits**
Message: `Retain is not supported for SQL Audits.`|
|`0x80048d22`
`-2147185374`|Name: **RetentionDisabledOrg**
Message: `Your admin has disabled long term retention for this environment. Please contact your admin to enable an environment for long term retention.`|
|`0x80048d28`
`-2147185368`|Name: **RetentionPolicyRescheduleError**
Message: `The parameter entered is invalid. Parameter name: {0}`|
@@ -3458,17 +3477,18 @@
|`0x80043800`
`-2147207168`|Name: **SalesPeopleEmptySalesPerson**
Message: `Parent salesperson cannot be empty`|
|`0x80043805`
`-2147207163`|Name: **SalesPeopleManagerNotAllowed**
Message: `Territory manager cannot belong to other territory`|
|`0x80072007`
`-2147016697`|Name: **SameSolutionCircularDependenciesIdentified**
Message: `Circular dependencies were identified for this solution.`|
-|`0x80048840`
`-2147186624`|Name: **SampleDataIsNotUninstalled**
Message: `InitialSolutionSampleDataState is not Uninstalled. :{0} `|
+|`0x80048840`
`-2147186624`|Name: **SampleDataIsNotUninstalled**
Message: `InitialSolutionSampleDataState is not Uninstalled. :{0}`|
|`0x80044171`
`-2147204751`|Name: **SandboxClientPluginTimeout**
Message: `The plug-in execution failed because the operation has timed-out at the Sandbox Client.`|
|`0x8004418e`
`-2147204722`|Name: **SandboxHostNotAvailable**
Message: `The plug-in execution failed because no Sandbox Hosts are currently available. Please check that you have a Sandbox server configured and that it is running.`|
|`0x80044172`
`-2147204750`|Name: **SandboxHostPluginTimeout**
Message: `The plug-in execution failed because the operation has timed-out at the Sandbox Host.`|
|`0x80044194`
`-2147204716`|Name: **SandboxHostSubnetDelegationFailed**
Message: `The plug-in execution failed because your organization's subnet delegation configuration may be incorrect. To fix the configuration, contact your tenant administrator. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2195693`|
+|`0x8004029B`
`-2147220837`|Name: **SandboxMessageSizeExceeded**
Message: `"Message size exceeded when sending context to Sandbox. Message size: '{0}'Mb"`|
|`0x80081115`
`-2146954987`|Name: **SandboxPluginDisabled**
Message: `Sandbox Plug-in execution is disabled.`|
|`0x80044174`
`-2147204748`|Name: **SandboxSdkListenerStartFailed**
Message: `The plug-in execution failed because the Sandbox Client encountered an error during initialization.`|
|`0x8004418d`
`-2147204723`|Name: **SandboxWorkerNotAvailable**
Message: `The plug-in execution failed because the Sandbox Worker process crashed. This is typically due to an error in the plug-in code. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2189390`|
|`0x80081111`
`-2146954991`|Name: **SandboxWorkerPluginExecuteTimeout**
Message: `Didn’t receive a response from the {0} plug-in within the 2:20-minute limit.`|
|`0x80044173`
`-2147204749`|Name: **SandboxWorkerPluginTimeout**
Message: `The plug-in execution failed because the operation has timed-out at the Sandbox Worker.`|
-|`0x80081116`
`-2146954986`|Name: **SandboxWorkerThrottleLimit**
Message: `Maximum processes allocated for plug-in business logic exceeded. Fatal errors in plug-ins for this environment have occurred {0} times in the last {1} minutes. Each error requires an additional process to recover. Processes for plug-ins are being recycled. All plug-ins for this environment will fail during this period. More information: https://go.microsoft.com/fwlink/?linkid=2038718 `|
+|`0x80081116`
`-2146954986`|Name: **SandboxWorkerThrottleLimit**
Message: `Maximum processes allocated for plug-in business logic exceeded. Fatal errors in plug-ins for this environment have occurred {0} times in the last {1} minutes. Each error requires an additional process to recover. Processes for plug-ins are being recycled. All plug-ins for this environment will fail during this period. More information: https://go.microsoft.com/fwlink/?linkid=2038718`|
|`0x8004026b`
`-2147220885`|Name: **SaveAsDraftAppointmentNotAllowed**
Message: `AllowSaveAsDraftAppointment is turned off.`|
|`0x8005F209`
`-2147094007`|Name: **SaveDataFileErrorOutOfSpace**
Message: `Try this action again. If the problem continues, check the {0} for solutions or contact your organization's {#Brand_CRM} Administrator. Finally, you can contact {1}.`|
|`0x80047017`
`-2147192809`|Name: **SavedQueryIsNotCustomizable**
Message: `The specified view is not customizable`|
@@ -3559,7 +3579,7 @@
|`0x8004F0F4`
`-2147159820`|Name: **SharePointUnableToRetrieveGroup**
Message: `Unable to retrieve the group {0} from SharePoint.`|
|`0x8004F301`
`-2147159295`|Name: **SharePointUrlHostValidator**
Message: `The URL cannot be resolved into an IP.`|
|`0x8004F306`
`-2147159290`|Name: **SharePointUrlIsRootWebValidator**
Message: `The URL is not valid. The URL must be a valid site collection and cannot include a subsite. The URL must be in a valid form, such as http://SharePointServer/sites/CrmSite.`|
-|`0x800608B6`
`-2147088202`|Name: **SharePointVersionUnsupported**
Message: `Microsoft Dynamics 365 cannot connect to Sharepoint as the Sharepoint Version is unsupported. Install the correct version, and then try again. `|
+|`0x800608B6`
`-2147088202`|Name: **SharePointVersionUnsupported**
Message: `Microsoft Dynamics 365 cannot connect to Sharepoint as the Sharepoint Version is unsupported. Install the correct version, and then try again.`|
|`0x80071016`
`-2147020778`|Name: **SimilarityRuleDisabled**
Message: `No similarity rule active for this entity.`|
|`0x80071018`
`-2147020776`|Name: **SimilarityRuleFCBOff**
Message: `Similarity rules not enabled.`|
|`0x80160040`
`-2146041792`|Name: **SimplePropertyCannotHaveChildNodes**
Message: `Simple property {0} cannot have child nodes. More Details:{1}`|
@@ -3586,16 +3606,16 @@
|`0x80071151`
`-2147020463`|Name: **SolutionConcurrencyFailure**
Message: `The solution installation or removal failed due to the installation or removal of another solution at the same time. Please try again later.`|
|`0x8004701C`
`-2147192804`|Name: **SolutionConfigurationPageMustBeHtmlWebResource**
Message: `The solution configuration page must exist within the solution it represents.`|
|`0x8004F080`
`-2147159936`|Name: **SolutionContextNotSupported**
Message: `This method doesn't only support SolutionContexts used to install managed solutions. Unsupported: [{0}]`|
-|`0x80040c04`
`-2147218428`|Name: **SolutionDeleteNotPermittedOnSecondary**
Message: ` Solution '{0}' with version '{1}' is present organization(s) with ID(s) '{2}'. Solution should be deleted on primary and on organizationss with higher secondary index before the current secondary organization.`|
+|`0x80040c04`
`-2147218428`|Name: **SolutionDeleteNotPermittedOnSecondary**
Message: `Solution '{0}' with version '{1}' in mode '{2}' exists on secondary organization(s) with id(s) '{3}'. Solution should be deleted on primary and on organizationss with higher secondary index before the current secondary organization.`|
|`0x80048543`
`-2147187389`|Name: **SolutionImportCauseTimeout**
Message: `The operation timed out. This may be because a solution is currently being imported into this environment. Please try again after the solution import is completed. Solutions should be imported outside of working hours if possible.`|
-|`0x80040c01`
`-2147218431`|Name: **SolutionInstallNotPermitted**
Message: ` Solution '{0}' with version '{1}' is missing on secondary organization(s) with id(s) '{2}'. Solution should be applied on all secondary organizations before primary.`|
+|`0x80040c01`
`-2147218431`|Name: **SolutionInstallNotPermitted**
Message: `Solution '{0}' with version '{1}' in mode '{2}' is missing on secondary organization(s) with id(s) '{3}'. Solution should be applied on floor secondary organization before install.`|
|`0x80072003`
`-2147016701`|Name: **SolutionRestrictedAttributes**
Message: `Component cannot be created because it already has solution-aware columns. Entity: {0}, Existing Attribute: {1}`|
|`0x80097603`
`-2146863613`|Name: **SolutionSignatureVerifiedRequired**
Message: `Digital Signature verification required for importing solution with name {0} and publisher name {1}.`|
|`0x8004F023`
`-2147160029`|Name: **SolutionUniqueNameViolation**
Message: `The solution unique name '{0}' is already being used and cannot be used again.`|
-|`0x80040c02`
`-2147218430`|Name: **SolutionUpdateNotPermitted**
Message: ` Solution '{0}' with version '{1}' is missing on active secondary organization(s) with ID(s) '{2}' that have a lower secondary index than the current one. The solution must be applied to these secondary organizations before update.`|
+|`0x80040c02`
`-2147218430`|Name: **SolutionUpdateNotPermitted**
Message: `Solution '{0}' with version '{1}' in mode '{2}' is missing on secondary organization(s) with id(s) '{3}'. Solution should be applied on floor secondary organization before update.`|
|`0x8004F046`
`-2147159994`|Name: **SolutionUpgradeFailed**
Message: `Solution Upgrade action failed after import as holding. InnerException is: {1}.`|
|`0x8004853B`
`-2147187397`|Name: **SolutionUpgradeNotAvailable**
Message: `"The {0} solution doesn’t have an upgrade that is ready to be applied."`|
-|`0x80040c03`
`-2147218429`|Name: **SolutionUpgradeNotPermitted**
Message: ` Solution '{0}' with version '{1}' is missing on active secondary organization(s) with ID(s) '{2}' that have a lower secondary index than the current one. The solution must be applied to these secondary organizations before upgrade.`|
+|`0x80040c03`
`-2147218429`|Name: **SolutionUpgradeNotPermitted**
Message: `Solution '{0}' with version '{1}' in mode '{2}' is missing on secondary organization(s) with id(s) '{3}'. Solution should be applied on floor secondary organization before upgrade.`|
|`0x8004803C`
`-2147188676`|Name: **SolutionUpgradeOfApiManagedSolutionError**
Message: `The import has failed because an ApiManaged solution cannot be updated.`|
|`0x8004853C`
`-2147187396`|Name: **SolutionUpgradeWrongSolutionSelected**
Message: `"To use this action, you must first select the old solution and then try again."`|
|`0x80044340`
`-2147204288`|Name: **SourceAttributeHeaderTooBig**
Message: `Column headers must be 160 or fewer characters. Fix the column headers, and then run Data Migration Manager again.`|
@@ -3604,7 +3624,7 @@
|`0x8004033d`
`-2147220675`|Name: **SourceEntityMappedToMultipleTargets**
Message: `This source entity is mapped to more than one Microsoft Dynamics 365 entity. Remove any duplicate mappings, and then import this data map again.`|
|`0x8006072A`
`-2147088598`|Name: **SPAccountNameFetchFailure**
Message: `Exception occured while fetching account name from Sharepoint.`|
|`0x80060760`
`-2147088544`|Name: **SPAllFilesErrorScenario**
Message: `One or more sites in all files view of SharePointDocument failed.`|
-|`0x8006070A`
`-2147088630`|Name: **SPBadLockInFileCollectionErrorCode**
Message: `The file in the collection has bad lock `|
+|`0x8006070A`
`-2147088630`|Name: **SPBadLockInFileCollectionErrorCode**
Message: `The file in the collection has bad lock`|
|`0x80060767`
`-2147088537`|Name: **SPCertificationError**
Message: `S2STokenIssuer certificate not found.`|
|`0x80060761`
`-2147088543`|Name: **SPConnectionFailure**
Message: `Failed to connect to SharePointSite.`|
|`0x80060720`
`-2147088608`|Name: **SPCurrentDocumentLocationDisabledErrorCode**
Message: `Current document location is disabled by administrator`|
@@ -3709,6 +3729,9 @@
|`0x80048292`
`-2147188078`|Name: **SrsDataConnectorNotInstalledUpload**
Message: `This report can’t upload because Dynamics 365 Reporting Extensions, required components for reporting, are not installed on the server that is running Microsoft SQL Server Reporting Services.`|
|`0x80072570`
`-2147015312`|Name: **SSM_MaxPCI_Exceeded**
Message: `Please re-login to refresh your session.`|
|`0x80072571`
`-2147015311`|Name: **SSM_RefreshToken_Failed**
Message: `Failed to refresh login session.`|
+|`0x8005E280`
`-2147097984`|Name: **SSSACSEndpointUrlUpdateRequiresExchangeOrTenantAdmin**
Message: `The Azure Communication Service (ACS) Endpoint URL must be supplied by an Exchange Administrator or Office 365 Global Administrator. Please see https://go.microsoft.com/fwlink/?linkid=2306201 to learn more.`|
+|`0x8005E281`
`-2147097983`|Name: **SSSACSInvalidDeploymentType**
Message: `Azure Communication Service (ACS) integration is only available for Online deployments. Please see https://go.microsoft.com/fwlink/?linkid=2306201 to learn more.`|
+|`0x8005E279`
`-2147097991`|Name: **SSSACSInvalidEmailServerProfileType**
Message: `Azure Communication Service (ACS) integration can only be enabled for Exchange Online email server profiles. Please see https://go.microsoft.com/fwlink/?linkid=2306201 to learn more.`|
|`0x8005E278`
`-2147097992`|Name: **SSSGmailSignInInvalidRedirectUri**
Message: `Sign-in failed due to an invalid or missing redirect uri specified in the associated Google web application client configuration. For more information on how to fix this error, see https://go.microsoft.com/fwlink/?linkid=2292432`|
|`0x80060451`
`-2147089327`|Name: **StageEntityIsNull**
Message: `Validation error: stage entity cannot be null.`|
|`0x80060454`
`-2147089324`|Name: **StageIdIsEmpty**
Message: `Validation error: Stage ID cannot be empty.`|
@@ -3719,7 +3742,7 @@
|`0x80097700`
`-2146863360`|Name: **StageSolutionUnmanagedRootsConversionWarning**
Message: `One or more components in the solution already exist in your system as unmanaged components. Importing this solution will convert the components into managed components for this solution. Warning: Any customizations that your organization has made to these components will be lost. After the import operation is complete, managed solutions from other solution publishers will be unable to update these components.`|
|`0x80060470`
`-2147089296`|Name: **StandAloneBpfNotActivated**
Message: `Stand Alone BPF must be activated on Flows page.`|
|`0x80055006`
`-2147135482`|Name: **StandardSlaTypeNotApplicable**
Message: `Standard SLA Type is only supported for incident entity. Current entity object type code is {0}. Please pass appropriate SLA Type or entity`|
-|`0x80048d21`
`-2147185375`|Name: **StatementConflictedWithAConstraint**
Message: `Statement conflicted with a constraint. `|
+|`0x80048d21`
`-2147185375`|Name: **StatementConflictedWithAConstraint**
Message: `Statement conflicted with a constraint.`|
|`0x8004F857`
`-2147157929`|Name: **StateTransitionActivateNewStatus**
Message: `You can't activate this record because of the status transition rules.Contact your system administrator.`|
|`0x8004F855`
`-2147157931`|Name: **StateTransitionActiveToCanceled**
Message: `Because of the status transition rules, you can't cancel the case in the current status.Change the case status, and then try canceling it, or contact your system administrator.`|
|`0x8004F854`
`-2147157932`|Name: **StateTransitionActiveToResolve**
Message: `Because of the status transition rules, you can't resolve a case in the current status.Change the case status, and then try resolving it, or contact your system administrator.`|
@@ -3740,6 +3763,13 @@
|`0x8004D292`
`-2147167598`|Name: **StringAttributeIndexError**
Message: `One of the attributes of the selected entity is a part of database index and so it cannot be greater than 900 bytes.`|
|`0x80044331`
`-2147204303`|Name: **StringLengthTooLong**
Message: `A validation error occurred. A string value provided is too long.`|
|`0x80090429`
`-2146892759`|Name: **StringOrBinaryTruncation**
Message: `String or binary data would be truncated in table '{0}', column '{1}'. Truncated value: {2}.`|
+|`0x80090929`
`-2146891479`|Name: **StubUserImpersonationCreationUnauthorized**
Message: `Impersonable Stub Users can only be created by authorized applications. Contact your system administrator for assistance.`|
+|`0x80090924`
`-2146891484`|Name: **StubUserImpersonationEnablementUnauthorized**
Message: `Impersonation for Stub Users can only be set by authorized applications. Contact your system administrator for assistance.`|
+|`0x80090927`
`-2146891481`|Name: **StubUserImpersonationFeatureNotEnabled**
Message: `This operation couldn't be completed because the Stub User Impersonation feature isn’t enabled for your organization.`|
+|`0x80090928`
`-2146891480`|Name: **StubUserImpersonationInvalidUserConfiguration**
Message: `Impersonable Stub Users can only be created in disabled state.`|
+|`0x80090926`
`-2146891482`|Name: **StubUserImpersonationInvalidUserType**
Message: `Updated value of SystemManagedUserType={0} is not permitted.`|
+|`0x80090923`
`-2146891485`|Name: **StubUserImpersonationMustToggleStandalone**
Message: `Toggling impersonation for a Stub User must be done in a standalone Update request. Modify other user attributes in another Update request.`|
+|`0x80090925`
`-2146891483`|Name: **StubUserImpersonationUnauthorized**
Message: `User with SystemUserId={0}, IsDisabled={1} and SystemManagedUserType={2} is not valid for toggling Stub User Impersonation.`|
|`0x80048537`
`-2147187401`|Name: **SubcomponentDoesNotExist**
Message: `Subcomponent {0} of type {1} is not found in the organization, it can not be added to the SolutionComponents.`|
|`0x80048536`
`-2147187402`|Name: **SubcomponentMissingARoot**
Message: `Subcomponent {0} cannot be added to the solution because the root component {1} is missing.`|
|`0x80043e02`
`-2147205630`|Name: **SubjectDoesNotExist**
Message: `Subject does not exist.`|
@@ -3762,6 +3792,7 @@
|`0x8004F657`
`-2147158441`|Name: **SystemFormCopyUnmatchedFormType**
Message: `The form type of the SourceId is not valid for the Target entity.`|
|`0x8004F658`
`-2147158440`|Name: **SystemFormCreateWithExistingLabel**
Message: `The id '{0}' for label '{1}' in the form with id: '{2}' is already in use by another form. Replace the id with a different unique value.`|
|`0x8004F655`
`-2147158443`|Name: **SystemFormImportMissingRoles**
Message: `The unmanaged solution you are importing has displaycondition XML attributes that refer to security roles that are missing from the target system. Any displaycondition attributes that refer to these security roles will be removed.`|
+|`0x80090921`
`-2146891487`|Name: **SystemUserAttributeUpdateNotAllowedFromCreate**
Message: `SystemUser updates from plugins registered on PostCreate of SystemUser are not allowed to change certain attributes ({1}), as their values could depend on components which are not yet created. Consider making the updates async.`|
|`0x8004A112`
`-2147180270`|Name: **SystemUserDisabled**
Message: `The system user was disabled therefore the ticket expired.`|
|`0x80044357`
`-2147204265`|Name: **SystemUserUpdateNotAllowedFromCreate**
Message: `SystemUser updates are not allowed from plugins registered on PostCreate of SystemUser as it could depend on components which are not yet created. Consider making them async.`|
|`0x8009049E`
`-2146892642`|Name: **TableTypeMismatch**
Message: `There is a mismatch of values among TableType '{0}', DataProviderId '{1}' and DataSourceId '{2}'.`|
@@ -3914,7 +3945,7 @@
|`0x800404c4`
`-2147220284`|Name: **unManagederrorprocessingfilternodes**
Message: `An unexpected error occurred processing the filter nodes.`|
|`0x800404ae`
`-2147220306`|Name: **unManagedfieldnotvalidatedbyplatform**
Message: `A field was not validated by the platform.`|
|`0x800404ab`
`-2147220309`|Name: **unManagedfilterindexoutofrange**
Message: `The filter index is out of range.`|
-|`0x80048306`
`-2147187962`|Name: **unManagedIdsAccessDenied**
Message: `{0} with id {1} does not have {2} right(s) for record with id {3} of entity {4}. Consider assigning a role with the required access level to the user or team. For further troubleshooting, please work with a system administrator to use the Access Checker tool on this record: {5}. More details: {6}`|
+|`0x80048306`
`-2147187962`|Name: **unManagedIdsAccessDenied**
Message: `{0} with id {1} does not have {2} right(s) for record with id {3} of entity {4}. Consider assigning a role with the {7} level to the user or team. For further troubleshooting, please work with a system administrator to use the Access Checker tool on this record: {5}. More details: {6}`|
|`0x80040511`
`-2147220207`|Name: **unManagedidsaccounthaschildopportunities**
Message: `The Account has child opportunities.`|
|`0x8004350a`
`-2147207926`|Name: **unManagedidsactivitydurationdoesnotmatch**
Message: `Activity duration does not match start/end time`|
|`0x80043509`
`-2147207927`|Name: **unManagedidsactivityinvalidduration**
Message: `Invalid activity duration`|
@@ -4347,7 +4378,7 @@
|`0x80041d24`
`-2147214044`|Name: **UserLoopExists**
Message: `A manager for this user cannot be set because an existing relationship in the management hierarchy is causing a circular relationship. This is usually caused by a manual edit of the Microsoft Dynamics 365 database. To fix this, the hierarchy in the database must be changed to remove the circular relationship.`|
|`0x8005E24D`
`-2147098035`|Name: **UserNameRequiredForImpersonation**
Message: `Type in a user name and save again`|
|`0x8005F111`
`-2147094255`|Name: **UserNeverLoggedIntoYammer**
Message: `To follow other users, you must be logged in to Yammer. Log in to your Yammer account, and try again.`|
-|`0x8004D24B`
`-2147167669`|Name: **UserNotAssignedLicense**
Message: `The user(Id = {0}, accessMode = {1}) has not been assigned any License. Please contact your system administrator to assign license to this user for the action to succeed.`|
+|`0x8004D24B`
`-2147167669`|Name: **UserNotAssignedLicense**
Message: `The user(Id = {0}, accessMode = {1}) has not been assigned any License. Please contact your system administrator to assign license to this user for the action to succeed. Additional Details: {2}`|
|`0x80042f09`
`-2147209463`|Name: **UserNotAssignedRoles**
Message: `The user (Id = {0}) has not been assigned any roles.`|
|`0x80048d29`
`-2147185367`|Name: **UserNotAuthorized**
Message: `Not authorized to perform this operation.`|
|`0x80041d07`
`-2147214073`|Name: **UserNotInParentHierarchy**
Message: `The user is not in parent user's business hierarchy.`|
diff --git a/powerapps-docs/developer/data-platform/logging-tracing.md b/powerapps-docs/developer/data-platform/logging-tracing.md
index a284390628..1faa9f8d73 100644
--- a/powerapps-docs/developer/data-platform/logging-tracing.md
+++ b/powerapps-docs/developer/data-platform/logging-tracing.md
@@ -1,9 +1,9 @@
---
title: "Logging and tracing (Microsoft Dataverse) | Microsoft Docs"
description: "Use the plugin trace log to store plug-in execution information to aid in plug-in debugging."
-ms.date: 04/22/2024
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: concept-article
ms.subservice: dataverse-developer
@@ -27,24 +27,24 @@ Recording of run-time tracing information for Microsoft Dataverse is provided by
This data can be found in model-driven applications by navigating to **Settings** and choosing the **Plug-in Trace Log** tile. The tile is only visible if you have access to the trace log table records in your assigned security role.
- You may find it easier to view this data by using the Web API in your browser using the example shown in [Use Tracing](debug-plug-in.md#use-tracing) or by using the [Plug-in trace viewer](#plug-in-trace-viewer) community tool.
+ You may find it easier to view this data by using the Web API in your browser using the example shown in [Use Tracing](debug-plug-in.md#use-tracing) or by using the [Plugin Trace Viewer](#plugin-trace-viewer) community tool.
> [!IMPORTANT]
> Trace logging takes up organization storage space especially when many traces and exceptions are generated. You should only turn trace logging on for debugging and troubleshooting, and turn it off after your investigation is completed.
- **Error dialog**
- A synchronous registered plug-in or custom workflow activity that returns an exception from the platform results in an error dialog box in the web application presented to the logged on user. The user may select the **Download Log File** button in the dialog to view the log containing exception and trace output.
+ A synchronous registered plug-in or custom workflow activity that returns an exception from the platform results in an error dialog box in the web application presented to the logged on user. The user can select the **Download Log File** button in the dialog to view the log containing exception and trace output.
- **System job**
- For asynchronous registered plug-in or custom workflow activities that returns an exception, the tracing information is shown in the **Details** area of the **System Job** form in the web application.
+ For asynchronous registered plug-in or custom workflow activities that return an exception, the tracing information is shown in the **Details** area of the **System Job** form in the web application.
## Enable trace logging
-Whether trace logs will be written depends on the value of the [Organization](./reference/entities/organization.md) table [PluginTraceLogSetting](./reference/entities/organization.md#BKMK_PluginTraceLogSetting) column value. You can enable trace logging by programmatically updating the `PluginTraceLogSetting` value.
+Whether trace logs are written depends on the value of the [Organization](./reference/entities/organization.md) table [PluginTraceLogSetting](./reference/entities/organization.md#BKMK_PluginTraceLogSetting) column value. You can enable trace logging by programmatically updating the `PluginTraceLogSetting` value.
A second method to enable trace logging is through the legacy web application. Navigate to **Settings** > **Administration** > **System Settings**. In the **Customization** tab, locate the drop-down menu labeled **Enable logging to plug-in trace log** and select one of the available options. More information: [Settings in Unified Interface apps](/power-platform/admin/admin-settings#settings-in-unified-interface-apps), [Settings in legacy web client apps](/power-platform/admin/admin-settings#settings-in-legacy-web-client-apps)
@@ -52,7 +52,7 @@ A third option can be found in the Plug-in Registration tool. After connecting t
|Value|Option|Description|
|------------|-----------------|-----------------|
-|0|Off|Writing to the trace log is disabled. No **PluginTraceLog** records will be created. However, custom code can still call the method even though no log is written.|
+|0|Off|Writing to the trace log is disabled. No **PluginTraceLog** records are created. However, custom code can still call the method even though no log is written.|
|1|Exceptions|Trace information is written to the log if an exception is passed back to the platform from custom code.|
|2|All|Trace information is written to the log upon code completion or an exception is passed back to the platform from the custom code.|
@@ -60,7 +60,7 @@ If the trace logging setting is set to **Exception** and your custom code return
## Write to the tracing service
-Before writing to the tracing service, you must first extract the tracing service object from the passed execution context. Afterwards, simply add calls to your custom code where appropriate passing any relevant diagnostic information in that method call.
+Before writing to the tracing service, you must first extract the tracing service object from the passed execution context. Afterwards, add calls to your custom code where appropriate passing any relevant diagnostic information in that method call.
```csharp
//Extract the tracing service for use in debugging plug-ins.
@@ -72,16 +72,16 @@ Before writing to the tracing service, you must first extract the tracing servic
```
-Next, build and deploy the plug-in or custom workflow activity. During execution of the custom code, the information provided in the **Trace** method calls is written to a trace log table record by , if supported by your organization and enabled, and may also be made available to the user in a Web dialog or system job as described in the previous section. Tracing information written to the trace log is configured in the trace settings. For more information see [Enable trace logging](#bkmk_trace-settings).
+Next, build and deploy the plug-in or custom workflow activity. During execution of the custom code, the information provided in the **Trace** method calls is written to a trace log table record by , if supported by your organization and enabled, and might also be made available to the user in a Web dialog or system job as described in the previous section. Tracing information written to the trace log is configured in the trace settings. For more information, see [Enable trace logging](#bkmk_trace-settings).
> [!NOTE]
-> If your custom code executes within a database transaction, and an exception occurs that causes a transaction rollback, all table data changes by your code will be undone. However, the [PluginTraceLog](reference/entities/plugintracelog.md) records will remain after the rollback completes.
+> If your custom code executes within a database transaction, and an exception occurs that causes a transaction rollback, all table data changes by your code are undone. However, the [PluginTraceLog](reference/entities/plugintracelog.md) records will remain after the rollback completes.
## Additional information about the tracing service
The batches the information provided to it through the **Trace** method. The information is written to a new [PluginTraceLog](reference/entities/plugintracelog.md) record after the custom code successfully runs to completion or an exception is thrown.
-Each `Trace` call is logged as a new line in the [PluginTraceLog](reference/entities/plugintracelog.md) [MessageBlock](reference/entities/plugintracelog.md#BKMK_MessageBlock) column. Only 10kb of text can be written. Older trace lines will be removed to meet this limit so that only the most recent lines will be saved.
+Each `Trace` call is logged as a new line in the [PluginTraceLog](reference/entities/plugintracelog.md) [MessageBlock](reference/entities/plugintracelog.md#BKMK_MessageBlock) column. Only 10 kb of text can be written. Older trace lines are removed to meet this limit so that only the most recent lines are saved.
[PluginTraceLog](reference/entities/plugintracelog.md) records have a finite lifetime. A bulk deletion background job runs once per day to delete records that are older than 24 hours from creation.
@@ -90,13 +90,13 @@ Each `Trace` call is logged as a new line in the [PluginTraceLog](reference/enti
## Community tools
-### Plug-in trace viewer
+### Plugin Trace Viewer
-**Plug-in Trace Viewer** is a tool that XrmToolbox community developed. Please see the [Community tools for Dataverse](community-tools.md) topic for community developed tools.
+**[Plugin Trace Viewer](https://jonasr.app/PTV)** is a tool that XrmToolBox community developed. Please see the [Community tools for Dataverse](community-tools.md) topic for community developed tools.
> [!NOTE]
-> The community tools are not a product of Microsoft and does not extend support to the community tools.
-> If you have questions pertaining to the tool, please contact the publisher. More Information: [XrmToolBox](https://www.xrmtoolbox.com).
+> Microsoft doesn't extend support to community tools.
+> If you have questions pertaining to the tool, contact the publisher. More Information: [XrmToolBox](https://www.xrmtoolbox.com).
### See also
diff --git a/powerapps-docs/developer/data-platform/long-term-retention.md b/powerapps-docs/developer/data-platform/long-term-retention.md
index 4ce30d74ae..2414b99036 100644
--- a/powerapps-docs/developer/data-platform/long-term-retention.md
+++ b/powerapps-docs/developer/data-platform/long-term-retention.md
@@ -3,8 +3,8 @@ title: Long-term data retention
description: Learn how to use retention policies to transfer data from your Microsoft Dataverse transactional database to a managed data lake for cost-efficient long-term storage.
ms.date: 12/12/2024
ms.topic: how-to
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.subservice: dataverse-developer
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/media/fieldsecurityprofile-erd.png b/powerapps-docs/developer/data-platform/media/fieldsecurityprofile-erd.png
new file mode 100644
index 0000000000..b79d4d371d
Binary files /dev/null and b/powerapps-docs/developer/data-platform/media/fieldsecurityprofile-erd.png differ
diff --git a/powerapps-docs/developer/data-platform/media/maskingrule-attributemaskingrule-erd.png b/powerapps-docs/developer/data-platform/media/maskingrule-attributemaskingrule-erd.png
new file mode 100644
index 0000000000..d65b0271cd
Binary files /dev/null and b/powerapps-docs/developer/data-platform/media/maskingrule-attributemaskingrule-erd.png differ
diff --git a/powerapps-docs/developer/data-platform/optional-parameters.md b/powerapps-docs/developer/data-platform/optional-parameters.md
index 3f58ccc5c8..ed0e890837 100644
--- a/powerapps-docs/developer/data-platform/optional-parameters.md
+++ b/powerapps-docs/developer/data-platform/optional-parameters.md
@@ -1,12 +1,12 @@
---
title: "Use optional parameters (Microsoft Dataverse) | Microsoft Docs"
description: "Use optional parameters to control operation behaviors"
-ms.date: 07/01/2024
+ms.date: 06/20/2025
ms.reviewer: jdaly
ms.topic: how-to
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -20,7 +20,7 @@ contributors:
Dataverse provides a set of optional parameters or request header values a developer of a client application can use to modify the behavior of individual requests. This article describes the parameter values and request headers that you can use to get the behaviors you need.
> [!NOTE]
-> This article introduces these parameters but does not explain them in depth. Please follow the links for more information to fully understand the scenarios for using these parameters.
+> This article introduces these parameters but doesn't explain them in depth. Follow the links for more information to fully understand the scenarios for using these parameters.
## How to use
@@ -28,21 +28,21 @@ How you use these optional parameters depends on whether you're using the Datave
### [SDK for .NET](#tab/sdk)
-Usually, you will add the parameter to the [OrganizationRequest.Parameters Collection](xref:Microsoft.Xrm.Sdk.OrganizationRequest.Parameters) of the named request class.
+Usually, you'll add the parameter to the [OrganizationRequest.Parameters Collection](xref:Microsoft.Xrm.Sdk.OrganizationRequest.Parameters) of the named request class.
> [!NOTE]
-> You cannot specify these parameters using the 7 shortcut methods exposed with the . You must use the named request class with the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A).
+> You can't specify these parameters using the seven shortcut methods exposed with the . You must use the named request class with the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A).
-One exception is when setting the `partitionid`, this is set as an attribute of the entity instance. More information: [Perform a data operation with specified partition](#perform-a-data-operation-with-specified-partition)
+One exception is when setting the `partitionid`. The `partitionid` is set as an attribute of the entity instance. More information: [Perform a data operation with specified partition](#perform-a-data-operation-with-specified-partition)
More information:
- [Use messages with the SDK for .NET](org-service/use-messages.md)
-- See the examples below
+- See the following examples
### [Web API](#tab/webapi)
-Usually, you'll add the parameter as a request header with the `MSCRM.` namespace.
+Usually, you add the parameter as a request header with the `MSCRM.` namespace.
Two exceptions are the following that are appended to the URL.
@@ -52,7 +52,7 @@ Two exceptions are the following that are appended to the URL.
More information:
- [Compose HTTP requests and handle errors : Other headers](webapi/compose-http-requests-handle-errors.md#other-headers)
-- See the examples below.
+- See the following examples.
---
@@ -277,7 +277,7 @@ More information: [Shared variables](understand-the-data-context.md#shared-varia
## Perform a data operation with specified partition
-When using elastic tables with a partitioning strategy, you can pass a unique string value with the `partitionid` parameter to access non-relational table data within a storage partition.
+When using elastic tables with a partitioning strategy, you can pass a unique string value with the `partitionid` parameter to access nonrelational table data within a storage partition.
The following examples use the `partitionid` value of `deviceId` when retrieving a `contoso_sensordata` record.
@@ -327,7 +327,7 @@ Alternatively, you can use the `partitionid` value using alternate key style.
## Bypass custom Dataverse logic
-Synchronous logic must be applied during the transaction and can significantly impact performance of individual operations. When performing bulk operations, the additional time for these individual operations can increase the time required. Use the `BypassBusinessLogicExecution` parameter when you want to improve performance while performing bulk data operations.
+Synchronous logic must be applied during the transaction and can significantly impact performance of individual operations. With bulk operations, the extra time for these individual operations can increase the time required. Use the `BypassBusinessLogicExecution` parameter when you want to improve performance while performing bulk data operations.
> [!IMPORTANT]
> The calling user must have the `prvBypassCustomBusinessLogic` privilege.
@@ -376,12 +376,12 @@ MSCRM.BypassBusinessLogicExecution: CustomSync,CustomAsync
## Bypass Power Automate Flows
-When bulk data operations occur that trigger flows, Dataverse creates system jobs to execute the flows. When the number of system jobs is very large, it may cause performance issues for the system. If this occurs, you can choose to bypass triggering the flows by using the `SuppressCallbackRegistrationExpanderJob` optional parameter.
+When bulk data operations occur that trigger flows, Dataverse creates system jobs to execute the flows. When the number of system jobs is large, it might cause performance issues for the system. If performance issues occur, you can choose to bypass triggering the flows by using the `SuppressCallbackRegistrationExpanderJob` optional parameter.
The [CallbackRegistration table](reference/entities/callbackregistration.md) manages flow triggers, and there's an internal operation called *expander* that calls the registered flow triggers.
> [!NOTE]
-> When this option is used, the flow owners will not receive a notification that their flow logic was bypassed.
+> When this option is used, the flow owners won't receive a notification that their flow logic was bypassed.
### [SDK for .NET](#tab/sdk)
@@ -422,10 +422,49 @@ MSCRM.SuppressCallbackRegistrationExpanderJob: true
More information: [Bypass Power Automate Flows](bypass-power-automate-flows.md)
+## Return unmasked data
+
+When you have a column configured to use the [masking rules](/power-platform/admin/create-manage-masking-rules) preview feature you can use the `UnMaskedData` optional parameter to request that the unmasked value is returned.
+
+### [SDK for .NET](#tab/sdk)
+
+```csharp
+RetrieveMultipleRequest request = new()
+{
+ Query = query,
+ ["UnMaskedData"] = true
+};
+
+var response = (RetrieveMultipleResponse)service.Execute(request);
+```
+
+### [Web API](#tab/webapi)
+
+Use the `UnMaskedData=true` query option to indicate that unmasked values should be returned.
+
+> [!IMPORTANT]
+> The `UnMaskedData` option is case sensitive. If you use the incorrect parameter value you will get this error:
+> `{"error":{"code":"0x80060888","message":"The query parameter [REDACTED] is not supported"}}`
+
+**Request:**
+
+```http
+GET [ORGANIZATION URI]/api/data/v9.2/sample_examples?$select=sample_name,sample_email,sample_governmentid,sample_telephonenumber,sample_dateofbirth&$orderby=sample_name desc&UnMaskedData=true HTTP/1.1
+Accept: application/json
+Authorization: Bearer [REDACTED]
+OData-Version: 4.0
+OData-MaxVersion: 4.0
+```
+
+---
+
+[Learn more about retrieving unmasked data](column-level-security.md#retrieve-unmasked-data).
+
+
### See also
-[Use messages with the SDK for .NET](org-service/use-messages.md)
-[Web API: Compose HTTP requests and handle errors : Other headers](webapi/compose-http-requests-handle-errors.md#other-headers)
+[Use messages with the SDK for .NET](org-service/use-messages.md)
+[Web API: Compose HTTP requests and handle errors : Other headers](webapi/compose-http-requests-handle-errors.md#other-headers)
[Bypass Custom Business Logic](bypass-custom-business-logic.md)
diff --git a/powerapps-docs/developer/data-platform/org-service/build-queries-with-linq-net-language-integrated-query.md b/powerapps-docs/developer/data-platform/org-service/build-queries-with-linq-net-language-integrated-query.md
index 6fb1f67a68..40d9ca68f2 100644
--- a/powerapps-docs/developer/data-platform/org-service/build-queries-with-linq-net-language-integrated-query.md
+++ b/powerapps-docs/developer/data-platform/org-service/build-queries-with-linq-net-language-integrated-query.md
@@ -2,8 +2,8 @@
title: "Build queries with LINQ (.NET language-integrated query) (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Learn how to use .NET Language-Integrated Query (LINQ) to write queries for Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/org-service/early-bound-programming.md b/powerapps-docs/developer/data-platform/org-service/early-bound-programming.md
index 509e810377..2bcf81986a 100644
--- a/powerapps-docs/developer/data-platform/org-service/early-bound-programming.md
+++ b/powerapps-docs/developer/data-platform/org-service/early-bound-programming.md
@@ -4,8 +4,8 @@ description: "Describes the different programming styles available when using th
ms.collection: get-started
ms.topic: "article"
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations-associate-disassociate.md b/powerapps-docs/developer/data-platform/org-service/entity-operations-associate-disassociate.md
index 095fd29150..d97303b511 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations-associate-disassociate.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations-associate-disassociate.md
@@ -4,8 +4,8 @@ description: "Learn how to associate and disassociate table rows using the SDK f
ms.date: 12/13/2024
ms.reviewer: "pehecke"
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations-create.md b/powerapps-docs/developer/data-platform/org-service/entity-operations-create.md
index 15c2a80887..e6980a3542 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations-create.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations-create.md
@@ -4,8 +4,8 @@ description: "Learn how to create table rows using the SDK for .NET."
ms.date: 12/16/2024
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations-query-data.md b/powerapps-docs/developer/data-platform/org-service/entity-operations-query-data.md
index 22788b0f44..510edd6af4 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations-query-data.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations-query-data.md
@@ -4,8 +4,8 @@ description: "Introduces the different ways to query data using Microsoft Datave
ms.date: 05/03/2024
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -64,11 +64,11 @@ To avoid this problem when using the late-bound style, you can use two strategie
> [!NOTE]
> If the type specified with [Entity.GetAttributeValue<T>(System.String)](xref:Microsoft.Xrm.Sdk.Entity.GetAttributeValue%60%601(System.String)) is a value type that cannot be null, such as or , the value returned will be the default value, such as `false` or `1/1/0001 12:00:00 AM` rather than null.
-## Each request can return up to 5000 records
+## Each request can return up to 5,000 records
Interactive applications will typically limit the number of records displayed to a number that a human can interact with, and then provide the option to navigate pages of data. For example, model-driven apps depend on a [personal option](../../../user/set-personal-options.md) that allows people to choose a value from 25 to 250. This information is stored in the [UserSettings.PagingLimit](../reference/entities/usersettings.md#BKMK_PagingLimit) column.
-Applications that retrieve data from Dataverse without displaying data in an app don't need to specify a page size. The default and maximum page size is 5,000 rows. If you don't set a page size, Dataverse will return up to 5,000 rows of data at a time. To get more rows, you must send additional requests.
+Applications that retrieve data from Dataverse without displaying data in an app don't need to specify a page size. The default and maximum page size is 5,000 rows for standard tables and 500 for elastic tables. If you don't set a page size, Dataverse will return up to the maximum number at a time. To get more rows, you must send additional requests.
Paging works best when you use the paging cookie data that Dataverse returns with the [EntityCollection.PagingCookie](/dotnet/api/microsoft.xrm.sdk.entitycollection.pagingcookie) property, but it isn't required and some requests will not return a paging cookie value. Learn more:
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations-retrieve.md b/powerapps-docs/developer/data-platform/org-service/entity-operations-retrieve.md
index 9397720963..c1a14c6150 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations-retrieve.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations-retrieve.md
@@ -1,11 +1,11 @@
---
-title: "Retrieve a table row using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Describes options available when retrieving a row programmatically." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 05/18/2023
+title: "Retrieve a table row using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs"
+description: "Describes options available when retrieving a row programmatically."
+ms.date: 06/20/2025
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -17,31 +17,31 @@ contributors:
[!INCLUDE[cc-terminology](../includes/cc-terminology.md)]
-You will typically retrieve a row based on the results of a query and the query results should include a unique identifier for the row.
+You'll typically retrieve a row based on the results of a query and the query results should include a unique identifier for the row.
> [!NOTE]
-> In the following examples the `accountid` variable represents the identifier for an account row.
+> In the following examples, the `accountid` variable represents the identifier for an account row.
-You have some options to define the data returned when you retrieve a row. You will use the class to define which column (attribute) values you require.
+You have some options to define the data returned when you retrieve a row. You use the class to define which column (attribute) values you require.
> [!IMPORTANT]
-> When retrieving rows you should only request the column values you need by setting the specific columns using the class constructor. Although class constructor provides an overload that accepts a boolean `allColumns` parameter, you should not use this in production code. More information: [Do not retrieve Entity all columns via query APIs](../best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md)
+> When retrieving rows, you should only request the column values you need by setting the specific columns using the class constructor. Although class constructor provides an overload that accepts a boolean `allColumns` parameter, you shouldn't use this parameter set to true in production code. More information: [Don't retrieve Entity all columns via query APIs](../best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md)
-If you need to return related rows you can include a query with your retrieve request to define which related rows to return.
+If you need to return related rows, you can include a query with your retrieve request to define which related rows to return.
## Basic Retrieve
-You can retrieve individual rows using either the . method or by setting the property of the class to a reference row and use the . method.
+You can retrieve individual rows using either the [IOrganizationService.Retrieve](xref:Microsoft.Xrm.Sdk.IOrganizationService.Retrieve%2A) method or by setting the property of the class to a reference row and use the [IOrganizationService.Execute](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A) method.
-This example shows using the . method.
+This example shows using the [](xref:Microsoft.Xrm.Sdk.IOrganizationService.Retrieve%2A) method.
```csharp
Entity entity = svc.Retrieve("account", accountid, new ColumnSet("name"));
Console.WriteLine("account name: {0}", entity["name"]);
```
-This example shows using the and classes with the . method.
+This example shows using the and classes with the [IOrganizationService.Execute](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A) method.
```csharp
RetrieveRequest request = new RetrieveRequest()
@@ -55,16 +55,16 @@ Console.WriteLine("account name: {0}", entity["name"]);
```
> [!NOTE]
-> Most of the time you should use the . method.
+> Most of the time you should use the [IOrganizationService.Retrieve](xref:Microsoft.Xrm.Sdk.IOrganizationService.Retrieve%2A) method.
>
-> Use with the . method for special circumstances as described below.
+> Use with the [IOrganizationService.Execute](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A) method for special circumstances as described below.
> More information:
> - [Retrieve with related rows](#retrieve-with-related-rows)
> - [Retrieve with an alternate key](#retrieve-with-an-alternate-key)
## Retrieve with related rows
-When you retrieve an individual row you can also include a query to include related rows by setting the property of the .
+When you retrieve an individual row, you can also include a query to include related rows by setting the property of the .
You can define a query using any of the classes derived from and associate it with a specific table row relationship. Add a collection of pairs of queries and relationships to the property using a .
@@ -111,6 +111,7 @@ Entity primaryContact = retrievedAccount
Console.WriteLine("Primary Contact Fullname: {0}",primaryContact["fullname"]);
```
+
The results of the sample could look like the following:
```
@@ -126,7 +127,7 @@ More information: [Query data using the SDK for .NET](entity-operations-query-da
## Retrieve with an alternate key
-If you have configured a table to use an alternate key, you can use this alternate key to define an and pass this value as the . property.
+If you configured a table to use an alternate key, you can use this alternate key to define an and pass this value as the . property.
For example, if you define the `account` `accountnumber` column to be an alternate key, you can retrieve an account using the value of that column.
@@ -161,15 +162,15 @@ Entity entity = response.Entity;
Console.WriteLine(entity["name"]);
```
> [!NOTE]
-> Alternate keys are usually used only for data integration scenarios
+> Alternate keys are used only for data integration scenarios
## Retrieve records from elastic tables
-If you are retrieving elastic table data stored in partitions be sure to specify the partition key when retrieving that data. More information: [Retrieve a record in an elastic table](../use-elastic-tables.md#retrieve-a-record-in-an-elastic-table)
+If you're retrieving elastic table data stored in partitions, be sure to specify the partition key when retrieving that data. More information: [Retrieve a record in an elastic table](../use-elastic-tables.md#retrieve-a-record-in-an-elastic-table)
## Access Formatted values
-The method to access formatted values on a retrieve operation is the same you will use when accessing them in the results of a query. More information: [Access formatted values](entity-operations-query-data.md#formatted-values-are-returned-for-some-columns)
+The method to access formatted values on a retrieve operation is the same you'll use when accessing them in the results of a query. More information: [Access formatted values](entity-operations-query-data.md#formatted-values-are-returned-for-some-columns)
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations-update-delete.md b/powerapps-docs/developer/data-platform/org-service/entity-operations-update-delete.md
index cf727f3f5f..a0e63247e5 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations-update-delete.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations-update-delete.md
@@ -1,11 +1,11 @@
---
-title: "Update and delete table rows using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn how to update and delete table rows using the SDK for .NET." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 07/22/2023
+title: "Update and delete table rows using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs"
+description: "Learn how to update and delete table rows using the SDK for .NET."
+ms.date: 06/20/2025
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -22,23 +22,23 @@ This article includes examples using both late-bound and early-bound programming
Each of the examples uses a `svc` variable that represents an instance of a class that implements the methods in the interface. For information about the classes that support this interface see [IOrganizationService Interface](iorganizationservice-interface.md).
> [!IMPORTANT]
-> When updating a table row, only include the columns you are changing. Simply updating the columns of a table row that you previously retrieved will update each column even though the value is unchanged. This can cause system events that can trigger business logic that expects that the values have actually changed. This can also cause columns to appear to have been updated in auditing data when in fact they haven't actually changed.
+> When updating a table row, only include the columns you're changing. Simply updating the columns of a table row that you previously retrieved update each column even though the value is unchanged. This can cause system events that can trigger business logic that expects that the values actually changed. This can also cause columns to appear to be updated in auditing data when in fact they haven't changed.
>
-> You should create a new `Entity` instance, set the id attribute and any attribute values you are changing, and use that entity instance to update the table row.
+> You should create a new `Entity` instance, set the ID attribute and any attribute values you're changing, and use that entity instance to update the table row.
> [!NOTE]
-> The column definition includes a `RequiredLevel` property. When this is set to `SystemRequired`, you cannot set these columns to a null value. If you attempt this you will get error code `-2147220989` with the message `Attribute: cannot be set to NULL`.
+> The column definition includes a `RequiredLevel` property. When this is set to `SystemRequired`, you can't set these columns to a null value. If you attempt to set this column to a null value, you'll get error code `-2147220989` with the message `Attribute: cannot be set to NULL`.
>
> More information: [Column (attribute) requirement level](../entity-attribute-metadata.md#column-requirement-level)
## Basic update
-Both of the examples below use the [IOrganizationService.Update method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Update%2A) to set column values for a table row that was previously retrieved.
+Both of the following examples use the [IOrganizationService.Update method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Update%2A) to set column values for a table row that was previously retrieved.
Use the [Entity.Id property](xref:Microsoft.Xrm.Sdk.Entity.Id) to transfer the unique identifier value of the retrieved row to the entity instance used to perform the update operation.
> [!NOTE]
-> If you attempt to update a row without a primary key value you will get the error: `Entity Id must be specified for Update`.
+> If you attempt to update a row without a primary key value, you'll get the error: `Entity Id must be specified for Update`.
>
> If you don't have a primary key value, you can also update rows using alternate keys. More information: [Update with Alternate Key](#update-with-alternate-key)
@@ -106,7 +106,7 @@ svc.Update(account);
Instead of using the [IOrganizationService.Update method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Update%2A), you can use either the late-bound [Entity class](xref:Microsoft.Xrm.Sdk.Entity) or the generated early-bound entity classes with the [UpdateRequest class](xref:Microsoft.Xrm.Sdk.Messages.UpdateRequest) by setting the entity instance to the [UpdateRequest.Target property](xref:Microsoft.Xrm.Sdk.Messages.UpdateRequest.Target) and then using the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A).
> [!NOTE]
-> The [UpdateResponse class](xref:Microsoft.Xrm.Sdk.Messages.UpdateResponse) has no properties. While it is returned by the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A), it isn't necessary to refer to it.
+> The [UpdateResponse class](xref:Microsoft.Xrm.Sdk.Messages.UpdateResponse) has no properties. While it's returned by the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A), it isn't necessary to refer to it.
```csharp
var request = new UpdateRequest()
@@ -135,7 +135,7 @@ In a similar manner to how you can [Create related table rows in one operation](
To update related table rows, you have to retrieve a row with the related rows so that you can access the ID values. More information: [Retrieve with related rows](entity-operations-retrieve.md#retrieve-with-related-rows)
> [!IMPORTANT]
-> Updates to rows are made in a specific order. First, primary table rows are processed, and then related table rows are processed. If a change is made by the primary row for a lookup or related row column, and then a related row updates the same column, the related row value is retained. In general, a lookup column value and its equivalent in the [Entity.RelatedEntities](xref:Microsoft.Xrm.Sdk.Entity.RelatedEntities) for the same relationship should not be used at the same time.
+> Updates to rows are made in a specific order. First, primary table rows are processed, and then related table rows are processed. If a change is made by the primary row for a lookup or related row column, and then a related row updates the same column, the related row value is retained. In general, a lookup column value and its equivalent in the [Entity.RelatedEntities](xref:Microsoft.Xrm.Sdk.Entity.RelatedEntities) for the same relationship shouldn't be used at the same time.
#### [Late-bound](#tab/late)
@@ -227,7 +227,7 @@ svc.Update(account);
## Check for duplicate records
-When updating a table row, you may change the values so that the row represents a duplicate of another row. More information: [Detect duplicate data using the SDK for .NET](detect-duplicate-data.md)
+When updating a table row, you might change the values so that the row represents a duplicate of another row. More information: [Detect duplicate data using the SDK for .NET](detect-duplicate-data.md)
## Update with Alternate Key
@@ -238,7 +238,7 @@ If you want to use early bound types, you can convert the [!IMPORTANT]
-> Most tables for business data do not have alternate keys defined. This method can only be used when the environment is configured to define an alternate key for a table.
+> Most tables for business data don't have alternate keys defined. This method can only be used when the environment is configured to define an alternate key for a table.
```csharp
var accountNumberKey = new KeyAttributeCollection();
@@ -260,9 +260,9 @@ If you're updating or deleting elastic table data stored in partitions, be sure
## Use Upsert
-Typically in data integration scenarios you need to create or update data in Dataverse from other sources. Dataverse may already have records with the same unique identifier, which may be an alternate key. If a table row exists, you want to update it. If it doesn't exist, you want to create it so that the data being added is synchronized with the source data. This is the scenario when you want to use upsert.
+Typically in data integration scenarios you need to create or update data in Dataverse from other sources. Dataverse might already have records with the same unique identifier, which might be an alternate key. If a table row exists, you want to update it. If it doesn't exist, you want to create it so that the data being added is synchronized with the source data. This scenario is when you want to use upsert.
-The following example uses twice. The first time the account row is created, and the second time it's updated because it has an `accountnumber` value and there's an alternate key using that column (attrbute).
+The following example uses twice. The first time the account row is created, and the second time it's updated because it has an `accountnumber` value and there's an alternate key using that column (attribute).
For both calls, the [UpsertResponse.RecordCreated property](xref:Microsoft.Xrm.Sdk.Messages.UpsertResponse.RecordCreated) indicates whether the operation created a row or not.
@@ -313,7 +313,7 @@ svc.Delete("account", new Guid("e5fa5509-2582-e811-a95e-000d3af40ae7"));
```
> [!IMPORTANT]
-> Delete operations can initiate cascading operations that may delete child rows to maintain data integrity depending on logic defined for the relationships in the environment. More information: [Table relationship behavior](../../../maker/data-platform/create-edit-entity-relationships.md#table-relationship-behavior)
+> Delete operations can initiate cascading operations that might delete child rows to maintain data integrity depending on logic defined for the relationships in the environment. More information: [Table relationship behavior](../../../maker/data-platform/create-edit-entity-relationships.md#table-relationship-behavior)
## Use the DeleteRequest class
@@ -340,9 +340,9 @@ svc.Execute(request);
You can specify the optimistic concurrency behavior for the operation by setting the `ConcurrencyBehavior` property of the or classes.
-The logic to update or delete the row may be based on stale data. If the current data is different because it has changed since it was retrieved, optimistic concurrency provides a way to cancel an update or delete operation so you might retrieve it again and use the current data to determine whether to proceed.
+The logic to update or delete the row might be based on stale data. If the current data is different because it has changed since it was retrieved, optimistic concurrency provides a way to cancel an update or delete operation so you might retrieve it again and use the current data to determine whether to proceed.
-To determine whether the row has been changed, you don't need to compare all the values, you can use the property to see if it has changed.
+To determine whether the row has changed, you don't need to compare all the values. You can use the property to see if it has changed.
The following example succeeds only when:
diff --git a/powerapps-docs/developer/data-platform/org-service/entity-operations.md b/powerapps-docs/developer/data-platform/org-service/entity-operations.md
index 1f52c1eaec..98b8dd18bb 100644
--- a/powerapps-docs/developer/data-platform/org-service/entity-operations.md
+++ b/powerapps-docs/developer/data-platform/org-service/entity-operations.md
@@ -1,11 +1,11 @@
---
-title: "Entity class operations using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn about the Entity class used for data operations using the Microsoft Dataverse SDK for .NET" # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 09/16/2022
+title: "Entity class operations using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs"
+description: "Learn about the Entity class used for data operations using the Microsoft Dataverse SDK for .NET"
+ms.date: 06/20/2025
ms.reviewer: pehecke
ms.topic: article
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -17,29 +17,29 @@ contributors:
[!INCLUDE[cc-terminology](../includes/cc-terminology.md)]
-When you work with Microsoft Dataverse data using the SDK for .NET you will use the class with the late-bound style or with generated entity classes using the early-bound style. The generated entity classes inherit from the class, so understanding the class is important for either style.
+When you work with Microsoft Dataverse data using the SDK for .NET, use the class with the late-bound style or with generated entity classes using the early-bound style. The generated entity classes inherit from the class, so understanding the class is important for either style.
-This topic will describe some of the most frequently used properties and methods of the class.
+This article describes some of the most frequently used properties and methods of the class.
## Entity.LogicalName
-When you instantiate a new class instance using the late-bound style you must provide a valid string value to specify what entity type it is. The `LogicalName` is defined in the entity metadata (table definition).
+When you instantiate a new class instance using the late-bound style, you must provide a valid string value to specify what entity type it is. The `LogicalName` is defined in the entity metadata (table definition).
-When using the early-bound style, this value is set by the constructor of the generated class. For example: `var account = new Entity("account");`
+When you use the early-bound style, the constructor of the generated class sets this value. For example: `var account = new Entity("account");`
-In your code, if you later want to retrieve the string value that describes the entity type, you can use the property. This is useful for the many APIs that require an entity logical name as a parameter.
+In your code, if you later want to retrieve the string value that describes the entity type, you can use the property. This property is useful for the many APIs that require an entity logical name as a parameter.
## Entity.Id
-When you instantiate the `Entity` class, whether using the late-bound or early-bound style, it doesn't have a unique id set. If you are creating an entity, you shouldn't set it, but allow it to be set by the system when you create (save) it.
+When you instantiate the `Entity` class, whether using the late-bound or early-bound style, it doesn't have a unique ID set. If you're creating an entity, you shouldn't set it, but let the system set it when you create (save) the record.
-If you are retrieving an entity, it will include the primary key attribute value whether you request it or not. The primary key attribute name is different for each type of entity. Generally, the name of the primary key attribute is the entity `logicalname` + `id`. For an account it is `accountid` and for contact it is `contactid`.
+If you're retrieving an entity, it includes the primary key attribute value whether you request it or not. The primary key attribute name is different for each type of entity. Generally, the name of the primary key attribute is the entity `logicalname` + `id`. For an account, it's `accountid` and for contact it's `contactid`.
While you can get or set the primary key value using the primary key attribute, you can also use the property to access the value without having to remember the name of the primary key attribute.
## Early bound access to table columns
-If you are using the early-bound style with generated classes, you will find typed properties for each attribute in the class. The properties for the attributes use the . and they can be accessed directly on the `Entity` class instance.
+If you're using the early-bound style with generated classes, you'll find typed properties for each attribute in the class. The properties for the attributes use the . and they can be accessed directly on the `Entity` class instance.
For example:
diff --git a/powerapps-docs/developer/data-platform/org-service/execute-multiple-requests.md b/powerapps-docs/developer/data-platform/org-service/execute-multiple-requests.md
index 1c11a31dcf..6d91d70c9c 100644
--- a/powerapps-docs/developer/data-platform/org-service/execute-multiple-requests.md
+++ b/powerapps-docs/developer/data-platform/org-service/execute-multiple-requests.md
@@ -1,11 +1,11 @@
---
-title: "Execute multiple requests using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "ExecuteMultipleRequest message supports higher throughput bulk message passing scenarios in Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 02/28/2023
+title: "Execute multiple requests using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs"
+description: "ExecuteMultipleRequest message supports higher throughput bulk message passing scenarios in Microsoft Dataverse."
+ms.date: 06/20/2025
ms.reviewer: pehecke
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -19,13 +19,13 @@ contributors:
The primary purpose of executing multiple requests it so improve performance in high-latency environments by reducing the total volume of data that is transmitted over the network.
-You can use the message to support higher throughput bulk message passing scenarios in Microsoft Dataverse. accepts an input collection of message , executes each of the message requests in the order they appear in the input collection, and optionally returns a collection of containing each message's response or the error that occurred. Each message request in the input collection is processed in a separate database transaction. is executed by using the . method.
+You can use the message to support higher throughput bulk message passing scenarios in Microsoft Dataverse. accepts an input collection of message , executes each of the message requests in the order they appear in the input collection, and optionally returns a collection of containing each message's response or the error that occurred. Each message request in the input collection is processed in a separate database transaction. is executed by using the [IOrganizationService.Execute](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2a) method.
-In general, behaves the same as if you executed each message request in the input request collection separately, except with better performance. Use of the parameter of the service proxy is honored and will apply to the execution of every message in the input request collection. Plug-ins and workflow activities are executed as you would expect for each message processed.
+In general, behaves the same as if you executed each message request in the input request collection separately, except with better performance. Use of the parameter of the service proxy is honored and applies to the execution of every message in the input request collection. Plug-ins and workflow activities are executed as you would expect for each message processed.
-Plug-ins and custom workflow activities are not blocked from using . However, this is not recommended. Any failures in the synchronous step must rollback all data operations to maintain data integrity. Each operation performed within `ExecuteMultiple` must be rolled back. `ExecuteMultiple` also causes issues when the operations exceed the maximum plug-in timeout duration.
+Plug-ins and custom workflow activities aren't blocked from using . However, this isn't recommended. Any failures in the synchronous step must roll back all data operations to maintain data integrity. Each operation performed within `ExecuteMultiple` must be rolled back. `ExecuteMultiple` also causes issues when the operations exceed the maximum plug-in timeout duration.
-More information: [Do not use batch request types in plug-ins and workflow activities](../best-practices/business-logic/avoid-batch-requests-plugin.md)
+More information: [Don't use batch request types in plug-ins and workflow activities](../best-practices/business-logic/avoid-batch-requests-plugin.md)
@@ -86,8 +86,8 @@ The parameter
|ExecuteMultipleSettings Member|Description|
|------------------------------------|-----------------|
-||When `true`, continue processing the next request in the collection even if a fault has been returned from processing the current request in the collection. When `false`, do not continue processing the next request.|
-||When `true`, return responses from each message request processed. When `false`, do not return responses.
If set to `true` and a request does not return a response, because that is its design, the for that request is set to `null`.
However, even when `false`, the collection will not be empty if errors are returned. If errors are returned, there will be one response item in the collection for each processed request that returned a fault and will be set to the actual fault that occurred.|
+||When `true`, continue processing the next request in the collection even if a fault is returned from processing the current request in the collection. When `false`, don't continue processing the next request.|
+||When `true`, return responses from each message request processed. When `false`, don't return responses.
If set to `true` and a request doesn't return a response, because that is its design, the for that request is set to `null`.
However, even when `false`, the collection won't be empty if errors are returned. When errors are returned, there is one response item in the collection for each processed request that returns a fault and is set to the actual fault that occurred.|
For example, in a request collection that contains six requests where the third and fifth request return faults, the following table indicates what the collection would contain.
@@ -106,20 +106,20 @@ The parameter
There are several constraints related to the use of the as described in the following list.
-- **No recursion is allowed** cannot invoke . An found in the request collection will generate a fault for that request item.
-- **Maximum batch size** There is a limit to how many requests can be added to a request collection. If that limit is exceeded, a fault is thrown before the first request is ever executed. A limit of 1000 requests is typical though this maximum amount can be set for the Dataverse deployment.
+- **No recursion is allowed** can't invoke . An found in the request collection generates a fault for that request item.
+- **Maximum batch size** There's a limit to how many requests can be added to a request collection. If that limit is exceeded, a fault is thrown before the first request is ever executed. A limit of 1,000 requests is typical though this maximum amount can be set for the Dataverse deployment.
> [!NOTE]
-> There was once a limit on the number of concurrent ExecuteMultiple requests. The limit was 2. This was removed because service protection limits made it unnecessary. For more information: [Service Protection API Limits](../api-limits.md).
+> There was once a limit on the number of concurrent ExecuteMultiple requests. The limit was 2. This limit was removed because service protection limits made it unnecessary. For more information: [Service Protection API Limits](../api-limits.md).
## Handle a batch size fault
-What should you do when your input request collection exceeds the maximum batch size? Your code can't directly query the maximum batch size through the deployment web service unless it is run under an account that has the deployment administrator role.
+What should you do when your input request collection exceeds the maximum batch size? Your code can't directly query the maximum batch size through the deployment web service unless it's run under an account that has the deployment administrator role.
-Fortunately, there is another method that you can use. When the number of requests in the input collection exceeds the maximum batch size allowed for an organization, a fault is returned from the call. The maximum batch size is returned in the fault. Your code can check for that value, resize the input request collection to be within the indicated limit, and re-submit the . The following code snippet demonstrates some of this logic.
+Fortunately, there's another method that you can use. When the number of requests in the input collection exceeds the maximum batch size allowed for an organization, a fault is returned from the call. The maximum batch size is returned in the fault. Your code can check for that value, resize the input request collection to be within the indicated limit, and resubmit the . The following code snippet demonstrates some of this logic.
```csharp
catch (FaultException fault)
diff --git a/powerapps-docs/developer/data-platform/org-service/handle-exceptions-code.md b/powerapps-docs/developer/data-platform/org-service/handle-exceptions-code.md
index 716ce3580c..2eac7c1b13 100644
--- a/powerapps-docs/developer/data-platform/org-service/handle-exceptions-code.md
+++ b/powerapps-docs/developer/data-platform/org-service/handle-exceptions-code.md
@@ -5,8 +5,8 @@ ms.collection: get-started
ms.date: 03/22/2022
ms.reviewer: "pehecke"
ms.topic: how-to
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/iorganizationservice-interface.md b/powerapps-docs/developer/data-platform/org-service/iorganizationservice-interface.md
index a0dd924d2f..467042dd34 100644
--- a/powerapps-docs/developer/data-platform/org-service/iorganizationservice-interface.md
+++ b/powerapps-docs/developer/data-platform/org-service/iorganizationservice-interface.md
@@ -1,12 +1,12 @@
---
-title: "IOrganizationService Interface (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Learn about the common web service methods exposed to perform data operations in Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
+title: "IOrganizationService Interface (Microsoft Dataverse) | Microsoft Docs"
+description: "Learn about the common web service methods exposed to perform data operations in Microsoft Dataverse."
ms.collection: get-started
-ms.date: 09/30/2022
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -22,7 +22,7 @@ The interface exposes methods used
## Client applications
-This interface is implemented by a couple of classes that you can use in your code when creating client applications.
+A couple of classes that you can use in your code when creating client applications implement the `IOrganizationService` interface:
|Class|Description|
|--|--|
@@ -31,23 +31,23 @@ This interface is implemented by a couple of classes that you can use in your co
## Plug-ins
-When you write plug-ins, there is also an object returned from the . which implements the interface but is not any of the types in the service client classes above.
+When you write plug-ins, there's also an object returned from the [IOrganizationServiceFactory.CreateOrganizationService method](xref:Microsoft.Xrm.Sdk.IOrganizationServiceFactory.CreateOrganizationService(System.Nullable{System.Guid})) that implements the interface but isn't any of the types in the client classes described in the previous section.
## IOrganizationService Methods
-Each of the classes which implement the interface may include additional properties and methods, but the interface has just 8 methods.
+Each of the classes that implement the interface might include additional properties and methods, but the interface has just eight methods.
|Method |Description |
|---------|---------|
-||Link two table rows using a table relationship|
-||Create a table row.|
-||Delete a table row|
-||Remove the link between two table rows using a table relationship|
-||Invoke an operation defined as a message by passing an instance of an or a class derived from it.|
-||Retrieve an instance of a table row.|
-||Retrieve a collection of table rows that match the criteria set in a query.|
-||Change the column values of a table row.|
+||Link two table rows using a table relationship|
+||Create a table row.|
+||Delete a table row|
+||Remove the link between two table rows using a table relationship|
+||Invoke an operation defined as a message by passing an instance of an or a class derived from it.|
+||Retrieve an instance of a table row.|
+||Retrieve a collection of table rows that match the criteria set in a query.|
+||Change the column values of a table row.|
> [!NOTE]
> The Organization service exposes only the `Execute` method. The other methods in the interface are simply wrappers around the `Execute` method. These other methods are provided for convenience. You can perform all operations using only the `Execute` method. More information: [Use messages with the SDK for .NET](use-messages.md)
diff --git a/powerapps-docs/developer/data-platform/org-service/linq-query-examples.md b/powerapps-docs/developer/data-platform/org-service/linq-query-examples.md
index bc4e74dfc4..4cdfdb5764 100644
--- a/powerapps-docs/developer/data-platform/org-service/linq-query-examples.md
+++ b/powerapps-docs/developer/data-platform/org-service/linq-query-examples.md
@@ -1,11 +1,11 @@
---
-title: "Linq query examples (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "Browse code samples of LINQ queries." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+title: "Linq query examples (Microsoft Dataverse) | Microsoft Docs"
+description: "Browse code samples of LINQ queries."
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
-ms.topic: "article"
+ms.topic: article
search.audienceType:
- developer
contributors:
@@ -17,13 +17,13 @@ contributors:
[!INCLUDE[cc-terminology](../includes/cc-terminology.md)]
-This topic contains many code samples of LINQ queries.
+This article contains many code samples of LINQ queries.
## Simple Where clause
- The following sample shows how to retrieve a list of accounts where the Name contains “Contoso”.
+ The following sample shows how to retrieve a list of accounts where the Name contains "Contoso".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -38,7 +38,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
}
```
- The following sample shows how to retrieve a list of accounts where the Name contains “Contoso” and Address1_City is “Redmond”.
+ The following sample shows how to retrieve a list of accounts where the Name contains "Contoso" and Address1_City is "Redmond".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -59,7 +59,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Join and simple Where clause
- The following sample shows how to retrieve the account Name and the contact LastName where the account Name contains “Contoso” and the contact LastName contains “Smith” and the contact is the Primary Contact for the account.
+The following sample shows how to retrieve the account Name and the contact LastName where the account Name contains "Contoso" and the contact LastName contains "Smith" and the contact is the Primary Contact for the account.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -90,7 +90,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Distinct Operator
- The following sample shows how to retrieve a distinct list of contact last names. Although there may be duplicates, each name will be listed only once.
+ The following sample shows how to retrieve a distinct list of contact last names. Although there might be duplicates, each name is listed only once.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -240,7 +240,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Late-binding left join
- The following sample shows a left join. A left join is designed to return parents with and without children from two sources. There is a correlation between parent and child, but no child may actually exist.
+ The following sample shows a left join. A left join is designed to return parents with and without children from two sources. There's a correlation between parent and child, but no child might actually exist.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -266,7 +266,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Equals operator
- The following sample shows how to retrieve a list of contacts where the FirstName is “Colin”.
+ The following sample shows how to retrieve a list of contacts where the FirstName is "Colin".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -314,7 +314,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Not Equals operator
- The following sample shows how to retrieve a list of contacts where the Address1_City is not “Redmond”.
+ The following sample shows how to retrieve a list of contacts where the Address1_City isn't "Redmond".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -335,7 +335,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
}
```
- The following sample shows how to retrieve a list of contacts where the FirstName is not “Colin”.
+ The following sample shows how to retrieve a list of contacts where the FirstName isn't "Colin".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -361,7 +361,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use a method-based LINQ query with a Where clause
- The following sample shows how to retrieve a list of contacts where the LastName is “Smith” or contains “Smi”.
+ The following sample shows how to retrieve a list of contacts where the LastName is "Smith" or contains "Smi".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -463,7 +463,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Contains operator
- The following sample shows how to retrieve contacts where the Description contains “Alpine”.
+ The following sample shows how to retrieve contacts where the Description contains "Alpine".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -486,7 +486,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Does Not Contain operator
- The following sample shows how to retrieve contacts where the Description does not contain “Coho”.
+ The following sample shows how to retrieve contacts where the Description doesn't contain "Coho".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -509,7 +509,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the StartsWith and EndsWith operators
- The following sample shows how to retrieve contacts where FirstName starts with “Bri”.
+ The following sample shows how to retrieve contacts where FirstName starts with "Bri".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -528,7 +528,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
}
```
- The following sample shows how to retrieve contacts where LastName ends with “cox”.
+ The following sample shows how to retrieve contacts where LastName ends with "cox".
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -551,7 +551,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the And and Or operators
- The following sample shows how to retrieve contacts where Address1_City is “Redmond” or “Bellevue” and a CreditLimit that is greater than $200.
+ The following sample shows how to retrieve contacts where Address1_City is "Redmond" or "Bellevue" and a CreditLimit that is greater than $200.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -661,7 +661,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the Skip and Take operators without paging
- The following sample shows how to retrieve just two rows after skipping two rows where the LastName is not “Parker” using the [Skip](/dotnet/api/system.linq.enumerable.skip) and [Take](/dotnet/api/system.linq.enumerable.take)operators.
+ The following sample shows how to retrieve just two rows after skipping two rows where the LastName isn't "Parker" using the [Skip](/dotnet/api/system.linq.enumerable.skip) and [Take](/dotnet/api/system.linq.enumerable.take)operators.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -686,7 +686,7 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
## Use the FirstOrDefault and SingleOrDefault operators
- The [FirstOrDefault](/dotnet/api/system.linq.enumerable.firstordefault) operator returns the first element of a sequence, or a default value if no element is found. The [SingleOrDefault](/dotnet/api/system.linq.enumerable.singleordefault) operator returns a single, specific element of a sequence, or a default value if that element is not found. The following sample shows how to use these operators.
+ The [FirstOrDefault](/dotnet/api/system.linq.enumerable.firstordefault) operator returns the first element of a sequence, or a default value if no element is found. The [SingleOrDefault](/dotnet/api/system.linq.enumerable.singleordefault) operator returns a single, specific element of a sequence, or a default value if that element isn't found. The following sample shows how to use these operators.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
@@ -836,9 +836,9 @@ using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
-## Use .value to retrieve the value of a column (attribute)
+## Accessing the value of a column (attribute)
- The following sample shows usage of Value to access the value of an attribute.
+ The following sample shows usage of `Value` to access the value of an attribute.
```csharp
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
diff --git a/powerapps-docs/developer/data-platform/org-service/order-results-entity-attributes-linq.md b/powerapps-docs/developer/data-platform/org-service/order-results-entity-attributes-linq.md
index a740055c9c..179fb640f7 100644
--- a/powerapps-docs/developer/data-platform/org-service/order-results-entity-attributes-linq.md
+++ b/powerapps-docs/developer/data-platform/org-service/order-results-entity-attributes-linq.md
@@ -2,8 +2,8 @@
title: "Order results using table columns with LINQ (Microsoft Dataverse) | Microsoft Docs"
description: "Read how you can use lookup or choices (picklist) columns to order results within a LINQ query."
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md b/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
index 377e608067..753cddcfab 100644
--- a/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
+++ b/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
@@ -2,8 +2,8 @@
title: "Use OrganizationServiceContext (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "The OrganizationServiceContext class lets you track changes, manage identities and relationships, and gives you access to the LINQ provider." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 11/10/2023
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/overview.md b/powerapps-docs/developer/data-platform/org-service/overview.md
index 676a080452..4d7eea3141 100644
--- a/powerapps-docs/developer/data-platform/org-service/overview.md
+++ b/powerapps-docs/developer/data-platform/org-service/overview.md
@@ -1,9 +1,9 @@
---
title: "Use the SDK for .NET"
description: "Learn how you can use the Microsoft Dataverse SDK for .NET to work with business data."
-ms.date: 09/27/2022
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: overview
ms.custom: bap-template
@@ -28,25 +28,25 @@ After adding the NuGet package to your Visual Studio project, you then have acce
## Interacting with the Organization service
-In this section we cover some key concepts about using provided SDK classes to connect with the web services and perform operations.
+In this section, we cover some key concepts about using provided SDK classes to connect with the web services and perform operations.
### Establishing a web service connection
-The interface provides a connection to the Organization service enabling applications to work with business data, and table and column definitions. There are two implementations of this interface in the SDK: and . For new application development, you should be using the `ServiceClient` class which supports newer authentication technologies (MSAL) and has a few additional features not available in `CrmServiceClient`. However, both client classes are mostly the same from an API perspective. You will see code samples in this documentation using either of these classes, and it is fairly easy to convert code that uses `CrmServiceClient` to use `ServiceClient`.
+The interface provides a connection to the Organization service enabling applications to work with business data, and table and column definitions. There are two implementations of this interface in the SDK: and . For new application development, you should be using the `ServiceClient` class that supports newer authentication technologies (MSAL) and has a few more features not available in `CrmServiceClient`. However, both client classes are mostly the same from an API perspective. You'll see code samples in this documentation using either of these classes, and it's fairly easy to convert code that uses `CrmServiceClient` to use `ServiceClient`.
More information: [Transition apps to Dataverse ServiceClient](../sdk-client-transition.md), [IOrganizationService Interface](iorganizationservice-interface.md)
### Web service operations
-In the Dataverse SDK for .NET, web service operations are initiated by sending *messages* or *message requests* to the service. Each message has a name which indicates the purpose of the message, and the corresponding request class name is based on that message name. For example, to create a row of data in a table, you populate a create request with data and have the service client send (Execute) this request to the Organization service. The operation is 'create' and the message request is named . After executing a request, the service returns a response class object (e.g., ) which contains an execution status and results data. This pattern is the same for the other operations that the service supports.
+In the Dataverse SDK for .NET, web service operations are initiated by sending *messages* or *message requests* to the service. Each message has a name that indicates the purpose of the message, and the corresponding request class name is based on that message name. For example, to create a row of data in a table, you populate a create request with data and have the service client send (Execute) this request to the Organization service. The operation is 'create' and the message request is named . When you execute a request, the service returns a response class object (for example, ) which contains an execution status and results data. This pattern is the same for the other operations that the service supports.
Take a look at the available message request and response classes in the and namespaces.
## About the legacy SOAP endpoint
-The Organization service endpoint that was introduced in 2011, known as the SOAP endpoint, has been deprecated for some time now. This means that it will continue to work and be supported until we remove it. We have also announced that we will update the SDK for .NET assemblies so that they will continue to work after the endpoint is removed. This means that there will be updated SDK for .NET assemblies available before the endpoint is removed. Developers will be required to update their code to use these new assemblies at some point in the future. The key takeaway is that developers will access the Organization service using the SDK for .NET and ignore the endpoint and its protocol. More information: [Transition apps to Dataverse ServiceClient](../sdk-client-transition.md)
+The Organization service endpoint, known as the SOAP endpoint, was introduced in 2011. This endpoint is deprecated. This means that it continues to work and be supported until we remove it. We also announced that we'll update the SDK for .NET assemblies so that they'll continue to work after the endpoint is removed. This means that updated SDK for .NET assemblies will be available before the endpoint is removed. Developers will be required to update their code to use these new assemblies at some point in the future. The key takeaway is that developers access the Organization service using the SDK for .NET and ignore the endpoint and its protocol. More information: [Transition apps to Dataverse ServiceClient](../sdk-client-transition.md)
-Since the Web API uses a different endpoint, it is not affected by this 2011 SOAP endpoint deprecation.
+Since the Web API uses a different endpoint, it isn't affected by this 2011 SOAP endpoint deprecation.
## Next steps
diff --git a/powerapps-docs/developer/data-platform/org-service/page-large-result-sets-linq.md b/powerapps-docs/developer/data-platform/org-service/page-large-result-sets-linq.md
index 4de9ca078e..59b048f033 100644
--- a/powerapps-docs/developer/data-platform/org-service/page-large-result-sets-linq.md
+++ b/powerapps-docs/developer/data-platform/org-service/page-large-result-sets-linq.md
@@ -2,8 +2,8 @@
title: "Page large result sets with LINQ (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Read how you can page the results of a large .NET Language-Integrated Query (LINQ) query by using the Take and Skip operators." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/aggregate-data.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/aggregate-data.md
index b5188fa207..aa5378af4c 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/aggregate-data.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/aggregate-data.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to retrieve aggregated data from M
ms.date: 04/11/2025
ms.reviewer: jdaly
ms.topic: how-to
-author: olegovanesyan
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: olegov
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/count-rows.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/count-rows.md
index 2faa25045a..9b26f904b9 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/count-rows.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/count-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to count rows from Microsoft Datav
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -14,7 +14,7 @@ contributors:
---
# Count rows using QueryExpression
-Use the boolean [QueryExpression.PageInfo.ReturnTotalRecordCount property](/dotnet/api/microsoft.xrm.sdk.query.paginginfo.returntotalrecordcount) to specify that the result include a count of all the records that meet the filter criteria, up to 5000. Use this when retrieving paged results to estimate the total number of pages to display.
+Use the boolean [QueryExpression.PageInfo.ReturnTotalRecordCount property](/dotnet/api/microsoft.xrm.sdk.query.paginginfo.returntotalrecordcount) to specify that the result include a count of all the records that meet the filter criteria, up to 5,000 for standard tables, 500 for elastic tables. Use this when retrieving paged results to estimate the total number of pages to display.
You can't use the [QueryExpression.TopCount property](/dotnet/api/microsoft.xrm.sdk.query.queryexpression.topcount) together with `ReturnTotalRecordCount`..
@@ -25,15 +25,15 @@ When the [ReturnTotalRecordCount property](/dotnet/api/microsoft.xrm.sdk.query.p
|Property|Description|
|---------|---------|
-||The total number of records up to 5000; otherwise the value is -1.|
+||The total number of records up to 5,000; otherwise the value is -1.|
||`true` if the results of the query exceeds the total record count; otherwise, `false`.|
-The value is useful when you need to calculate how many more paged requests you need to send to get all the results when equals 5000.
+The value is useful when you need to calculate how many more paged requests you need to send to get all the results when equals the maximum value: 5,000 for standard tables, 500 for elastic tables.
-If your page size is less than the maximum and is equal to or less than 5000, you can calculate how many more paged requests you must send to get all the records.
+If your page size is less than the maximum and is equal to or less than the maximum, you can calculate how many more paged requests you must send to get all the records.
-When is `true` and equals 5000, you can't perform this calculation.
+When is `true` and equals the maximum, you can't perform this calculation.
> [!TIP]
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/filter-rows.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/filter-rows.md
index 7cf0729278..ed2577ca8f 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/filter-rows.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/filter-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to filter rows when you retrieve d
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/join-tables.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/join-tables.md
index ee8e32723b..445c6b6cba 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/join-tables.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/join-tables.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to join tables when you retrieve d
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/optimize-performance.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/optimize-performance.md
index a0abc069b3..53a52eb16c 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/optimize-performance.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/optimize-performance.md
@@ -4,9 +4,9 @@ description: Learn how to optimize performance when you retrieve data from Micro
ms.date: 01/06/2025
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/order-rows.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/order-rows.md
index db5bd8d841..8e4e92d7af 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/order-rows.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/order-rows.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to order rows when you retrieve da
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/overview.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/overview.md
index 35d0f5b371..91fa4c1cc0 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/overview.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/overview.md
@@ -4,9 +4,9 @@ description: Learn to compose a query using QueryExpression, an object model tha
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -74,7 +74,7 @@ Examples in this documentation will use a combination of object initialization a
## Limit the number of rows
-To limit the number of rows returned, use the [QueryExpression.TopCount property](xref:Microsoft.Xrm.Sdk.Query.QueryExpression.TopCount). Without setting the `TopCount` property, Dataverse returns up to 5,000 rows.
+To limit the number of rows returned, use the [QueryExpression.TopCount property](xref:Microsoft.Xrm.Sdk.Query.QueryExpression.TopCount). Without setting the `TopCount` property, Dataverse returns up to 5,000 rows for standard tables, 500 for elastic tables.
Alternatively, specify a number of records to return using paging. Don't use the `TopCount` property when you request pages of data. [Learn how to request paged results](page-results.md)
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/page-results.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/page-results.md
index 07457f2695..db2f2ffb5b 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/page-results.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/page-results.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to page results when you retrieve
ms.date: 12/04/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
+ms.author: jukoesma
ms.subservice: dataverse-developer
-ms.author: gned
search.audienceType:
- developer
contributors:
@@ -16,7 +16,7 @@ contributors:
You can specify a limit on the number of rows retrieved for each request by setting a page size. Using paging, you can retrieve consecutive pages of data representing all the records that match the criteria of a query in a performant manner.
-The default and maximum page size is 5,000 rows. If you don't set a page size, Dataverse will return up to 5,000 rows of data at a time. To get more rows, you must send additional requests.
+The default and maximum page size is 5,000 rows for standard tables, 500 for elastic. If you don't set a page size, Dataverse will return up to the maximum page size rows of data at a time. To get more rows, you must send additional requests.
> [!NOTE]
>
@@ -98,7 +98,7 @@ After each request, the method checks the [EntityCollection.MoreRecords property
///
/// The authenticated IOrganizationService instance.
/// The QueryExpression query
-/// The page size to use. Defaults to 5000
+/// The page size to use. Defaults to 5,000
/// All the records that match the criteria
static EntityCollection RetrieveAll(IOrganizationService service,
QueryExpression query,
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/sample.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/sample.md
index 7b56f04f49..63e19ec7e2 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/sample.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/sample.md
@@ -4,9 +4,9 @@ description: Try using QueryExpression to retrieve Dataverse data using this sam
ms.date: 12/04/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -240,6 +240,6 @@ When you run the program using the `OutputQueryExpression` method, the output sh
### Related articles
-[Query data using QueryExpression](overview.md)
-[Sample: Retrieve multiple with the QueryExpression class](../samples/retrieve-multiple-queryexpression-class.md)
+[Query data using QueryExpression](overview.md)
+[Sample: Retrieve multiple with the QueryExpression class](../samples/retrieve-multiple-queryexpression-class.md)
[Sample: Use QueryExpression with a paging cookie](../samples/use-queryexpression-with-a-paging-cookie.md)
diff --git a/powerapps-docs/developer/data-platform/org-service/queryexpression/select-columns.md b/powerapps-docs/developer/data-platform/org-service/queryexpression/select-columns.md
index 72831ce1d1..70adc18028 100644
--- a/powerapps-docs/developer/data-platform/org-service/queryexpression/select-columns.md
+++ b/powerapps-docs/developer/data-platform/org-service/queryexpression/select-columns.md
@@ -4,9 +4,9 @@ description: Learn how to use QueryExpression to select columns when you retriev
ms.date: 05/12/2024
ms.reviewer: jdaly
ms.topic: how-to
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/quick-start-org-service-console-app.md b/powerapps-docs/developer/data-platform/org-service/quick-start-org-service-console-app.md
index 61f8bc31a5..0cb6806b11 100644
--- a/powerapps-docs/developer/data-platform/org-service/quick-start-org-service-console-app.md
+++ b/powerapps-docs/developer/data-platform/org-service/quick-start-org-service-console-app.md
@@ -1,9 +1,9 @@
---
title: "Quickstart: Execute an SDK for .NET request (C#) (Microsoft Dataverse) | Microsoft Docs"
description: "Demonstrates how to connect to the SDK for .NET of Microsoft Dataverse and execute a request."
-ms.date: 12/04/2024
-author: MicroSri
-ms.author: sriknair
+ms.date: 06/20/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: quickstart
search.audienceType:
@@ -17,12 +17,12 @@ contributors:
[!INCLUDE[cc-terminology](../includes/cc-terminology.md)]
-This topic shows you how to begin using classes in the SDK for .NET assemblies to work with Microsoft Dataverse business data. You will create a minimal console application to connect to your environment's Organization service using the class and execute a web service operation.
+This article shows you how to begin using classes in the SDK for .NET assemblies to work with Microsoft Dataverse business data. You'll create a minimal console application to connect to your environment's Organization service using the class and execute a web service operation.
-Your application will call the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A) passing an instance of the class. The result returned from the web service is a populated [WhoAmIResponse.UserId](xref:Microsoft.Crm.Sdk.Messages.WhoAmIResponse.UserId) value which is the unique identifier of your Dataverse system user account.
+Your application calls the [IOrganizationService.Execute method](xref:Microsoft.Xrm.Sdk.IOrganizationService.Execute%2A) passing an instance of the class. The result returned from the web service is a populated [WhoAmIResponse.UserId](xref:Microsoft.Crm.Sdk.Messages.WhoAmIResponse.UserId) value that is the unique identifier of your Dataverse system user account.
> [!NOTE]
-> This quick start example does not include exception handling for brevity. This is a minimum code example of what you need to connect to and use the SDK for .NET.
+> This quick start example doesn't include exception handling for brevity. This quick start is a minimum code example of what you need to connect to and use the SDK for .NET.
You can obtain the complete code sample from GitHub [GetStarted](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp-NETCore/GetStarted/ConsoleApp%20(public)/Program.cs). Consult the program's [README](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp-NETCore/GetStarted/README.md) for more details.
@@ -39,7 +39,7 @@ Read the following important information about using a connection string or user
## Create Visual Studio project
-1. Create a new .NET console app project. For this project we are using Visual Studio 2022 and targeting .NET 6.
+1. Create a new .NET console app project. For this project, we're using Visual Studio 2022 and targeting .NET 6.

@@ -52,7 +52,7 @@ Read the following important information about using a connection string or user

> [!NOTE]
-> Your will be prompted to OK the preview changes, and then select **I Accept** in the **Licence Acceptance** dialog.
+> You are prompted to OK the preview changes, and then select **I Accept** in the **Licence Acceptance** dialog.
## Add application code
@@ -104,7 +104,7 @@ Read the following important information about using a connection string or user
> [!NOTE]
> You can find your environment URL in the legacy web application under **Settings > Customization > Developer Resources** or in Power Apps **Settings** (gear icon) > **Developer Resources**.
>
- > While this code sample places the username/password information in the code for simplicity, other code samples will use the more recommended approach of prompting for that information or storing it in a separate App.config or appsettings.json file.
+ > While this code sample places the username/password information in the code for simplicity, other code samples use the more recommended approach of prompting for that information or storing it in a separate App.config or appsettings.json file.
>
> You can find supported values for *AuthType* listed in [Connection string parameters](../xrm-tooling/use-connection-strings-xrm-tooling-connect.md#connection-string-parameters).
@@ -177,7 +177,7 @@ Now that you have a simple console program that connects to Dataverse, use this
### Try other IOrganizationService interface methods
> [!TIP]
-> In our documentation you can find many example methods like this `WhoAmIExample` which accept an `IOrganizationService service` parameter.
+> In our documentation, you can find many example methods like this `WhoAmIExample` that accept an `IOrganizationService service` parameter.
Try the examples for these [IOrganizationService methods](xref:Microsoft.Xrm.Sdk.IOrganizationService) methods:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/assign-records-to-team.md b/powerapps-docs/developer/data-platform/org-service/samples/assign-records-to-team.md
index dd1d138f05..6cd8868b00 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/assign-records-to-team.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/assign-records-to-team.md
@@ -2,8 +2,8 @@
title: " Assign a record to a team (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample showcases how to assign records to a team." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/basic-followup-plugin.md b/powerapps-docs/developer/data-platform/org-service/samples/basic-followup-plugin.md
index 7a85e51a64..bd74294d35 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/basic-followup-plugin.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/basic-followup-plugin.md
@@ -2,8 +2,8 @@
title: "Sample: Create a basic plug-in (Microsoft Dataverse) | Microsoft Docs"
description: "Learn how to write a simple plug-in that creates a follow-up activity."
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/column-level-security.md b/powerapps-docs/developer/data-platform/org-service/samples/column-level-security.md
new file mode 100644
index 0000000000..3f0080fb3c
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/org-service/samples/column-level-security.md
@@ -0,0 +1,147 @@
+---
+title: "Sample: Column-level security using Dataverse SDK for .NET"
+description: "This sample shows how to work with column-level security using the Dataverse SDK for .NET."
+ms.date: 07/30/2025
+author: paulliew
+ms.subservice: dataverse-developer
+ms.author: paulliew
+ms.reviewer: jdaly
+ms.topic: sample
+search.audienceType:
+ - developer
+contributors:
+ - JimDaly
+ - phecke
+---
+# Sample: Column-level security using Dataverse SDK for .NET
+
+This sample shows how to perform [column-level security](../../column-level-security.md) operations using [Dataverse SDK for .NET](../overview.md).
+
+> [!div class="nextstepaction"]
+> [View this sample on Github](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity)
+
+## Prerequisites
+
+- Microsoft Visual Studio 2022
+- Access to Dataverse with system administrator privileges.
+
+## How to run this sample
+
+1. Download or clone the [Samples](https://github.com/Microsoft/PowerApps-Samples) repo so that you have a local copy.
+1. Follow the instructions in the [Configure users](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/README.md#configure-users) section to create a second application user account without the system administrator role.
+1. Edit the [/ColumnLevelSecurity/appsettings.json](https://github.com/microsoft/PowerApps-Samples/blob/master/dataverse/orgsvc/CSharp-NETCore/ColumnLevelSecurity/appsettings.json) file to define a connection string specifying the Microsoft Dataverse instance you want to connect to for both the system administrator and second application user.
+1. Open the sample solution in Visual Studio and press **F5** to run the sample.
+
+## What this sample does
+
+This sample demonstrates the capabilities described in [Column-level security with code](../../column-level-security.md):
+
+- Discover which columns can be secured in a Dataverse environment
+- Discover which columns are currently secured
+- Secure columns in a Dataverse environment
+- Grant read or write access to selected fields to individual users
+- Modify access to secured fields for individual users
+- Revoke access to selected fields for individual users
+- Provide read and write access to specific groups of users
+- Enable masking of secured columns
+- Retrieve unmasked values for secured columns
+
+## Sample files
+
+The code for this sample is in the following files:
+
+|File|Description|
+|---------|---------|
+|`Program.cs`|Controls the flow of the sample. Contains definition of `Setup`, `Run`, and `Cleanup` methods and calls them in the `Main` method.|
+|`Examples.cs`|Contains methods that demonstrate operations related to column-level security operations.|
+|`Helpers.cs`|Contains methods used by the sample to manage setting up and running the sample. These methods aren't the focus of this sample.|
+
+This sample is designed to be resilient when errors occur so you should be able to run the sample again if it failed previously.
+
+## How this sample works
+
+In order to create the scenario described in [What this sample does](#what-this-sample-does), the sample does the following operations:
+
+### Setup
+
+The static `Setup` method in this sample does the following operations:
+
+1. Create a solution publisher named `ColumnLevelSecuritySamplePublisher` with customization prefix of `sample` if it doesn't exist.
+1. Create a solution named `ColumnLevelSecuritySampleSolution` associated with the publisher if it doesn't exist.
+
+ All subsequent solution-aware items are created in the context of this solution.
+
+1. Create a table named `sample_Example` if it doesn't exist.
+1. Create four string columns in the `sample_Example` table if they don't exist. The table schema names are:
+
+ - `sample_Email`
+ - `sample_GovernmentId`
+ - `sample_TelephoneNumber`
+ - `sample_DateOfBirth`
+
+1. Remove any existing sample data in the `sample_Example` table.
+1. Add three rows of sample data with information in each column of the `sample_Example` table.
+1. Create a new security role named **Column-level security sample role**.
+1. Add privileges for the `sample_Example` table to the security role.
+1. Associate the user to the security role.
+1. Create a [Field Security Profile](../../reference/entities/fieldsecurityprofile.md) record named **Example Field Security Profile** that is used in the [Manage access to secure column data to groups](#manage-access-to-secure-column-data-to-groups) section of the sample.
+1. Associate the application user to the field security profile.
+1. Wait 30 seconds for the cache to catch up with the new objects created.
+
+### Demonstrate
+
+The static `Run` method in this sample does the following operations:
+
+#### Retrieve information about columns
+
+1. Use the `Examples.DumpColumnSecurityInfo` method to download a CSV file with data about which columns in the system can be secured.
+1. Use the `Examples.GetSecuredColumnList` method to retrieve and show a list of environment columns that are already secured.
+
+#### Secure columns
+
+1. Demonstrate that the application user can retrieve data from all the columns in the `sample_Example` table.
+1. Use the `Examples.SetColumnIsSecured` method to secure the four columns
+1. Demonstrate that the application user can no longer retrieve data from the secured columns in the `sample_Example` table.
+
+#### Grant access to secure column data to individuals
+
+1. Use the `Examples.GrantColumnAccess` method to grant the application users read access to specific record field values by creating a [Field Sharing (PrincipalObjectAttributeAccess)](../../reference/entities/principalobjectattributeaccess.md) record.
+1. Demonstrate that the application user can now retrieve data from specific secured record fields in the `sample_Example` table.
+1. Demonstrate that the application user isn't allowed to write data to the secured columns.
+1. Use the `Examples.ModifyColumnAccess` method to grant write access to a specific record field.
+1. Demonstrate that the application user is now allowed to write data to the specific record field.
+1. Use the `Examples.RevokeColumnAccess` method to delete the `PrincipalObjectAttributeAccess` records that gave the application user access to the secured columns.
+
+#### Manage access to secure column data to groups
+
+1. Add field permissions to the **Example Field Security Profile** record that was created in `Setup` by creating [Field Permission (FieldPermission)](../../reference/entities/fieldpermission.md) records
+1. Demonstrate that the application user can view only the secured columns specified in the field permission records.
+1. Demonstrate that the application user isn't allowed to write data to the specific record field not enabled with field permissions.
+
+#### Masking
+
+1. Retrieve ID values for existing masking rules. Create new [Secured Masking Column (AttributeMaskingRule)](../../reference/entities/attributemaskingrule.md) records to specify masking rules for columns of the `sample_Example` table.
+1. Update the `canreadunmasked` column values of the [Field Permission (FieldPermission)](../../reference/entities/fieldpermission.md) records created earlier.
+1. Wait 30 seconds for the cache to catch up with the new objects created.
+1. Demonstrate that the application user can now retrieve data with masked values.
+1. Demonstrate that the application user can now retrieve unmasked values with [RetrieveMultipleRequest class](/dotnet/api/microsoft.xrm.sdk.messages.retrievemultiplerequest) when using the [UnMaskedData optional parameter](../../optional-parameters.md#return-unmasked-data).
+1. Demonstrate that the application user can now retrieve unmasked values with [RetrieveRequest class](/dotnet/api/microsoft.xrm.sdk.messages.retrieverequest) when using the [UnMaskedData optional parameter](../../optional-parameters.md#return-unmasked-data).
+
+#### Export solution
+
+Use an exported solution to test the functionality of the sample configurations outside of this sample.
+
+1. Export the solution created with all the configurations as an unmanaged solution.
+1. Export the solution created with all the configurations as a managed solution
+
+### Clean up
+
+The static `Cleanup` method in this sample does the following operations:
+
+When the `SampleSettings.DeleteCreatedObjects` setting in `appsettings.json` is `true`, the `Cleanup` method tries to delete all components created during `Setup` or `Run`. The goal is to return the environment to the original state. If you don't want the items to be deleted, you can change the setting to `false`.
+
+### Related samples
+
+[Sample: Column-level security using Dataverse Web API (PowerShell)](../../webapi/samples/column-level-security-powershell.md)
+
+[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/convert-queries-fetch-queryexpression.md b/powerapps-docs/developer/data-platform/org-service/samples/convert-queries-fetch-queryexpression.md
index 06dc0fe718..ee3eda0e71 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/convert-queries-fetch-queryexpression.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/convert-queries-fetch-queryexpression.md
@@ -2,8 +2,8 @@
title: "Sample: Convert queries between Fetch and QueryExpression"
description: This sample shows how to convert queries between FetchXML and QueryExpression
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/create-update-multiple.md b/powerapps-docs/developer/data-platform/org-service/samples/create-update-multiple.md
index 512415a606..f7a72ab75d 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/create-update-multiple.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/create-update-multiple.md
@@ -2,8 +2,8 @@
title: "Sample: SDK for .NET Use bulk operations (Microsoft Dataverse) | Microsoft Docs"
description: "This sample shows how to perform bulk create and update operations using several different approaches including the use of CreateMultipleRequest and UpdateMultipleRequest classes. The messages for these request classes are optimized to provide the most performant way to create or update records with Dataverse."
ms.date: 06/01/2023
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/create-update-records-with-related-records.md b/powerapps-docs/developer/data-platform/org-service/samples/create-update-records-with-related-records.md
index bf164f18d6..161f872938 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/create-update-records-with-related-records.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/create-update-records-with-related-records.md
@@ -2,8 +2,8 @@
title: "Sample: Create and update records with related records (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample showcases how to create and update records with related records." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/createmultiple-updatemultiple-plugin.md b/powerapps-docs/developer/data-platform/org-service/samples/createmultiple-updatemultiple-plugin.md
index d5d7b0190c..12a5eb28d1 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/createmultiple-updatemultiple-plugin.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/createmultiple-updatemultiple-plugin.md
@@ -2,8 +2,8 @@
title: "Sample: CreateMultiple and UpdateMultiple plug-ins (Microsoft Dataverse) | Microsoft Docs"
description: "This sample shows how to write plug-ins for the CreateMultiple and UpdateMultiple messages"
ms.date: 06/01/2023
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/early-bound-entity-operations.md b/powerapps-docs/developer/data-platform/org-service/samples/early-bound-entity-operations.md
index b07eb16a87..734326868a 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/early-bound-entity-operations.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/early-bound-entity-operations.md
@@ -2,8 +2,8 @@
title: "Sample: Create, update related records early bound(Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to create, retrieve, update, and delete operations on an account using the early bound class. " # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/enable-field-security-entity.md b/powerapps-docs/developer/data-platform/org-service/samples/enable-field-security-entity.md
deleted file mode 100644
index ffbd4b0070..0000000000
--- a/powerapps-docs/developer/data-platform/org-service/samples/enable-field-security-entity.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: "Sample: Enable field security for a table (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "This sample shows how to enable field security for a table" # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: paulliew
-ms.author: paulliew
-ms.reviewer: jdaly
-ms.topic: sample
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - phecke
----
-
-# Sample: Enable field security for a table
-
-[!INCLUDE[cc-terminology](../../includes/cc-terminology.md)]
-
-This sample shows how to enable field security for a table.
-
-> [!div class="nextstepaction"]
-> [SDK for .NET: Enable field security for a table sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/FieldSecurity)
-
-[!INCLUDE[cc-terminology](../../includes/cc-terminology.md)]
-
-This sample requires additional users that are not in your system. Create the required users manually in **Microsoft 365** in order to run the sample without any errors. For this sample, create a user profile **as is** shown below.
-
-**First Name**: Samantha
-**Last Name**: Smith
-**Security Role**: Marketing Manager
-**UserName**: ssmith@yourorg.onmicrosoft.com
-
-## How to run this sample
-
-[!include[cc-how-to-run-samples](../../includes/cc-how-to-run-samples.md)]
-
-## How this sample works
-
-In order to simulate the scenario described above, the sample will do the following:
-
-### Setup
-
-1. Checks for the current version of the org.
-2. Gets the user that you have created manually in **Microsoft 365**.
-3. Retrieve the security role needed to assign to the user.
-4. Retrieve the default business unit needed to create the team.
-5. Instantiate a team record and set its property values.
-
-### Demonstrate
-
-1. Creates field security profile and create the request object and set the monikers with the teamprofiles_assocation relationship.
-2. Creates custom activity table and columns using the `CreateEntityRequest` and `CreateAttributeRequest` message.
-3. Create the field permission for the identity column.
-
-### Clean up
-
-Display an option to delete the records in [Setup](#setup). The deletion is optional in case you want to examine the tables and data created by the sample. You can manually delete the records to achieve the same result.
-
-[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-requests.md b/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-requests.md
index d1a4e052c4..7e9bb24fe7 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-requests.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-requests.md
@@ -2,8 +2,8 @@
title: "Sample: Execute multiple requests (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to execute multiple organization messages requests by using a single web service method call." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-transaction.md b/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-transaction.md
index fa8647fd9a..7f0ea2c780 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-transaction.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/execute-multiple-transaction.md
@@ -2,8 +2,8 @@
title: "Sample: Execute multiple requests in transaction (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to execute multiple request in transaction." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/file-operations.md b/powerapps-docs/developer/data-platform/org-service/samples/file-operations.md
index aa96995a87..fa80e0f554 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/file-operations.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/file-operations.md
@@ -2,8 +2,8 @@
title: "Sample: File Operations using Dataverse SDK for .NET (Microsoft Dataverse) | Microsoft Learn" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample demonstrates how to perform operations with file columns using the Dataverse SDK for .NET." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 12/04/2024
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/insert-update-record-upsert.md b/powerapps-docs/developer/data-platform/org-service/samples/insert-update-record-upsert.md
index ba88818641..7c097fa3de 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/insert-update-record-upsert.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/insert-update-record-upsert.md
@@ -2,8 +2,8 @@
title: "Sample: Insert or update record using Upsert (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to insert or update records using the Upsert message." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/issystemadmin-customapi-sample-plugin.md b/powerapps-docs/developer/data-platform/org-service/samples/issystemadmin-customapi-sample-plugin.md
index 91b225e3c2..deec243d16 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/issystemadmin-customapi-sample-plugin.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/issystemadmin-customapi-sample-plugin.md
@@ -2,8 +2,8 @@
title: "Sample: IsSystemAdmin custom API plug-in (Microsoft Dataverse) | Microsoft Docs"
description: "Learn how to write a plug-in to support a custom API"
ms.date: 09/27/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/late-bound-entity-operations.md b/powerapps-docs/developer/data-platform/org-service/samples/late-bound-entity-operations.md
index 230dcbdecc..5b3b585e42 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/late-bound-entity-operations.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/late-bound-entity-operations.md
@@ -2,8 +2,8 @@
title: "Sample: Create, retrieve, update, and delete (late bound) (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample demonstrates the create, retrieve, update, and delete operations on an account using the late bound table class." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/merge-two-records.md b/powerapps-docs/developer/data-platform/org-service/samples/merge-two-records.md
index 91304dfbe2..de2561ef98 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/merge-two-records.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/merge-two-records.md
@@ -2,8 +2,8 @@
title: "Sample: Merge two records (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample showcases how to merge two records." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/modify-query-preoperation-stage.md b/powerapps-docs/developer/data-platform/org-service/samples/modify-query-preoperation-stage.md
index 6b7806a89e..f6e4c8b49c 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/modify-query-preoperation-stage.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/modify-query-preoperation-stage.md
@@ -2,8 +2,8 @@
title: "Sample: Modify query in PreOperation stage (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to write a plug-in that modifies a query defined within the PreOperation stage of a RetrieveMultiple request." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-permissions.md b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-permissions.md
deleted file mode 100644
index 9c36623486..0000000000
--- a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-permissions.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: "Sample: Retrieve field permissions (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "This sample shows how to retrieve secured columns for a user" # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: paulliew
-ms.author: paulliew
-ms.reviewer: jdaly
-ms.topic: sample
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - phecke
----
-
-# Sample: Retrieve field permissions
-
-This sample shows how to retrieve secured columns for a user according to the steps outlined in [Field security tables](/dynamics365/customer-engagement/developer/field-security-entities).
-
-> [!div class="nextstepaction"]
-> [SDK for .NET: Retrieve field permissions sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/RetrieveFieldPermission)
-
-This sample requires additional users that are not in your system. Create the required users manually in **Microsoft 365** in order to run the sample without any errors. For this sample create a user profile **as is** shown below. Replace `yourorg` with the organization name.
-
-**First Name**: Samantha
-**Last Name**: Smith
-**Security Role**: Marketing Manager
-**UserName**: ssmith@yourorg.onmicrosoft.com
-
-## How to run this sample
-
-[!include[cc-how-to-run-samples](../../includes/cc-how-to-run-samples.md)]
-
-## What this sample does
-
-The `FieldPermission` class is intended to be used in a scenario where it contains the data that defines the possible permission types.
-
-## How this sample works
-
-In order to simulate the scenario described in [What this sample does](#what-this-sample-does), the sample will do the following:
-
-### Setup
-
-1. Checks for the current version of the org.
-1. Gets the user information that you have created manually in **Microsoft 365**.
-1. The `QueryExpression` method retrieves the security role needed to assign to the user.
-1. The `Team` method instantiate a team record and set its property values.
-
-### Demonstrate
-
-1. The `FieldSecurityProfile` method creates field security profile.
-1. The `AssociateRequest` method adds team and user to the profile.
-1. The `CreateEntityRequest` method creates a new custom activity table for the sample.
-1. The `RolePrivilege` method adds privileges for the new custom table.
-1. The `AddPrivilegeRoleRequest` method creates and execute the `RolePrivilege` method.
-1. The `FieldPermission` method creates field permission object for identity.
-
-### Clean up
-
-Display an option to delete the records created in the [Setup](#setup). The deletion is optional in case you want to examine the tables and data created by the sample. You can manually delete the records to achieve the same result.
-
-[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-sharing-records.md b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-sharing-records.md
deleted file mode 100644
index c63454e1b1..0000000000
--- a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-field-sharing-records.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: "Sample: Retrieve field sharing records (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "This sample shows how to retrieve the field sharing records for a table." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: paulliew
-ms.author: paulliew
-ms.reviewer: jdaly
-ms.topic: sample
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - phecke
----
-
-# Sample: Retrieve field sharing records
-
-This sample shows how to retrieve the `PrincipalObjectAttributeAccess` (field sharing) records for a table.
-
-> [!div class="nextstepaction"]
-> [SDK for .NET: Retrieve field sharing records sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/RetrieveFieldSharing)
-
-## How to run this sample
-
-[!include[cc-how-to-run-samples](../../includes/cc-how-to-run-samples.md)]
-
-## What this sample does
-
-The `PrincipleObjectAttributeAccess` message is intended to be used in a scenario where it retrieves the field sharing records for a table.
-
-## How this sample works
-
-In order to simulate the scenario described in [What this sample does](#what-this-sample-does), the sample will do the following:
-
-### Setup
-
-1. Checks for the current version of the org.
-2. The `CreateAttributeRequest` method creates the custom columns required for the sample.
-
-### Demonstrate
-
-1. The `WhoAMIRequest` retrieves the current user's information.
-2. The `RetrieveUserPrivilegesRequest` message checks if the current user has `prvReadPOAA`.
-3. The `PrincipalObjectAttributeAccess` creates POAA table for the custom columns created in the Setup(#setup).
-4. Using the `QueryExpression` retrieve user shared column permissions.
-
-### Clean up
-
-Display an option to delete the sample data that is created in [Setup](#setup). The deletion is optional in case you want to examine the tables and data created by the sample. You can manually delete the records to achieve the same result.
-
-[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-querybyattribute-class.md b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-querybyattribute-class.md
index 8054f83ce5..4f35b2f404 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-querybyattribute-class.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-querybyattribute-class.md
@@ -2,8 +2,8 @@
title: "Sample: Retrieve multiple with the QueryByAttribute class(Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to use QueryByAttribute class" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-queryexpression-class.md b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-queryexpression-class.md
index 1b0aa6bad3..417dd8b028 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-queryexpression-class.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-multiple-queryexpression-class.md
@@ -2,8 +2,8 @@
title: "Sample: Retrieve multiple with QueryExpression (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to retrieve multiple using QueryExpression" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-records-intersect-table.md b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-records-intersect-table.md
index d3f17b5ff2..6e29349209 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/retrieve-records-intersect-table.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/retrieve-records-intersect-table.md
@@ -2,8 +2,8 @@
title: "Sample: Retrieve records from an intersect table(Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to retrieve record from an intersect table." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/serialize-deserialize-entity.md b/powerapps-docs/developer/data-platform/org-service/samples/serialize-deserialize-entity.md
index 0570806143..fde532525b 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/serialize-deserialize-entity.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/serialize-deserialize-entity.md
@@ -2,8 +2,8 @@
title: "Sample: Serialize and deserialize entity instances (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample showcases how to serialize and deserialize entity instances." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/toc.yml b/powerapps-docs/developer/data-platform/org-service/samples/toc.yml
index 09bdbbc6a3..ee6413c235 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/toc.yml
+++ b/powerapps-docs/developer/data-platform/org-service/samples/toc.yml
@@ -187,14 +187,8 @@ items:
href: attachment-annotation-files.md
- name: Use optimistic concurrency with update and delete operations
href: use-optimistic-concurrency-update-delete-operations.md
- - name: Field Level Security
- items:
- - name: Enable field security for a table
- href: enable-field-security-entity.md
- - name: Retrieve field permissions
- href: retrieve-field-permissions.md
- - name: Retrieve field sharing records
- href: retrieve-field-sharing-records.md
+ - name: Column-Level Security
+ href: column-level-security.md
- name: Files and images
items:
- name: File Operations
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/use-aggregation-fetchxml.md b/powerapps-docs/developer/data-platform/org-service/samples/use-aggregation-fetchxml.md
index 6366d602b0..74505a877b 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/use-aggregation-fetchxml.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/use-aggregation-fetchxml.md
@@ -2,8 +2,8 @@
title: "Sample: Use aggregation in FetchXML (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to retrieve aggregate record data using FetchXML." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/use-duplicate-detection-when-creating-and-updating-records.md b/powerapps-docs/developer/data-platform/org-service/samples/use-duplicate-detection-when-creating-and-updating-records.md
index d8d2fcfada..f6c182fb1d 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/use-duplicate-detection-when-creating-and-updating-records.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/use-duplicate-detection-when-creating-and-updating-records.md
@@ -2,8 +2,8 @@
title: "Sample: Use duplicate detection when creating and updating records (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to invoke duplicate detection for creating and updating table records" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/use-fetchxml-paging-cookie.md b/powerapps-docs/developer/data-platform/org-service/samples/use-fetchxml-paging-cookie.md
index 0324becf82..ce967c5361 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/use-fetchxml-paging-cookie.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/use-fetchxml-paging-cookie.md
@@ -2,8 +2,8 @@
title: "Sample: Use FetchXML with a paging cookie (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to use the paging cookie in a FetchXML" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/use-optimistic-concurrency-update-delete-operations.md b/powerapps-docs/developer/data-platform/org-service/samples/use-optimistic-concurrency-update-delete-operations.md
index f0627053ec..6aee4c1dd0 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/use-optimistic-concurrency-update-delete-operations.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/use-optimistic-concurrency-update-delete-operations.md
@@ -2,8 +2,8 @@
title: "Sample: Use optimistic concurrency with update and delete operations (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to use optimistic concurrency for update and delete operations." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/use-queryexpression-with-a-paging-cookie.md b/powerapps-docs/developer/data-platform/org-service/samples/use-queryexpression-with-a-paging-cookie.md
index 278771140c..eda8298a9b 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/use-queryexpression-with-a-paging-cookie.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/use-queryexpression-with-a-paging-cookie.md
@@ -2,8 +2,8 @@
title: "Sample: Use QueryExpresion with a paging cookie (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "This sample shows how to use the paging cookie in a QueryExpresion" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/web-access-plugin.md b/powerapps-docs/developer/data-platform/org-service/samples/web-access-plugin.md
index 6a7a3f0a66..10663ee3a4 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/web-access-plugin.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/web-access-plugin.md
@@ -2,8 +2,8 @@
title: "Sample: Web access from a plug-in (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Learn how to write a plug-in that can access resources on the World Wide Web." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 01/24/2025
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/subscribe-sdk-assembly-updates-using-nuget.md b/powerapps-docs/developer/data-platform/org-service/subscribe-sdk-assembly-updates-using-nuget.md
index 2b5544b763..f3104bc447 100644
--- a/powerapps-docs/developer/data-platform/org-service/subscribe-sdk-assembly-updates-using-nuget.md
+++ b/powerapps-docs/developer/data-platform/org-service/subscribe-sdk-assembly-updates-using-nuget.md
@@ -5,8 +5,8 @@ ms.collection: get-started
ms.date: 04/14/2023
ms.reviewer: pehecke
ms.topic: article
-author: MicroSri # GitHub ID
-ms.author: sriknair # MSFT alias of Microsoft employees only
+author: MsSQLGirl # GitHub ID
+ms.author: jukoesma # MSFT alias of Microsoft employees only
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/use-executeAsync.md b/powerapps-docs/developer/data-platform/org-service/use-executeAsync.md
index 875a801fdf..30c2cfff72 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-executeAsync.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-executeAsync.md
@@ -2,8 +2,8 @@
title: "Use ExecuteAsync to execute messages asynchronously (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "You can use the ExecuteAsync message to import solutions asynchronously." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/use-executetransaction.md b/powerapps-docs/developer/data-platform/org-service/use-executetransaction.md
index 9de6704eee..34965c7d76 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-executetransaction.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-executetransaction.md
@@ -1,9 +1,9 @@
---
title: "Execute messages in a single database transaction (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "You can execute two or more requests in a single database transaction using the ExecuteTransactionRequest class." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+ms.date: 05/21/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
search.audienceType:
@@ -24,6 +24,8 @@ It is a common requirement in business applications to coordinate changes of mul
An may contain one or more instances. An instance may not contain a or . For more information on , see [Execute multiple requests using the SDK for .NET](execute-multiple-requests.md).
+ More information: [Do not use batch request types in plug-ins and workflow activities](../best-practices/business-logic/avoid-batch-requests-plugin.md)
+
## Example
This example uses a single web method call to execute all message requests in a collection as part of a single database transaction. Settings to alter the execution behavior are also shown.
diff --git a/powerapps-docs/developer/data-platform/org-service/use-late-bound-entity-class-linq-query.md b/powerapps-docs/developer/data-platform/org-service/use-late-bound-entity-class-linq-query.md
index 7544ac44fe..9e60678fde 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-late-bound-entity-class-linq-query.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-late-bound-entity-class-linq-query.md
@@ -2,8 +2,8 @@
title: "Use late-bound Entity class with a LINQ query (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Read how you can use late binding with .NET Language-Integrated Query (LINQ) queries." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/use-linq-construct-query.md b/powerapps-docs/developer/data-platform/org-service/use-linq-construct-query.md
index 594e2381df..a0f09d3a36 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-linq-construct-query.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-linq-construct-query.md
@@ -2,8 +2,8 @@
title: "Use LINQ to construct a query (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "Describes how to use the .NET Language-Integrated Query (LINQ) query provider to construct a Microsoft Dataverse query." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/use-messages.md b/powerapps-docs/developer/data-platform/org-service/use-messages.md
index 8d1f14baa3..3d28694983 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-messages.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-messages.md
@@ -3,8 +3,8 @@ title: "Use messages with the SDK for .NET (Microsoft Dataverse) | Microsoft Doc
description: "Understand how messages are used to invoke operations using the SDK for .NET."
ms.collection: get-started
ms.date: 03/26/2024
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: how-to
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/use-querybyattribute-class.md b/powerapps-docs/developer/data-platform/org-service/use-querybyattribute-class.md
index 228e00041c..035ef3d81c 100644
--- a/powerapps-docs/developer/data-platform/org-service/use-querybyattribute-class.md
+++ b/powerapps-docs/developer/data-platform/org-service/use-querybyattribute-class.md
@@ -2,8 +2,8 @@
title: "Use the QueryByAttribute class (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
description: "You can use the QueryByAttribute class to build queries that test a set of columns against a set of values"
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/visual-studio-dot-net-framework.md b/powerapps-docs/developer/data-platform/org-service/visual-studio-dot-net-framework.md
index 0492cec766..024be707e1 100644
--- a/powerapps-docs/developer/data-platform/org-service/visual-studio-dot-net-framework.md
+++ b/powerapps-docs/developer/data-platform/org-service/visual-studio-dot-net-framework.md
@@ -3,8 +3,8 @@ title: "Visual Studio and the .NET Framework (Microsoft Dataverse) | Microsoft D
description: "Learn about managed code development tools and requirements."
ms.collection: get-started
ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: "article"
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/organization-table.md b/powerapps-docs/developer/data-platform/organization-table.md
index 739a0a54c9..fa32b8c35c 100644
--- a/powerapps-docs/developer/data-platform/organization-table.md
+++ b/powerapps-docs/developer/data-platform/organization-table.md
@@ -1,12 +1,12 @@
---
title: "Read and update environment settings (Microsoft Dataverse)"
description: "Change environment settings in the organization table."
-ms.date: 06/28/2023
-ms.reviewer: jdaly
+ms.date: 06/10/2025
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
+ms.author: jukoesma
+ms.reviewer: jdaly
ms.subservice: dataverse-developer
-ms.author: sriknair
search.audienceType:
- developer
contributors:
@@ -28,7 +28,7 @@ For example, the following columns are supported because they're mentioned in th
|Setting|Link to documentation|
|---------|---------|
-|[IsAuditEnabled](reference/entities/organization.md#BKMK_IsAuditEnabled)
[AuditRetentionPeriodV2](reference/entities/organization.md#BKMK_AuditRetentionPeriodV2)
[IsUserAccessAuditEnabled](reference/entities/organization.md#BKMK_IsUserAccessAuditEnabled)
[UserAccessAuditingInterval](reference/entities/organization.md#BKMK_UserAccessAuditingInterval)|[Configure auditing](auditing/configure.md)|
+|[AuditSettings](reference/entities/organization.md#BKMK_AuditSettings)
[IsAuditEnabled](reference/entities/organization.md#BKMK_IsAuditEnabled)
[AuditRetentionPeriodV2](reference/entities/organization.md#BKMK_AuditRetentionPeriodV2)
[IsUserAccessAuditEnabled](reference/entities/organization.md#BKMK_IsUserAccessAuditEnabled)
[UserAccessAuditingInterval](reference/entities/organization.md#BKMK_UserAccessAuditingInterval)|[Configure auditing](auditing/configure.md)|
|[ExpireSubscriptionsInDays](reference/entities/organization.md#BKMK_ExpireSubscriptionsInDays)|[Cache Schema data](cache-schema-data.md)|
|[MaxUploadFileSize](reference/entities/organization.md#BKMK_MaxUploadFileSize)
[BlockedAttachments](reference/entities/organization.md#BKMK_BlockedAttachments)
[BlockedMimeTypes](reference/entities/organization.md#BKMK_BlockedMimeTypes)
[AllowedMimeTypes](reference/entities/organization.md#BKMK_AllowedMimeTypes)|[Files and images overview](files-images-overview.md)|
|[PluginTraceLogSetting](reference/entities/organization.md#BKMK_PluginTraceLogSetting)|[Tracing and logging](logging-tracing.md)|
diff --git a/powerapps-docs/developer/data-platform/plug-ins.md b/powerapps-docs/developer/data-platform/plug-ins.md
index bdce3b0762..0ecd458be2 100644
--- a/powerapps-docs/developer/data-platform/plug-ins.md
+++ b/powerapps-docs/developer/data-platform/plug-ins.md
@@ -5,9 +5,9 @@ ms.collection: get-started
ms.date: 01/24/2024
ms.reviewer: pehecke
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/query-antipatterns.md b/powerapps-docs/developer/data-platform/query-antipatterns.md
index e8a1ab640c..f6daf292df 100644
--- a/powerapps-docs/developer/data-platform/query-antipatterns.md
+++ b/powerapps-docs/developer/data-platform/query-antipatterns.md
@@ -3,8 +3,8 @@ title: "Query anti-patterns (Microsoft Dataverse)"
description: "Read about patterns to avoid when constructing queries to retrieve data from Dataverse."
ms.date: 01/06/2025
ms.topic: how-to
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.subservice: dataverse-developer
search.audienceType:
@@ -96,7 +96,7 @@ Database collation unicode sorting rules make some search strings that start wit
## Avoid using formula or calculated columns in filter conditions
-[Formula and calculated column](calculated-rollup-attributes.md#formula-and-calculated-columns) values are calculated in real-time when they're retrieved. Queries that use filters on these columns force Dataverse to calculate the value for each possible record that can be returned so the filter can be applied. Queries are slower because Dataverse can't improve the performance of these queries using SQL.
+[Formula and calculated column](specialized-columns.md#formula-and-calculated-columns) values are calculated in real-time when they're retrieved. Queries that use filters on these columns force Dataverse to calculate the value for each possible record that can be returned so the filter can be applied. Queries are slower because Dataverse can't improve the performance of these queries using SQL.
When queries time out and this pattern is detected, Dataverse returns a unique error to help identify which queries are using this pattern:
diff --git a/powerapps-docs/developer/data-platform/query-json-columns-elastic-tables.md b/powerapps-docs/developer/data-platform/query-json-columns-elastic-tables.md
index 395127f03f..c726a26154 100644
--- a/powerapps-docs/developer/data-platform/query-json-columns-elastic-tables.md
+++ b/powerapps-docs/developer/data-platform/query-json-columns-elastic-tables.md
@@ -3,8 +3,8 @@ title: Query JSON columns in elastic tables
description: Learn how to query data stored in JSON columns with Dataverse elastic tables with code.
ms.topic: how-to
ms.date: 12/04/2023
-author: pnghub
-ms.author: gned
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/query-throttling.md b/powerapps-docs/developer/data-platform/query-throttling.md
index 208833393d..2dbbfceac3 100644
--- a/powerapps-docs/developer/data-platform/query-throttling.md
+++ b/powerapps-docs/developer/data-platform/query-throttling.md
@@ -5,9 +5,9 @@ ms.date: 01/08/2025
ms.topic: article
applies_to:
- "Dynamics 365 (online)"
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
ms.reviewer: pehecke
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/quick-find.md b/powerapps-docs/developer/data-platform/quick-find.md
index 52c58bdb95..1f849f9644 100644
--- a/powerapps-docs/developer/data-platform/quick-find.md
+++ b/powerapps-docs/developer/data-platform/quick-find.md
@@ -4,9 +4,9 @@ description: "Learn how about Dataverse quick find queries and their limitations
ms.date: 01/30/2024
ms.reviewer: jdaly
ms.topic: article
-author: pnghub
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: gned
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md b/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
index 6f8de063d9..30692b0a27 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
@@ -382,7 +382,7 @@ These columns/attributes return false for both **IsValidForCreate** and **IsVali
|Property|Value|
|---|---|
-|Description|**Unique identifier of the user or team who owns the activity_mime_attachment.**|
+|Description|**Unique identifier of the user or team who owns the activity\_mime\_attachment.**|
|DisplayName|**Owner**|
|IsValidForForm|False|
|IsValidForRead|True|
diff --git a/powerapps-docs/developer/data-platform/reference/entities/activityparty.md b/powerapps-docs/developer/data-platform/reference/entities/activityparty.md
index 0852d6ee84..991efbbfb6 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/activityparty.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/activityparty.md
@@ -19,6 +19,7 @@ Messages represent operations that can be performed on the table. They may also
| Name
Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
+| `AppendRelatedParty`
Event: True |**AppendRelatedParty action** |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
| `Associate`
Event: True |[Associate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Associate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-associate-method-or-associaterequest)|
| `Disassociate`
Event: True |[Disassociate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Disassociate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-disassociate-method-or-disassociaterequest)|
| `RetrieveMultiple`
Event: True |`GET` /activityparties
See [Query data](/power-apps/developer/data-platform/webapi/query-data-web-api) |[Query data](/power-apps/developer/data-platform/org-service/entity-operations-query-data)|
@@ -382,7 +383,7 @@ These columns/attributes return false for both **IsValidForCreate** and **IsVali
|Property|Value|
|---|---|
-|Description|**Unique identifier of the user or team who owns the activity_party.**|
+|Description|**Unique identifier of the user or team who owns the activity\_party.**|
|DisplayName|**Owner**|
|IsValidForForm|False|
|IsValidForRead|True|
diff --git a/powerapps-docs/developer/data-platform/reference/entities/aiplugin.md b/powerapps-docs/developer/data-platform/reference/entities/aiplugin.md
index 0947cccd03..7551e49ed4 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/aiplugin.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/aiplugin.md
@@ -493,7 +493,7 @@ These columns/attributes return true for either **IsValidForCreate** or **IsVali
|Property|Value|
|---|---|
-|Description|**Swagger value that is upserted to generated plugin definition, used to provide override for properties not exposed as table/columns.Example:{ "info": { "x-ms-keywords": [ "sales", "support" ] }}Adds x-ms-keywords in info property.**|
+|Description|**Swagger value that is upserted to generated plugin definition, used to provide override for properties not exposed as table/columns.Example:\{ "info": \{ "x-ms-keywords": \[ "sales", "support" \] \}\}Adds x-ms-keywords in info property.**|
|DisplayName|**UpsertSwagger**|
|IsValidForForm|True|
|IsValidForRead|True|
diff --git a/powerapps-docs/developer/data-platform/reference/entities/annotation.md b/powerapps-docs/developer/data-platform/reference/entities/annotation.md
index aa50b1d8d3..bda32dcd21 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/annotation.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/annotation.md
@@ -212,7 +212,7 @@ These columns/attributes return true for either **IsValidForCreate** or **IsVali
|LogicalName|`objectid`|
|RequiredLevel|None|
|Type|Lookup|
-|Targets|account, adx_invitation, adx_inviteredemption, adx_portalcomment, appointment, calendar, channelaccessprofile, channelaccessprofilerule, channelaccessprofileruleitem, chat, contact, convertrule, duplicaterule, email, emailserverprofile, fax, goal, kbarticle, knowledgearticle, knowledgebaserecord, letter, mailbox, msdyn_aifptrainingdocument, msdyn_aimodel, msdyn_aiodimage, msdyn_flow_approval, mspcat_catalogsubmissionfiles, phonecall, recurringappointmentmaster, routingrule, routingruleitem, sharepointdocument, sla, socialactivity, task, workflow|
+|Targets|account, adx_invitation, adx_inviteredemption, adx_portalcomment, appointment, approvalprocess, approvalstageapproval, calendar, channelaccessprofile, channelaccessprofilerule, channelaccessprofileruleitem, chat, contact, convertrule, duplicaterule, email, emailserverprofile, fax, goal, kbarticle, knowledgearticle, knowledgebaserecord, letter, mailbox, msdyn_aifptrainingdocument, msdyn_aimodel, msdyn_aiodimage, msdyn_flow_approval, mspcat_catalogsubmissionfiles, phonecall, recurringappointmentmaster, routingrule, routingruleitem, sharepointdocument, sla, socialactivity, task, workflow|
### ObjectIdTypeCode
@@ -637,6 +637,8 @@ These relationships are many-to-one. Listed by **SchemaName**.
- [adx_portalcomment_Annotations](#BKMK_adx_portalcomment_Annotations)
- [annotation_owning_user](#BKMK_annotation_owning_user)
- [Appointment_Annotation](#BKMK_Appointment_Annotation)
+- [approvalprocess_Annotations](#BKMK_approvalprocess_Annotations)
+- [approvalstageapproval_Annotations](#BKMK_approvalstageapproval_Annotations)
- [business_unit_annotations](#BKMK_business_unit_annotations)
- [Calendar_Annotation](#BKMK_Calendar_Annotation)
- [chat_Annotations](#BKMK_chat_Annotations)
@@ -747,6 +749,32 @@ One-To-Many Relationship: [appointment Appointment_Annotation](appointment.md#BK
|IsHierarchical||
|CascadeConfiguration|Archive: `NoCascade`
Assign: `Cascade`
Delete: `Cascade`
Merge: `NoCascade`
Reparent: `Cascade`
RollupView: `NoCascade`
Share: `Cascade`
Unshare: `Cascade`|
+### approvalprocess_Annotations
+
+One-To-Many Relationship: [approvalprocess approvalprocess_Annotations](approvalprocess.md#BKMK_approvalprocess_Annotations)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`approvalprocess`|
+|ReferencedAttribute|`approvalprocessid`|
+|ReferencingAttribute|`objectid`|
+|ReferencingEntityNavigationPropertyName|`objectid_approvalprocess`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `Cascade`
Delete: `Cascade`
Merge: `NoCascade`
Reparent: `Cascade`
RollupView: `NoCascade`
Share: `Cascade`
Unshare: `Cascade`|
+
+### approvalstageapproval_Annotations
+
+One-To-Many Relationship: [approvalstageapproval approvalstageapproval_Annotations](approvalstageapproval.md#BKMK_approvalstageapproval_Annotations)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`approvalstageapproval`|
+|ReferencedAttribute|`approvalstageapprovalid`|
+|ReferencingAttribute|`objectid`|
+|ReferencingEntityNavigationPropertyName|`objectid_approvalstageapproval`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `Cascade`
Delete: `Cascade`
Merge: `NoCascade`
Reparent: `Cascade`
RollupView: `NoCascade`
Share: `Cascade`
Unshare: `Cascade`|
+
### business_unit_annotations
One-To-Many Relationship: [businessunit business_unit_annotations](businessunit.md#BKMK_business_unit_annotations)
diff --git a/powerapps-docs/developer/data-platform/reference/entities/appointment.md b/powerapps-docs/developer/data-platform/reference/entities/appointment.md
index 9c11147fd0..4de9e8a5e6 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/appointment.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/appointment.md
@@ -507,7 +507,7 @@ These columns/attributes return true for either **IsValidForCreate** or **IsVali
|Property|Value|
|---|---|
-|Description|**Unique identifier of the Microsoft Office Outlook appointment owner that correlates to the PR_OWNER_APPT_ID MAPI property.**|
+|Description|**Unique identifier of the Microsoft Office Outlook appointment owner that correlates to the PR\_OWNER\_APPT\_ID MAPI property.**|
|DisplayName|**Outlook Appointment Owner**|
|IsValidForForm|False|
|IsValidForRead|True|
diff --git a/powerapps-docs/developer/data-platform/reference/entities/approvalprocess.md b/powerapps-docs/developer/data-platform/reference/entities/approvalprocess.md
new file mode 100644
index 0000000000..ac217969a0
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/reference/entities/approvalprocess.md
@@ -0,0 +1,930 @@
+---
+title: "Approval Process (approvalprocess) table/entity reference (Microsoft Dataverse)"
+description: "Includes schema information and supported messages for the Approval Process (approvalprocess) table/entity with Microsoft Dataverse."
+ms.topic: generated-reference
+author: phecke
+ms.author: pehecke
+search.audienceType:
+ - developer
+---
+
+# Approval Process (approvalprocess) table/entity reference (Microsoft Dataverse)
+
+Approval Process for Multi-Stage Approvals
+
+## Messages
+
+The following table lists the messages for the Approval Process (approvalprocess) table.
+Messages represent operations that can be performed on the table. They may also be events.
+
+| Name
Is Event? |Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `Assign`
Event: True |`PATCH` /approvalprocesses(*approvalprocessid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `ownerid` property. ||
+| `Associate`
Event: True |[Associate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Associate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-associate-method-or-associaterequest)|
+| `Create`
Event: True |`POST` /approvalprocesses
See [Create](/powerapps/developer/data-platform/webapi/create-entity-web-api) |[Create records](/power-apps/developer/data-platform/org-service/entity-operations-create#basic-create)|
+| `CreateMultiple`
Event: True | ||
+| `Delete`
Event: True |`DELETE` /approvalprocesses(*approvalprocessid*)
See [Delete](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-delete) |[Delete records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-delete)|
+| `Disassociate`
Event: True |[Disassociate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Disassociate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-disassociate-method-or-disassociaterequest)|
+| `GrantAccess`
Event: True | ||
+| `IsValidStateTransition`
Event: False | ||
+| `ModifyAccess`
Event: True | ||
+| `Retrieve`
Event: True |`GET` /approvalprocesses(*approvalprocessid*)
See [Retrieve](/powerapps/developer/data-platform/webapi/retrieve-entity-using-web-api) |[Retrieve records](/power-apps/developer/data-platform/org-service/entity-operations-retrieve)|
+| `RetrieveMultiple`
Event: True |`GET` /approvalprocesses
See [Query data](/power-apps/developer/data-platform/webapi/query-data-web-api) |[Query data](/power-apps/developer/data-platform/org-service/entity-operations-query-data)|
+| `RetrievePrincipalAccess`
Event: True | ||
+| `RetrieveSharedPrincipalsAndAccess`
Event: True | ||
+| `RevokeAccess`
Event: True | ||
+| `SetState`
Event: True |`PATCH` /approvalprocesses(*approvalprocessid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `statecode` and `statuscode` properties. ||
+| `Update`
Event: True |`PATCH` /approvalprocesses(*approvalprocessid*)
See [Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) |[Update records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-update)|
+| `UpdateMultiple`
Event: True | ||
+| `Upsert`
Event: False |`PATCH` /approvalprocesses(*approvalprocessid*)
See [Upsert a table row](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#upsert-a-table-row) ||
+| `UpsertMultiple`
Event: False | ||
+
+
+## Events
+
+The following table lists the events for the Approval Process (approvalprocess) table.
+Events are messages that exist so that you can subscribe to them. Unless you added the event, you shouldn't invoke the message, only subscribe to it.
+
+|Name|Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `BulkRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `PurgeRetainedContent`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `Retain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `RollbackRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `ValidateRetentionConfig`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+
+## Properties
+
+The following table lists selected properties for the Approval Process (approvalprocess) table.
+
+|Property|Value|
+| --- | --- |
+| **DisplayName** | **Approval Process** |
+| **DisplayCollectionName** | **Approval Processes** |
+| **SchemaName** | `approvalprocess` |
+| **CollectionSchemaName** | `approvalprocesses` |
+| **EntitySetName** | `approvalprocesses`|
+| **LogicalName** | `approvalprocess` |
+| **LogicalCollectionName** | `approvalprocesses` |
+| **PrimaryIdAttribute** | `approvalprocessid` |
+| **PrimaryNameAttribute** |`name` |
+| **TableType** | `Standard` |
+| **OwnershipType** | `UserOwned` |
+
+## Writable columns/attributes
+
+These columns/attributes return true for either **IsValidForCreate** or **IsValidForUpdate** (usually both). Listed by **SchemaName**.
+
+- [approvalprocessId](#BKMK_approvalprocessId)
+- [ImportSequenceNumber](#BKMK_ImportSequenceNumber)
+- [IsCustomizable](#BKMK_IsCustomizable)
+- [MetadataVersion](#BKMK_MetadataVersion)
+- [name](#BKMK_name)
+- [OverriddenCreatedOn](#BKMK_OverriddenCreatedOn)
+- [OwnerId](#BKMK_OwnerId)
+- [OwnerIdType](#BKMK_OwnerIdType)
+- [statecode](#BKMK_statecode)
+- [statuscode](#BKMK_statuscode)
+- [TimeZoneRuleVersionNumber](#BKMK_TimeZoneRuleVersionNumber)
+- [UniqueName](#BKMK_UniqueName)
+- [UTCConversionTimeZoneCode](#BKMK_UTCConversionTimeZoneCode)
+
+### approvalprocessId
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for approval process**|
+|DisplayName|**Approval Process**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`approvalprocessid`|
+|RequiredLevel|SystemRequired|
+|Type|Uniqueidentifier|
+
+### ImportSequenceNumber
+
+|Property|Value|
+|---|---|
+|Description|**Sequence number of the import that created this record.**|
+|DisplayName|**Import Sequence Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`importsequencenumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-2147483648|
+
+### IsCustomizable
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Is Customizable**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`iscustomizable`|
+|RequiredLevel|SystemRequired|
+|Type|ManagedProperty|
+
+### MetadataVersion
+
+|Property|Value|
+|---|---|
+|Description|**Metadata version for parsing.**|
+|DisplayName|**Metadata Version**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`metadataversion`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|0|
+
+### name
+
+|Property|Value|
+|---|---|
+|Description|**The name of the approval process.**|
+|DisplayName|**Name**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`name`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|850|
+
+### OverriddenCreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time that the record was migrated.**|
+|DisplayName|**Record Created On**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`overriddencreatedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateOnly|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### OwnerId
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id**|
+|DisplayName|**Owner**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`ownerid`|
+|RequiredLevel|SystemRequired|
+|Type|Owner|
+|Targets|systemuser, team|
+
+### OwnerIdType
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id Type**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridtype`|
+|RequiredLevel|SystemRequired|
+|Type|EntityName|
+
+### statecode
+
+|Property|Value|
+|---|---|
+|Description|**Status of the Approval Process**|
+|DisplayName|**Status**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statecode`|
+|RequiredLevel|SystemRequired|
+|Type|State|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalprocess_statecode`|
+
+#### statecode Choices/Options
+
+|Value|Details|
+|---|---|
+|0|Label: **Active**
DefaultStatus: 1
InvariantName: `Active`|
+|1|Label: **Inactive**
DefaultStatus: 2
InvariantName: `Inactive`|
+
+### statuscode
+
+|Property|Value|
+|---|---|
+|Description|**Reason for the status of the Approval Process**|
+|DisplayName|**Status Reason**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statuscode`|
+|RequiredLevel|None|
+|Type|Status|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalprocess_statuscode`|
+
+#### statuscode Choices/Options
+
+|Value|Details|
+|---|---|
+|1|Label: **Active**
State:0
TransitionData: None|
+|2|Label: **Inactive**
State:1
TransitionData: None|
+
+### TimeZoneRuleVersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Time Zone Rule Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`timezoneruleversionnumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+### UniqueName
+
+|Property|Value|
+|---|---|
+|Description|**Unique Name for the entity.**|
+|DisplayName|**Unique Name**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`uniquename`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|128|
+
+### UTCConversionTimeZoneCode
+
+|Property|Value|
+|---|---|
+|Description|**Time zone code that was in use when the record was created.**|
+|DisplayName|**UTC Conversion Time Zone Code**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`utcconversiontimezonecode`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+
+## Read-only columns/attributes
+
+These columns/attributes return false for both **IsValidForCreate** and **IsValidForUpdate**. Listed by **SchemaName**.
+
+- [ComponentIdUnique](#BKMK_ComponentIdUnique)
+- [ComponentState](#BKMK_ComponentState)
+- [CreatedBy](#BKMK_CreatedBy)
+- [CreatedOn](#BKMK_CreatedOn)
+- [CreatedOnBehalfBy](#BKMK_CreatedOnBehalfBy)
+- [Inputs](#BKMK_Inputs)
+- [Inputs_Name](#BKMK_Inputs_Name)
+- [IsManaged](#BKMK_IsManaged)
+- [ModifiedBy](#BKMK_ModifiedBy)
+- [ModifiedOn](#BKMK_ModifiedOn)
+- [ModifiedOnBehalfBy](#BKMK_ModifiedOnBehalfBy)
+- [OverwriteTime](#BKMK_OverwriteTime)
+- [OwnerIdName](#BKMK_OwnerIdName)
+- [OwnerIdYomiName](#BKMK_OwnerIdYomiName)
+- [OwningBusinessUnit](#BKMK_OwningBusinessUnit)
+- [OwningTeam](#BKMK_OwningTeam)
+- [OwningUser](#BKMK_OwningUser)
+- [SolutionId](#BKMK_SolutionId)
+- [Stages](#BKMK_Stages)
+- [Stages_Name](#BKMK_Stages_Name)
+- [SupportingSolutionId](#BKMK_SupportingSolutionId)
+- [VersionNumber](#BKMK_VersionNumber)
+
+### ComponentIdUnique
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Row id unique**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`componentidunique`|
+|RequiredLevel|SystemRequired|
+|Type|Uniqueidentifier|
+
+### ComponentState
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Component State**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`componentstate`|
+|RequiredLevel|SystemRequired|
+|Type|Picklist|
+|DefaultFormValue||
+|GlobalChoiceName|`componentstate`|
+
+#### ComponentState Choices/Options
+
+|Value|Label|
+|---|---|
+|0|**Published**|
+|1|**Unpublished**|
+|2|**Deleted**|
+|3|**Deleted Unpublished**|
+
+### CreatedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who created the record.**|
+|DisplayName|**Created By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### CreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was created.**|
+|DisplayName|**Created On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### CreatedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who created the record.**|
+|DisplayName|**Created By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### Inputs
+
+|Property|Value|
+|---|---|
+|Description|**The input variables for the multi-stage approvals.**|
+|DisplayName|**Inputs**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`inputs`|
+|RequiredLevel|None|
+|Type|File|
+|MaxSizeInKB|32768|
+
+### Inputs_Name
+
+|Property|Value|
+|---|---|
+|Description||
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`inputs_name`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Disabled|
+|IsLocalizable|False|
+|MaxLength|200|
+
+### IsManaged
+
+|Property|Value|
+|---|---|
+|Description|**Indicates whether the solution component is part of a managed solution.**|
+|DisplayName|**Is Managed**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`ismanaged`|
+|RequiredLevel|SystemRequired|
+|Type|Boolean|
+|GlobalChoiceName|`ismanaged`|
+|DefaultValue|False|
+|True Label|Managed|
+|False Label|Unmanaged|
+
+### ModifiedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who modified the record.**|
+|DisplayName|**Modified By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### ModifiedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was modified.**|
+|DisplayName|**Modified On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### ModifiedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who modified the record.**|
+|DisplayName|**Modified By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### OverwriteTime
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Record Overwrite Time**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`overwritetime`|
+|RequiredLevel|SystemRequired|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### OwnerIdName
+
+|Property|Value|
+|---|---|
+|Description|**Name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridname`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwnerIdYomiName
+
+|Property|Value|
+|---|---|
+|Description|**Yomi name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridyominame`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwningBusinessUnit
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the business unit that owns the record**|
+|DisplayName|**Owning Business Unit**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`owningbusinessunit`|
+|RequiredLevel|SystemRequired|
+|Type|Lookup|
+|Targets|businessunit|
+
+### OwningTeam
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the team that owns the record.**|
+|DisplayName|**Owning Team**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owningteam`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|team|
+
+### OwningUser
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the user that owns the record.**|
+|DisplayName|**Owning User**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owninguser`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### SolutionId
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the associated solution.**|
+|DisplayName|**Solution**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`solutionid`|
+|RequiredLevel|SystemRequired|
+|Type|Uniqueidentifier|
+
+### Stages
+
+|Property|Value|
+|---|---|
+|Description|**The stages for the multi-stage approvals.**|
+|DisplayName|**Stages**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`stages`|
+|RequiredLevel|ApplicationRequired|
+|Type|File|
+|MaxSizeInKB|32768|
+
+### Stages_Name
+
+|Property|Value|
+|---|---|
+|Description||
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`stages_name`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Disabled|
+|IsLocalizable|False|
+|MaxLength|200|
+
+### SupportingSolutionId
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Solution**|
+|IsValidForForm|False|
+|IsValidForRead|False|
+|LogicalName|`supportingsolutionid`|
+|RequiredLevel|None|
+|Type|Uniqueidentifier|
+
+### VersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**Version Number**|
+|DisplayName|**Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`versionnumber`|
+|RequiredLevel|None|
+|Type|BigInt|
+|MaxValue|9223372036854775807|
+|MinValue|-9223372036854775808|
+
+## Many-to-One relationships
+
+These relationships are many-to-one. Listed by **SchemaName**.
+
+- [business_unit_approvalprocess](#BKMK_business_unit_approvalprocess)
+- [FileAttachment_approvalprocess_Inputs](#BKMK_FileAttachment_approvalprocess_Inputs)
+- [FileAttachment_approvalprocess_Stages](#BKMK_FileAttachment_approvalprocess_Stages)
+- [lk_approvalprocess_createdby](#BKMK_lk_approvalprocess_createdby)
+- [lk_approvalprocess_createdonbehalfby](#BKMK_lk_approvalprocess_createdonbehalfby)
+- [lk_approvalprocess_modifiedby](#BKMK_lk_approvalprocess_modifiedby)
+- [lk_approvalprocess_modifiedonbehalfby](#BKMK_lk_approvalprocess_modifiedonbehalfby)
+- [owner_approvalprocess](#BKMK_owner_approvalprocess)
+- [team_approvalprocess](#BKMK_team_approvalprocess)
+- [user_approvalprocess](#BKMK_user_approvalprocess)
+
+### business_unit_approvalprocess
+
+One-To-Many Relationship: [businessunit business_unit_approvalprocess](businessunit.md#BKMK_business_unit_approvalprocess)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`businessunit`|
+|ReferencedAttribute|`businessunitid`|
+|ReferencingAttribute|`owningbusinessunit`|
+|ReferencingEntityNavigationPropertyName|`owningbusinessunit`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `Restrict`
Assign: `NoCascade`
Delete: `Restrict`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### FileAttachment_approvalprocess_Inputs
+
+One-To-Many Relationship: [fileattachment FileAttachment_approvalprocess_Inputs](fileattachment.md#BKMK_FileAttachment_approvalprocess_Inputs)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`fileattachment`|
+|ReferencedAttribute|`fileattachmentid`|
+|ReferencingAttribute|`inputs`|
+|ReferencingEntityNavigationPropertyName|`inputs`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `RemoveLink`
Assign: `NoCascade`
Delete: `RemoveLink`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### FileAttachment_approvalprocess_Stages
+
+One-To-Many Relationship: [fileattachment FileAttachment_approvalprocess_Stages](fileattachment.md#BKMK_FileAttachment_approvalprocess_Stages)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`fileattachment`|
+|ReferencedAttribute|`fileattachmentid`|
+|ReferencingAttribute|`stages`|
+|ReferencingEntityNavigationPropertyName|`stages`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `RemoveLink`
Assign: `NoCascade`
Delete: `RemoveLink`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalprocess_createdby
+
+One-To-Many Relationship: [systemuser lk_approvalprocess_createdby](systemuser.md#BKMK_lk_approvalprocess_createdby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdby`|
+|ReferencingEntityNavigationPropertyName|`createdby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalprocess_createdonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalprocess_createdonbehalfby](systemuser.md#BKMK_lk_approvalprocess_createdonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`createdonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalprocess_modifiedby
+
+One-To-Many Relationship: [systemuser lk_approvalprocess_modifiedby](systemuser.md#BKMK_lk_approvalprocess_modifiedby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedby`|
+|ReferencingEntityNavigationPropertyName|`modifiedby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalprocess_modifiedonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalprocess_modifiedonbehalfby](systemuser.md#BKMK_lk_approvalprocess_modifiedonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`modifiedonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### owner_approvalprocess
+
+One-To-Many Relationship: [owner owner_approvalprocess](owner.md#BKMK_owner_approvalprocess)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`owner`|
+|ReferencedAttribute|`ownerid`|
+|ReferencingAttribute|`ownerid`|
+|ReferencingEntityNavigationPropertyName|`ownerid`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### team_approvalprocess
+
+One-To-Many Relationship: [team team_approvalprocess](team.md#BKMK_team_approvalprocess)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`team`|
+|ReferencedAttribute|`teamid`|
+|ReferencingAttribute|`owningteam`|
+|ReferencingEntityNavigationPropertyName|`owningteam`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### user_approvalprocess
+
+One-To-Many Relationship: [systemuser user_approvalprocess](systemuser.md#BKMK_user_approvalprocess)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`owninguser`|
+|ReferencingEntityNavigationPropertyName|`owninguser`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+
+## One-to-Many relationships
+
+These relationships are one-to-many. Listed by **SchemaName**.
+
+- [approvalprocess_Annotations](#BKMK_approvalprocess_Annotations)
+- [approvalprocess_AsyncOperations](#BKMK_approvalprocess_AsyncOperations)
+- [approvalprocess_BulkDeleteFailures](#BKMK_approvalprocess_BulkDeleteFailures)
+- [approvalprocess_DuplicateBaseRecord](#BKMK_approvalprocess_DuplicateBaseRecord)
+- [approvalprocess_DuplicateMatchingRecord](#BKMK_approvalprocess_DuplicateMatchingRecord)
+- [approvalprocess_FileAttachments](#BKMK_approvalprocess_FileAttachments)
+- [approvalprocess_MailboxTrackingFolders](#BKMK_approvalprocess_MailboxTrackingFolders)
+- [approvalprocess_PrincipalObjectAttributeAccesses](#BKMK_approvalprocess_PrincipalObjectAttributeAccesses)
+- [approvalprocess_ProcessSession](#BKMK_approvalprocess_ProcessSession)
+- [approvalprocess_SyncErrors](#BKMK_approvalprocess_SyncErrors)
+
+### approvalprocess_Annotations
+
+Many-To-One Relationship: [annotation approvalprocess_Annotations](annotation.md#BKMK_approvalprocess_Annotations)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`annotation`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_Annotations`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_AsyncOperations
+
+Many-To-One Relationship: [asyncoperation approvalprocess_AsyncOperations](asyncoperation.md#BKMK_approvalprocess_AsyncOperations)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`asyncoperation`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_AsyncOperations`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_BulkDeleteFailures
+
+Many-To-One Relationship: [bulkdeletefailure approvalprocess_BulkDeleteFailures](bulkdeletefailure.md#BKMK_approvalprocess_BulkDeleteFailures)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`bulkdeletefailure`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_BulkDeleteFailures`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_DuplicateBaseRecord
+
+Many-To-One Relationship: [duplicaterecord approvalprocess_DuplicateBaseRecord](duplicaterecord.md#BKMK_approvalprocess_DuplicateBaseRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`baserecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_DuplicateBaseRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_DuplicateMatchingRecord
+
+Many-To-One Relationship: [duplicaterecord approvalprocess_DuplicateMatchingRecord](duplicaterecord.md#BKMK_approvalprocess_DuplicateMatchingRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`duplicaterecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_DuplicateMatchingRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_FileAttachments
+
+Many-To-One Relationship: [fileattachment approvalprocess_FileAttachments](fileattachment.md#BKMK_approvalprocess_FileAttachments)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`fileattachment`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_FileAttachments`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_MailboxTrackingFolders
+
+Many-To-One Relationship: [mailboxtrackingfolder approvalprocess_MailboxTrackingFolders](mailboxtrackingfolder.md#BKMK_approvalprocess_MailboxTrackingFolders)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`mailboxtrackingfolder`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_MailboxTrackingFolders`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_PrincipalObjectAttributeAccesses
+
+Many-To-One Relationship: [principalobjectattributeaccess approvalprocess_PrincipalObjectAttributeAccesses](principalobjectattributeaccess.md#BKMK_approvalprocess_PrincipalObjectAttributeAccesses)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`principalobjectattributeaccess`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_PrincipalObjectAttributeAccesses`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_ProcessSession
+
+Many-To-One Relationship: [processsession approvalprocess_ProcessSession](processsession.md#BKMK_approvalprocess_ProcessSession)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`processsession`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_ProcessSession`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalprocess_SyncErrors
+
+Many-To-One Relationship: [syncerror approvalprocess_SyncErrors](syncerror.md#BKMK_approvalprocess_SyncErrors)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`syncerror`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalprocess_SyncErrors`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+
+
+### See also
+
+[Dataverse table/entity reference](/power-apps/developer/data-platform/reference/about-entity-reference)
+[Dataverse Web API Reference](/power-apps/developer/data-platform/webapi/reference/about)
+
diff --git a/powerapps-docs/developer/data-platform/reference/entities/approvalstageapproval.md b/powerapps-docs/developer/data-platform/reference/entities/approvalstageapproval.md
new file mode 100644
index 0000000000..2a3eccbd69
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/reference/entities/approvalstageapproval.md
@@ -0,0 +1,917 @@
+---
+title: "Approval Stage Approval (approvalstageapproval) table/entity reference (Microsoft Dataverse)"
+description: "Includes schema information and supported messages for the Approval Stage Approval (approvalstageapproval) table/entity with Microsoft Dataverse."
+ms.topic: generated-reference
+author: phecke
+ms.author: pehecke
+search.audienceType:
+ - developer
+---
+
+# Approval Stage Approval (approvalstageapproval) table/entity reference (Microsoft Dataverse)
+
+The approval stage in multi-stage approvals
+
+## Messages
+
+The following table lists the messages for the Approval Stage Approval (approvalstageapproval) table.
+Messages represent operations that can be performed on the table. They may also be events.
+
+| Name
Is Event? |Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `Assign`
Event: True |`PATCH` /approvalstageapprovals(*approvalstageapprovalid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `ownerid` property. ||
+| `Associate`
Event: True |[Associate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Associate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-associate-method-or-associaterequest)|
+| `Create`
Event: True |`POST` /approvalstageapprovals
See [Create](/powerapps/developer/data-platform/webapi/create-entity-web-api) |[Create records](/power-apps/developer/data-platform/org-service/entity-operations-create#basic-create)|
+| `CreateMultiple`
Event: True | ||
+| `Delete`
Event: True |`DELETE` /approvalstageapprovals(*approvalstageapprovalid*)
See [Delete](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-delete) |[Delete records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-delete)|
+| `Disassociate`
Event: True |[Disassociate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Disassociate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-disassociate-method-or-disassociaterequest)|
+| `GrantAccess`
Event: True | ||
+| `IsValidStateTransition`
Event: False | ||
+| `ModifyAccess`
Event: True | ||
+| `Retrieve`
Event: True |`GET` /approvalstageapprovals(*approvalstageapprovalid*)
See [Retrieve](/powerapps/developer/data-platform/webapi/retrieve-entity-using-web-api) |[Retrieve records](/power-apps/developer/data-platform/org-service/entity-operations-retrieve)|
+| `RetrieveMultiple`
Event: True |`GET` /approvalstageapprovals
See [Query data](/power-apps/developer/data-platform/webapi/query-data-web-api) |[Query data](/power-apps/developer/data-platform/org-service/entity-operations-query-data)|
+| `RetrievePrincipalAccess`
Event: True | ||
+| `RetrieveSharedPrincipalsAndAccess`
Event: True | ||
+| `RevokeAccess`
Event: True | ||
+| `SetState`
Event: True |`PATCH` /approvalstageapprovals(*approvalstageapprovalid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `statecode` and `statuscode` properties. ||
+| `Update`
Event: True |`PATCH` /approvalstageapprovals(*approvalstageapprovalid*)
See [Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) |[Update records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-update)|
+| `UpdateMultiple`
Event: True | ||
+| `Upsert`
Event: False |`PATCH` /approvalstageapprovals(*approvalstageapprovalid*)
See [Upsert a table row](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#upsert-a-table-row) ||
+| `UpsertMultiple`
Event: False | ||
+
+
+## Events
+
+The following table lists the events for the Approval Stage Approval (approvalstageapproval) table.
+Events are messages that exist so that you can subscribe to them. Unless you added the event, you shouldn't invoke the message, only subscribe to it.
+
+|Name|Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `BulkRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `PurgeRetainedContent`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `Retain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `RollbackRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `ValidateRetentionConfig`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+
+## Properties
+
+The following table lists selected properties for the Approval Stage Approval (approvalstageapproval) table.
+
+|Property|Value|
+| --- | --- |
+| **DisplayName** | **Approval Stage Approval** |
+| **DisplayCollectionName** | **Approval Stage Approvals** |
+| **SchemaName** | `approvalstageapproval` |
+| **CollectionSchemaName** | `approvalstageapprovals` |
+| **EntitySetName** | `approvalstageapprovals`|
+| **LogicalName** | `approvalstageapproval` |
+| **LogicalCollectionName** | `approvalstageapprovals` |
+| **PrimaryIdAttribute** | `approvalstageapprovalid` |
+| **PrimaryNameAttribute** |`name` |
+| **TableType** | `Standard` |
+| **OwnershipType** | `UserOwned` |
+
+## Writable columns/attributes
+
+These columns/attributes return true for either **IsValidForCreate** or **IsValidForUpdate** (usually both). Listed by **SchemaName**.
+
+- [AllowCancel](#BKMK_AllowCancel)
+- [AllowReassign](#BKMK_AllowReassign)
+- [Approval](#BKMK_Approval)
+- [approvalstageapprovalId](#BKMK_approvalstageapprovalId)
+- [CustomFields](#BKMK_CustomFields)
+- [Details](#BKMK_Details)
+- [ImportSequenceNumber](#BKMK_ImportSequenceNumber)
+- [ItemLink](#BKMK_ItemLink)
+- [ItemLinkDescription](#BKMK_ItemLinkDescription)
+- [ModelId](#BKMK_ModelId)
+- [ModelType](#BKMK_ModelType)
+- [Name](#BKMK_Name)
+- [OverriddenCreatedOn](#BKMK_OverriddenCreatedOn)
+- [OwnerId](#BKMK_OwnerId)
+- [OwnerIdType](#BKMK_OwnerIdType)
+- [Result](#BKMK_Result)
+- [SendEmailNotification](#BKMK_SendEmailNotification)
+- [statecode](#BKMK_statecode)
+- [statuscode](#BKMK_statuscode)
+- [TimeZoneRuleVersionNumber](#BKMK_TimeZoneRuleVersionNumber)
+- [Title](#BKMK_Title)
+- [UTCConversionTimeZoneCode](#BKMK_UTCConversionTimeZoneCode)
+
+### AllowCancel
+
+|Property|Value|
+|---|---|
+|Description|**Choice to allow cancellation of approval**|
+|DisplayName|**Allow Cancel**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`allowcancel`|
+|RequiredLevel|None|
+|Type|Boolean|
+|GlobalChoiceName|`approvalstageapproval_allowcancel`|
+|DefaultValue|True|
+|True Label|Yes|
+|False Label|No|
+
+### AllowReassign
+
+|Property|Value|
+|---|---|
+|Description|**Choice to allow approval reassignment**|
+|DisplayName|**Allow Reassign**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`allowreassign`|
+|RequiredLevel|ApplicationRequired|
+|Type|Boolean|
+|GlobalChoiceName|`approvalstageapproval_allowreassign`|
+|DefaultValue|True|
+|True Label|Yes|
+|False Label|No|
+
+### Approval
+
+|Property|Value|
+|---|---|
+|Description|**The linked parent approval**|
+|DisplayName|**Approval**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`approval`|
+|RequiredLevel|ApplicationRequired|
+|Type|Lookup|
+|Targets|msdyn_flow_approval|
+
+### approvalstageapprovalId
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for entity instances**|
+|DisplayName|**Approval Stage Approval**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`approvalstageapprovalid`|
+|RequiredLevel|SystemRequired|
+|Type|Uniqueidentifier|
+
+### CustomFields
+
+|Property|Value|
+|---|---|
+|Description|**Custom fields provided by customer**|
+|DisplayName|**Custom Fields**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`customfields`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|4000|
+
+### Details
+
+|Property|Value|
+|---|---|
+|Description|**Description of approval**|
+|DisplayName|**Details**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`details`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|4000|
+
+### ImportSequenceNumber
+
+|Property|Value|
+|---|---|
+|Description|**Sequence number of the import that created this record.**|
+|DisplayName|**Import Sequence Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`importsequencenumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-2147483648|
+
+### ItemLink
+
+|Property|Value|
+|---|---|
+|Description|**Optional link to the item to approve**|
+|DisplayName|**Item Link**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`itemlink`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Url|
+|FormatName|Url|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|2000|
+
+### ItemLinkDescription
+
+|Property|Value|
+|---|---|
+|Description|**Optional description for the item link**|
+|DisplayName|**Item Link Description**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`itemlinkdescription`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|2000|
+
+### ModelId
+
+|Property|Value|
+|---|---|
+|Description|**The guid of the linked approval model**|
+|DisplayName|**Model Id**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`modelid`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### ModelType
+
+|Property|Value|
+|---|---|
+|Description|**The type of the linked approval model**|
+|DisplayName|**Model Type**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`modeltype`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### Name
+
+|Property|Value|
+|---|---|
+|Description||
+|DisplayName|**Name**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`name`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|850|
+
+### OverriddenCreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time that the record was migrated.**|
+|DisplayName|**Record Created On**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`overriddencreatedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateOnly|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### OwnerId
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id**|
+|DisplayName|**Owner**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`ownerid`|
+|RequiredLevel|SystemRequired|
+|Type|Owner|
+|Targets|systemuser, team|
+
+### OwnerIdType
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id Type**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridtype`|
+|RequiredLevel|SystemRequired|
+|Type|EntityName|
+
+### Result
+
+|Property|Value|
+|---|---|
+|Description|**The result of the approval**|
+|DisplayName|**Result**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`result`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|500|
+
+### SendEmailNotification
+
+|Property|Value|
+|---|---|
+|Description|**Whether to send system generated emails**|
+|DisplayName|**Send Email Notification**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`sendemailnotification`|
+|RequiredLevel|ApplicationRequired|
+|Type|Boolean|
+|GlobalChoiceName|`approvalstageapproval_sendemailnotification`|
+|DefaultValue|True|
+|True Label|Yes|
+|False Label|No|
+
+### statecode
+
+|Property|Value|
+|---|---|
+|Description|**Status of the Approval Stage Approval**|
+|DisplayName|**Status**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statecode`|
+|RequiredLevel|SystemRequired|
+|Type|State|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalstageapproval_statecode`|
+
+#### statecode Choices/Options
+
+|Value|Details|
+|---|---|
+|0|Label: **Active**
DefaultStatus: 1
InvariantName: `Active`|
+|1|Label: **Inactive**
DefaultStatus: 2
InvariantName: `Inactive`|
+
+### statuscode
+
+|Property|Value|
+|---|---|
+|Description|**Reason for the status of the Approval Stage Approval**|
+|DisplayName|**Status Reason**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statuscode`|
+|RequiredLevel|None|
+|Type|Status|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalstageapproval_statuscode`|
+
+#### statuscode Choices/Options
+
+|Value|Details|
+|---|---|
+|1|Label: **Active**
State:0
TransitionData: None|
+|2|Label: **Inactive**
State:1
TransitionData: None|
+
+### TimeZoneRuleVersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Time Zone Rule Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`timezoneruleversionnumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+### Title
+
+|Property|Value|
+|---|---|
+|Description|**Title of the approval**|
+|DisplayName|**Title**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`title`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|2000|
+
+### UTCConversionTimeZoneCode
+
+|Property|Value|
+|---|---|
+|Description|**Time zone code that was in use when the record was created.**|
+|DisplayName|**UTC Conversion Time Zone Code**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`utcconversiontimezonecode`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+
+## Read-only columns/attributes
+
+These columns/attributes return false for both **IsValidForCreate** and **IsValidForUpdate**. Listed by **SchemaName**.
+
+- [CreatedBy](#BKMK_CreatedBy)
+- [CreatedOn](#BKMK_CreatedOn)
+- [CreatedOnBehalfBy](#BKMK_CreatedOnBehalfBy)
+- [ModifiedBy](#BKMK_ModifiedBy)
+- [ModifiedOn](#BKMK_ModifiedOn)
+- [ModifiedOnBehalfBy](#BKMK_ModifiedOnBehalfBy)
+- [OwnerIdName](#BKMK_OwnerIdName)
+- [OwnerIdYomiName](#BKMK_OwnerIdYomiName)
+- [OwningBusinessUnit](#BKMK_OwningBusinessUnit)
+- [OwningTeam](#BKMK_OwningTeam)
+- [OwningUser](#BKMK_OwningUser)
+- [VersionNumber](#BKMK_VersionNumber)
+
+### CreatedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who created the record.**|
+|DisplayName|**Created By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### CreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was created.**|
+|DisplayName|**Created On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### CreatedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who created the record.**|
+|DisplayName|**Created By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### ModifiedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who modified the record.**|
+|DisplayName|**Modified By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### ModifiedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was modified.**|
+|DisplayName|**Modified On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### ModifiedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who modified the record.**|
+|DisplayName|**Modified By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### OwnerIdName
+
+|Property|Value|
+|---|---|
+|Description|**Name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridname`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwnerIdYomiName
+
+|Property|Value|
+|---|---|
+|Description|**Yomi name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridyominame`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwningBusinessUnit
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the business unit that owns the record**|
+|DisplayName|**Owning Business Unit**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`owningbusinessunit`|
+|RequiredLevel|SystemRequired|
+|Type|Lookup|
+|Targets|businessunit|
+
+### OwningTeam
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the team that owns the record.**|
+|DisplayName|**Owning Team**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owningteam`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|team|
+
+### OwningUser
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the user that owns the record.**|
+|DisplayName|**Owning User**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owninguser`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### VersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**Version Number**|
+|DisplayName|**Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`versionnumber`|
+|RequiredLevel|None|
+|Type|BigInt|
+|MaxValue|9223372036854775807|
+|MinValue|-9223372036854775808|
+
+## Many-to-One relationships
+
+These relationships are many-to-one. Listed by **SchemaName**.
+
+- [approvalstageapproval_approval_msdyn_flow_approval](#BKMK_approvalstageapproval_approval_msdyn_flow_approval)
+- [business_unit_approvalstageapproval](#BKMK_business_unit_approvalstageapproval)
+- [lk_approvalstageapproval_createdby](#BKMK_lk_approvalstageapproval_createdby)
+- [lk_approvalstageapproval_createdonbehalfby](#BKMK_lk_approvalstageapproval_createdonbehalfby)
+- [lk_approvalstageapproval_modifiedby](#BKMK_lk_approvalstageapproval_modifiedby)
+- [lk_approvalstageapproval_modifiedonbehalfby](#BKMK_lk_approvalstageapproval_modifiedonbehalfby)
+- [owner_approvalstageapproval](#BKMK_owner_approvalstageapproval)
+- [team_approvalstageapproval](#BKMK_team_approvalstageapproval)
+- [user_approvalstageapproval](#BKMK_user_approvalstageapproval)
+
+### approvalstageapproval_approval_msdyn_flow_approval
+
+One-To-Many Relationship: [msdyn_flow_approval approvalstageapproval_approval_msdyn_flow_approval](msdyn_flow_approval.md#BKMK_approvalstageapproval_approval_msdyn_flow_approval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`msdyn_flow_approval`|
+|ReferencedAttribute|`msdyn_flow_approvalid`|
+|ReferencingAttribute|`approval`|
+|ReferencingEntityNavigationPropertyName|`approval`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `Cascade`
Assign: `NoCascade`
Delete: `Cascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### business_unit_approvalstageapproval
+
+One-To-Many Relationship: [businessunit business_unit_approvalstageapproval](businessunit.md#BKMK_business_unit_approvalstageapproval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`businessunit`|
+|ReferencedAttribute|`businessunitid`|
+|ReferencingAttribute|`owningbusinessunit`|
+|ReferencingEntityNavigationPropertyName|`owningbusinessunit`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `Restrict`
Assign: `NoCascade`
Delete: `Restrict`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstageapproval_createdby
+
+One-To-Many Relationship: [systemuser lk_approvalstageapproval_createdby](systemuser.md#BKMK_lk_approvalstageapproval_createdby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdby`|
+|ReferencingEntityNavigationPropertyName|`createdby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstageapproval_createdonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalstageapproval_createdonbehalfby](systemuser.md#BKMK_lk_approvalstageapproval_createdonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`createdonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstageapproval_modifiedby
+
+One-To-Many Relationship: [systemuser lk_approvalstageapproval_modifiedby](systemuser.md#BKMK_lk_approvalstageapproval_modifiedby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedby`|
+|ReferencingEntityNavigationPropertyName|`modifiedby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstageapproval_modifiedonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalstageapproval_modifiedonbehalfby](systemuser.md#BKMK_lk_approvalstageapproval_modifiedonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`modifiedonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### owner_approvalstageapproval
+
+One-To-Many Relationship: [owner owner_approvalstageapproval](owner.md#BKMK_owner_approvalstageapproval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`owner`|
+|ReferencedAttribute|`ownerid`|
+|ReferencingAttribute|`ownerid`|
+|ReferencingEntityNavigationPropertyName|`ownerid`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### team_approvalstageapproval
+
+One-To-Many Relationship: [team team_approvalstageapproval](team.md#BKMK_team_approvalstageapproval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`team`|
+|ReferencedAttribute|`teamid`|
+|ReferencingAttribute|`owningteam`|
+|ReferencingEntityNavigationPropertyName|`owningteam`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### user_approvalstageapproval
+
+One-To-Many Relationship: [systemuser user_approvalstageapproval](systemuser.md#BKMK_user_approvalstageapproval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`owninguser`|
+|ReferencingEntityNavigationPropertyName|`owninguser`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+
+## One-to-Many relationships
+
+These relationships are one-to-many. Listed by **SchemaName**.
+
+- [approvalstageapproval_Annotations](#BKMK_approvalstageapproval_Annotations)
+- [approvalstageapproval_AsyncOperations](#BKMK_approvalstageapproval_AsyncOperations)
+- [approvalstageapproval_BulkDeleteFailures](#BKMK_approvalstageapproval_BulkDeleteFailures)
+- [approvalstageapproval_DuplicateBaseRecord](#BKMK_approvalstageapproval_DuplicateBaseRecord)
+- [approvalstageapproval_DuplicateMatchingRecord](#BKMK_approvalstageapproval_DuplicateMatchingRecord)
+- [approvalstageapproval_MailboxTrackingFolders](#BKMK_approvalstageapproval_MailboxTrackingFolders)
+- [approvalstageapproval_PrincipalObjectAttributeAccesses](#BKMK_approvalstageapproval_PrincipalObjectAttributeAccesses)
+- [approvalstageapproval_ProcessSession](#BKMK_approvalstageapproval_ProcessSession)
+- [approvalstageapproval_SyncErrors](#BKMK_approvalstageapproval_SyncErrors)
+- [approvalstageorder_stageapproval_approvalstageapproval](#BKMK_approvalstageorder_stageapproval_approvalstageapproval)
+
+### approvalstageapproval_Annotations
+
+Many-To-One Relationship: [annotation approvalstageapproval_Annotations](annotation.md#BKMK_approvalstageapproval_Annotations)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`annotation`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_Annotations`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_AsyncOperations
+
+Many-To-One Relationship: [asyncoperation approvalstageapproval_AsyncOperations](asyncoperation.md#BKMK_approvalstageapproval_AsyncOperations)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`asyncoperation`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_AsyncOperations`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_BulkDeleteFailures
+
+Many-To-One Relationship: [bulkdeletefailure approvalstageapproval_BulkDeleteFailures](bulkdeletefailure.md#BKMK_approvalstageapproval_BulkDeleteFailures)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`bulkdeletefailure`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_BulkDeleteFailures`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_DuplicateBaseRecord
+
+Many-To-One Relationship: [duplicaterecord approvalstageapproval_DuplicateBaseRecord](duplicaterecord.md#BKMK_approvalstageapproval_DuplicateBaseRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`baserecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_DuplicateBaseRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_DuplicateMatchingRecord
+
+Many-To-One Relationship: [duplicaterecord approvalstageapproval_DuplicateMatchingRecord](duplicaterecord.md#BKMK_approvalstageapproval_DuplicateMatchingRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`duplicaterecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_DuplicateMatchingRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_MailboxTrackingFolders
+
+Many-To-One Relationship: [mailboxtrackingfolder approvalstageapproval_MailboxTrackingFolders](mailboxtrackingfolder.md#BKMK_approvalstageapproval_MailboxTrackingFolders)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`mailboxtrackingfolder`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_MailboxTrackingFolders`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_PrincipalObjectAttributeAccesses
+
+Many-To-One Relationship: [principalobjectattributeaccess approvalstageapproval_PrincipalObjectAttributeAccesses](principalobjectattributeaccess.md#BKMK_approvalstageapproval_PrincipalObjectAttributeAccesses)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`principalobjectattributeaccess`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_PrincipalObjectAttributeAccesses`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_ProcessSession
+
+Many-To-One Relationship: [processsession approvalstageapproval_ProcessSession](processsession.md#BKMK_approvalstageapproval_ProcessSession)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`processsession`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_ProcessSession`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageapproval_SyncErrors
+
+Many-To-One Relationship: [syncerror approvalstageapproval_SyncErrors](syncerror.md#BKMK_approvalstageapproval_SyncErrors)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`syncerror`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstageapproval_SyncErrors`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageorder_stageapproval_approvalstageapproval
+
+Many-To-One Relationship: [approvalstageorder approvalstageorder_stageapproval_approvalstageapproval](approvalstageorder.md#BKMK_approvalstageorder_stageapproval_approvalstageapproval)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`approvalstageorder`|
+|ReferencingAttribute|`stageapproval`|
+|ReferencedEntityNavigationPropertyName|`approvalstageorder_stageapproval_approvalstageapproval`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `UseCollectionName`
Group: `Details`
Label:
MenuId: null
Order: 10000
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+
+
+### See also
+
+[Dataverse table/entity reference](/power-apps/developer/data-platform/reference/about-entity-reference)
+[Dataverse Web API Reference](/power-apps/developer/data-platform/webapi/reference/about)
+
diff --git a/powerapps-docs/developer/data-platform/reference/entities/approvalstagecondition.md b/powerapps-docs/developer/data-platform/reference/entities/approvalstagecondition.md
new file mode 100644
index 0000000000..448dd37c7c
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/reference/entities/approvalstagecondition.md
@@ -0,0 +1,787 @@
+---
+title: "Approval Stage Condition (approvalstagecondition) table/entity reference (Microsoft Dataverse)"
+description: "Includes schema information and supported messages for the Approval Stage Condition (approvalstagecondition) table/entity with Microsoft Dataverse."
+ms.topic: generated-reference
+author: phecke
+ms.author: pehecke
+search.audienceType:
+ - developer
+---
+
+# Approval Stage Condition (approvalstagecondition) table/entity reference (Microsoft Dataverse)
+
+The condition in multi-stage approvals
+
+## Messages
+
+The following table lists the messages for the Approval Stage Condition (approvalstagecondition) table.
+Messages represent operations that can be performed on the table. They may also be events.
+
+| Name
Is Event? |Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `Assign`
Event: True |`PATCH` /approvalstageconditions(*approvalstageconditionid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `ownerid` property. ||
+| `Associate`
Event: True |[Associate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Associate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-associate-method-or-associaterequest)|
+| `Create`
Event: True |`POST` /approvalstageconditions
See [Create](/powerapps/developer/data-platform/webapi/create-entity-web-api) |[Create records](/power-apps/developer/data-platform/org-service/entity-operations-create#basic-create)|
+| `CreateMultiple`
Event: True | ||
+| `Delete`
Event: True |`DELETE` /approvalstageconditions(*approvalstageconditionid*)
See [Delete](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-delete) |[Delete records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-delete)|
+| `Disassociate`
Event: True |[Disassociate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Disassociate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-disassociate-method-or-disassociaterequest)|
+| `GrantAccess`
Event: True | ||
+| `IsValidStateTransition`
Event: False | ||
+| `ModifyAccess`
Event: True | ||
+| `Retrieve`
Event: True |`GET` /approvalstageconditions(*approvalstageconditionid*)
See [Retrieve](/powerapps/developer/data-platform/webapi/retrieve-entity-using-web-api) |[Retrieve records](/power-apps/developer/data-platform/org-service/entity-operations-retrieve)|
+| `RetrieveMultiple`
Event: True |`GET` /approvalstageconditions
See [Query data](/power-apps/developer/data-platform/webapi/query-data-web-api) |[Query data](/power-apps/developer/data-platform/org-service/entity-operations-query-data)|
+| `RetrievePrincipalAccess`
Event: True | ||
+| `RetrieveSharedPrincipalsAndAccess`
Event: True | ||
+| `RevokeAccess`
Event: True | ||
+| `SetState`
Event: True |`PATCH` /approvalstageconditions(*approvalstageconditionid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `statecode` and `statuscode` properties. ||
+| `Update`
Event: True |`PATCH` /approvalstageconditions(*approvalstageconditionid*)
See [Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) |[Update records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-update)|
+| `UpdateMultiple`
Event: True | ||
+| `Upsert`
Event: False |`PATCH` /approvalstageconditions(*approvalstageconditionid*)
See [Upsert a table row](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#upsert-a-table-row) ||
+| `UpsertMultiple`
Event: False | ||
+
+
+## Events
+
+The following table lists the events for the Approval Stage Condition (approvalstagecondition) table.
+Events are messages that exist so that you can subscribe to them. Unless you added the event, you shouldn't invoke the message, only subscribe to it.
+
+|Name|Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `BulkRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `PurgeRetainedContent`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `Retain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `RollbackRetain`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+| `ValidateRetentionConfig`| |[Learn to use messages with the SDK for .NET](/power-apps/developer/data-platform/org-service/use-messages)|
+
+## Properties
+
+The following table lists selected properties for the Approval Stage Condition (approvalstagecondition) table.
+
+|Property|Value|
+| --- | --- |
+| **DisplayName** | **Approval Stage Condition** |
+| **DisplayCollectionName** | **Approval Stage Conditions** |
+| **SchemaName** | `approvalstagecondition` |
+| **CollectionSchemaName** | `approvalstageconditions` |
+| **EntitySetName** | `approvalstageconditions`|
+| **LogicalName** | `approvalstagecondition` |
+| **LogicalCollectionName** | `approvalstageconditions` |
+| **PrimaryIdAttribute** | `approvalstageconditionid` |
+| **PrimaryNameAttribute** |`name` |
+| **TableType** | `Standard` |
+| **OwnershipType** | `UserOwned` |
+
+## Writable columns/attributes
+
+These columns/attributes return true for either **IsValidForCreate** or **IsValidForUpdate** (usually both). Listed by **SchemaName**.
+
+- [Approval](#BKMK_Approval)
+- [approvalstageconditionId](#BKMK_approvalstageconditionId)
+- [ConditionalLogic](#BKMK_ConditionalLogic)
+- [ImportSequenceNumber](#BKMK_ImportSequenceNumber)
+- [Name](#BKMK_Name)
+- [OverriddenCreatedOn](#BKMK_OverriddenCreatedOn)
+- [OwnerId](#BKMK_OwnerId)
+- [OwnerIdType](#BKMK_OwnerIdType)
+- [ResultInfo](#BKMK_ResultInfo)
+- [ResultType](#BKMK_ResultType)
+- [ResultValue](#BKMK_ResultValue)
+- [statecode](#BKMK_statecode)
+- [statuscode](#BKMK_statuscode)
+- [TimeZoneRuleVersionNumber](#BKMK_TimeZoneRuleVersionNumber)
+- [UTCConversionTimeZoneCode](#BKMK_UTCConversionTimeZoneCode)
+
+### Approval
+
+|Property|Value|
+|---|---|
+|Description|**The linked approval**|
+|DisplayName|**Approval**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`approval`|
+|RequiredLevel|ApplicationRequired|
+|Type|Lookup|
+|Targets|msdyn_flow_approval|
+
+### approvalstageconditionId
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for entity instances**|
+|DisplayName|**Approval Stage Condition**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`approvalstageconditionid`|
+|RequiredLevel|SystemRequired|
+|Type|Uniqueidentifier|
+
+### ConditionalLogic
+
+|Property|Value|
+|---|---|
+|Description|**The conditional logic and related actions**|
+|DisplayName|**Conditional Logic**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`conditionallogic`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|4000|
+
+### ImportSequenceNumber
+
+|Property|Value|
+|---|---|
+|Description|**Sequence number of the import that created this record.**|
+|DisplayName|**Import Sequence Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`importsequencenumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-2147483648|
+
+### Name
+
+|Property|Value|
+|---|---|
+|Description||
+|DisplayName|**Name**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`name`|
+|RequiredLevel|ApplicationRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|850|
+
+### OverriddenCreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time that the record was migrated.**|
+|DisplayName|**Record Created On**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`overriddencreatedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateOnly|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### OwnerId
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id**|
+|DisplayName|**Owner**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`ownerid`|
+|RequiredLevel|SystemRequired|
+|Type|Owner|
+|Targets|systemuser, team|
+
+### OwnerIdType
+
+|Property|Value|
+|---|---|
+|Description|**Owner Id Type**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridtype`|
+|RequiredLevel|SystemRequired|
+|Type|EntityName|
+
+### ResultInfo
+
+|Property|Value|
+|---|---|
+|Description|**Extra result info needed for some scenarios**|
+|DisplayName|**Result Info**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`resultinfo`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|1000|
+
+### ResultType
+
+|Property|Value|
+|---|---|
+|Description|**The type of action selected**|
+|DisplayName|**Result Type**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`resulttype`|
+|RequiredLevel|None|
+|Type|Picklist|
+|DefaultFormValue|-1|
+|GlobalChoiceName|`approvalstagecondition_resulttype`|
+
+#### ResultType Choices/Options
+
+|Value|Label|
+|---|---|
+|192350000|**Continue**|
+|192350001|**Goto**|
+|192350002|**TerminateAsApproved**|
+|192350003|**TerminateAsRejected**|
+
+### ResultValue
+
+|Property|Value|
+|---|---|
+|Description|**The optional value needed for some actions**|
+|DisplayName|**Result Value**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`resultvalue`|
+|RequiredLevel|None|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|500|
+
+### statecode
+
+|Property|Value|
+|---|---|
+|Description|**Status of the Approval Stage Condition**|
+|DisplayName|**Status**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statecode`|
+|RequiredLevel|SystemRequired|
+|Type|State|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalstagecondition_statecode`|
+
+#### statecode Choices/Options
+
+|Value|Details|
+|---|---|
+|0|Label: **Active**
DefaultStatus: 1
InvariantName: `Active`|
+|1|Label: **Inactive**
DefaultStatus: 2
InvariantName: `Inactive`|
+
+### statuscode
+
+|Property|Value|
+|---|---|
+|Description|**Reason for the status of the Approval Stage Condition**|
+|DisplayName|**Status Reason**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`statuscode`|
+|RequiredLevel|None|
+|Type|Status|
+|DefaultFormValue||
+|GlobalChoiceName|`approvalstagecondition_statuscode`|
+
+#### statuscode Choices/Options
+
+|Value|Details|
+|---|---|
+|1|Label: **Active**
State:0
TransitionData: None|
+|2|Label: **Inactive**
State:1
TransitionData: None|
+
+### TimeZoneRuleVersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**For internal use only.**|
+|DisplayName|**Time Zone Rule Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`timezoneruleversionnumber`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+### UTCConversionTimeZoneCode
+
+|Property|Value|
+|---|---|
+|Description|**Time zone code that was in use when the record was created.**|
+|DisplayName|**UTC Conversion Time Zone Code**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`utcconversiontimezonecode`|
+|RequiredLevel|None|
+|Type|Integer|
+|MaxValue|2147483647|
+|MinValue|-1|
+
+
+## Read-only columns/attributes
+
+These columns/attributes return false for both **IsValidForCreate** and **IsValidForUpdate**. Listed by **SchemaName**.
+
+- [CreatedBy](#BKMK_CreatedBy)
+- [CreatedOn](#BKMK_CreatedOn)
+- [CreatedOnBehalfBy](#BKMK_CreatedOnBehalfBy)
+- [ModifiedBy](#BKMK_ModifiedBy)
+- [ModifiedOn](#BKMK_ModifiedOn)
+- [ModifiedOnBehalfBy](#BKMK_ModifiedOnBehalfBy)
+- [OwnerIdName](#BKMK_OwnerIdName)
+- [OwnerIdYomiName](#BKMK_OwnerIdYomiName)
+- [OwningBusinessUnit](#BKMK_OwningBusinessUnit)
+- [OwningTeam](#BKMK_OwningTeam)
+- [OwningUser](#BKMK_OwningUser)
+- [VersionNumber](#BKMK_VersionNumber)
+
+### CreatedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who created the record.**|
+|DisplayName|**Created By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### CreatedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was created.**|
+|DisplayName|**Created On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### CreatedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who created the record.**|
+|DisplayName|**Created By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`createdonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### ModifiedBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the user who modified the record.**|
+|DisplayName|**Modified By**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### ModifiedOn
+
+|Property|Value|
+|---|---|
+|Description|**Date and time when the record was modified.**|
+|DisplayName|**Modified On**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedon`|
+|RequiredLevel|None|
+|Type|DateTime|
+|CanChangeDateTimeBehavior|False|
+|DateTimeBehavior|UserLocal|
+|Format|DateAndTime|
+|ImeMode|Inactive|
+|SourceTypeMask|0|
+
+### ModifiedOnBehalfBy
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier of the delegate user who modified the record.**|
+|DisplayName|**Modified By (Delegate)**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`modifiedonbehalfby`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### OwnerIdName
+
+|Property|Value|
+|---|---|
+|Description|**Name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridname`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwnerIdYomiName
+
+|Property|Value|
+|---|---|
+|Description|**Yomi name of the owner**|
+|DisplayName||
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owneridyominame`|
+|RequiredLevel|SystemRequired|
+|Type|String|
+|Format|Text|
+|FormatName|Text|
+|ImeMode|Auto|
+|IsLocalizable|False|
+|MaxLength|100|
+
+### OwningBusinessUnit
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the business unit that owns the record**|
+|DisplayName|**Owning Business Unit**|
+|IsValidForForm|True|
+|IsValidForRead|True|
+|LogicalName|`owningbusinessunit`|
+|RequiredLevel|SystemRequired|
+|Type|Lookup|
+|Targets|businessunit|
+
+### OwningTeam
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the team that owns the record.**|
+|DisplayName|**Owning Team**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owningteam`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|team|
+
+### OwningUser
+
+|Property|Value|
+|---|---|
+|Description|**Unique identifier for the user that owns the record.**|
+|DisplayName|**Owning User**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`owninguser`|
+|RequiredLevel|None|
+|Type|Lookup|
+|Targets|systemuser|
+
+### VersionNumber
+
+|Property|Value|
+|---|---|
+|Description|**Version Number**|
+|DisplayName|**Version Number**|
+|IsValidForForm|False|
+|IsValidForRead|True|
+|LogicalName|`versionnumber`|
+|RequiredLevel|None|
+|Type|BigInt|
+|MaxValue|9223372036854775807|
+|MinValue|-9223372036854775808|
+
+## Many-to-One relationships
+
+These relationships are many-to-one. Listed by **SchemaName**.
+
+- [approvalstagecondition_approval_msdyn_flow_approval](#BKMK_approvalstagecondition_approval_msdyn_flow_approval)
+- [business_unit_approvalstagecondition](#BKMK_business_unit_approvalstagecondition)
+- [lk_approvalstagecondition_createdby](#BKMK_lk_approvalstagecondition_createdby)
+- [lk_approvalstagecondition_createdonbehalfby](#BKMK_lk_approvalstagecondition_createdonbehalfby)
+- [lk_approvalstagecondition_modifiedby](#BKMK_lk_approvalstagecondition_modifiedby)
+- [lk_approvalstagecondition_modifiedonbehalfby](#BKMK_lk_approvalstagecondition_modifiedonbehalfby)
+- [owner_approvalstagecondition](#BKMK_owner_approvalstagecondition)
+- [team_approvalstagecondition](#BKMK_team_approvalstagecondition)
+- [user_approvalstagecondition](#BKMK_user_approvalstagecondition)
+
+### approvalstagecondition_approval_msdyn_flow_approval
+
+One-To-Many Relationship: [msdyn_flow_approval approvalstagecondition_approval_msdyn_flow_approval](msdyn_flow_approval.md#BKMK_approvalstagecondition_approval_msdyn_flow_approval)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`msdyn_flow_approval`|
+|ReferencedAttribute|`msdyn_flow_approvalid`|
+|ReferencingAttribute|`approval`|
+|ReferencingEntityNavigationPropertyName|`approval`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `Cascade`
Assign: `NoCascade`
Delete: `Cascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### business_unit_approvalstagecondition
+
+One-To-Many Relationship: [businessunit business_unit_approvalstagecondition](businessunit.md#BKMK_business_unit_approvalstagecondition)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`businessunit`|
+|ReferencedAttribute|`businessunitid`|
+|ReferencingAttribute|`owningbusinessunit`|
+|ReferencingEntityNavigationPropertyName|`owningbusinessunit`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `Restrict`
Assign: `NoCascade`
Delete: `Restrict`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstagecondition_createdby
+
+One-To-Many Relationship: [systemuser lk_approvalstagecondition_createdby](systemuser.md#BKMK_lk_approvalstagecondition_createdby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdby`|
+|ReferencingEntityNavigationPropertyName|`createdby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstagecondition_createdonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalstagecondition_createdonbehalfby](systemuser.md#BKMK_lk_approvalstagecondition_createdonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`createdonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`createdonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstagecondition_modifiedby
+
+One-To-Many Relationship: [systemuser lk_approvalstagecondition_modifiedby](systemuser.md#BKMK_lk_approvalstagecondition_modifiedby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedby`|
+|ReferencingEntityNavigationPropertyName|`modifiedby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### lk_approvalstagecondition_modifiedonbehalfby
+
+One-To-Many Relationship: [systemuser lk_approvalstagecondition_modifiedonbehalfby](systemuser.md#BKMK_lk_approvalstagecondition_modifiedonbehalfby)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`modifiedonbehalfby`|
+|ReferencingEntityNavigationPropertyName|`modifiedonbehalfby`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### owner_approvalstagecondition
+
+One-To-Many Relationship: [owner owner_approvalstagecondition](owner.md#BKMK_owner_approvalstagecondition)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`owner`|
+|ReferencedAttribute|`ownerid`|
+|ReferencingAttribute|`ownerid`|
+|ReferencingEntityNavigationPropertyName|`ownerid`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### team_approvalstagecondition
+
+One-To-Many Relationship: [team team_approvalstagecondition](team.md#BKMK_team_approvalstagecondition)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`team`|
+|ReferencedAttribute|`teamid`|
+|ReferencingAttribute|`owningteam`|
+|ReferencingEntityNavigationPropertyName|`owningteam`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+### user_approvalstagecondition
+
+One-To-Many Relationship: [systemuser user_approvalstagecondition](systemuser.md#BKMK_user_approvalstagecondition)
+
+|Property|Value|
+|---|---|
+|ReferencedEntity|`systemuser`|
+|ReferencedAttribute|`systemuserid`|
+|ReferencingAttribute|`owninguser`|
+|ReferencingEntityNavigationPropertyName|`owninguser`|
+|IsHierarchical||
+|CascadeConfiguration|Archive: `NoCascade`
Assign: `NoCascade`
Delete: `NoCascade`
Merge: `NoCascade`
Reparent: `NoCascade`
RollupView: `NoCascade`
Share: `NoCascade`
Unshare: `NoCascade`|
+
+
+## One-to-Many relationships
+
+These relationships are one-to-many. Listed by **SchemaName**.
+
+- [approvalstagecondition_AsyncOperations](#BKMK_approvalstagecondition_AsyncOperations)
+- [approvalstagecondition_BulkDeleteFailures](#BKMK_approvalstagecondition_BulkDeleteFailures)
+- [approvalstagecondition_DuplicateBaseRecord](#BKMK_approvalstagecondition_DuplicateBaseRecord)
+- [approvalstagecondition_DuplicateMatchingRecord](#BKMK_approvalstagecondition_DuplicateMatchingRecord)
+- [approvalstagecondition_MailboxTrackingFolders](#BKMK_approvalstagecondition_MailboxTrackingFolders)
+- [approvalstagecondition_PrincipalObjectAttributeAccesses](#BKMK_approvalstagecondition_PrincipalObjectAttributeAccesses)
+- [approvalstagecondition_ProcessSession](#BKMK_approvalstagecondition_ProcessSession)
+- [approvalstagecondition_SyncErrors](#BKMK_approvalstagecondition_SyncErrors)
+- [approvalstageorder_stagecondition_approvalstagecondition](#BKMK_approvalstageorder_stagecondition_approvalstagecondition)
+
+### approvalstagecondition_AsyncOperations
+
+Many-To-One Relationship: [asyncoperation approvalstagecondition_AsyncOperations](asyncoperation.md#BKMK_approvalstagecondition_AsyncOperations)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`asyncoperation`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_AsyncOperations`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_BulkDeleteFailures
+
+Many-To-One Relationship: [bulkdeletefailure approvalstagecondition_BulkDeleteFailures](bulkdeletefailure.md#BKMK_approvalstagecondition_BulkDeleteFailures)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`bulkdeletefailure`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_BulkDeleteFailures`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_DuplicateBaseRecord
+
+Many-To-One Relationship: [duplicaterecord approvalstagecondition_DuplicateBaseRecord](duplicaterecord.md#BKMK_approvalstagecondition_DuplicateBaseRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`baserecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_DuplicateBaseRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_DuplicateMatchingRecord
+
+Many-To-One Relationship: [duplicaterecord approvalstagecondition_DuplicateMatchingRecord](duplicaterecord.md#BKMK_approvalstagecondition_DuplicateMatchingRecord)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`duplicaterecord`|
+|ReferencingAttribute|`duplicaterecordid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_DuplicateMatchingRecord`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_MailboxTrackingFolders
+
+Many-To-One Relationship: [mailboxtrackingfolder approvalstagecondition_MailboxTrackingFolders](mailboxtrackingfolder.md#BKMK_approvalstagecondition_MailboxTrackingFolders)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`mailboxtrackingfolder`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_MailboxTrackingFolders`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_PrincipalObjectAttributeAccesses
+
+Many-To-One Relationship: [principalobjectattributeaccess approvalstagecondition_PrincipalObjectAttributeAccesses](principalobjectattributeaccess.md#BKMK_approvalstagecondition_PrincipalObjectAttributeAccesses)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`principalobjectattributeaccess`|
+|ReferencingAttribute|`objectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_PrincipalObjectAttributeAccesses`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_ProcessSession
+
+Many-To-One Relationship: [processsession approvalstagecondition_ProcessSession](processsession.md#BKMK_approvalstagecondition_ProcessSession)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`processsession`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_ProcessSession`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstagecondition_SyncErrors
+
+Many-To-One Relationship: [syncerror approvalstagecondition_SyncErrors](syncerror.md#BKMK_approvalstagecondition_SyncErrors)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`syncerror`|
+|ReferencingAttribute|`regardingobjectid`|
+|ReferencedEntityNavigationPropertyName|`approvalstagecondition_SyncErrors`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `DoNotDisplay`
Group: `Details`
Label:
MenuId: null
Order:
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+### approvalstageorder_stagecondition_approvalstagecondition
+
+Many-To-One Relationship: [approvalstageorder approvalstageorder_stagecondition_approvalstagecondition](approvalstageorder.md#BKMK_approvalstageorder_stagecondition_approvalstagecondition)
+
+|Property|Value|
+|---|---|
+|ReferencingEntity|`approvalstageorder`|
+|ReferencingAttribute|`stagecondition`|
+|ReferencedEntityNavigationPropertyName|`approvalstageorder_stagecondition_approvalstagecondition`|
+|IsCustomizable|`True`|
+|AssociatedMenuConfiguration|AvailableOffline: True
Behavior: `UseCollectionName`
Group: `Details`
Label:
MenuId: null
Order: 10000
QueryApi: null
ViewId: `00000000-0000-0000-0000-000000000000`|
+
+
+
+### See also
+
+[Dataverse table/entity reference](/power-apps/developer/data-platform/reference/about-entity-reference)
+[Dataverse Web API Reference](/power-apps/developer/data-platform/webapi/reference/about)
+
diff --git a/powerapps-docs/developer/data-platform/reference/entities/approvalstageorder.md b/powerapps-docs/developer/data-platform/reference/entities/approvalstageorder.md
new file mode 100644
index 0000000000..8e5ee4e519
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/reference/entities/approvalstageorder.md
@@ -0,0 +1,805 @@
+---
+title: "Approval Stage Order (approvalstageorder) table/entity reference (Microsoft Dataverse)"
+description: "Includes schema information and supported messages for the Approval Stage Order (approvalstageorder) table/entity with Microsoft Dataverse."
+ms.topic: generated-reference
+author: phecke
+ms.author: pehecke
+search.audienceType:
+ - developer
+---
+
+# Approval Stage Order (approvalstageorder) table/entity reference (Microsoft Dataverse)
+
+The order of the stages in multi-stage approvals.
+
+## Messages
+
+The following table lists the messages for the Approval Stage Order (approvalstageorder) table.
+Messages represent operations that can be performed on the table. They may also be events.
+
+| Name
Is Event? |Web API Operation |SDK for .NET |
+| ---- | ----- |----- |
+| `Assign`
Event: True |`PATCH` /approvalstageorders(*approvalstageorderid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `ownerid` property. ||
+| `Associate`
Event: True |[Associate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Associate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-associate-method-or-associaterequest)|
+| `Create`
Event: True |`POST` /approvalstageorders
See [Create](/powerapps/developer/data-platform/webapi/create-entity-web-api) |[Create records](/power-apps/developer/data-platform/org-service/entity-operations-create#basic-create)|
+| `CreateMultiple`
Event: True | ||
+| `Delete`
Event: True |`DELETE` /approvalstageorders(*approvalstageorderid*)
See [Delete](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-delete) |[Delete records](/power-apps/developer/data-platform/org-service/entity-operations-update-delete#basic-delete)|
+| `Disassociate`
Event: True |[Disassociate records](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) |[Disassociate records](/power-apps/developer/data-platform/org-service/entity-operations-associate-disassociate#use-the-disassociate-method-or-disassociaterequest)|
+| `GrantAccess`
Event: True | ||
+| `IsValidStateTransition`
Event: False | ||
+| `ModifyAccess`
Event: True | ||
+| `Retrieve`
Event: True |`GET` /approvalstageorders(*approvalstageorderid*)
See [Retrieve](/powerapps/developer/data-platform/webapi/retrieve-entity-using-web-api) |[Retrieve records](/power-apps/developer/data-platform/org-service/entity-operations-retrieve)|
+| `RetrieveMultiple`
Event: True |`GET` /approvalstageorders
See [Query data](/power-apps/developer/data-platform/webapi/query-data-web-api) |[Query data](/power-apps/developer/data-platform/org-service/entity-operations-query-data)|
+| `RetrievePrincipalAccess`
Event: True | ||
+| `RetrieveSharedPrincipalsAndAccess`
Event: True | ||
+| `RevokeAccess`
Event: True | ||
+| `SetState`
Event: True |`PATCH` /approvalstageorders(*approvalstageorderid*)
[Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `statecode` and `statuscode` properties. ||
+| `Update`