diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index 752a9d3977..38600d7ba7 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -1,5 +1,50 @@
{
"redirections": [
+ {
+ "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/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/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",
@@ -4107,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
},
{
@@ -5027,7 +5072,12 @@
},
{
"source_path": "powerapps-docs/developer/common-data-service/org-service/samples/assign-record-to-new-owner.md",
- "redirect_url": "../../../data-platform/org-service/samples/assign-record-to-new-owner",
+ "redirect_url": "../../../data-platform/org-service/samples/assign-records-to-team",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/org-service/samples/assign-record-to-new-owner.md",
+ "redirect_url": "./assign-records-to-team",
"redirect_document_id": false
},
{
@@ -8937,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
},
{
@@ -9150,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",
@@ -9544,6 +9604,36 @@
"source_path": "powerapps-docs/maker/common/ai-plugin.md",
"redirect_url": "../../../microsoft-copilot-studio/microsoft-copilot-extend-action-connector",
"redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/use-ai-builder.md",
+ "redirect_url": "../ai-builder/overview",
+ "redirect_document_id": false
+ },
+ {
+ "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/make-a-card/ui-elements/data-binding.md b/powerapps-docs/cards/make-a-card/ui-elements/data-binding.md
index 08bfe1a6fa..2a5e54741f 100644
--- a/powerapps-docs/cards/make-a-card/ui-elements/data-binding.md
+++ b/powerapps-docs/cards/make-a-card/ui-elements/data-binding.md
@@ -3,7 +3,7 @@ title: Work with repeating controls in cards
description: Learn how to make controls repeat in a table in cards for Microsoft Power Apps.
keywords: "Card Designer, Power Apps, cards, controls"
ms.date: 09/20/2022
-ms.topic: conceptual
+ms.topic: article
author: iaanw
ms.author: iawilt
ms.reviewer:
diff --git a/powerapps-docs/cards/send-a-card/send-card-in-teams.md b/powerapps-docs/cards/send-a-card/send-card-in-teams.md
index f43a61079e..d59a9afaa2 100644
--- a/powerapps-docs/cards/send-a-card/send-card-in-teams.md
+++ b/powerapps-docs/cards/send-a-card/send-card-in-teams.md
@@ -3,7 +3,7 @@ title: Share a card in Teams
description: Learn how to share a card with your teammates in Teams."
keywords: "Card Designer, Power Apps, cards, share a card, Teams, send a card"
ms.date: 09/20/2022
-ms.topic: article
+ms.topic: how-to
author: iaanw
ms.author: iawilt
ms.reviewer:
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/cards/tutorials/dataverse-card.md b/powerapps-docs/cards/tutorials/dataverse-card.md
index 82bddc5689..f894e40e7d 100644
--- a/powerapps-docs/cards/tutorials/dataverse-card.md
+++ b/powerapps-docs/cards/tutorials/dataverse-card.md
@@ -3,7 +3,7 @@ title: Create a card with data from Dataverse
description: Learn how to use Dataverse connectors in a card.
keywords: "Card Designer, Power Apps, cards, tutorial, Dataverse, connectors"
ms.date: 09/20/2022
-ms.topic: article
+ms.topic: how-to
author: iaanw
ms.author: iawilt
ms.reviewer:
diff --git a/powerapps-docs/developer/component-framework/add-custom-controls-to-a-field-or-entity.md b/powerapps-docs/developer/component-framework/add-custom-controls-to-a-field-or-entity.md
index 7ad9e8fe32..5d24a35599 100644
--- a/powerapps-docs/developer/component-framework/add-custom-controls-to-a-field-or-entity.md
+++ b/powerapps-docs/developer/component-framework/add-custom-controls-to-a-field-or-entity.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 05/27/2022
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
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/code-components-alm.md b/powerapps-docs/developer/component-framework/code-components-alm.md
index 36e23c4985..caabc0c74d 100644
--- a/powerapps-docs/developer/component-framework/code-components-alm.md
+++ b/powerapps-docs/developer/component-framework/code-components-alm.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 05/27/2022
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/code-components-best-practices.md b/powerapps-docs/developer/component-framework/code-components-best-practices.md
index 745b022eeb..4e2c2f0342 100644
--- a/powerapps-docs/developer/component-framework/code-components-best-practices.md
+++ b/powerapps-docs/developer/component-framework/code-components-best-practices.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 03/25/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: best-practice
ms.subservice: pcf
contributors:
- JimDaly
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 dff8042f4f..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,9 +4,9 @@ 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: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
@@ -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/create-custom-controls-using-pcf.md b/powerapps-docs/developer/component-framework/create-custom-controls-using-pcf.md
index c9a7bc744d..b4d8528270 100644
--- a/powerapps-docs/developer/component-framework/create-custom-controls-using-pcf.md
+++ b/powerapps-docs/developer/component-framework/create-custom-controls-using-pcf.md
@@ -6,7 +6,7 @@ author: anuitz
ms.author: anuitz
ms.date: 01/27/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/custom-controls-overview.md b/powerapps-docs/developer/component-framework/custom-controls-overview.md
index 0988aee630..fea14d8d90 100644
--- a/powerapps-docs/developer/component-framework/custom-controls-overview.md
+++ b/powerapps-docs/developer/component-framework/custom-controls-overview.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 02/10/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/customize-editable-grid-control.md b/powerapps-docs/developer/component-framework/customize-editable-grid-control.md
index 103f46187c..13a42e5817 100644
--- a/powerapps-docs/developer/component-framework/customize-editable-grid-control.md
+++ b/powerapps-docs/developer/component-framework/customize-editable-grid-control.md
@@ -6,7 +6,7 @@ author: clromano
ms.author: clromano
ms.date: 07/25/2022
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/debugging-custom-controls.md b/powerapps-docs/developer/component-framework/debugging-custom-controls.md
index bccced3a7f..2cdd5bc2d5 100644
--- a/powerapps-docs/developer/component-framework/debugging-custom-controls.md
+++ b/powerapps-docs/developer/component-framework/debugging-custom-controls.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 05/27/2022
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/events.md b/powerapps-docs/developer/component-framework/events.md
index 968b18f91f..728102202c 100644
--- a/powerapps-docs/developer/component-framework/events.md
+++ b/powerapps-docs/developer/component-framework/events.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 03/24/2025
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/fluent-modern-theming.md b/powerapps-docs/developer/component-framework/fluent-modern-theming.md
index 05ac01726e..3ae93e9599 100644
--- a/powerapps-docs/developer/component-framework/fluent-modern-theming.md
+++ b/powerapps-docs/developer/component-framework/fluent-modern-theming.md
@@ -9,7 +9,7 @@ ms.reviewer: jdaly
ms.custom:
- "dyn365-a11y"
- "dyn365-developer"
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- HemantGaur
diff --git a/powerapps-docs/developer/component-framework/implementing-controls-using-typescript.md b/powerapps-docs/developer/component-framework/implementing-controls-using-typescript.md
index da8603d795..47fd7bfbe2 100644
--- a/powerapps-docs/developer/component-framework/implementing-controls-using-typescript.md
+++ b/powerapps-docs/developer/component-framework/implementing-controls-using-typescript.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 02/06/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/component-framework/import-custom-controls.md b/powerapps-docs/developer/component-framework/import-custom-controls.md
index 2633d129c2..98fc646abe 100644
--- a/powerapps-docs/developer/component-framework/import-custom-controls.md
+++ b/powerapps-docs/developer/component-framework/import-custom-controls.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 12/04/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
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/media/dependent-library-libprojectview.png b/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png
index ae6348305e..3567011838 100644
Binary files a/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png and b/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png differ
diff --git a/powerapps-docs/developer/component-framework/react-controls-platform-libraries.md b/powerapps-docs/developer/component-framework/react-controls-platform-libraries.md
index 039030cad8..c9320ae428 100644
--- a/powerapps-docs/developer/component-framework/react-controls-platform-libraries.md
+++ b/powerapps-docs/developer/component-framework/react-controls-platform-libraries.md
@@ -9,7 +9,7 @@ ms.reviewer: jdaly
ms.custom:
- "dyn365-a11y"
- "dyn365-developer"
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- miglisic
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/sample-controls/map-control.md b/powerapps-docs/developer/component-framework/sample-controls/map-control.md
index 67444bc0d9..574b355234 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/map-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/map-control.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 03/12/2022
ms.reviewer: jdaly
-ms.topic: "article"
+ms.topic: concept-article
---
# Implementing map component
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/component-framework/tutorial-use-dependent-libraries.md b/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md
index a5bfebefc6..a314645db6 100644
--- a/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md
+++ b/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md
@@ -3,7 +3,7 @@ title: "Tutorial: Use dependent libraries in a component"
description: "In this tutorial, learn how to use dependent libraries with a model-driven app."
author: anuitz
ms.author: anuitz
-ms.date: 03/24/2025
+ms.date: 04/04/2025
ms.reviewer: jdaly
ms.topic: tutorial
ms.subservice: pcf
@@ -40,59 +40,77 @@ This component doesn't provide any capabilities by itself. It's simply a contain
The first step is to create a new component using the [pac pcf init command](/power-platform/developer/cli/reference/pcf#pac-pcf-init):
- `pac pcf init -n StubLibrary -ns SampleNamespace -t field -npm`
+ ```cmd
+ pac pcf init -n StubLibrary -ns SampleNamespace -t field -npm
+ ```
### Define the library
-1. In your new control folder, add a new folder to contain your libraries `libs` for this example create a new JavaScript file. This example uses a library named `myLib-v_0_0_1.js` that has a single `sayHello` function.
-
- ```javascript
- // UMD module pattern
- var myLib = (function (exports) {
- 'use strict';
+1. You need a new declaration file (d.ts) to describe the objects and functions contained in your library. Create a new file in the root folder of your project named `myLib.d.ts`:
- function sayHello() {
- return "Hello from myLib";
+ ```typescript
+ declare module 'myLib' {
+ export function sayHello(): string;
}
+ ```
+
+1. We are going to expose our library as an UMD module, and we need to put the variable in the global scope. For this we need a new declaration file (d.ts). Create a new file in the root folder of your project named `global.d.ts`:
- exports.sayHello = sayHello;
-
- return exports;
-
- }({}));
+ ```typescript
+ /* eslint-disable no-var */
+ declare global {
+ var myLib: typeof import('myLib');
+ }
+ export { };
```
-1. You need new declaration file (d.ts) to describe the objects and functions contained in your library. Create a new file in the root folder of your project for `myLib-v_0_0_1.js` it looks like this `myLib.d.ts` file:
+1. Update tsconfig.json to allow UMD modules and javascript code as follows:
- ```typescript
- declare module 'myLib' {
- export function sayHello(): string;
+ #### [Before](#tab/before)
+
+ ```json
+ {
+ "extends": "./node_modules/pcf-scripts/tsconfig_base.json",
+ "compilerOptions": {
+ "typeRoots": ["node_modules/@types"]
+ }
}
```
+
+ #### [After](#tab/after)
+
+ ```json
+ {
+ "extends": "./node_modules/pcf-scripts/tsconfig_base.json",
+ "compilerOptions": {
+ "typeRoots": ["node_modules/@types"],
+ "allowJs": true,
+ "allowUmdGlobalAccess": true,
+ "outDir": "dist"
+ },
+ }
+ ```
+ ---
-1. Add a reference to the library under the `resources` in the control manifest.
+### Add the library
-#### [Before](#tab/before)
+In your new control folder, add a new folder to contain your libraries `libs` for this example create a new JavaScript file. This example uses a library named `myLib-v_0_0_1.js` that has a single `sayHello` function.
-```xml
-
-
-
-```
+ ```javascript
+ // UMD module pattern
+ var myLib = (function (exports) {
+ "use strict";
-#### [After](#tab/after)
+ function sayHello() {
+ return "Hello from myLib";
+ }
-```xml
-
-
-
-
-
-
-```
+ exports.sayHello = sayHello;
----
+ return exports;
+ })(/** @type {import('myLib')} */ ({}));
+ ```
### Add Configuration data
@@ -100,9 +118,10 @@ The first step is to create a new component using the [pac pcf init command](/po
1. Add the following text to the `featureconfig.json` file:
```json
- {
- "pcfAllowCustomWebpack": "on"
- }
+ {
+ "pcfAllowCustomWebpack": "on",
+ "pcfAllowLibraryResources": "on"
+ }
```
[Learn more about the featureconfig.json file](dependent-libraries.md#featureconfigjson)
@@ -110,35 +129,37 @@ The first step is to create a new component using the [pac pcf init command](/po
1. Add a new `webpack.config.js` file in the root folder of your project. This configuration data ensures that the libraries aren't bundled with the control output. Bundling isn't necessary because they're already packaged separately when you build the project.
```typescript
- /* eslint-disable */
- "use strict";
-
- module.exports = {
- externals: {
- "myLib": "myLib"
- },
- }
+ /* eslint-disable */
+ "use strict";
+
+ module.exports = {
+ externals: {
+ "myLib": "myLib"
+ },
+ }
```
[Learn more about the webpack.config.js file](dependent-libraries.md#webpackconfigjs)
-1. Edit the `.eslintrc.json` file to modify the `rules` to add a rule to turn off the check for [no-explicit-any](https://typescript-eslint.io/rules/no-explicit-any/).
+1. Add a reference to the library under the `resources` in the control manifest.
#### [Before](#tab/before)
-```json
- "rules": {
- "@typescript-eslint/no-unused-vars": "off"
- }
+```xml
+
+
+
```
#### [After](#tab/after)
-```json
- "rules": {
- "@typescript-eslint/no-unused-vars": "off",
- "@typescript-eslint/no-explicit-any": "off"
- }
+```xml
+
+
+
+
+
+
```
---
@@ -152,57 +173,73 @@ The last step is to edit the `index.ts` of the control to bind the library to th
```typescript
import { IInputs, IOutputs } from "./generated/ManifestTypes";
-export class PreBuiltLibrary
+export class StubLibrary
implements ComponentFramework.StandardControl
{
-constructor() {}
-
-public init(
- context: ComponentFramework.Context,
- notifyOutputChanged: () => void,
- state: ComponentFramework.Dictionary,
- container: HTMLDivElement
-): void {}
-
-public updateView(context: ComponentFramework.Context): void {}
-
-public getOutputs(): IOutputs {
- return {};
-}
-
-public destroy(): void {}
+ constructor() {
+ // Empty
+ }
+
+ public init(
+ context: ComponentFramework.Context,
+ notifyOutputChanged: () => void,
+ state: ComponentFramework.Dictionary,
+ container: HTMLDivElement
+ ): void {
+ // Add control initialization code
+ }
+
+ public updateView(context: ComponentFramework.Context): void {
+ // Add code to update control view
+ }
+
+ public getOutputs(): IOutputs {
+ return {};
+ }
+
+ public destroy(): void {
+ // Add code to cleanup control if necessary
+ }
}
-
```
#### [After](#tab/after)
```typescript
+import * as myLib from 'myLib';
import { IInputs, IOutputs } from "./generated/ManifestTypes";
-export class PreBuiltLibrary
+export class StubLibrary
implements ComponentFramework.StandardControl
{
-constructor() {}
-
-public init(
- context: ComponentFramework.Context,
- notifyOutputChanged: () => void,
- state: ComponentFramework.Dictionary,
- container: HTMLDivElement
-): void {}
-
-public updateView(context: ComponentFramework.Context): void {}
-
-public getOutputs(): IOutputs {
- return {};
-}
-
-public destroy(): void {}
+ constructor() {
+ // Empty
+ }
+
+ public init(
+ context: ComponentFramework.Context,
+ notifyOutputChanged: () => void,
+ state: ComponentFramework.Dictionary,
+ container: HTMLDivElement
+ ): void {
+ // Add control initialization code
+ }
+
+ public updateView(context: ComponentFramework.Context): void {
+ // Add code to update control view
+ }
+
+ public getOutputs(): IOutputs {
+ return {};
+ }
+
+ public destroy(): void {
+ // Add code to cleanup control if necessary
+ }
}
(function () {
- (window as any).MyLib = MyLib;
+ window.myLib = myLib;
})();
```
@@ -226,13 +263,15 @@ Now that you have a library control, you need a control to depend on it.
1. Create a new component using this command:
- `pac pcf init -n DependencyControl -ns SampleNamespace -t field -fw react -npmcd `
+ ```cmd
+ pac pcf init -n DependencyControl -ns SampleNamespace -t field -fw react -npm
+ ```
1. Add a new feature control file in the root folder of your project called `featureconfig.json` containing the following text:
```json
- {
- "pcfResourceDependency": "on"
+ {
+ "pcfResourceDependency": "on"
}
```
@@ -242,11 +281,11 @@ Now that you have a library control, you need a control to depend on it.
```xml
-
+ />
```
@@ -254,8 +293,12 @@ Now that you have a library control, you need a control to depend on it.
```xml
-
+
+
+
```
@@ -263,20 +306,39 @@ Now that you have a library control, you need a control to depend on it.
```xml
-
-
-
-
+
+
+
+
```
---
+### Add Global.d.ts
+
+Since the StubLibrary is exposed as an UMD module, we need to put the variable in the global scope. For this we need a new declaration file (d.ts). Create a new file in the root folder of your project named `global.d.ts`:
+
+```typescript
+/* eslint-disable no-var */
+
+interface MyLib {
+ sayHello(): string;
+}
+
+declare global {
+ var myLib: MyLib;
+}
+
+export { };
+
+```
+
### Use the library function
Update the component `HelloWorld.tsx` file so that it uses a function from the dependent library. The library is loaded into the `Window` object at runtime.
@@ -285,7 +347,7 @@ Update the component `HelloWorld.tsx` file so that it uses a function from the d
```typescript
import * as React from 'react';
-import { Label } from '@fluentui/react';
+import { Label } from '@fluentui/react-components';
export interface IHelloWorldProps {
name?: string;
@@ -307,7 +369,7 @@ export class HelloWorld extends React.Component {
```typescript
import * as React from 'react';
-import { Label } from '@fluentui/react';
+import { Label } from '@fluentui/react-components';
export interface IHelloWorldProps {
name?: string;
@@ -317,7 +379,7 @@ export class HelloWorld extends React.Component {
public render(): React.ReactNode {
return (
)
}
@@ -326,30 +388,6 @@ export class HelloWorld extends React.Component {
---
-
-### Disable the check for no-explicit-any
-
-Edit the `.eslintrc.json` file to modify the `rules` to add a rule to turn off the check for [no-explicit-any](https://typescript-eslint.io/rules/no-explicit-any/).
-
-#### [Before](#tab/before)
-
-```json
- "rules": {
- "@typescript-eslint/no-unused-vars": "off"
- }
-```
-
-#### [After](#tab/after)
-
-```json
- "rules": {
- "@typescript-eslint/no-unused-vars": "off",
- "@typescript-eslint/no-explicit-any": "off"
- }
-```
-
----
-
### Build and package the dependent component
To finish the dependent component, complete the following steps as usual:
@@ -383,10 +421,8 @@ To specify on demand load behavior, modify the control manifest of the component
order="1" />
-
-
+
+
```
@@ -404,10 +440,8 @@ To specify on demand load behavior, modify the control manifest of the component
-
-
+
+
```
@@ -421,7 +455,7 @@ Modify the `HelloWorld.tsx` to add a state and methods to update it once the dep
```typescript
import * as React from 'react';
-import { Label } from '@fluentui/react';
+import { Label } from '@fluentui/react-components';
export interface IHelloWorldProps {
name?: string;
@@ -431,7 +465,7 @@ export class HelloWorld extends React.Component {
public render(): React.ReactNode {
return (
)
}
@@ -442,11 +476,14 @@ export class HelloWorld extends React.Component {
```typescript
import * as React from 'react';
-import { Label } from '@fluentui/react';
+import { Label } from '@fluentui/react-components';
+export interface IHelloWorldProps {
+ name?: string;
+}
-export class HelloWorld extends React.Component {
- constructor(props: any) {
+export class HelloWorld extends React.Component {
+ constructor(props: IHelloWorldProps) {
super(props);
this.state = {
loaded: false
@@ -460,7 +497,7 @@ export class HelloWorld extends React.Component {
public render(): React.ReactNode {
return (
)
}
@@ -483,21 +520,12 @@ import { HelloWorld, IHelloWorldProps } from "./HelloWorld";
import * as React from "react";
export class DependencyControl implements ComponentFramework.ReactControl {
- private theComponent: ComponentFramework.ReactControl;
private notifyOutputChanged: () => void;
- /**
- * Empty constructor.
- */
- constructor() { }
-
- /**
- * Used to initialize the control instance. Controls can kick off remote server calls and other initialization actions here.
- * Data-set values are not initialized here, use updateView.
- * @param context The entire property bag available to control via Context Object; It contains values as set up by the customizer mapped to property names defined in the manifest, as well as utility functions.
- * @param notifyOutputChanged A callback method to alert the framework that the control has new outputs ready to be retrieved asynchronously.
- * @param state A piece of data that persists in one session for a single user. Can be set at any point in a controls life cycle by calling 'setControlState' in the Mode interface.
- */
+ constructor() {
+ // Empty
+ }
+
public init(
context: ComponentFramework.Context,
notifyOutputChanged: () => void,
@@ -506,34 +534,22 @@ export class DependencyControl implements ComponentFramework.ReactControl): React.ReactElement {
- const props: IHelloWorldProps = { name: 'Hello, World!' };
+ const props: IHelloWorldProps = { name: 'Power Apps' };
return React.createElement(
HelloWorld, props
);
}
- /**
- * It is called by the framework prior to a control receiving new data.
- * @returns an object based on nomenclature defined in manifest, expecting object[s] for property marked as "bound" or "output"
- */
public getOutputs(): IOutputs {
return { };
}
- /**
- * Called when the control is to be removed from the DOM tree. Controls should use this call for cleanup.
- * i.e. cancelling any pending remote calls, removing listeners, etc.
- */
public destroy(): void {
// Add code to cleanup control if necessary
}
}
+
```
#### [After](#tab/after)
@@ -549,18 +565,10 @@ export class DependencyControl implements ComponentFramework.ReactControl;
private mainContainerRef: React.RefObject = React.createRef();
- /**
- * Empty constructor.
- */
- constructor() { }
-
- /**
- * Used to initialize the control instance. Controls can kick off remote server calls and other initialization actions here.
- * Data-set values are not initialized here, use updateView.
- * @param context The entire property bag available to control via Context Object; It contains values as set up by the customizer mapped to property names defined in the manifest, as well as utility functions.
- * @param notifyOutputChanged A callback method to alert the framework that the control has new outputs ready to be retrieved asynchronously.
- * @param state A piece of data that persists in one session for a single user. Can be set at any point in a controls life cycle by calling 'setControlState' in the Mode interface.
- */
+ constructor() {
+ // Empty
+ }
+
public init(
context: ComponentFramework.Context,
notifyOutputChanged: () => void,
@@ -570,30 +578,21 @@ export class DependencyControl implements ComponentFramework.ReactControl): React.ReactElement {
return React.createElement(
HelloWorld, {ref: this.mainContainerRef }
);
}
- /**
- * It is called by the framework prior to a control receiving new data.
- * @returns an object based on nomenclature defined in manifest, expecting object[s] for property marked as "bound" or "output"
- */
public getOutputs(): IOutputs {
return { };
}
- public getActions(): any {
+ public getActions(): {afterPageLoad: ()=>Promise} {
return {
afterPageLoad: async () => {
console.log("afterPageLoad");
- const loadedControl = await (this.context.utils as any).loadDependency("samples_SampleNamespace.StubLibrary");
+ const loadedControl = await this.context.utils.loadDependency?.("samples_SampleNamespace.StubLibrary");
if (loadedControl) {
this.mainContainerRef.current?.afterPageLoad();
}
@@ -601,10 +600,6 @@ export class DependencyControl implements ComponentFramework.ReactControl 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 ede55b5d3b..449fb1cc29 100644
--- a/powerapps-docs/developer/data-platform/application-insights-ilogger.md
+++ b/powerapps-docs/developer/data-platform/application-insights-ilogger.md
@@ -1,11 +1,11 @@
---
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: article
+ms.topic: how-to
ms.subservice: dataverse-developer
search.audienceType:
- 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/attachment-annotation-files.md b/powerapps-docs/developer/data-platform/attachment-annotation-files.md
index 7a4d0ed58b..7088c75555 100644
--- a/powerapps-docs/developer/data-platform/attachment-annotation-files.md
+++ b/powerapps-docs/developer/data-platform/attachment-annotation-files.md
@@ -3,7 +3,7 @@ title: Use file data with Attachment and Note records
description: Learn how to work with file data in the Attachments and Notes tables in Microsoft Dataverse
ms.date: 02/02/2023
ms.reviewer: jdaly
-ms.topic: conceptual
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
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/auditing/retrieve-audit-data.md b/powerapps-docs/developer/data-platform/auditing/retrieve-audit-data.md
index 18353138c5..b532aeb3b2 100644
--- a/powerapps-docs/developer/data-platform/auditing/retrieve-audit-data.md
+++ b/powerapps-docs/developer/data-platform/auditing/retrieve-audit-data.md
@@ -3,7 +3,7 @@ title: Retrieve the history of audited data changes
description: Learn how to programmatically retrieve the audit change history of records in Microsoft Dataverse.
ms.date: 06/02/2023
ms.reviewer: jdaly
-ms.topic: conceptual
+ms.topic: how-to
author: paulliew
ms.author: paulliew
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/authenticate-dot-net-framework.md b/powerapps-docs/developer/data-platform/authenticate-dot-net-framework.md
index 1aa2bad53f..6595e7c26a 100644
--- a/powerapps-docs/developer/data-platform/authenticate-dot-net-framework.md
+++ b/powerapps-docs/developer/data-platform/authenticate-dot-net-framework.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 01/06/2022
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: concept-article
author: "paulliew" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/authenticate-oauth.md b/powerapps-docs/developer/data-platform/authenticate-oauth.md
index 7f5f03b67a..8395ef971f 100644
--- a/powerapps-docs/developer/data-platform/authenticate-oauth.md
+++ b/powerapps-docs/developer/data-platform/authenticate-oauth.md
@@ -4,7 +4,7 @@ description: "Learn how to authenticate applications with Microsoft Dataverse us
ms.custom: has-adal-ref
ms.date: 12/04/2024
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
author: ritesp # GitHub ID
ms.subservice: dataverse-developer
ms.author: ritesp # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/authenticate-office365-deprecation.md b/powerapps-docs/developer/data-platform/authenticate-office365-deprecation.md
index 12b8f1b60b..ad6f4d9cdd 100644
--- a/powerapps-docs/developer/data-platform/authenticate-office365-deprecation.md
+++ b/powerapps-docs/developer/data-platform/authenticate-office365-deprecation.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 12/04/2024
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "phecke" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "pehecke" # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/azure-integration.md b/powerapps-docs/developer/data-platform/azure-integration.md
index 38bbe389b1..138844b82e 100644
--- a/powerapps-docs/developer/data-platform/azure-integration.md
+++ b/powerapps-docs/developer/data-platform/azure-integration.md
@@ -4,7 +4,7 @@ description: "Learn how Microsoft Dataverse can be configured to send data to th
ms.collection: get-started
ms.date: 07/17/2024
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "jaredha"
ms.subservice: dataverse-developer
ms.author: "pehecke"
diff --git a/powerapps-docs/developer/data-platform/behavior-format-date-time-attribute.md b/powerapps-docs/developer/data-platform/behavior-format-date-time-attribute.md
index 7f7bb36e8f..318492ff96 100644
--- a/powerapps-docs/developer/data-platform/behavior-format-date-time-attribute.md
+++ b/powerapps-docs/developer/data-platform/behavior-format-date-time-attribute.md
@@ -3,7 +3,7 @@ title: "Configure the behavior and format of the date and time column using code
description: "The DateTimeAttributeMetadata class is used to define and manage columns of type DateTime in Microsoft Dataverse."
ms.date: 10/19/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/best-practices/business-logic/develop-iplugin-implementations-stateless.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/develop-iplugin-implementations-stateless.md
index 5bf09ca9b1..6f463b1975 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/develop-iplugin-implementations-stateless.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/develop-iplugin-implementations-stateless.md
@@ -4,7 +4,7 @@ description: "Members of classes that implement IPlugin are exposed to potential
suite: powerapps
author: jowells
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
ms.date: 9/05/2019
ms.subservice: dataverse-developer
ms.author: jowells
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/index.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/index.md
index 26a7ad9eb0..1432e11c8b 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/index.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/index.md
@@ -5,7 +5,7 @@ suite: powerapps
author: jowells
ms.author: jowells
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: best-practice
ms.date: 04/03/2025
ms.subservice: dataverse-developer
search.audienceType:
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 10e1980816..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,11 +2,11 @@
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: article
+ms.topic: how-to
ms.subservice: dataverse-developer
search.audienceType:
- 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-keepalive-false-interacting-external-hosts-plugin.md b/powerapps-docs/developer/data-platform/best-practices/business-logic/set-keepalive-false-interacting-external-hosts-plugin.md
index 1bda822f58..3109a66594 100644
--- a/powerapps-docs/developer/data-platform/best-practices/business-logic/set-keepalive-false-interacting-external-hosts-plugin.md
+++ b/powerapps-docs/developer/data-platform/best-practices/business-logic/set-keepalive-false-interacting-external-hosts-plugin.md
@@ -5,7 +5,7 @@ suite: powerapps
author: jowells
ms.author: jowells
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
ms.date: 8/21/2019
ms.subservice: dataverse-developer
search.audienceType:
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 1c58df5af6..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,12 +1,12 @@
---
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: article
+ms.topic: how-to
ms.subservice: dataverse-developer
search.audienceType:
- developer
@@ -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/index.md b/powerapps-docs/developer/data-platform/best-practices/index.md
index 77e64aa292..c74fdfea9b 100644
--- a/powerapps-docs/developer/data-platform/best-practices/index.md
+++ b/powerapps-docs/developer/data-platform/best-practices/index.md
@@ -3,7 +3,7 @@ title: "Best practices and guidance when coding for Microsoft Dataverse | Micros
description: Best practices and guidance for developers writing code for Microsoft Dataverse.
suite: powerapps
author: jowells
-ms.topic: article
+ms.topic: best-practice
ms.date: 03/18/2021
ms.subservice: dataverse-developer
ms.author: jowells
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 a18757112f..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,10 +1,10 @@
---
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: article
+ms.topic: best-practice
ms.date: 03/26/2021
ms.subservice: dataverse-developer
search.audienceType:
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/best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md b/powerapps-docs/developer/data-platform/best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md
index 4ddd3c6780..7e8a07842f 100644
--- a/powerapps-docs/developer/data-platform/best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md
+++ b/powerapps-docs/developer/data-platform/best-practices/work-with-data/retrieve-specific-columns-entity-via-query-apis.md
@@ -3,7 +3,7 @@ title: "Retrieve specific columns for an entity via query APIs | MicrosoftDocs"
description: "Queries submitted to retrieve data should include specific columns in the ColumnSet instance associated to the query rather than All Columns."
suite: powerapps
author: jowells
-ms.topic: article
+ms.topic: how-to
ms.date: 12/12/2018
ms.subservice: dataverse-developer
ms.author: jowells
diff --git a/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/index.md b/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/index.md
index 59b7d0ef67..f10a401e4f 100644
--- a/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/index.md
+++ b/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/index.md
@@ -5,7 +5,7 @@ suite: powerapps
author: mkannapiran
ms.author: kamanick
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: best-practice
ms.date: 03/24/2021
ms.subservice: dataverse-developer
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/retrieve-published-metadata.md b/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/retrieve-published-metadata.md
index 38afea68b1..96e1e39d05 100644
--- a/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/retrieve-published-metadata.md
+++ b/powerapps-docs/developer/data-platform/best-practices/work-with-metadata/retrieve-published-metadata.md
@@ -5,7 +5,7 @@ suite: powerapps
author: mkannapiran
ms.author: kamanick
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.date: 1/15/2019
ms.subservice: dataverse-developer
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/browse-your-metadata.md b/powerapps-docs/developer/data-platform/browse-your-metadata.md
index 65e7251651..807aa03c26 100644
--- a/powerapps-docs/developer/data-platform/browse-your-metadata.md
+++ b/powerapps-docs/developer/data-platform/browse-your-metadata.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 03/16/2021
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "phecke" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "pehecke" # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/build-and-package.md b/powerapps-docs/developer/data-platform/build-and-package.md
index b989877c13..f0c5981e5a 100644
--- a/powerapps-docs/developer/data-platform/build-and-package.md
+++ b/powerapps-docs/developer/data-platform/build-and-package.md
@@ -1,10 +1,10 @@
---
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: 10/14/2024
-ms.topic: conceptual
-author: MicroSri
-ms.author: sriknair
+ms.date: 04/04/2025
+ms.topic: how-to
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.subservice: dataverse-developer
search.audienceType:
@@ -31,6 +31,9 @@ When you build a plug-in project, keep the following output assembly constraints
Plug-in and custom workflow activity assembly projects must target .NET Framework 4.6.2. Assemblies that are built using later versions of the .NET Framework should generally work. However, if the plug-in code uses any features introduced after 4.6.2, a runtime error occurs.
+> [!NOTE]
+> We are planning to introduce Dataverse plug-in support for the .NET Framework 4.8 runtime before official Microsoft support for .NET Framework 4.6.2 ends.
+
### Limit assemblies to 16 MB
Your assembly can include multiple plug-in classes or types and even custom workflow activities, but it can't be larger than 16 MB. As a best practice, we recommend that you consolidate plug-ins and workflow assemblies into a single assembly, as long as the size remains below 16 MB.
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/business-events.md b/powerapps-docs/developer/data-platform/business-events.md
index 2d46720008..4754ec21a7 100644
--- a/powerapps-docs/developer/data-platform/business-events.md
+++ b/powerapps-docs/developer/data-platform/business-events.md
@@ -5,7 +5,7 @@ ms.date: 04/03/2022
author: jaredha
ms.author: jaredha
ms.reviewer: jdaly
-ms.topic: conceptual
+ms.topic: article
ms.subservice: dataverse-developer
search.audienceType:
- maker
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 b4d7e6c12d..811ad0aff4 100644
--- a/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md
+++ b/powerapps-docs/developer/data-platform/bypass-custom-business-logic.md
@@ -3,10 +3,10 @@ title: "Bypass custom Dataverse logic"
description: "Make data changes which bypass custom Dataverse logic."
ms.date: 12/04/2024
ms.reviewer: jdaly
-ms.topic: article
-author: MicroSri
+ms.topic: how-to
+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 9dc5055450..b12746bc4f 100644
--- a/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md
+++ b/powerapps-docs/developer/data-platform/bypass-power-automate-flows.md
@@ -3,10 +3,10 @@ title: "Bypass Power Automate Flows"
description: "Make data changes that don't trigger Power Automate flows."
ms.date: 07/01/2024
ms.reviewer: jdaly
-ms.topic: article
-author: MicroSri
+ms.topic: how-to
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -339,4 +339,4 @@ No. The parameter isn't passed through to any operations performed by plug-ins t
[Use optional parameters](optional-parameters.md)
-[!INCLUDE[footer-include](../../includes/footer-banner.md)]
\ No newline at end of file
+[!INCLUDE[footer-include](../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/cache-schema-data.md b/powerapps-docs/developer/data-platform/cache-schema-data.md
index f71e58249a..3c509248a1 100644
--- a/powerapps-docs/developer/data-platform/cache-schema-data.md
+++ b/powerapps-docs/developer/data-platform/cache-schema-data.md
@@ -2,7 +2,7 @@
title: "Cache schema data (Microsoft Dataverse) | Microsoft Docs"
description: "Create a cache of schema definitions and track changes over time."
ms.date: 10/17/2022
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/catalog-catalogassignment.md b/powerapps-docs/developer/data-platform/catalog-catalogassignment.md
index 84d4b6c100..8739a16215 100644
--- a/powerapps-docs/developer/data-platform/catalog-catalogassignment.md
+++ b/powerapps-docs/developer/data-platform/catalog-catalogassignment.md
@@ -3,7 +3,7 @@ title: "Catalog and CatalogAssignment tables (Microsoft Dataverse) | Microsoft D
description: "Learn how to use the Catalog and CatalogAssignment tables to expose events in your solution"
ms.date: 03/22/2022
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "jaredha" #TODO: NoOwner
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
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/configure-azure-integration.md b/powerapps-docs/developer/data-platform/configure-azure-integration.md
index 0d5b86cb06..6dcbd651bf 100644
--- a/powerapps-docs/developer/data-platform/configure-azure-integration.md
+++ b/powerapps-docs/developer/data-platform/configure-azure-integration.md
@@ -3,7 +3,7 @@ title: "Configure Azure integration (Microsoft Dataverse) | Microsoft Docs" # In
description: "Learn about configuring Azure integration with Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 07/19/2024
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "jaredha" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/configure-entity-relationship-cascading-behavior.md b/powerapps-docs/developer/data-platform/configure-entity-relationship-cascading-behavior.md
index 1e7c8864a7..ab9d55916e 100644
--- a/powerapps-docs/developer/data-platform/configure-entity-relationship-cascading-behavior.md
+++ b/powerapps-docs/developer/data-platform/configure-entity-relationship-cascading-behavior.md
@@ -5,7 +5,7 @@ suite: powerapps
author: mkannapiran
ms.author: kamanick
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.date: 09/05/2023
ms.subservice: dataverse-developer
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/configure-exchange-folder-level-tracking-rules.md b/powerapps-docs/developer/data-platform/configure-exchange-folder-level-tracking-rules.md
index bfe444a286..bca8cf5671 100644
--- a/powerapps-docs/developer/data-platform/configure-exchange-folder-level-tracking-rules.md
+++ b/powerapps-docs/developer/data-platform/configure-exchange-folder-level-tracking-rules.md
@@ -3,7 +3,7 @@ title: "Configure Exchange folder-level tracking rules (Microsoft Dataverse) | M
description: "Learn how to configure Exchange folder-level tracking rules" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 03/24/2021
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
author: DanaMartens # GitHub ID
ms.subservice: dataverse-developer
ms.author: dmartens # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/create-auto-number-attributes.md b/powerapps-docs/developer/data-platform/create-auto-number-attributes.md
index 7c1ee8090a..f4f9a527fb 100644
--- a/powerapps-docs/developer/data-platform/create-auto-number-attributes.md
+++ b/powerapps-docs/developer/data-platform/create-auto-number-attributes.md
@@ -4,7 +4,7 @@ description: "Learn about creating autonumber column in the same way you create
keywords: "Autonumber columns"
ms.date: 06/15/2022
ms.reviewer: jdaly
-ms.topic: "article"
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
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 dc3e2c35df..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.topic: "article"
-author: MicroSri
+ms.date: 06/20/2025
+ms.reviewer: jdaly
+ms.topic: how-to
+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 3db03f92c8..ab6977f86e 100644
--- a/powerapps-docs/developer/data-platform/create-custom-api-solution.md
+++ b/powerapps-docs/developer/data-platform/create-custom-api-solution.md
@@ -3,10 +3,10 @@ title: "Create a custom API with solution files"
description: "You can write create custom APIs by editing solution files."
ms.date: 07/14/2023
ms.reviewer: jdaly
-ms.topic: article
-author: MicroSri
+ms.topic: how-to
+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 a3f264c141..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,10 +1,10 @@
---
-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
-ms.topic: article
+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
search.audienceType:
@@ -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 2bc60fc289..d0a2355757 100644
--- a/powerapps-docs/developer/data-platform/create-elastic-tables.md
+++ b/powerapps-docs/developer/data-platform/create-elastic-tables.md
@@ -1,10 +1,10 @@
---
title: Create elastic tables using code
description: Learn how to create Dataverse elastic tables with code.
-ms.topic: article
+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/create-recurring-appointment-series-instance-exception.md b/powerapps-docs/developer/data-platform/create-recurring-appointment-series-instance-exception.md
index e157c13c63..e615107aa8 100644
--- a/powerapps-docs/developer/data-platform/create-recurring-appointment-series-instance-exception.md
+++ b/powerapps-docs/developer/data-platform/create-recurring-appointment-series-instance-exception.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 03/26/2021
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "mayadumesh" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
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 eb8fcad0ed..3fb3c237ff 100644
--- a/powerapps-docs/developer/data-platform/custom-api.md
+++ b/powerapps-docs/developer/data-platform/custom-api.md
@@ -1,11 +1,11 @@
---
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: article
+ms.topic: how-to
ms.subservice: dataverse-developer
search.audienceType:
- developer
diff --git a/powerapps-docs/developer/data-platform/dataverse-odata-dataflows-migration.md b/powerapps-docs/developer/data-platform/dataverse-odata-dataflows-migration.md
index 7911c4ac60..392d56236b 100644
--- a/powerapps-docs/developer/data-platform/dataverse-odata-dataflows-migration.md
+++ b/powerapps-docs/developer/data-platform/dataverse-odata-dataflows-migration.md
@@ -4,7 +4,7 @@ author: denise-msft
ms.reviewer: jdaly
description: Migrate data between Microsoft Dataverse environments using dataflows OData connector.
ms.date: 12/09/2022
-ms.topic: article
+ms.topic: upgrade-and-migration-article
ms.subservice: dataverse-developer
ms.author: demora
contributors:
diff --git a/powerapps-docs/developer/data-platform/dataverse-sql-query.md b/powerapps-docs/developer/data-platform/dataverse-sql-query.md
index f84b4eb196..cf70167717 100644
--- a/powerapps-docs/developer/data-platform/dataverse-sql-query.md
+++ b/powerapps-docs/developer/data-platform/dataverse-sql-query.md
@@ -1,9 +1,9 @@
---
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: "article"
+ms.topic: how-to
author: "pnghub" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "gned" # MSFT alias of Microsoft employees only
@@ -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 b87aca9cbb..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"
-ms.topic: "article"
-author: MicroSri
+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: 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 9ba71a7d1b..8c85dcdeda 100644
--- a/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md
+++ b/powerapps-docs/developer/data-platform/define-alternate-keys-entity.md
@@ -3,10 +3,10 @@ title: "Work with alternate keys (Microsoft Dataverse) | Microsoft Docs" # Inten
description: "The topic explains about how to create alternate keys for a table. Alternate keys can be created programmatically or by using the customization tools" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 09/23/2024
ms.reviewer: pehecke
-ms.topic: article
-author: MicroSri
+ms.topic: how-to
+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/discovery-service.md b/powerapps-docs/developer/data-platform/discovery-service.md
index 1805da2bd6..2335d8c7ca 100644
--- a/powerapps-docs/developer/data-platform/discovery-service.md
+++ b/powerapps-docs/developer/data-platform/discovery-service.md
@@ -3,7 +3,7 @@ title: "Discover user organizations (Microsoft Dataverse) | Microsoft Docs" # In
description: "Your client application may connect to multiple Dataverse environments. Use the Global Discovery Service to find which environments the user of your application can access."
ms.date: 03/14/2024
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
author: ImadYanni # GitHub ID
ms.subservice: dataverse-developer
ms.author: iyanni # MSFT alias of Microsoft employees only
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/email-activity-entities.md b/powerapps-docs/developer/data-platform/email-activity-entities.md
index fc569d891e..55cb58d884 100644
--- a/powerapps-docs/developer/data-platform/email-activity-entities.md
+++ b/powerapps-docs/developer/data-platform/email-activity-entities.md
@@ -3,7 +3,7 @@ title: "Email activity tables (Microsoft Dataverse) | Microsoft Docs" # Intent a
description: "The email activity in lets you track and manage email communications with customers." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 11/10/2023
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
author: DanaMartens # GitHub ID
ms.subservice: dataverse-developer
ms.author: dmartens # MSFT alias of Microsoft employees only
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 caa8986c8d..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: "article"
-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/file-attributes.md b/powerapps-docs/developer/data-platform/file-attributes.md
index 40b15e2bd2..f599c2316c 100644
--- a/powerapps-docs/developer/data-platform/file-attributes.md
+++ b/powerapps-docs/developer/data-platform/file-attributes.md
@@ -3,7 +3,7 @@ title: "Work with file column definitions using code | Microsoft Docs"
description: "Learn about how to create, retrieve, update and delete file column definitions using code."
ms.date: 01/17/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/file-column-data.md b/powerapps-docs/developer/data-platform/file-column-data.md
index 5bfe9c6eb0..4d01192b7d 100644
--- a/powerapps-docs/developer/data-platform/file-column-data.md
+++ b/powerapps-docs/developer/data-platform/file-column-data.md
@@ -3,7 +3,7 @@ title: "Use file column data (Microsoft Dataverse) | Microsoft Docs"
description: "Learn about uploading, downloading, and deleting data in file columns."
ms.date: 03/29/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/files-images-overview.md b/powerapps-docs/developer/data-platform/files-images-overview.md
index e22d7ba7d8..46b934bf22 100644
--- a/powerapps-docs/developer/data-platform/files-images-overview.md
+++ b/powerapps-docs/developer/data-platform/files-images-overview.md
@@ -3,7 +3,7 @@ title: "Files and images overview (Microsoft Dataverse) | Microsoft Docs" # Inte
description: "Learn about using file and image data in Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 05/26/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: concept-article
author: JimDaly # GitHub ID
ms.subservice: dataverse-developer
ms.author: jdaly # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/getfilesasurl.md b/powerapps-docs/developer/data-platform/getfilesasurl.md
index ca1b6edc50..eb6666a537 100644
--- a/powerapps-docs/developer/data-platform/getfilesasurl.md
+++ b/powerapps-docs/developer/data-platform/getfilesasurl.md
@@ -3,7 +3,7 @@ title: "Grant limited access to Dataverse files using shared access signatures"
description: "Learn how to create a shared access signature URL that enables anyone to download the file or image from Dataverse"
ms.date: 09/11/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: JimDaly
ms.subservice: dataverse-developer
ms.author: jdaly
@@ -195,4 +195,4 @@ The following limitations apply:
[Files and images overview](files-images-overview.md)
[Use file column data](file-column-data.md)
[Use image column data](image-column-data.md)
-[Use file data with Attachment and Note records](attachment-annotation-files.md)
\ No newline at end of file
+[Use file data with Attachment and Note records](attachment-annotation-files.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/image-attributes.md b/powerapps-docs/developer/data-platform/image-attributes.md
index 018a0d377b..3d50d18b30 100644
--- a/powerapps-docs/developer/data-platform/image-attributes.md
+++ b/powerapps-docs/developer/data-platform/image-attributes.md
@@ -3,7 +3,7 @@ title: "Work with image column definitions using code"
description: "Learn about how to create, retrieve, update and delete image column definitions using code."
ms.date: 01/17/2024
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/image-column-data.md b/powerapps-docs/developer/data-platform/image-column-data.md
index a2476f3c3d..9226572597 100644
--- a/powerapps-docs/developer/data-platform/image-column-data.md
+++ b/powerapps-docs/developer/data-platform/image-column-data.md
@@ -3,7 +3,7 @@ title: "Use image column data (Microsoft Dataverse) | Microsoft Docs"
description: "Learn about uploading, downloading, and deleting data in image columns."
ms.date: 02/04/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
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/introduction-solutions.md b/powerapps-docs/developer/data-platform/introduction-solutions.md
index f3e19ebb3e..652ab3cc31 100644
--- a/powerapps-docs/developer/data-platform/introduction-solutions.md
+++ b/powerapps-docs/developer/data-platform/introduction-solutions.md
@@ -4,7 +4,7 @@ description: Learn about using solutions to package your Microsoft Dataverse cus
suite: powerapps
author: shmcarth # GitHub ID
ms.author: shmcarth
-ms.topic: article
+ms.topic: concept-article
ms.reviewer: pehecke
ms.collection: get-started
ms.date: 03/17/2021
diff --git a/powerapps-docs/developer/data-platform/link-custom-attributes-recurring-master-appointment-entities.md b/powerapps-docs/developer/data-platform/link-custom-attributes-recurring-master-appointment-entities.md
index a0e1897a94..5cc727dce6 100644
--- a/powerapps-docs/developer/data-platform/link-custom-attributes-recurring-master-appointment-entities.md
+++ b/powerapps-docs/developer/data-platform/link-custom-attributes-recurring-master-appointment-entities.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 07/19/2021
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "mayadumesh" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
diff --git a/powerapps-docs/developer/data-platform/logging-tracing.md b/powerapps-docs/developer/data-platform/logging-tracing.md
index 1bd6c3f670..1faa9f8d73 100644
--- a/powerapps-docs/developer/data-platform/logging-tracing.md
+++ b/powerapps-docs/developer/data-platform/logging-tracing.md
@@ -1,11 +1,11 @@
---
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: "article"
+ms.topic: concept-article
ms.subservice: dataverse-developer
search.audienceType:
- 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/oauth-cross-origin-resource-sharing-connect-single-page-application.md b/powerapps-docs/developer/data-platform/oauth-cross-origin-resource-sharing-connect-single-page-application.md
index 203db8eefd..8c21e56ee2 100644
--- a/powerapps-docs/developer/data-platform/oauth-cross-origin-resource-sharing-connect-single-page-application.md
+++ b/powerapps-docs/developer/data-platform/oauth-cross-origin-resource-sharing-connect-single-page-application.md
@@ -3,7 +3,7 @@ title: "Use OAuth with CORS to connect a SPA"
description: "Learn how to use OAuth with Cross-Origin Resource Sharing (CORS) to connect a Single-Page Application (SPA) that connects to Microsoft Dataverse using the Web API and JavaScript."
ms.date: 03/22/2025
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: ritesp
ms.author: ritesp
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/optional-parameters.md b/powerapps-docs/developer/data-platform/optional-parameters.md
index 0e54d9daf7..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: article
-author: MicroSri
+ms.topic: how-to
+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/create-custom-entity.md b/powerapps-docs/developer/data-platform/org-service/create-custom-entity.md
index 936dd0b5c6..513b088c73 100644
--- a/powerapps-docs/developer/data-platform/org-service/create-custom-entity.md
+++ b/powerapps-docs/developer/data-platform/org-service/create-custom-entity.md
@@ -3,7 +3,7 @@ title: "Create a custom table using code (Microsoft Dataverse) | Microsoft Docs"
description: "Shows how to programmatically create a custom table in Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 03/22/2022
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/detect-duplicate-data.md b/powerapps-docs/developer/data-platform/org-service/detect-duplicate-data.md
index 46b0b5ae3f..ba8dfb3b34 100644
--- a/powerapps-docs/developer/data-platform/org-service/detect-duplicate-data.md
+++ b/powerapps-docs/developer/data-platform/org-service/detect-duplicate-data.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 06/09/2021
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "mayadumesh" # GitHub ID
ms.author: "jdaly" # MSFT alias of Microsoft employees only
search.audienceType:
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 5aa04ec610..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
@@ -3,9 +3,9 @@ title: "Associate and disassociate table rows using the SDK for .NET (Microsoft
description: "Learn how to associate and disassociate table rows using the SDK for .NET" # 115-145 characters including spaces. This abstract displays in the search result.
ms.date: 12/13/2024
ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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 5f1cd38564..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
@@ -3,9 +3,9 @@ title: "Create table rows using the SDK for .NET"
description: "Learn how to create table rows using the SDK for .NET."
ms.date: 12/16/2024
ms.reviewer: pehecke
-ms.topic: article
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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 838b914d7f..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
@@ -3,9 +3,9 @@ title: "Query data using the SDK for .NET (Microsoft Dataverse) | Microsoft Docs
description: "Introduces the different ways to query data using Microsoft Dataverse SDK for .NET assemblies."
ms.date: 05/03/2024
ms.reviewer: pehecke
-ms.topic: article
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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 3747db732a..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: article
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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 38eb74619c..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: article
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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 baab91acf3..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: article
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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/generate-early-bound-classes.md b/powerapps-docs/developer/data-platform/org-service/generate-early-bound-classes.md
index e7f3f9de28..b659b47de6 100644
--- a/powerapps-docs/developer/data-platform/org-service/generate-early-bound-classes.md
+++ b/powerapps-docs/developer/data-platform/org-service/generate-early-bound-classes.md
@@ -1,16 +1,17 @@
---
title: "Generate early-bound classes for the SDK for .NET"
description: "Learn how to use the Power Platform CLI pac modelbuilder build command to generate early-bound classes for use with the Microsoft Dataverse SDK for .NET. This tool generates early-bound .NET classes that represent the Entity Data Model used by Dataverse."
-ms.date: 01/26/2024
-author: MicroSri
-ms.author: sriknair
+ms.date: 04/22/2025
+author: olegovanesyan
+ms.author: olegov
ms.reviewer: pehecke
-ms.topic: article
+ms.topic: how-to
search.audienceType:
- developer
contributors:
- JimDaly
- phecke
+ - daryllabar
---
# Generate early-bound classes for the SDK for .NET
@@ -99,7 +100,7 @@ Use the following steps to get started:
> [!NOTE]
> This file is a modified version of the file you can generate using `pac modelbuilder build` with the [`--writesettingsTemplateFile` parameter](/power-platform/developer/cli/reference/modelbuilder#--writesettingstemplatefile--wstf). Learn how to generate the file without comments in [Using parameters](#using-parameters).
-1. Use the following command to generate early bound classes for the connected environment using the settings defined in `builderSettings.json` where `C:\projects\exampleproject\` represents the path to your project and `model` is the folder you created..
+1. Use the following command to generate early bound classes for the connected environment using the settings defined in `builderSettings.json` where `C:\projects\exampleproject\` represents the path to your project and `model` is the folder you created.
```powershell
PS C:\projects\exampleproject\model> pac modelbuilder build -o . -stf .\builderSettings.json
@@ -118,7 +119,7 @@ Use the following steps to get started:
### Understand what files are written
-With either command, the following is the output you should expect:
+With either command, the following output is what you should expect:
```powershell
Connected to... Your Organization
@@ -150,7 +151,7 @@ PS C:\projects\exampleproject\model>
When you inspect the output, notice that it only generates classes for the tables specified by `entityNamesFilter` and only the messages specified in the `messageNamesFilter`. You should specify which tables (entities) and messages you use in your project. Otherwise, classes for all tables and messages are generated.
-For `messageNamesFilter`, you can use `*` as a wildcard character in these values. This is useful when messages in your solution share a common customization prefix.
+For `messageNamesFilter`, you can use `*` as a wildcard character in these values. This filter is useful when messages in your solution share a common customization prefix.
`pac modelbuilder build` writes the files into folders with names you can control in the settings file:
@@ -160,7 +161,7 @@ For `messageNamesFilter`, you can use `*` as a wildcard character in these value
- All the classes are part of the namespace you set in the `namespace` setting.
> [!NOTE]
-> If you are generating message classes, you should always include a name for the `serviceContextName` setting. See [Include `serviceContextName` when generating message classes](#include-servicecontextname-when-generating-message-classes)
+> If you're generating message classes, you should always include a name for the `serviceContextName` setting. See [Include `serviceContextName` when generating message classes](#include-servicecontextname-when-generating-message-classes)
This is how the files and folders appear in Visual Studio:
@@ -191,7 +192,7 @@ PS C:\>pac modelbuilder build `
--writesettingsTemplateFile
```
-This doesn't include all the settings because it uses the default options. If you use the [`--writesettingsTemplateFile` parameter](/power-platform/developer/cli/reference/modelbuilder#--writesettingstemplatefile--wstf) to generate a `builderSettings.json` file, it doesn't include the comments in the example in the [Get started section](#get-started) of this article. The example using parameters writes the following `builderSettings.json` file in the `model` folder:
+This example doesn't include all the settings because it uses the default options. If you use the [`--writesettingsTemplateFile` parameter](/power-platform/developer/cli/reference/modelbuilder#--writesettingstemplatefile--wstf) to generate a `builderSettings.json` file, it doesn't include the comments in the example in the [Get started section](#get-started) of this article. The example using parameters writes the following `builderSettings.json` file in the `model` folder:
```json
{
@@ -222,8 +223,8 @@ This doesn't include all the settings because it uses the default options. If yo
## Include `serviceContextName` when generating message classes
-If you are generating message classes, should always include a name for the `serviceContextName` parameter so that an [OrganizationServiceContext](xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceContext) class will be generated with your code.
-This class includes an important property to enable use of generated message classes. If you don't include an `OrganizationServiceContext`, you will get the following error when you try to use the generated message classes.
+If you're generating message classes, you should always include a name for the `serviceContextName` parameter so that an [OrganizationServiceContext](xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceContext) class is generated with your code.
+This class includes an important property to enable use of generated message classes. If you don't include an `OrganizationServiceContext`, you'll get the following error when you try to use the generated message classes.
```
The formatter threw an exception while trying to deserialize the message:
@@ -236,10 +237,11 @@ Please see InnerException for more details.
## Community tools
-The [Early Bound Generator V2](https://www.xrmtoolbox.com/plugins/DLaB.Xrm.EarlyBoundGeneratorV2/) is an XrmToolBox plug-in created by the community to provide a user interface and many other configurations to generating early-bound types.
+The [Early Bound Generator V2](https://www.xrmtoolbox.com/plugins/DLaB.Xrm.EarlyBoundGeneratorV2/) is an XrmToolBox plug-in created by the community to provide a user interface that generates the correct `builderSettings.json` file, and calls `pac modelbuilder build` command for the user. Since the UI is only used to generate the `builderSettings.json` and call the `pac modelbuilder build` command, it can still be ran via the command line in a pipeline without a dependency on the XrmToolBox. It also provides configuration options that the `pac modelbuilder` doesn't. For example, the ability to explicitly control class/properties casing and language specific transliteration of characters. Early Bound Generator V2 can do this using the extensibility features of the `pac modelbuilder`.
+
> [!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 developed tools.
+> If you have questions pertaining to the tool, contact the publisher. More Information: [XrmToolBox](https://www.xrmtoolbox.com).
## For Dynamics 365 Customer Engagement on-premises
@@ -247,10 +249,10 @@ The Power Platform CLI isn't available for Dynamics 365 Customer Engagement on-p
### Related articles
-[Late-bound and early-bound programming](early-bound-programming.md)
-[Sample: Early-bound table operations](samples/early-bound-entity-operations.md)
-[Developer tools and resources](../developer-tools.md)
-[Dataverse development tools](../download-tools-NuGet.md)
+[Late-bound and early-bound programming](early-bound-programming.md)
+[Sample: Early-bound table operations](samples/early-bound-entity-operations.md)
+[Developer tools and resources](../developer-tools.md)
+[Dataverse development tools](../download-tools-NuGet.md)
[Learn how to use the CrmSvcUtil.exe to generate early-bound classes for the SDK for .NET](/dynamics365/customerengagement/on-premises/developer/org-service/create-early-bound-entity-classes-code-generation-tool)
[!INCLUDE[footer-include](../../../includes/footer-banner.md)]
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 77a149be7d..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
@@ -4,9 +4,9 @@ description: "This article discusses the exceptions that are returned from a Mic
ms.collection: get-started
ms.date: 03/22/2022
ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
-ms.author: sriknair
+ms.topic: how-to
+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/metadata-attributemetadata.md b/powerapps-docs/developer/data-platform/org-service/metadata-attributemetadata.md
index b5707d43a2..bf83ac0cfd 100644
--- a/powerapps-docs/developer/data-platform/org-service/metadata-attributemetadata.md
+++ b/powerapps-docs/developer/data-platform/org-service/metadata-attributemetadata.md
@@ -3,7 +3,7 @@ title: "Work with column definitions (Microsoft Dataverse) | Microsoft Docs"
description: "Describes common operations on column definitions (attribute metadata)."
ms.date: 12/12/2022
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
author: mkannapiran
ms.author: kamanick
search.audienceType:
diff --git a/powerapps-docs/developer/data-platform/org-service/metadata-option-sets.md b/powerapps-docs/developer/data-platform/org-service/metadata-option-sets.md
index 221e768a06..2a8a1622ea 100644
--- a/powerapps-docs/developer/data-platform/org-service/metadata-option-sets.md
+++ b/powerapps-docs/developer/data-platform/org-service/metadata-option-sets.md
@@ -5,7 +5,7 @@ ms.date: 01/09/2023
author: mkannapiran
ms.author: kamanick
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/metadata-relationshipmetadata.md b/powerapps-docs/developer/data-platform/org-service/metadata-relationshipmetadata.md
index 6b5fbe855c..d3b9a47a18 100644
--- a/powerapps-docs/developer/data-platform/org-service/metadata-relationshipmetadata.md
+++ b/powerapps-docs/developer/data-platform/org-service/metadata-relationshipmetadata.md
@@ -5,7 +5,7 @@ ms.date: 08/12/2023
author: mkannapiran
ms.author: kamanick
ms.reviewer: jdaly
-ms.topic: "article"
+ms.topic: how-to
search.audienceType:
- developer
contributors:
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 40b0f91a15..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,10 +2,10 @@
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: "article"
+ms.topic: how-to
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md b/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
index 0306d42caf..753cddcfab 100644
--- a/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
+++ b/powerapps-docs/developer/data-platform/org-service/organizationservicecontext.md
@@ -2,10 +2,10 @@
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: "article"
+ms.topic: how-to
search.audienceType:
- developer
contributors:
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 051a1f947d..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
@@ -1,16 +1,17 @@
---
title: Aggregate data using QueryExpression
description: Learn how to use QueryExpression to retrieve aggregated data from Microsoft Dataverse.
-ms.date: 05/12/2024
+ms.date: 04/11/2025
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:
- JimDaly
+ - daryllabar
---
# Aggregate data using QueryExpression
@@ -56,6 +57,7 @@ The types of aggregation you can do are members of the [XrmAggregateType enum](x
Note the following points:
- Null values aren't considered when calculating aggregate values.
+- Aggregated data is returned as an [AliasedValue](xref:Microsoft.Xrm.Sdk.AliasedValue).
- You can use data from tables joined using the [LinkEntity class](xref:Microsoft.Xrm.Sdk.Query.LinkEntity).
- You can apply filters to limit the results as with any query.
@@ -65,7 +67,7 @@ Let's say you have 10 account records with the following data:
|Number of Employees|Name|Address 1 City|Created On|
|---------|---------|---------|---------|
-|NULL|Example Account|NULL|8/25/2023|
+|NULL|Example Account|NULL|8/27/2023|
|1,500|Contoso Pharmaceuticals (sample)|Redmond|3/25/2023|
|2,700|Fabrikam, Inc. (sample)|Lynnwood|3/25/2023|
|2,900|Blue Yonder Airlines (sample)|Los Angeles|3/25/2023|
@@ -142,6 +144,8 @@ Group the results of an aggregate query by adding an [XrmAttributeExpression](xr
When grouping, you should specify a [QueryExpression.Orders](xref:Microsoft.Xrm.Sdk.Query.QueryExpression.Orders) with an [OrderExpression](xref:Microsoft.Xrm.Sdk.Query.OrderExpression) that has the [Alias property](xref:Microsoft.Xrm.Sdk.Query.OrderExpression.Alias) set to the alias of the group.
+If a grouped by value is null, it doesn't appear in the results.
+
For example the following query returns the sum of employees, and count by city:
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 c8d77a51a3..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,11 +1,11 @@
---
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: "article"
+ms.topic: quickstart
search.audienceType:
- developer
contributors:
@@ -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-record-to-new-owner.md b/powerapps-docs/developer/data-platform/org-service/samples/assign-record-to-new-owner.md
deleted file mode 100644
index 0d4f65c77d..0000000000
--- a/powerapps-docs/developer/data-platform/org-service/samples/assign-record-to-new-owner.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: " Assign a record to a new owner (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 new owner." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
-author: MicroSri
-ms.author: sriknair
-ms.reviewer: pehecke
-ms.topic: sample
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - phecke
----
-
-# Assign a record to a new owner
-
-This sample shows how to assign an account to another user by using the [IOrganizationService.Update](/dotnet/api/microsoft.xrm.sdk.iorganizationservice.update) message.
-
-This sample uses the `IOrganization.Update` method rather than the [AssignRequest](/dotnet/api/microsoft.crm.sdk.messages.assignrequest) because there is an effort to remove specialized messages. More information: [Perform specialized operations using update](../../special-update-operation-behavior.md)
-
-> [!div class="nextstepaction"]
-> [SDK for .NET: Assign a record to a new owner sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/AssignRecordToNewOwner)
-
-## How to run this sample
-
-[!include[cc-how-to-run-samples](../../includes/cc-how-to-run-samples.md)]
-
-## What this sample does
-
-The [IOrganizationService.Update](/dotnet/api/microsoft.xrm.sdk.iorganizationservice.update) message is intended to be used in a scenario where it contains the data that is needed to update existing record.
-
-## 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. Creates required data that this sample requires.
-
-### Demonstrate
-
-1. The `Retrieve` method retrieves the account records created in the setup(#setup).
-1. The `Update` message updates the `ownerid` column to the user who you want to own the record.
-
-### Clean up
-
-Displays an option to delete all the data created in the sample. The deletion is optional in case you want to examine the data created by the sample. You can manually delete the data to achieve same results.
-
-[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
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/associate-security-role-user.md b/powerapps-docs/developer/data-platform/org-service/samples/associate-security-role-user.md
index 967e6379fd..135a779ff6 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/associate-security-role-user.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/associate-security-role-user.md
@@ -1,7 +1,7 @@
---
-title: " Associate security role to a user (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 a security role to a user " # 115-145 characters including spaces. This abstract displays in the search result.
-ms.date: 04/03/2022
+title: "Sample: Associate security role to a user"
+description: "This sample showcases how to assign a security role to a user "
+ms.date: 04/01/2025
author: paulliew
ms.author: paulliew
ms.reviewer: jdaly
@@ -15,42 +15,52 @@ contributors:
# Sample: Associate security role to a user
-This sample shows how to assign a security role to a user by using the [IOrganizationService.Associate](/dotnet/api/microsoft.xrm.sdk.iorganizationservice) message.
+Learn how to associate a system user with a security role by using the `Associate` message or method.
-This sample requires an additional user that isn't available in your system. Create the required user manually in **Microsoft 365** in order to run the sample without any errors. For this sample create a user profile **as is** shown below.
+Related articles:
-**First Name**: Dan
-**Last Name**: Park
-**Security Role**: User without any roles assigned
-**UserName**: dpark@yourorg.onmicrosoft.com
+- [Query data using QueryExpression](../queryexpression/overview.md)
+- [Role-based security roles](/power-platform/admin/database-security)
+- [IOrganizationService.Associate Method](/dotnet/api/microsoft.xrm.sdk.iorganizationservice.associate)
-> [!div class="nextstepaction"]
-> [SDK for .NET: Associate security role to a user sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/AssociateSecurityRoleToUser)
-
-## How to run this sample
+## About the sample code
-[!include[cc-how-to-run-samples](../../includes/cc-how-to-run-samples.md)]
+|Sample|Description|Build target|
+|---|---|---|
+|AssociateSecurityRoleToUser|Demonstrates associating a user with a role.|.NET 9|
-## What this sample does
+> [!div class="nextstepaction"]
+> [SDK for .NET: Associate security role to a user sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp-NETCore/Security/AssociateSecurityRoleToUser)
-The [IOrganizationService.Associate](/dotnet/api/microsoft.xrm.sdk.iorganizationservice) message is intended to be used in a scenario where it provides programmatic access to the metadata and data for an organization.
+The code sample demonstrates how to associate a system user with a security role. Specifically, the samples demonstrate how to:
-## How this sample works
+1. Connect to Dataverse using a [connection string](../../xrm-tooling/use-connection-strings-xrm-tooling-connect.md) that defines required connection information
+1. Query for a security role using its name attribute.
+1. Associate the logged on user with that security role.
-In order to simulate the scenario described in [What this sample does](#what-this-sample-does), the sample will do the following:
+Additional information can be found in [README-code-design](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp-NETCore/README-code-design.md) file.
-### Setup
+## How to build and run the code sample
-1. Checks for the current version of the org.
-2. The `CreateRequiredRecords` method creates the records required by the sample.
+1. Clone the [PowerApps-Samples](https://github.com/microsoft/PowerApps-Samples) repository.
+1. Locate the sample folder.
+1. Open the solution file (*.sln) in Visual Studio.
+1. Edit the project's appsettings.json file and set the `Url`value as appropriate for your Dataverse test environment.
+1. Build and run the project [F5].
+1. You'll be prompted in a browser window for account sign-in credentials to the target environment.
-### Demonstrate
+## Expected program output
-1. The `QueryExpression` method retrieves a role from Microsoft Dataverse.
-2. The `Associate` message assigns the role to a user.
+For a successful run, the program's console output should look similar to the following example.
+Otherwise, any errors or exceptions are displayed.
-### Clean up
+```console
+Discovering who you are...done.
+Associating your system user record with role 'Basic User'..done.
-Display an option to delete the sample data 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.
+Use the Power Platform admin center to see that you now have
+the 'Basic User' role. Afterwards, remove the role if desired.
+Press any key to undo environment data changes.
+```
[!INCLUDE[footer-include](../../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-plugin.md b/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-plugin.md
index 560729445c..35941e93cc 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-plugin.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-plugin.md
@@ -5,7 +5,7 @@ ms.date: 06/19/2023
author: jaredha
ms.author: jaredha
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-workflow-activity.md b/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-workflow-activity.md
index 6f1c6bbff9..5e4cbc16de 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-workflow-activity.md
+++ b/powerapps-docs/developer/data-platform/org-service/samples/azure-aware-custom-workflow-activity.md
@@ -5,7 +5,7 @@ ms.date: 04/03/2022
author: jaredha
ms.author: jaredha
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
search.audienceType:
- developer
---
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 56c89118ce..ee6413c235 100644
--- a/powerapps-docs/developer/data-platform/org-service/samples/toc.yml
+++ b/powerapps-docs/developer/data-platform/org-service/samples/toc.yml
@@ -1,323 +1,315 @@
items:
-- name: Activities
- items:
- - name: 'Convert a fax to a task'
- href: convert-fax-task.md
- - name: 'Create an email using a template'
- href: create-email-template.md
- - name: 'Create, retrieve, update, and delete an email attachment'
- href: create-retrieve-update-delete-email-attachment.md
- - name: 'Promote an email message'
- href: promote-email-message.md
- - name: 'Retrieve email attachments for an email template'
- href: retrieve-email-attachments-email-template.md
- - name: 'Send an email'
- href: send-email.md
- - name: 'Send an email using a template'
- href: send-email-template.md
- - name: 'Send bulk email and monitor results'
- href: send-bulk-email-monitor-results.md
- - name: File operations with Attachments and Notes
- href: attachment-annotation-files.md
- - name: 'Work with activity party records'
- href: work-activity-party-records.md
-- name: Adminstration & security
- items:
- - name: Assign security role to team
- href: associate-security-role-team.md
- - name: Associate security role to a user
- href: associate-security-role-user.md
- - name: Determine whether a user has a role
- href: determine-whether-user-has-role.md
- - name: Disable or enable a user
- href: disable-a-user.md
- - name: Remove a role for a user
- href: remove-role-for-user.md
- - name: Retrieve license information
- href: retrieve-license-information.md
- - name: Retrieve roles for an organization
- href: retrieve-roles-for-organization.md
-- name: Appointments
- items:
- - name: 'Book an appointment'
- href: book-appointment.md
- - name: 'Convert an appointment to a recurring appointment'
- href: convert-appointment-recurring-appointment.md
- - name: 'Create, retrieve, update, and delete a recurring appointment'
- href: create-retrieve-update-delete-recurring-appointment.md
- - name: 'End a recurring appointment series'
- href: end-recurring-appointment-series.md
- - name: 'Link custom columns between series and instances'
- href: link-custom-attributes-between-series-instances.md
- - name: 'Query the working hours of a user'
- href: query-working-hours-user.md
- - name: 'Query the working hours of multiple users'
- href: query-working-hours-multiple-users.md
- - name: 'Reschedule and cancel a recurring appointment'
- href: reschedule-cancel-recurring-appointment.md
- - name: 'Validate an appointment'
- href: validate-appointment.md
-- name: Auditing
- items:
- - name: Audit table data changes
- href: audit-entity-data-changes.md
- - name: Audit user access
- href: audit-user-access.md
-- name: Azure integration
- items:
- - name: Azure aware custom plug-in
- href: azure-aware-custom-plugin.md
- - name: Azure aware custom workflow activity
- href: azure-aware-custom-workflow-activity.md
- - name: One-way listener
- href: one-way-listener.md
- - name: Persistent queue listener
- href: persistent-queue-listener.md
- - name: REST listener
- href: rest-listener.md
- - name: Two-way listener
- href: two-way-listener.md
-- name: Bulk Delete
- items:
- - name: Bulk delete exported records
- href: bulk-delete-exported-records.md
- - name: Bulk delete records that match common criteria
- href: bulk-delete-records-match-common-criteria.md
-- name: Change tracking
- items:
- - name: Synchronize data with external systems using change tracking
- href: synchronize-data-external-systems-using-change-tracking.md
-- name: Charts & dashboards
- items:
- - name: Assign chart to another user
- href: assign-chart-to-another-user.md
- - name: Assign a user-owned dashboard to another user
- href: assign-dashboard-to-another-user.md
- - name: Create, retrieve, update and delete a dashboard
- href: create-retrieve-update-delete-dashboards.md
- - name: Create, retrieve, update and delete chart
- href: create-retrieve-update-delete-charts.md
- - name: Retrieve all charts attached to a table
- href: retrieve-charts-attached-to-entity.md
-- name: Connections
- items:
- - name: Create a connection
- href: create-connection-early-bound.md
- - name: Create a connection role
- href: create-connection-role-early-bound.md
- - name: Create a reciprocal connection role
- href: create-reciprocal-connection-role-early-bound.md
- - name: Query connections by a record
- href: query-connections-record-early-bound.md
- - name: Query connection roles by entity type code
- href: query-connection-roles-entity-type-code-early-bound.md
- - name: Query connections by reciprocal roles
- href: query-connections-reciprocal-roles-early-bound.md
- - name: Update a connection role
- href: update-connection-role.md
-- name: Currency
- items:
- - name: Retrieve currency exchange rate
- href: retrieve-currency-exchange-rate.md
-- name: Customization & metadata
- items:
- - name: Create a custom activity
- href: create-custom-activity.md
- - name: Create and retrieve table relationships
- href: create-retrieve-entity-relationships.md
- - name: Create and update an emailable table
- href: create-update-emailable-entity.md
- - name: Create and update table definitions
- href: create-update-entity-metadata.md
- - name: Dump column definitions to a file
- href: dump-attribute-metadata.md
- - name: Dump table definitions to a file
- href: dump-entity-metadata-file.md
- - name: Dump table privilege information to a file
- href: dump-entity-priviliges.md
- - name: Dump table relationships information to a file
- href: dump-entity-relationships.md
- - name: Dump choices information to a file
- href: dump-picklist-information.md
- - name: Dump choice information to a file
- href: dump-global-option-set.md
- - name: Export ribbon definitions
- href: export-ribbon-definitions.md
- - name: Query schema definitions and detect changes
- href: query-metadata-changes.md
- - name: Retrieve valid status transitions
- href: retrieve-valid-status-transitions.md
- - name: Work with columns
- href: work-with-attributes.md
- - name: Work with choice
- href: work-with-option-sets.md
-- name: Duplicate Detection
- items:
- - name: Detect multiple duplicate records
- href: detect-multiple-duplicate-records.md
- - name: Enable duplicate detection and retrieve duplicates
- href: enable-duplicate-detection-and-retrieve-duplicates.md
- - name: Use duplicate detection when creating and updating records
- href: use-duplicate-detection-when-creating-and-updating-records.md
-- name: Table records
- items:
- - name: Assign a record to a new owner
- href: assign-record-to-new-owner.md
- - name: Assign a record to a team
- href: assign-records-to-team.md
- - name: Create and update records with related records
- href: create-update-records-with-related-records.md
- - name: Early-bound table operations
- href: early-bound-entity-operations.md
- - name: Late-bound table operations
- href: late-bound-entity-operations.md
- - name: Initialize a record from an existing record
- href: initialize-record-from-existing-record.md
- - name: Insert or update a record using Upsert
- href: insert-update-record-upsert.md
- - name: Merge two records
- href: merge-two-records.md
- - name: Serialize and deserialize a table
- href: serialize-deserialize-entity.md
- - name: Share a record using an access team
- href: share-record-using-access-team.md
- - name: Share records using GrantAccess, ModifyAccess and RevokeAccess messages
- href: share-records-using-grantaccess-modifyaccess-revokeaccess-messages.md
- - name: Validate and set state of a table
- href: validate-record-state.md
- - name: File operations with Attachments and Notes
- 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: Files and images
- items:
- - name: File Operations
- href: file-operations.md
- - name: Image Operations
- href: set-retrieve-entity-images.md
- - name: Attachment and Annotation file operations
- href: attachment-annotation-files.md
-- name: Goal management
- items:
- - name: Rollup goal data for a custom period against the target revenue
- href: rollup-goal-data-custom-period-target-revenue.md
- - name: Rollup goal data for a fiscal period against the stretch target count
- href: rollup-goal-data-fiscal-period-stretch-target-count.md
- - name: Use rollup queries to track goals
- href: use-rollup-queries-track-goals.md
- - name: Override goal total count and close the goal
- href: override-goal-total-count-close-goal.md
-- name: Import data
- items:
- - name: Export and import a data map
- href: export-import-data-map.md
- - name: Import data using complex data map
- href: import-data-complex-data-map.md
-- name: Plug-ins
- items:
- - name: Create a basic plug-in
- href: basic-followup-plugin.md
- - name: Modify query in PreOperation stage
- href: modify-query-preoperation-stage.md
- - name: Web access from a plug-in
- href: web-access-plugin.md
- - name: IsSystemAdmin custom API
- href: issystemadmin-customapi-sample-plugin.md
- - name: CreateMultiple & UpdateMultiple plug-ins
- href: createmultiple-updatemultiple-plugin.md
- - name: ExportDataUsingFetchXmlToAnnotation custom API
- href: export-data-fetchxml-annotation-custom-api-sample.md
-- name: Query Data
- items:
- - name: Query data using LINQ
- href: query-using-linq.md
- - name: Use QueryExpression with a paging cookie
- href: use-queryexpression-with-a-paging-cookie.md
- - name: Retrieve multiple with the QueryExpression class
- href: retrieve-multiple-queryexpression-class.md
- - name: Retrieve multiple with the QueryByAttribute class
- href: retrieve-multiple-querybyattribute-class.md
- - name: Convert queries between Fetch and QueryExpression
- href: convert-queries-fetch-queryexpression.md
- - name: Retrieve records from an intersect table
- href: retrieve-records-intersect-table.md
- - name: Validate and execute a saved query
- href: validate-execute-saved-query.md
- - name: Use aggregation in FetchXML
- href: use-aggregation-fetchxml.md
- - name: Use FetchXML with a paging cookie
- href: use-fetchxml-paging-cookie.md
-- name: Queues
- items:
- - name: Add a record to a queue
- href: add-record-queue-early-bound.md
- - name: Add a security principal (user or team) to a queue
- href: add-security-principal-user-team-queue-early-bound.md
- - name: Create a queue
- href: create-queues.md
- - name: Clean up history for a queue
- href: clean-up-history-queue-early-bound.md
- - name: Delete a queue
- href: delete-queues.md
- - name: Release a queue item to the queue
- href: release-queue-item-queue-early-bound.md
- - name: Share a queue
- href: share-queue.md
- - name: Specify a queue item to work on
- href: specify-queue-item-work-early-bound.md
-- name: Reports
- items:
- - name: Download report definition
- href: download-report-definition.md
- - name: Get report history limit
- href: get-report-history-limit.md
- - name: Make report available or unavailable to organization
- href: make-report-available-to-organization.md
- - name: Publish a report
- href: publish-report.md
-- name: Rollup
- items:
- - name: Rollup records related to a specific record
- href: rollup-records-related-to-specificed-record.md
-- name: SharePoint
- items:
- - name: Retrieve absolute URL and site collection URL of a location record
- href: retrieve-absolute-url-and-site-collection-url-of-a-location-record.md
-- name: Special Operations
- items:
- - name: Bulk operations
- href: create-update-multiple.md
- - name: Execute multiple requests
- href: execute-multiple-requests.md
- - name: Execute multiple requests in transaction
- href: execute-multiple-transaction.md
-- name: Solutions
- items:
- - name: Work with solutions
- href: work-solutions.md
- - name: Staging and async import
- href: solution-stage-and-import.md
- - name: Detect solution dependencies
- href: detect-solution-dependencies.md
-- name: Time zones
- items:
- - name: Retrieve time zone information
- href: retrieve-time-zone-information.md
-- name: Views
- items:
- - name: Work with views
- href: work-with-views.md
-- name: Web resources
- items:
- - name: Import files as web resources
- href: import-files-as-web-resources.md
-- name: Workflow operations
- href: workflow-operations.md
\ No newline at end of file
+ - name: Activities
+ items:
+ - name: "Convert a fax to a task"
+ href: convert-fax-task.md
+ - name: "Create an email using a template"
+ href: create-email-template.md
+ - name: "Create, retrieve, update, and delete an email attachment"
+ href: create-retrieve-update-delete-email-attachment.md
+ - name: "Promote an email message"
+ href: promote-email-message.md
+ - name: "Retrieve email attachments for an email template"
+ href: retrieve-email-attachments-email-template.md
+ - name: "Send an email"
+ href: send-email.md
+ - name: "Send an email using a template"
+ href: send-email-template.md
+ - name: "Send bulk email and monitor results"
+ href: send-bulk-email-monitor-results.md
+ - name: File operations with Attachments and Notes
+ href: attachment-annotation-files.md
+ - name: "Work with activity party records"
+ href: work-activity-party-records.md
+ - name: Adminstration & security
+ items:
+ - name: Assign security role to team
+ href: associate-security-role-team.md
+ - name: Associate security role to a user
+ href: associate-security-role-user.md
+ - name: Determine whether a user has a role
+ href: determine-whether-user-has-role.md
+ - name: Disable or enable a user
+ href: disable-a-user.md
+ - name: Remove a role for a user
+ href: remove-role-for-user.md
+ - name: Retrieve license information
+ href: retrieve-license-information.md
+ - name: Retrieve roles for an organization
+ href: retrieve-roles-for-organization.md
+ - name: Appointments
+ items:
+ - name: "Book an appointment"
+ href: book-appointment.md
+ - name: "Convert an appointment to a recurring appointment"
+ href: convert-appointment-recurring-appointment.md
+ - name: "Create, retrieve, update, and delete a recurring appointment"
+ href: create-retrieve-update-delete-recurring-appointment.md
+ - name: "End a recurring appointment series"
+ href: end-recurring-appointment-series.md
+ - name: "Link custom columns between series and instances"
+ href: link-custom-attributes-between-series-instances.md
+ - name: "Query the working hours of a user"
+ href: query-working-hours-user.md
+ - name: "Query the working hours of multiple users"
+ href: query-working-hours-multiple-users.md
+ - name: "Reschedule and cancel a recurring appointment"
+ href: reschedule-cancel-recurring-appointment.md
+ - name: "Validate an appointment"
+ href: validate-appointment.md
+ - name: Auditing
+ items:
+ - name: Audit table data changes
+ href: audit-entity-data-changes.md
+ - name: Audit user access
+ href: audit-user-access.md
+ - name: Azure integration
+ items:
+ - name: Azure aware custom plug-in
+ href: azure-aware-custom-plugin.md
+ - name: Azure aware custom workflow activity
+ href: azure-aware-custom-workflow-activity.md
+ - name: One-way listener
+ href: one-way-listener.md
+ - name: Persistent queue listener
+ href: persistent-queue-listener.md
+ - name: REST listener
+ href: rest-listener.md
+ - name: Two-way listener
+ href: two-way-listener.md
+ - name: Bulk Delete
+ items:
+ - name: Bulk delete exported records
+ href: bulk-delete-exported-records.md
+ - name: Bulk delete records that match common criteria
+ href: bulk-delete-records-match-common-criteria.md
+ - name: Change tracking
+ items:
+ - name: Synchronize data with external systems using change tracking
+ href: synchronize-data-external-systems-using-change-tracking.md
+ - name: Charts & dashboards
+ items:
+ - name: Assign chart to another user
+ href: assign-chart-to-another-user.md
+ - name: Assign a user-owned dashboard to another user
+ href: assign-dashboard-to-another-user.md
+ - name: Create, retrieve, update and delete a dashboard
+ href: create-retrieve-update-delete-dashboards.md
+ - name: Create, retrieve, update and delete chart
+ href: create-retrieve-update-delete-charts.md
+ - name: Retrieve all charts attached to a table
+ href: retrieve-charts-attached-to-entity.md
+ - name: Connections
+ items:
+ - name: Create a connection
+ href: create-connection-early-bound.md
+ - name: Create a connection role
+ href: create-connection-role-early-bound.md
+ - name: Create a reciprocal connection role
+ href: create-reciprocal-connection-role-early-bound.md
+ - name: Query connections by a record
+ href: query-connections-record-early-bound.md
+ - name: Query connection roles by entity type code
+ href: query-connection-roles-entity-type-code-early-bound.md
+ - name: Query connections by reciprocal roles
+ href: query-connections-reciprocal-roles-early-bound.md
+ - name: Update a connection role
+ href: update-connection-role.md
+ - name: Currency
+ items:
+ - name: Retrieve currency exchange rate
+ href: retrieve-currency-exchange-rate.md
+ - name: Customization & metadata
+ items:
+ - name: Create a custom activity
+ href: create-custom-activity.md
+ - name: Create and retrieve table relationships
+ href: create-retrieve-entity-relationships.md
+ - name: Create and update an emailable table
+ href: create-update-emailable-entity.md
+ - name: Create and update table definitions
+ href: create-update-entity-metadata.md
+ - name: Dump column definitions to a file
+ href: dump-attribute-metadata.md
+ - name: Dump table definitions to a file
+ href: dump-entity-metadata-file.md
+ - name: Dump table privilege information to a file
+ href: dump-entity-priviliges.md
+ - name: Dump table relationships information to a file
+ href: dump-entity-relationships.md
+ - name: Dump choices information to a file
+ href: dump-picklist-information.md
+ - name: Dump choice information to a file
+ href: dump-global-option-set.md
+ - name: Export ribbon definitions
+ href: export-ribbon-definitions.md
+ - name: Query schema definitions and detect changes
+ href: query-metadata-changes.md
+ - name: Retrieve valid status transitions
+ href: retrieve-valid-status-transitions.md
+ - name: Work with columns
+ href: work-with-attributes.md
+ - name: Work with choice
+ href: work-with-option-sets.md
+ - name: Duplicate Detection
+ items:
+ - name: Detect multiple duplicate records
+ href: detect-multiple-duplicate-records.md
+ - name: Enable duplicate detection and retrieve duplicates
+ href: enable-duplicate-detection-and-retrieve-duplicates.md
+ - name: Use duplicate detection when creating and updating records
+ href: use-duplicate-detection-when-creating-and-updating-records.md
+ - name: Table records
+ items:
+ - name: Assign a record to a team
+ href: assign-records-to-team.md
+ - name: Create and update records with related records
+ href: create-update-records-with-related-records.md
+ - name: Early-bound table operations
+ href: early-bound-entity-operations.md
+ - name: Late-bound table operations
+ href: late-bound-entity-operations.md
+ - name: Initialize a record from an existing record
+ href: initialize-record-from-existing-record.md
+ - name: Insert or update a record using Upsert
+ href: insert-update-record-upsert.md
+ - name: Merge two records
+ href: merge-two-records.md
+ - name: Serialize and deserialize a table
+ href: serialize-deserialize-entity.md
+ - name: Share a record using an access team
+ href: share-record-using-access-team.md
+ - name: Share records using GrantAccess, ModifyAccess and RevokeAccess messages
+ href: share-records-using-grantaccess-modifyaccess-revokeaccess-messages.md
+ - name: Validate and set state of a table
+ href: validate-record-state.md
+ - name: File operations with Attachments and Notes
+ href: attachment-annotation-files.md
+ - name: Use optimistic concurrency with update and delete operations
+ href: use-optimistic-concurrency-update-delete-operations.md
+ - name: Column-Level Security
+ href: column-level-security.md
+ - name: Files and images
+ items:
+ - name: File Operations
+ href: file-operations.md
+ - name: Image Operations
+ href: set-retrieve-entity-images.md
+ - name: Attachment and Annotation file operations
+ href: attachment-annotation-files.md
+ - name: Goal management
+ items:
+ - name: Rollup goal data for a custom period against the target revenue
+ href: rollup-goal-data-custom-period-target-revenue.md
+ - name: Rollup goal data for a fiscal period against the stretch target count
+ href: rollup-goal-data-fiscal-period-stretch-target-count.md
+ - name: Use rollup queries to track goals
+ href: use-rollup-queries-track-goals.md
+ - name: Override goal total count and close the goal
+ href: override-goal-total-count-close-goal.md
+ - name: Import data
+ items:
+ - name: Export and import a data map
+ href: export-import-data-map.md
+ - name: Import data using complex data map
+ href: import-data-complex-data-map.md
+ - name: Plug-ins
+ items:
+ - name: Create a basic plug-in
+ href: basic-followup-plugin.md
+ - name: Modify query in PreOperation stage
+ href: modify-query-preoperation-stage.md
+ - name: Web access from a plug-in
+ href: web-access-plugin.md
+ - name: IsSystemAdmin custom API
+ href: issystemadmin-customapi-sample-plugin.md
+ - name: CreateMultiple & UpdateMultiple plug-ins
+ href: createmultiple-updatemultiple-plugin.md
+ - name: ExportDataUsingFetchXmlToAnnotation custom API
+ href: export-data-fetchxml-annotation-custom-api-sample.md
+ - name: Query Data
+ items:
+ - name: Query data using LINQ
+ href: query-using-linq.md
+ - name: Use QueryExpression with a paging cookie
+ href: use-queryexpression-with-a-paging-cookie.md
+ - name: Retrieve multiple with the QueryExpression class
+ href: retrieve-multiple-queryexpression-class.md
+ - name: Retrieve multiple with the QueryByAttribute class
+ href: retrieve-multiple-querybyattribute-class.md
+ - name: Convert queries between Fetch and QueryExpression
+ href: convert-queries-fetch-queryexpression.md
+ - name: Retrieve records from an intersect table
+ href: retrieve-records-intersect-table.md
+ - name: Validate and execute a saved query
+ href: validate-execute-saved-query.md
+ - name: Use aggregation in FetchXML
+ href: use-aggregation-fetchxml.md
+ - name: Use FetchXML with a paging cookie
+ href: use-fetchxml-paging-cookie.md
+ - name: Queues
+ items:
+ - name: Add a record to a queue
+ href: add-record-queue-early-bound.md
+ - name: Add a security principal (user or team) to a queue
+ href: add-security-principal-user-team-queue-early-bound.md
+ - name: Create a queue
+ href: create-queues.md
+ - name: Clean up history for a queue
+ href: clean-up-history-queue-early-bound.md
+ - name: Delete a queue
+ href: delete-queues.md
+ - name: Release a queue item to the queue
+ href: release-queue-item-queue-early-bound.md
+ - name: Share a queue
+ href: share-queue.md
+ - name: Specify a queue item to work on
+ href: specify-queue-item-work-early-bound.md
+ - name: Reports
+ items:
+ - name: Download report definition
+ href: download-report-definition.md
+ - name: Get report history limit
+ href: get-report-history-limit.md
+ - name: Make report available or unavailable to organization
+ href: make-report-available-to-organization.md
+ - name: Publish a report
+ href: publish-report.md
+ - name: Rollup
+ items:
+ - name: Rollup records related to a specific record
+ href: rollup-records-related-to-specificed-record.md
+ - name: SharePoint
+ items:
+ - name: Retrieve absolute URL and site collection URL of a location record
+ href: retrieve-absolute-url-and-site-collection-url-of-a-location-record.md
+ - name: Special Operations
+ items:
+ - name: Bulk operations
+ href: create-update-multiple.md
+ - name: Execute multiple requests
+ href: execute-multiple-requests.md
+ - name: Execute multiple requests in transaction
+ href: execute-multiple-transaction.md
+ - name: Solutions
+ items:
+ - name: Work with solutions
+ href: work-solutions.md
+ - name: Staging and async import
+ href: solution-stage-and-import.md
+ - name: Detect solution dependencies
+ href: detect-solution-dependencies.md
+ - name: Time zones
+ items:
+ - name: Retrieve time zone information
+ href: retrieve-time-zone-information.md
+ - name: Views
+ items:
+ - name: Work with views
+ href: work-with-views.md
+ - name: Web resources
+ items:
+ - name: Import files as web resources
+ href: import-files-as-web-resources.md
+ - name: Workflow operations
+ href: workflow-operations.md
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 084c10898a..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,10 +2,10 @@
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: "article"
+ms.topic: how-to
search.audienceType:
- developer
contributors:
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 6c278ddd1f..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,10 +2,10 @@
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: "article"
+ms.topic: how-to
search.audienceType:
- developer
contributors:
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 4dcae85862..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,10 +3,10 @@ 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: article
+ms.topic: how-to
search.audienceType:
- developer
contributors:
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 5408971f1e..f6daf292df 100644
--- a/powerapps-docs/developer/data-platform/query-antipatterns.md
+++ b/powerapps-docs/developer/data-platform/query-antipatterns.md
@@ -2,9 +2,9 @@
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: article
-author: pnghub
-ms.author: gned
+ms.topic: how-to
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: jdaly
ms.subservice: dataverse-developer
search.audienceType:
@@ -74,7 +74,7 @@ Dataverse [heavily throttles](query-throttling.md) leading wild card queries tha
> Name: `DataEngineLeadingWildcardQueryThrottling`
> Code: `0x80048644`
> Number: `-2147187132`
-> 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.`
+> 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.` or `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.`
If you find yourself using leading wild card queries, look into these options:
@@ -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:
@@ -110,7 +110,7 @@ Dataverse [heavily throttles](query-throttling.md) queries that have filters on
> Name: `DataEngineComputedColumnQueryThrottling`
> Code: `0x80048744`
> Number: `-2147186876`
-> 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.`
+> 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.` or `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.`
## Avoid ordering by choice columns
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 afa54a98ce..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
@@ -1,10 +1,10 @@
---
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: article
+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 7dc5d097c7..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
@@ -29,10 +29,10 @@ Throttling can manifest in three ways:
|Error code Hex code|Name|Message|
|---|---|---|
-|`-2147187388` `0x80048544`|`DataEngineQueryThrottling`|`This query cannot be executed because it conflicts with query throttling.`|
-|`-2147187132` `0x80048644`|`DataEngineLeadingWildcardQueryThrottling`|`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.`|
-|`-2147186876` `0x80048744`|`DataEngineComputedColumnQueryThrottling`|`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.` |
-|`-2147186875` `0x80048745`|`DataEnginePerformanceValidationIssuesQueryThrottling`|`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.` |
+|`-2147187388` `0x80048544`|`DataEngineQueryThrottling`|`This query cannot be executed because it conflicts with query throttling.` or `This query is throttled as it negatively impacts the database health.`|
+|`-2147187132` `0x80048644`|`DataEngineLeadingWildcardQueryThrottling`|`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.` or `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.`|
+|`-2147186876` `0x80048744`|`DataEngineComputedColumnQueryThrottling`|`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.` or `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.`|
+|`-2147186875` `0x80048745`|`DataEnginePerformanceValidationIssuesQueryThrottling`|`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.` or `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.`|
## Dataverse error for query throttling caused by anti-patterns
@@ -43,7 +43,9 @@ When a query fails due to throttling and the query is using one of the anti-patt
> Name: `DataEnginePerformanceValidationIssuesQueryThrottling`
> Code: `0x80048745`
> Number: `-2147186875`
-> 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`
+> 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`
+ or
+`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`
[!INCLUDE [cc-query-antipattern-enum-table](includes/cc-query-antipattern-enum-table.md)]
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/recurring-appointment-partial-expansion-model.md b/powerapps-docs/developer/data-platform/recurring-appointment-partial-expansion-model.md
index 078b2b2f0a..8426ba024f 100644
--- a/powerapps-docs/developer/data-platform/recurring-appointment-partial-expansion-model.md
+++ b/powerapps-docs/developer/data-platform/recurring-appointment-partial-expansion-model.md
@@ -5,7 +5,7 @@ ms.custom: ""
ms.date: 03/25/2021
ms.reviewer: "pehecke"
-ms.topic: "article"
+ms.topic: how-to
author: "mayadumesh" # GitHub ID
ms.subservice: dataverse-developer
ms.author: "jdaly" # MSFT alias of Microsoft employees only
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`