diff --git a/.acrolinx-config.edn b/.acrolinx-config.edn
index 6f4aef56fb..6c746bf002 100644
--- a/.acrolinx-config.edn
+++ b/.acrolinx-config.edn
@@ -28,7 +28,7 @@
**A minimum total score of 80 is required. The total score is an average of the subscores.**
Select **Total score** to review the Acrolinx scorecard for your article. Try to increase your individual scores, ex. Correctness. Your article will be clearer and more consistent with Microsoft standards.
-| Article | **Total score** **Required: 80** | Word and phrases (Brand, terms) Preferred: 100 | Correctness (Spelling, grammar) Preferred: 100 | Clarity (Readability) Preferred: 80 |
+| Article | Total score (Required: 80) | Terminology | Spelling and grammar | Clarity (Readability) |
|---------|:------------------------------------:|:--------------------------------------------------------:|:--------------------------------------------------------:|:---------------------------------------------:|
"
diff --git a/.gitignore b/.gitignore
index c279f87b56..4862a2e5e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,5 +19,3 @@ powerapps-docs/.vs/ProjectSettings.json
powerapps-docs/.vs/slnx.sqlite
powerapps-docs/.vs/VSWorkspaceState.json
/.vs/slnx.sqlite-journal
-powerapps-docs/teams/media/how-to-architecture/Thumbs.db
-powerapps-docs/teams/media/milestones-broad-distribution/Thumbs.db
diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
index 8f6d70c5e4..38600d7ba7 100644
--- a/.openpublishing.redirection.json
+++ b/.openpublishing.redirection.json
@@ -1,51 +1,101 @@
{
"redirections": [
{
- "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md",
- "redirect_url": "query/overview",
+ "source_path": "powerapps-docs/developer/data-platform/org-service/samples/enable-field-security-entity.md",
+ "redirect_url": "column-level-security",
"redirect_document_id": "false"
},
{
- "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#select-columns",
- "redirect_url": "query/select-columns",
+ "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/webapi/query-data-web-api.md#join-tables",
- "redirect_url": "query/join-tables",
+ "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/webapi/query-data-web-api.md#order-rows",
- "redirect_url": "query/order-rows",
+ "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",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md",
+ "redirect_url": "query/overview",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#select-columns",
+ "redirect_url": "query/select-columns",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#join-tables",
+ "redirect_url": "query/join-tables",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#order-rows",
+ "redirect_url": "query/order-rows",
+ "redirect_document_id": "false"
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#filter-rows",
"redirect_url": "query/filter-rows",
"redirect_document_id": "false"
- },
- {
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#page-results",
"redirect_url": "query/page-results",
"redirect_document_id": "false"
- },
- {
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#aggregate-data",
"redirect_url": "query/aggregate-data",
"redirect_document_id": "false"
- },
- {
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/webapi/query-data-web-api.md#count-number-of-rows",
"redirect_url": "query/count-rows",
"redirect_document_id": "false"
- },
- {
+ },
+ {
"source_path": "powerapps-docs/developer/data-platform/bypass-custom-business-logic.md#bypass-power-automate-flows",
"redirect_url": "bypass-power-automate-flows",
"redirect_document_id": "false"
},
- {
+ {
"source_path": "powerapps-docs/developer/data-platform/bypass-custom-business-logic-preview.md",
"redirect_url": "bypass-custom-business-logic",
"redirect_document_id": "false"
@@ -4102,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
},
{
@@ -5022,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
},
{
@@ -8932,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
},
{
@@ -9145,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",
@@ -9194,101 +9259,381 @@
"source_path": "powerapps-docs/maker/model-driven-apps/overview-model-driven-samples.md",
"redirect_url": "/power-apps/maker/model-driven-apps/",
"redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/data-platform/relationships-overview.md",
- "redirect_url": "/power-apps/maker/data-platform/create-edit-entity-relationships",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/data-platform/create-edit-global-option-sets-solution-explorer.md",
- "redirect_url": "/power-apps/maker/data-platform/custom-picklists",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/model-driven-apps/create-a-model-driven-app.md",
- "redirect_url": "/power-apps/maker/model-driven-apps/build-first-model-driven-app",
- "redirect_document_id": "false"
- },
+ },
{
- "source_path": "powerapps-docs/maker/portals/configure/azure-ad-b2c.md",
- "redirect_url": "/power-pages/configure/azure-ad-b2c",
- "redirect_document_id": false
- },
- {
- "source_path": "powerapps-docs/maker/portals/configure/create-custom-portal-management-app.md",
- "redirect_url": "/power-pages/configure/portal-management-app",
- "redirect_document_id": false
- },
- {
- "source_path": "powerapps-docs/maker/portals/configure/list-odata-feeds.md",
- "redirect_url": "/power-pages/configure/web-api-overview",
- "redirect_document_id": false
- },
- {
- "source_path": "powerapps-docs/maker/portals/configure/configure-azure-ad-b2c-provider-manual.md",
- "redirect_url": "/power-pages/security/authentication/azure-ad-b2c-provider",
- "redirect_document_id": false
- },
+ "source_path": "powerapps-docs/maker/data-platform/relationships-overview.md",
+ "redirect_url": "/power-apps/maker/data-platform/create-edit-entity-relationships",
+ "redirect_document_id": "false"
+ },
{
- "source_path": "powerapps-docs/maker/canvas-apps/connections/connection-azure-sqldatabase.md",
- "redirect_url": "/power-apps/maker/canvas-apps/connections/sql-connection-overview",
- "redirect_document_id": "false"
- },
+ "source_path": "powerapps-docs/maker/data-platform/create-edit-global-option-sets-solution-explorer.md",
+ "redirect_url": "/power-apps/maker/data-platform/custom-picklists",
+ "redirect_document_id": "false"
+ },
{
- "source_path": "powerapps-docs/learning-catalog/administrator.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/app-maker.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/bdm.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/developer.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/functional-consultant.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/learning-catalog.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/learning-catalog/solution-architect.md",
- "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/model-driven-apps/power-bi-content-management-power-apps-solutions.md",
- "redirect_url": "/power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/model-driven-apps/create-edit-powerbi-report-dataset-components.md",
- "redirect_url": "power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/maker/model-driven-apps/customize-manage-powerbi-components.md",
- "redirect_url": "/power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
- "redirect_document_id": "false"
- },
- {
- "source_path": "powerapps-docs/user/find-admin.md",
- "redirect_url": "/power-apps/user/navigation",
- "redirect_document_id": "false"
- }
+ "source_path": "powerapps-docs/maker/model-driven-apps/create-a-model-driven-app.md",
+ "redirect_url": "/power-apps/maker/model-driven-apps/build-first-model-driven-app",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/maker/portals/configure/azure-ad-b2c.md",
+ "redirect_url": "/power-pages/configure/azure-ad-b2c",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/portals/configure/create-custom-portal-management-app.md",
+ "redirect_url": "/power-pages/configure/portal-management-app",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/portals/configure/list-odata-feeds.md",
+ "redirect_url": "/power-pages/configure/web-api-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/portals/configure/configure-azure-ad-b2c-provider-manual.md",
+ "redirect_url": "/power-pages/security/authentication/azure-ad-b2c-provider",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/connections/connection-azure-sqldatabase.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/connections/sql-connection-overview",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/administrator.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/app-maker.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/bdm.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/developer.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/functional-consultant.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/learning-catalog.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/learning-catalog/solution-architect.md",
+ "redirect_url": "/training/browse/?expanded=power-platform&products=power-apps",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/maker/model-driven-apps/power-bi-content-management-power-apps-solutions.md",
+ "redirect_url": "/power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/maker/model-driven-apps/create-edit-powerbi-report-dataset-components.md",
+ "redirect_url": "power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/maker/model-driven-apps/customize-manage-powerbi-components.md",
+ "redirect_url": "/power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/user/find-admin.md",
+ "redirect_url": "/power-apps/user/navigation",
+ "redirect_document_id": "false"
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/expense-report-install.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-test-drive",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/help-desk-install.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-test-drive",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/open-and-run-a-sample-app.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-test-drive",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/customize-list-form.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-alerts-flow.md",
+ "redirect_url": "/power-bi/collaborate-share/service-flow-integration",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-approval-flow.md",
+ "redirect_url": "/power-automate/create-approval-response-options",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-build-app.md",
+ "redirect_url": "/powerapps-docs/maker/index",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-build-report.md",
+ "redirect_url": "/power-bi/create-reports/service-quick-create-sharepoint-list",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-embed-report.md",
+ "redirect_url": "/power-bi/collaborate-share/service-embed-report-spo",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-generate-app.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-intro.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-publish-report.md",
+ "redirect_url": "/power-bi/paginated-reports/paginated-reports-save-to-power-bi-service",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-setup.md",
+ "redirect_url": "/powerapps-docs/maker/canvas-apps/app-from-sharepoint",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint-scenario-summary.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-choice-to-lookup.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-customize-view-based-on-column-status.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-filter-search-list.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-intro.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-lookup-list-permissions.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sharepoint/scenarios-sharepoint-form-from-scratch.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/sharepoint-list-integration-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/webinars.md",
+ "redirect_url": "/power-apps/",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/model-driven-apps/powerbi-control.md",
+ "redirect_url": "/power-apps/maker/model-driven-apps/create-edit-powerbi-embedded-page",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/common/maker-matching.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/ai-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/data-platform-create-app.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-create-from-blank",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/get-started-create-from-data.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-create-from-blank",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/connections/connection-excel.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/get-started-create-from-blank",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/how-to-excel-tips.md",
+ "redirect_url": "https://support.microsoft.com/en-us/office/create-and-format-tables-e81aa349-b006-4f8a-9806-5af9df0ac664",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/sample-crisis-communication-app.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/emergency-response/overview.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/emergency-response/use.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/emergency-response/configure-data-reporting.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/emergency-response/deploy-configure.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/emergency-response-data-transfer.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/deploy.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/upgrade.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/overview.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/configure.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/portals-admin-reporting.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/regional-emergency-response/portals-user.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/crisis-financial-impact-tracker/deploy-solution.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/crisis-financial-impact-tracker/overview.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/crisis-financial-impact-tracker/configure-dashboards.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/crisis-financial-impact-tracker/use-mobile-app.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/sample-apps/crisis-financial-impact-tracker/configure-data.md",
+ "redirect_url": "https://learn.microsoft.com",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/transform-infopath.md",
+ "redirect_url": "/power-apps/maker/canvas-apps",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/chatbots.md",
+ "redirect_url": "/microsoft-copilot-studio/authoring-first-bot",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/common/virtual-agent.md",
+ "redirect_url": "/power-apps/maker/canvas-apps/ai-overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/canvas-apps/power-apps-ideas-train-examples.md",
+ "redirect_url": "../../../power-apps/maker/canvas-apps/power-apps-ideas-transform",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "powerapps-docs/maker/common/build-ai-plugin-for-copilot.md",
+ "redirect_url": "../../../microsoft-copilot-studio/microsoft-copilot-extend-action-connector",
+ "redirect_document_id": false
+ },
+ {
+ "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/card-requirements.md b/powerapps-docs/cards/card-requirements.md
index 95e4ecd4ab..0725a840b4 100644
--- a/powerapps-docs/cards/card-requirements.md
+++ b/powerapps-docs/cards/card-requirements.md
@@ -13,6 +13,8 @@ ms.collection:
# Requirements for cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
This article contains information about requirements for cards to show up and work as expected.
## Environment requirements
diff --git a/powerapps-docs/cards/controls/button-set.md b/powerapps-docs/cards/controls/button-set.md
index 10e680407b..eaa0b7a4e6 100644
--- a/powerapps-docs/cards/controls/button-set.md
+++ b/powerapps-docs/cards/controls/button-set.md
@@ -16,6 +16,8 @@ contributors:
# Button set control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A container for a set of [button](button.md) elements.
The button set control can be used to add buttons in places other than the bottom of the card as well as to group buttons together.
diff --git a/powerapps-docs/cards/controls/button.md b/powerapps-docs/cards/controls/button.md
index eb344db505..9a417822b8 100644
--- a/powerapps-docs/cards/controls/button.md
+++ b/powerapps-docs/cards/controls/button.md
@@ -16,6 +16,8 @@ contributors:
# Button control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A button control that executes Power Fx, opens a URL, shows a screen, or toggles visibility on select. Learn more about [how to use the button control](../make-a-card/ui-elements/use-buttons.md).
Buttons are added under the **actions** section of the tree view at the bottom of the card by default. This button can be placed elsewhere in the card and grouped with other buttons using a [button set control](button-set.md).
diff --git a/powerapps-docs/cards/controls/check-box.md b/powerapps-docs/cards/controls/check-box.md
index 9a84026645..0e243e860a 100644
--- a/powerapps-docs/cards/controls/check-box.md
+++ b/powerapps-docs/cards/controls/check-box.md
@@ -16,6 +16,8 @@ contributors:
# Check box control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A checkbox that lets users choose between two options by selecting or clearing.
## Properties
diff --git a/powerapps-docs/cards/controls/column-set.md b/powerapps-docs/cards/controls/column-set.md
index 44bf027b62..4407650e23 100644
--- a/powerapps-docs/cards/controls/column-set.md
+++ b/powerapps-docs/cards/controls/column-set.md
@@ -16,6 +16,8 @@ contributors:
# Column set control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A collection of columns, each column is a container. These columns allow controls to sit side-by-side.
Column set is useful for showing a row of data. You can add a column for the different UI elements you want within the column set, then drag and drop those elements into the column within the card canvas. You can also [data bind](../make-a-card/ui-elements/data-binding.md) a column set to a collection or data source to repeat the column set for each row, resulting in a list of data.
diff --git a/powerapps-docs/cards/controls/column.md b/powerapps-docs/cards/controls/column.md
index 288cf23f11..f384fcbfde 100644
--- a/powerapps-docs/cards/controls/column.md
+++ b/powerapps-docs/cards/controls/column.md
@@ -16,6 +16,8 @@ contributors:
# Column control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
An individual column which acts as a container for other elements. This column can be arranged side-by-side with other columns using the [column set control](column-set.md).
Add to a column set to create dividers on the page. Empty columns aren't visible. You'll need to put another control (like a text input control) into a column to make it visible. You can drag and drop controls into a column within the card canvas.
diff --git a/powerapps-docs/cards/controls/container.md b/powerapps-docs/cards/controls/container.md
index c694ff74de..aa882aff29 100644
--- a/powerapps-docs/cards/controls/container.md
+++ b/powerapps-docs/cards/controls/container.md
@@ -16,6 +16,8 @@ contributors:
# Container control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A standard container, useable with almost any control.
A container takes on the properties of the first control placed inside it. Only controls of the same type can be added to a container.
diff --git a/powerapps-docs/cards/controls/control-reference.md b/powerapps-docs/cards/controls/control-reference.md
index 15e6f7f131..f8aae27598 100644
--- a/powerapps-docs/cards/controls/control-reference.md
+++ b/powerapps-docs/cards/controls/control-reference.md
@@ -16,6 +16,8 @@ contributors:
# Controls and properties in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Configure the appearance and behavior of a control by setting one of its properties. Each type of control has a different set of properties. Some properties, such as **Height** and **Width**, are common to almost every type of control, but other properties, such as **OnSelect**, are specific to one type of control.
## Controls
diff --git a/powerapps-docs/cards/controls/date-picker.md b/powerapps-docs/cards/controls/date-picker.md
index dca9c27e36..c98cde577e 100644
--- a/powerapps-docs/cards/controls/date-picker.md
+++ b/powerapps-docs/cards/controls/date-picker.md
@@ -16,6 +16,8 @@ contributors:
# Date picker control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Allows the user to enter a date in mm/dd/yyyy format or select a date on the calendar. The value is stored as a date.
## Properties
diff --git a/powerapps-docs/cards/controls/drop-down.md b/powerapps-docs/cards/controls/drop-down.md
index ce086ab547..65030dd833 100644
--- a/powerapps-docs/cards/controls/drop-down.md
+++ b/powerapps-docs/cards/controls/drop-down.md
@@ -16,6 +16,8 @@ contributors:
# Drop down control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A menu that lets users choose one item from an expandable list of items. The default is two choices, but more can be added.
## Properties
diff --git a/powerapps-docs/cards/controls/fact-set.md b/powerapps-docs/cards/controls/fact-set.md
index 7febfb56fe..f71fff28d2 100644
--- a/powerapps-docs/cards/controls/fact-set.md
+++ b/powerapps-docs/cards/controls/fact-set.md
@@ -16,6 +16,8 @@ contributors:
# Fact set control for cards in Power Apps
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Displays a series of facts (i.e. name/value pairs) in a tabular form.
## Properties
diff --git a/powerapps-docs/cards/controls/image-set.md b/powerapps-docs/cards/controls/image-set.md
index 576860b1d7..7bec43585e 100644
--- a/powerapps-docs/cards/controls/image-set.md
+++ b/powerapps-docs/cards/controls/image-set.md
@@ -16,6 +16,8 @@ contributors:
# Image set control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A container of images that acts as a photo gallery.
## Properties
diff --git a/powerapps-docs/cards/controls/image.md b/powerapps-docs/cards/controls/image.md
index 924a8ed432..47dd81eb7a 100644
--- a/powerapps-docs/cards/controls/image.md
+++ b/powerapps-docs/cards/controls/image.md
@@ -16,6 +16,8 @@ contributors:
# Image control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
An image with properties to control what the image looks like. Supports publicly accessible and CORS-compliant URLs as well as base64 encoded images.
Use the [media control](media.md) for video and audio files.
diff --git a/powerapps-docs/cards/controls/media.md b/powerapps-docs/cards/controls/media.md
index 8df169e102..95efcfdb5c 100644
--- a/powerapps-docs/cards/controls/media.md
+++ b/powerapps-docs/cards/controls/media.md
@@ -16,6 +16,8 @@ contributors:
# Media control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Displays a media player for audio or video content. A video or audio file is specified by its Url and MimeType in the Sources tab. The media control supports publicly accessible and CORS-compliant URLs. On Web and Desktop versions of Teams, share links to any OneDrive or SharePoint backed video or audio link are also supported.
Use the [image control](image.md) for pictures.
diff --git a/powerapps-docs/cards/controls/number-input.md b/powerapps-docs/cards/controls/number-input.md
index 73d046c432..3c8cdb164b 100644
--- a/powerapps-docs/cards/controls/number-input.md
+++ b/powerapps-docs/cards/controls/number-input.md
@@ -16,6 +16,8 @@ contributors:
# Number input control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Allows a user to enter a number.
## Properties
diff --git a/powerapps-docs/cards/controls/table.md b/powerapps-docs/cards/controls/table.md
index bd9d705146..e9b2e020be 100644
--- a/powerapps-docs/cards/controls/table.md
+++ b/powerapps-docs/cards/controls/table.md
@@ -15,6 +15,8 @@ contributors:
# Table control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Use the Table control to present tabular data or any structured information that is best laid out in rows and columns. Tables are made up of three separate card elements:
- Tables
- Table Rows
diff --git a/powerapps-docs/cards/controls/text-input.md b/powerapps-docs/cards/controls/text-input.md
index b7c0ab5194..f32df585e2 100644
--- a/powerapps-docs/cards/controls/text-input.md
+++ b/powerapps-docs/cards/controls/text-input.md
@@ -16,6 +16,8 @@ contributors:
# Text input control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A field for users to type text.
## Properties
diff --git a/powerapps-docs/cards/controls/text-label.md b/powerapps-docs/cards/controls/text-label.md
index 3fe4eb29b2..a36558b8c1 100644
--- a/powerapps-docs/cards/controls/text-label.md
+++ b/powerapps-docs/cards/controls/text-label.md
@@ -16,6 +16,8 @@ contributors:
# Text label control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Displays text, allowing control over font sizes, weight, and color.
## Properties
diff --git a/powerapps-docs/cards/controls/time-picker.md b/powerapps-docs/cards/controls/time-picker.md
index 7d9c2ed495..4807b50b97 100644
--- a/powerapps-docs/cards/controls/time-picker.md
+++ b/powerapps-docs/cards/controls/time-picker.md
@@ -16,6 +16,8 @@ contributors:
# Time picker control in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
A field for users to select a time.
## Properties
diff --git a/powerapps-docs/cards/make-a-card/connectors/connector-intro.md b/powerapps-docs/cards/make-a-card/connectors/connector-intro.md
index eeaa61859e..6b9cab97c7 100644
--- a/powerapps-docs/cards/make-a-card/connectors/connector-intro.md
+++ b/powerapps-docs/cards/make-a-card/connectors/connector-intro.md
@@ -12,6 +12,8 @@ ms.collection:
# Add connectors to a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Connectors allow your card to connect to other apps, data sources, and devices in the cloud. Insert, modify, and remove them in the [card designer](../designer-overview.md). [Learn more about connectors in Power Platform](/connectors/connectors).
## Prerequisites
diff --git a/powerapps-docs/cards/make-a-card/designer-overview.md b/powerapps-docs/cards/make-a-card/designer-overview.md
index e0b6e9ce1d..172d835bd1 100644
--- a/powerapps-docs/cards/make-a-card/designer-overview.md
+++ b/powerapps-docs/cards/make-a-card/designer-overview.md
@@ -13,6 +13,8 @@ ms.collection:
# Card designer overview
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
The Power Apps card designer is the drag-and-drop interface in which you build cards.
1. Sign in to [Power Apps](https://make.powerapps.com) and select your environment.
diff --git a/powerapps-docs/cards/make-a-card/power-fx/intro-to-pfx.md b/powerapps-docs/cards/make-a-card/power-fx/intro-to-pfx.md
index 772e6213be..84d3877bfa 100644
--- a/powerapps-docs/cards/make-a-card/power-fx/intro-to-pfx.md
+++ b/powerapps-docs/cards/make-a-card/power-fx/intro-to-pfx.md
@@ -13,6 +13,8 @@ ms.collection:
# Power Fx and cards overview
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
[Power Fx](/power-platform/power-fx/overview) is a low-code programming language available across the Power Platform, including in Power Apps cards. Cards can calculate values, perform tasks, and respond to user input using formulas expressed in Power Fx. Power Fx expressions can also update variables and data sources. Expressions can be combined to create complex formulas that can handle advanced business logic.
## Power Fx documentation
diff --git a/powerapps-docs/cards/make-a-card/screens/use-screens.md b/powerapps-docs/cards/make-a-card/screens/use-screens.md
index 3a336bc281..b99a7fdc3d 100644
--- a/powerapps-docs/cards/make-a-card/screens/use-screens.md
+++ b/powerapps-docs/cards/make-a-card/screens/use-screens.md
@@ -12,6 +12,8 @@ ms.collection:
# Add screens to a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Cards can have multiple screens, each presenting a different interface for a specific scenario or purpose. For example, a polling card might have a screen to collect user responses and a screen to show the current aggregated poll results. Use buttons to let users switch between screens or use Power Fx formulas for more complex scenarios. Insert, modify, and remove them in the [card designer](../designer-overview.md).
## Prerequisites
diff --git a/powerapps-docs/cards/make-a-card/testing/debugging-cards.md b/powerapps-docs/cards/make-a-card/testing/debugging-cards.md
index 4fa333953c..73373bc64d 100644
--- a/powerapps-docs/cards/make-a-card/testing/debugging-cards.md
+++ b/powerapps-docs/cards/make-a-card/testing/debugging-cards.md
@@ -12,6 +12,8 @@ ms.collection:
# Test and debug cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Use the **Play** page to preview your cards before sending them out to users. The **Play** page has tools to test your card and help you debug any issues. Get to the **Play** page in the [card designer](../designer-overview.md).
Card instances that you preview in the **Play** page expire 48 hours after you create the preview. After 48 hours, select **Play** in the card designer to create a fresh instance of the card.
diff --git a/powerapps-docs/cards/make-a-card/ui-elements/controls.md b/powerapps-docs/cards/make-a-card/ui-elements/controls.md
index ba46fd39cf..f7803fd55c 100644
--- a/powerapps-docs/cards/make-a-card/ui-elements/controls.md
+++ b/powerapps-docs/cards/make-a-card/ui-elements/controls.md
@@ -12,6 +12,8 @@ ms.collection:
# Add controls to a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Controls are the building blocks of your card's interface and functionality. They add text, images, and other elements to create a rich cards experience. Insert, modify, and remove them in the [card designer](../designer-overview.md).
There are three categories of controls that you can add to your card:
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 a7a84f93c4..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:
@@ -13,6 +13,8 @@ ms.collection:
# Work with repeating controls in cards
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Data binding is used to repeat controls for a table variable using the **Repeat for every** advanced property.
For example, if you have a table named `fruits` bound to the array `["apples", "oranges", "pears"]`, you can add a Text label control and set its **Repeat for every** property to `fruits` and its **Text** property to `ThisItem.Value`. When it's opened, the card shows three text labels with each of the strings in the table.
diff --git a/powerapps-docs/cards/make-a-card/ui-elements/use-buttons.md b/powerapps-docs/cards/make-a-card/ui-elements/use-buttons.md
index d2f427c6b8..36245d6aab 100644
--- a/powerapps-docs/cards/make-a-card/ui-elements/use-buttons.md
+++ b/powerapps-docs/cards/make-a-card/ui-elements/use-buttons.md
@@ -12,6 +12,8 @@ ms.collection:
# Add buttons to a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Buttons are a type of control that lets users perform actions in cards without entering any input aside from a click. Insert, modify, and remove them in the [card designer](../designer-overview.md).
Buttons can do one of four things:
diff --git a/powerapps-docs/cards/make-a-card/variables/variables.md b/powerapps-docs/cards/make-a-card/variables/variables.md
index 96657be86c..b53cb30f40 100644
--- a/powerapps-docs/cards/make-a-card/variables/variables.md
+++ b/powerapps-docs/cards/make-a-card/variables/variables.md
@@ -13,6 +13,8 @@ ms.collection:
# Add variables to a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Variables store data for reuse. The data can be of different types, like collection, text, or a number. Variables have unique names, which is how you refer to them in [Power Fx formulas](../../make-a-card/power-fx/intro-to-pfx.md). Insert, modify, and remove them in the [card designer](../designer-overview.md).
The value of a variable can be temporary, reset for each card session, or permanent, shared across all sessions of a specific card instance. Temporary variables are different for each card session, even for a single user, meaning if you have the same card instance sent to you in a chat and a channel, a temporary variable could be different across those two sessions.
diff --git a/powerapps-docs/cards/manage-cards/data-loss-prevention.md b/powerapps-docs/cards/manage-cards/data-loss-prevention.md
index 8b91be806e..a3a24a81a6 100644
--- a/powerapps-docs/cards/manage-cards/data-loss-prevention.md
+++ b/powerapps-docs/cards/manage-cards/data-loss-prevention.md
@@ -13,6 +13,8 @@ ms.collection:
# Manage cards with DLP policies
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
The **Cards for Power Apps** connector is used to automatically send cards through Power Automate. However, there are specific rules enforced by [DLP policies](/power-platform/admin/wp-data-loss-prevention) that dictate which connectors can be used with one another.
Administrators can use DLP policies to determine which connectors can be used in flows that send cards. For example, if both the MSN Weather connector and Cards for Power Apps connector are classified as **Business**, then makers can send daily status cards with the weather.
diff --git a/powerapps-docs/cards/manage-cards/delete-cards.md b/powerapps-docs/cards/manage-cards/delete-cards.md
index a78e3eb958..af196e3390 100644
--- a/powerapps-docs/cards/manage-cards/delete-cards.md
+++ b/powerapps-docs/cards/manage-cards/delete-cards.md
@@ -13,6 +13,8 @@ ms.collection:
# Delete a card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
To delete a card, you need to be the app owner. An admin can't delete a card.
1. Sign in to [Power Apps](https://make.powerapps.com).
diff --git a/powerapps-docs/cards/manage-cards/manage-access.md b/powerapps-docs/cards/manage-cards/manage-access.md
index 868b200fb4..9749c81a00 100644
--- a/powerapps-docs/cards/manage-cards/manage-access.md
+++ b/powerapps-docs/cards/manage-cards/manage-access.md
@@ -13,6 +13,8 @@ ms.collection:
# Manage access
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
This article explains how to manage cards using security roles, and also provides guidance on deleting a record.
## Change who can create cards
diff --git a/powerapps-docs/cards/manage-cards/manage-cards.md b/powerapps-docs/cards/manage-cards/manage-cards.md
index d50321e940..d3366d72d7 100644
--- a/powerapps-docs/cards/manage-cards/manage-cards.md
+++ b/powerapps-docs/cards/manage-cards/manage-cards.md
@@ -13,6 +13,8 @@ ms.collection:
# Manage cards in solutions
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Create a card from within a solution if, for example, you want to deploy the card to a different environment. Solutions can contain not only cards but also customized tables, choices, and other components. You can quickly customize an environment in various ways by creating cards and other components from within a solution, exporting the solution, and then importing it into another environment. For more information, see [Solutions overview](../../maker/data-platform/solutions-overview.md).
diff --git a/powerapps-docs/cards/overview.md b/powerapps-docs/cards/overview.md
index c7af760064..9fbc2f70aa 100644
--- a/powerapps-docs/cards/overview.md
+++ b/powerapps-docs/cards/overview.md
@@ -1,7 +1,7 @@
---
title: Cards for Power Apps overview
description: Learn about cards for Microsoft Power Apps.
-ms.date: 2/22/2024
+ms.date: 3/3/2025
ms.topic: overview
author: iaanw
ms.author: iawilt
@@ -12,6 +12,8 @@ ms.collection:
# Cards for Power Apps overview
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Power Apps cards are micro-apps with enterprise data, workflows, and interactive, lightweight UI elements that other applications can use as content. Because cards are part of the Power Apps ecosystem, they can add business logic through Power Fx and integration with business data through Power Platform connectors. Using cards, you can quickly build and share rich, actionable apps without any coding or IT expertise.
## Get started with cards
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 b0a9f5a47a..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:
@@ -13,6 +13,8 @@ ms.collection:
# Share a card in Teams
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
An easy way to share your cards is to include a link to them in Microsoft Teams. The **Send** button on the **Play** page generates a link that you can copy and then paste into a chat, channel, or meeting. Power Apps must be installed in the Teams chat, channel, or meeting for the card to work and will be installed automatically unless the app is blocked in the organization.
:::image type="content" source="../media/send-a-card/card-in-teams.png" alt-text="Screenshot of a Power Apps card shared in a Teams chat.":::
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 401c7e8af2..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
@@ -17,6 +17,8 @@ contributors:
# Send a card automatically with a flow
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
Use Power Automate to send cards for Power Apps from a flow. By setting up a flow that is triggered by an event, you can automate the process of sending cards in Teams. For instance, you can create a flow that requests the assigned individual to approve or reject an expense when a new record is added to Dataverse. Alternatively, you can create a flow that sends a daily status update in Teams every morning.
You can use **Send from a flow** option in **Send** menu on the card's **Play** page to launch a Power Automate flow template for sending cards in Teams. You can modify and save this template as a new flow to post your card in Teams chat or channel or send it to a specific Teams user.
@@ -40,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 de5e8c69dc..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:
@@ -13,6 +13,8 @@ ms.collection:
# Create a card with data from Dataverse (preview)
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
In this tutorial, you'll create a card that uses the Microsoft Dataverse connector to display and update information about an account. You'll use the [card designer](../make-a-card/designer-overview.md), [variables](../make-a-card/variables/variables.md), [connectors](../make-a-card/connectors/connector-intro.md), and more complex [Power Fx expressions](../make-a-card/power-fx/intro-to-pfx.md).
We'll assume that you've honed your Power Apps card skills in the [Hello World tutorial](hello-world-card.md) and the [shopping list tutorial](simple-shopping-list.md) and are familiar with using the card designer. If you haven't explored those tutorials yet, we recommend that you do that first, and then return to this tutorial.
diff --git a/powerapps-docs/cards/tutorials/hello-world-card.md b/powerapps-docs/cards/tutorials/hello-world-card.md
index 9010c52d77..8aec15d492 100644
--- a/powerapps-docs/cards/tutorials/hello-world-card.md
+++ b/powerapps-docs/cards/tutorials/hello-world-card.md
@@ -12,6 +12,8 @@ ms.collection:
# Create a simple card (preview)
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
In this article, you create a card that asks the user to enter their name, and then shows the name in the title of the card. You use the [card designer](../make-a-card/designer-overview.md), [variables](../make-a-card/variables/variables.md), and [Power Fx](../make-a-card/power-fx/intro-to-pfx.md).
## Prerequisites
diff --git a/powerapps-docs/cards/tutorials/simple-shopping-list.md b/powerapps-docs/cards/tutorials/simple-shopping-list.md
index ac6b9bbe3e..210d113516 100644
--- a/powerapps-docs/cards/tutorials/simple-shopping-list.md
+++ b/powerapps-docs/cards/tutorials/simple-shopping-list.md
@@ -12,6 +12,8 @@ ms.collection:
# Create a shopping list card
+[!INCLUDE[cards-deprecation-banner](~/includes/cards-deprecation-notice.md)]
+
In this tutorial, you'll create a card that displays a shopping list and lets you add items. You'll use the [card designer](../make-a-card/designer-overview.md), [variables](../make-a-card/variables/variables.md), and [Power Fx](../make-a-card/power-fx/intro-to-pfx.md).
At the end of the tutorial, your shopping list card should look like the following example:
diff --git a/powerapps-docs/chatbots.md b/powerapps-docs/chatbots.md
deleted file mode 100644
index 137f0a12f8..0000000000
--- a/powerapps-docs/chatbots.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Create chatbots from Power Apps | Microsoft Docs
-description: Provides information about how to create chatbots from Power Apps.
-author: iaanw
-ms.subservice: common
-ms.topic: conceptual
-ms.custom:
-ms.date: 06/26/2020
-ms.author: iawilt
-ms.reviewer: mvakoc
-contributors:
- - iaanw
----
-# Create chatbots from Power Apps
-
-Power Virtual Agents allows you to quickly create and maintain intelligent chatbots using a no-code interface. App makers can create and manage their chatbots directly from [Power Apps](https://make.powerapps.com).
-
-
-
-You can create and manage your chatbots using the **Chatbots** option in the left navigation pane.
-
-- To create a chatbot, select **Chatbots**, then **Create**, and then select **New chatbot**. This will take you directly to the Power Virtual Agents portal where you can create your chatbot. For more information, see [Create a bot in Power Virtual Agents](/power-virtual-agents/authoring-first-bot)
-
-- After you have chatbots in your environment, you'll be able to view them by selecting **Chatbots** and then **List**. You can navigate directly to the Power Virtual Agents portal to update your bot or view analytics.
-
-More information: [Power Virtual Agents docs](/power-virtual-agents)
-
-
-[!INCLUDE[footer-include](includes/footer-banner.md)]
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 55120121ca..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
@@ -108,7 +108,7 @@ You can define additional resource files in the manifest to include:
More information: [resources element](manifest-schema-reference/resources.md)
-### Related topics
+### Related articles
[Create and build a code component](create-custom-controls-using-pcf.md)
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 c4f65ef60b..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
@@ -61,7 +61,7 @@ The template control is included in the [PowerApps-Samples](https://github.com/m
```
> [!NOTE]
- > If the function returns null or undefined, then the grid will use the internal renderer/editor for the targeted cells.
+ > If the function returns null or undefined, then the grid uses the internal renderer/editor for the targeted cells.
1. After defining your custom cell renderers and editors, **package** the grid customizer control and **import** it to your Power Apps environment. Alternatively, you can use the [pac pcf push](/power-platform/developer/cli/reference/pcf#pac-pcf-push) command.
1. After publishing the grid customizer control, open the **Customize the system** panel from the **Settings > Customizations** menu.
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/dependent-libraries.md b/powerapps-docs/developer/component-framework/dependent-libraries.md
new file mode 100644
index 0000000000..ece8d01854
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/dependent-libraries.md
@@ -0,0 +1,149 @@
+---
+title: Dependent Libraries (preview)
+description: Explains how to use dependent libraries with Power Apps Component Framework (PCF) controls.
+author: anuitz
+ms.author: anuitz
+ms.date: 03/24/2025
+ms.reviewer: jdaly
+ms.topic: article
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+# Dependent Libraries (preview)
+
+[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)]
+
+With model-driven apps, you can reuse a prebuilt library contained in another component that is loaded as a dependency to more than one component.
+
+Having copies of a prebuilt library in multiple controls is undesirable. Reusing existing libraries improves performance, especially when the library is large, by reducing the load time for all components that use the library. Library reuse also helps reduce the maintenance overhead in build processes.
+
+:::row:::
+ :::column span="":::
+ Before
+ :::column-end:::
+ :::column span="":::
+ After
+ :::column-end:::
+:::row-end:::
+:::row:::
+ :::column span="":::
+ :::image type="content" source="media/dependent-library-before-example.png" alt-text="Diagram showing custom library files contained in each pcf component":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="media/dependent-library-after-example.png" alt-text="Diagram showing components calling a shared function from a Library Control":::
+ :::column-end:::
+:::row-end:::
+
+To use dependent libraries, you need to:
+
+- Create a *Library component* that contains the library. This component can provide some functionality or only be a container for the library.
+- Configure another component to depend on the library loaded by the library component.
+
+By default, the library loads when the dependent component loads, but you can [configure it to load on demand](#dependency-as-on-demand-load-of-a-component).
+
+This way you can independently maintain the library in the Library Control and the dependent controls don't need to have a copy of the library bundled with them.
+
+## How it works
+
+You need to add configuration data to your component project so that the build process deploys your libraries the way you want. Set this configuration data by adding or editing the following files:
+
+- [featureconfig.json](#featureconfigjson)
+- [webpack.config.js](#webpackconfigjs)
+- Edit the manifest schema to [Register dependencies](#register-dependencies)
+
+### featureconfig.json
+
+Add this file to override the default feature flags for a component without modifying the files generated in the `node_modules` folder.
+
+The following table describes the feature flags you can set in `featureconfig.json`:
+
+|Name|Description|
+|---|---|
+|`pcfResourceDependency`|Enables the component to use a library resource.|
+|`pcfAllowCustomWebpack`|Enables the component to use a custom web pack. This feature must be enabled for components that define a library resource.|
+
+By default, these values are `off`. Set them to `on` to override the default. For example:
+
+```json
+{
+ "pcfAllowCustomWebpack": "on"
+}
+```
+
+```json
+{
+ "pcfResourceDependency": "on",
+ "pcfAllowCustomWebpack": "off"
+}
+```
+
+### webpack.config.js
+
+The build process for components uses [Webpack](https://webpack.js.org/) to bundle the code and dependencies into a deployable asset. To exclude your libraries from this bundling, add a `webpack.config.js` file to the project root folder that specifies the alias of the library as `externals`. [Learn more about the Webpack externals configuration option](https://webpack.js.org/configuration/externals/)
+
+This file might look like the following when the library alias is `myLib`.
+
+```typescript
+/* eslint-disable */
+"use strict";
+
+module.exports = {
+ externals: {
+ "myLib": "myLib"
+ },
+}
+```
+
+
+### Register dependencies
+
+Use the [dependency element](manifest-schema-reference/dependency.md) within [resources](manifest-schema-reference/resources.md) of the manifest schema.
+
+```xml
+
+
+
+
+
+```
+
+### Dependency as on demand load of a component
+
+Rather than loading the dependent library when a component loads, you can load the dependent library on demand. Loading on demand provides the flexibility for more complex controls to only load dependencies when they're required, especially if the dependent libraries are large.
+
+:::image type="content" source="media/dependent-library-on-demand-load.png" alt-text="Diagram showing the use of a function from a library where the library is loaded on demand":::
+
+
+
+To enable on demand loading, you need to:
+
+1. Add these [platform-action element](manifest-schema-reference/platform-action.md), [feature-usage element](manifest-schema-reference/feature-usage.md), and [uses-feature element](manifest-schema-reference/uses-feature.md) child elements to the [control element](manifest-schema-reference/control.md):
+
+ ```xml
+
+
+
+
+ ```
+
+1. Set the `load-type` attribute of the [dependency element](manifest-schema-reference/dependency.md) to `onDemand`.
+
+ ```xml
+
+ ```
+
+### Next steps
+
+Try a tutorial that walks you through creating a dependent library.
+
+> [!div class="nextstepaction"]
+> [Tutorial: Use dependent libraries in a component](tutorial-use-dependent-libraries.md)
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/events.md b/powerapps-docs/developer/component-framework/events.md
new file mode 100644
index 0000000000..728102202c
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/events.md
@@ -0,0 +1,108 @@
+---
+title: Define Events (preview)
+description: Explains how to define new events with Power Apps Component Framework (PCF) controls.
+author: anuitz
+ms.author: anuitz
+ms.date: 03/24/2025
+ms.reviewer: jdaly
+ms.topic: how-to
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+# Define Events (preview)
+
+[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)]
+
+A common requirement when building custom components with the Power Apps Component Framework is the ability to react to events generated within the control. These events can be invoked either due to user interaction or programmatically via code. For example, an application can have a code component that lets a user build a product bundle. This component can also raise an event which could show product information in another area of the application.
+
+## Component Data Flow
+
+The common data flow for a code component is data flowing from the hosting application into the control as inputs and updated data flowing out of the control to the hosting form or page. This diagram shows the standard pattern of data flow for a typical PCF component:
+
+:::image type="content" source="media/component-events-onchange-example.png" alt-text="Shows that data update from the code component to the binding field triggers the `OnChange` event":::
+
+The data update from the code component to the bound field triggers the `OnChange` event. For most component scenarios, this is enough and makers just add a handler to trigger subsequent actions. However, a more complicated control might require events to be raised that aren't field updates. The event mechanism allows code components to define events that have separate event handlers.
+
+## Using events
+
+The event mechanism in PCF is based on the standard event model in JavaScript. The component can define events in the manifest file and raise these events in the code. The hosting application can listen to these events and react to them.
+
+The component defines events using the [event element](manifest-schema-reference/event.md) in the manifest file. This data allows the respective hosting application to react to events in different ways.
+
+```xml
+
+
+
+```
+
+Canvas apps react to the event using Power Fx expressions:
+
+:::image type="content" source="media\custom-events-in-canvas-designer.png" alt-text="Shows the custom events in the canvas apps designer":::
+
+Model Driven Apps use the [addEventHandler method](../model-driven-apps/clientapi/reference/controls/addeventhandler.md) to associate event handlers to custom events for a component.
+
+```javascript
+ const controlName1 = "cr116_personid";
+
+ this.onLoad = function (executionContext) {
+ const formContext = executionContext.getFormContext();
+
+ const sampleControl1 = formContext.getControl(controlName1);
+ sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1);
+ sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2);
+ }
+```
+
+> [!NOTE]
+> These events occur separately for each instance of the code component in the app.
+
+## Defining an event for model-driven apps
+
+For model-driven apps you can pass a payload with the event allowing for more complex scenarios. For example in the diagram below the component passes a callback function in the event allowing the script handling to call back to the component.
+
+:::image type="content" source="media/passing-payload-in-events.png" alt-text="In this example, the component passes a callback function in the event allowing the script handling to call back to the component":::
+
+
+
+```javascript
+this.onSampleControl1CustomEvent1 = function (params) {
+ //alert(`SampleControl1 Custom Event 1: ${params}`);
+ alert(`SampleControl1 Custom Event 1`);
+}.bind(this);
+
+this.onSampleControl2CustomEvent2 = function (params) {
+alert(`SampleControl2 Custom Event 2: ${params.message}`);
+// prevent the default action for the event
+params.callBackFunction();
+}
+```
+
+## Defining an event for canvas apps
+
+Makers configure an event using Power Fx on the PCF control in the properties pane.
+
+### Calling an event
+
+See how to call an event in [Events](reference/events.md).
+
+### Next steps
+
+> [!div class="nextstepaction"]
+> [Tutorial: Define a custom event in a component](tutorial-define-event.md)
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/manifest-schema-reference/code.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/code.md
index c9eb4335b1..f74368febc 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/code.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/code.md
@@ -40,7 +40,7 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/control.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/control.md
index e7d324b857..40b3a25a6d 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/control.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/control.md
@@ -1,9 +1,9 @@
---
-title: Control Element | Microsoft Docs
-description: Defines the component's namespace, version and display information.
+title: control Element | Microsoft Docs
+description: Defines the component's namespace, version, and display information.
ms.author: anuitz
author: anuitz
-ms.date: 12/04/2023
+ms.date: 03/24/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
@@ -26,9 +26,9 @@ Model-driven and canvas apps
|`namespace`|Defines the object prototype of the component|[!INCLUDE [alphanumerictype-description](includes/alphanumerictype-description.md)]|Yes|Model-driven and canvas apps |
|`constructor`|A method for initializing the object|[!INCLUDE [alphanumerictype-description](includes/alphanumerictype-description.md)]|Yes|Model-driven and canvas apps |
|`control-type`|Whether the control is a standard control or a React control. The value of `virtual` indicates a React control using platform React library. Virtual controls are a feature in public preview. More information: [React controls & platform libraries](../react-controls-platform-libraries.md)|[!INCLUDE [controltype-description](includes/controltype-description.md)]|No|Model-driven and canvas apps |
-|`description-key`|Defines the description of the component that will be seen on the UI.|`string`|No|Model-driven and canvas apps |
-|`display-name-key`|Defines the name of the control that is displayed on the UI.|`string`|Yes|Model-driven and canvas apps |
-|`preview-image`|Image that will be used on the customization screens to show a preview of the component.|`string`|No|Model-driven apps|
+|`description-key`|Defines the description of the component visible in the UI.|`string`|No|Model-driven and canvas apps |
+|`display-name-key`|Defines the name of the control visible in the UI.|`string`|Yes|Model-driven and canvas apps |
+|`preview-image`|Image used on the customization screens to show a preview of the component.|`string`|No|Model-driven apps|
|`version`|Defines the version of the component defined in [Semantic Versioning](https://semver.org)|`string`|Yes|Model-driven and canvas apps |
@@ -48,6 +48,7 @@ Model-driven and canvas apps
|[resources](resources.md)|[!INCLUDE [resources-description](includes/resources-description.md)]|1|
|[type-group](type-group.md)|[!INCLUDE [type-group-description](includes/type-group-description.md)]|0 or more|
|[property-dependencies](property-dependencies.md)|[!INCLUDE [property-dependencies-description](includes/property-dependencies-description.md)]|0 or more|
+|[platform-action](platform-action.md)|[!INCLUDE [platform-action-description](includes/platform-action-description.md)]|0 or 1|
## Example
@@ -62,10 +63,10 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
-[Power Apps component framework manifest schema reference](index.md)
-[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework manifest schema reference](index.md)
+[Power Apps component framework API reference](../reference/index.md)
[Power Apps component framework overview](../overview.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/css.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/css.md
index c7f7a9fd29..41e81da5d8 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/css.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/css.md
@@ -41,7 +41,7 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/dependency.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/dependency.md
new file mode 100644
index 0000000000..afaef96415
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/dependency.md
@@ -0,0 +1,54 @@
+---
+title: dependency Element | Microsoft Docs
+description: Refers to a library in another component that this component depends on.
+author: anuitz
+ms.author: anuitz
+ms.date: 03/24/2025
+ms.reviewer: jdaly
+ms.topic: reference
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+
+# dependency element
+
+[!INCLUDE [dependency-description](includes/dependency-description.md)]
+
+## Available for
+
+Model-driven apps
+
+## Parameters
+
+|Name|Description|Type|Required|Available for|
+|--|--|--|--|-----|
+|`type`|Set to `control`|`String`|Yes|Model-driven apps |
+|`name`|The schema name name of the library component|`String`|Yes|Model-driven apps |
+|`order`|The order in which the dependent library should load|`Positive integer`|No|Model-driven apps |
+|`load-type`|Set to `onDemand`|`String`|No|Model-driven apps |
+
+## Parent Elements
+
+|Element|Description|
+|--|--|
+|[resources](resources.md)|[!INCLUDE [resources-description](includes/resources-description.md)]|
+
+### Example
+
+```XML
+
+```
+
+### Related articles
+
+[Dependent Libraries (preview)](../dependent-libraries.md)
+[Power Apps component framework manifest schema reference](index.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/manifest-schema-reference/domain.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/domain.md
index ed20473f26..900b406a9c 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/domain.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/domain.md
@@ -32,7 +32,7 @@ Canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/event.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/event.md
index 008ea5e751..a956918404 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/event.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/event.md
@@ -4,7 +4,7 @@ description: Defines a Power FX expression that can be configured within Power A
author: anuitz
ms.author: anuitz
ms.reviewer: jdaly
-ms.date: 11/20/2023
+ms.date: 03/24/2025
ms.topic: reference
ms.subservice: pcf
contributors:
@@ -17,15 +17,15 @@ contributors:
## Available for
-Canvas apps
+Canvas and model-driven apps
## Properties
|Name |Description |Type |Required | Available for|
|------|------|------|-------|------------|
-|`name` |Name of the event |`string` |Yes |Canvas apps|
-|`display-name-key` |Used in the customization screens as localized strings that describes the name of the event. |`string` |Yes |Canvas apps|
-|`description-key` |Used in the customization screens as localized strings that describes the description of the event. |`string` |Optional |Canvas apps|
+|`name` |Name of the event |`string` |Yes |Canvas and model-driven apps|
+|`display-name-key` |Used in the customization screens as localized strings that describe the name of the event. |`string` |Yes |Canvas apps|
+|`description-key` |Used in the customization screens as localized strings that describe the description of the event. |`string` |Optional |Canvas apps|
|`pfx-default-value` |The default Power Fx expression value provided to the component. |See [Remarks](#remarks) |Optional |Canvas apps|
### Remarks
@@ -47,7 +47,7 @@ Canvas apps
description-key="OnSelectCustomButton_Desc_Key" />
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/img.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/img.md
index 0bfe4dd696..0dd0f06245 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/img.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/img.md
@@ -41,7 +41,7 @@ Model-driven apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/control-description.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/control-description.md
index 4292509fd2..ccfe1d6eaf 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/control-description.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/control-description.md
@@ -1 +1 @@
-Defines the component's namespace, version and display information.
+Defines the component's namespace, version, and display information.
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/dependency-description.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/dependency-description.md
new file mode 100644
index 0000000000..058e1f200d
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/dependency-description.md
@@ -0,0 +1 @@
+Refers to a library in another component that this component depends on.
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/platform-action-description.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/platform-action-description.md
new file mode 100644
index 0000000000..cb2479ec97
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/includes/platform-action-description.md
@@ -0,0 +1 @@
+Used to specify that control dependencies load on demand instead of when the control is loaded.
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/index.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/index.md
index d2383ce789..ef6e912509 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/index.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/index.md
@@ -3,7 +3,7 @@ title: Power Apps component framework manifest schema reference | Microsoft Docs
description: This section contains reference documentation for manifest schema generated using Microsoft Power Platform CLI.
author: anuitz
ms.author: anuitz
-ms.date: 02/22/2023
+ms.date: 03/24/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
@@ -25,11 +25,13 @@ This section contains reference documentation for manifest schema generated usin
|[css](css.md)|[!INCLUDE [css-description](includes/css-description.md)]|Model-driven and canvas apps|
|[data-set](data-set.md)|[!INCLUDE [data-set-description](includes/data-set-description.md)]|Model-driven apps|
|[domain](domain.md)|[!INCLUDE [domain-description](includes/domain-description.md)]|Canvas apps|
+|[dependency](dependency.md)|[!INCLUDE [dependency-description](includes/dependency-description.md)]|Model-driven apps|
|[external-service-usage](external-service-usage.md)|[!INCLUDE [external-service-usage-description](includes/external-service-usage-description.md)]|Canvas apps|
|[event element](event.md)|[!INCLUDE [event-description](includes/event-description.md)]|Canvas apps|
|[feature-usage](feature-usage.md)|The feature-usage element acts as a wrapper around the `uses-feature` elements, which themselves allow developers to declare which features their component wants to use. If there are no uses-feature elements defined, the feature-usage element is not required.|Model-driven apps|
|[img](img.md)|[!INCLUDE [img-description](includes/img-description.md)]|Model-driven apps|
|[manifest](manifest.md)|Manifest is the metadata file that defines a component. It is an XML document that describes - The namespace of the component. - The kind of data it can be configured, either a field or a data-set. - Any properties that can be configured in the application when the component is added. - A list of resource files that the component needs. - One of them must be a JavaScript web resource. This JavaScript must include a function that will instantiate an object. This implements an interface that exposes methods that are required for the component to work. This is called the component implementation library. - The name of a JavaScript function in the component implementation library that will return an object that applies the required interface. When someone configures a component in the application, the data in the manifest filters out the available components so that only valid components for the context are available for configuration. The properties defined in the manifest for a component are rendered as configuration fields so that the person configuring the control can specify values. These property values are then available to your component function at run time.|Model-driven and canvas apps|
+|[platform-action](platform-action.md)|[!INCLUDE [platform-action-description](includes/platform-action-description.md)]|Model-driven and canvas apps|
|[platform-library](platform-library.md)|[!INCLUDE [platform-library-description](includes/platform-library-description.md)]|Model-driven and canvas apps|
|[property-dependencies](property-dependencies.md)|[!INCLUDE [property-dependencies-description](includes/property-dependencies-description.md)]|Canvas apps|
|[property-dependency](property-dependency.md)|[!INCLUDE [property-dependency-description](includes/property-dependency-description.md)]|Canvas apps|
@@ -37,15 +39,16 @@ This section contains reference documentation for manifest schema generated usin
|[property](property.md)|[!INCLUDE [property-description](includes/property-description.md)]|Model-driven and canvas apps|
|[resources](resources.md)|[!INCLUDE [resources-description](includes/resources-description.md)]|Model-driven and canvas apps|
|[resx](resx.md)|[!INCLUDE [resx-description](includes/resx-description.md)]|Model-driven and canvas apps|
-|[type-group](type-group.md)|[!INCLUDE [type-group-description](includes/type-group-description.md)]|Model-driven and canvas apps|
|[type](type.md)|[!INCLUDE [type-description](includes/type-description.md)]|Model-driven apps|
+|[type-group](type-group.md)|[!INCLUDE [type-group-description](includes/type-group-description.md)]|Model-driven and canvas apps|
+|[types](types.md)|[!INCLUDE [types-description](includes/types-description.md)]|Model-driven and canvas apps|
|[uses-feature](uses-feature.md)|[!INCLUDE [uses-feature-description](includes/uses-feature-description.md)]|Model-driven apps|
-### Related topics
+### Related articles
-[Power Apps component framework manifest schema reference](index.md)
-[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework manifest schema reference](index.md)
+[Power Apps component framework API reference](../reference/index.md)
[Power Apps component framework overview](../overview.md)
[!INCLUDE[footer-include](../../../includes/footer-banner.md)]
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/manifest.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/manifest.md
index 146d87a1fe..3c1188f81e 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/manifest.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/manifest.md
@@ -59,7 +59,7 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/platform-action.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/platform-action.md
new file mode 100644
index 0000000000..34be66278f
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/platform-action.md
@@ -0,0 +1,48 @@
+---
+title: platform-action Element | Microsoft Docs
+description: "Used to specify that control dependencies load on demand instead of when the control is loaded."
+author: anuitz
+ms.author: anuitz
+ms.date: 03/24/2025
+ms.reviewer: jdaly
+ms.topic: reference
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+
+# platform-action element
+
+[!INCLUDE [platform-action-description](includes/platform-action-description.md)]
+
+## Available for
+
+Model-driven apps
+
+## Parameters
+
+|Name|Description|Type|Required|Available for|
+|--|--|--|--|--------|
+|`action-type`| Set to `afterPageLoad` | string | No | Model-driven apps|
+
+## Parent Elements
+
+|Element|Description|
+|--|--|
+|[control](control.md)|[!INCLUDE [control-description](includes/control-description.md)]|
+
+### Example
+
+```XML
+
+```
+
+### Related articles
+
+[Dependent Libraries (preview)](../dependent-libraries.md)
+[Power Apps component framework manifest schema reference](index.md)
+[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework overview](../overview.md)
+
+[!INCLUDE [footer-banner](../../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependencies.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependencies.md
index 26fbd94495..51f83447ac 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependencies.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependencies.md
@@ -39,7 +39,7 @@ Canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependency.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependency.md
index 01db1a0f14..9d647c7234 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependency.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-dependency.md
@@ -41,7 +41,7 @@ Canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-set.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-set.md
index 9b8b44710c..865c9f43c9 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/property-set.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/property-set.md
@@ -49,7 +49,7 @@ The `of-type` attribute value must be one of the following:
[!INCLUDE [type-table](includes/type-table.md)]
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/property.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/property.md
index 745be170be..1827319b22 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/property.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/property.md
@@ -61,7 +61,7 @@ The `of-type` property value must be one of the following:
description-key="myFirstProperty_Desc_Key" of-type="SingleLine.Text" usage="bound" required="true" />
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/resources.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/resources.md
index 08337e5f93..57523f466d 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/resources.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/resources.md
@@ -1,9 +1,9 @@
---
-title: Resources Element | Microsoft Docs
+title: resources Element | Microsoft Docs
description: The resources node in the component manifest refers to the resource files that component requires to implement it's visualization.
author: anuitz
ms.author: anuitz
-ms.date: 05/27/2022
+ms.date: 03/24/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
@@ -34,6 +34,7 @@ Model-driven and canvas apps
|[img](img.md)|[!INCLUDE [img-description](includes/img-description.md)]|0 or more|
|[resx](resx.md)|[!INCLUDE [resx-description](includes/resx-description.md)]|0 or more|
|[platform-library](platform-library.md)|[!INCLUDE [platform-library-description](includes/platform-library-description.md)]|0 or more|
+|[dependency](dependency.md)|[!INCLUDE [dependency-description](includes/dependency-description.md)]|0 or more|
## Example
@@ -45,10 +46,10 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
-[Power Apps component framework manifest schema reference](index.md)
-[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework manifest schema reference](index.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/manifest-schema-reference/resx.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/resx.md
index 44a15c1971..dda55a3a91 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/resx.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/resx.md
@@ -44,7 +44,7 @@ Model-driven and canvas apps
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/type-group.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/type-group.md
index a72e00e0a9..6ef35895de 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/type-group.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/type-group.md
@@ -85,7 +85,7 @@ While the following would again receive "Decimal":
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/type.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/type.md
index 1861095842..dc5d402dc8 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/type.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/type.md
@@ -40,7 +40,7 @@ This element contains a `string` with one of the following values:
```
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/types.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/types.md
index 35c205252f..880da2ded2 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/types.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/types.md
@@ -30,7 +30,7 @@ Model-driven and canvas apps
|[type](type.md)|[!INCLUDE [type-description](includes/type-description.md)]|0 or more|
-### Related topics
+### Related articles
[Power Apps component framework manifest schema reference](index.md)
[Power Apps component framework API reference](../reference/index.md)
diff --git a/powerapps-docs/developer/component-framework/manifest-schema-reference/uses-feature.md b/powerapps-docs/developer/component-framework/manifest-schema-reference/uses-feature.md
index fdfc9ba7f7..ba912b2e76 100644
--- a/powerapps-docs/developer/component-framework/manifest-schema-reference/uses-feature.md
+++ b/powerapps-docs/developer/component-framework/manifest-schema-reference/uses-feature.md
@@ -3,7 +3,7 @@ title: uses-feature | Microsoft Docs
description: Indicates which feature their components want to use.
author: anuitz
ms.author: anuitz
-ms.date: 05/27/2022
+ms.date: 03/24/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
@@ -19,18 +19,20 @@ contributors:
Model-driven apps
+## Parameters
+
+|Element|Description|Type|Required|
+|--|--|---|----|
+|`name`|Name of the feature that is declared in the component|`string`|Yes|
+|`required`|Indicates if the component requires that feature or not|`boolean`|Yes|
+
## Parent Element
|Element|Description|
|--|--|
-|feature-usage|The feature-usage element acts as a wrapper around the uses-feature elements, which themselves allow developers to declare which features their component wants to use. If there are no uses-feature elements defined, the feature-usage element is not required.|
+|[feature-usage](feature-usage.md)|[!INCLUDE [feature-usage-description](includes/feature-usage-description.md)]|
-## Child Elements
-|Element|Description|Type|Required|
-|--|--|---|----|
-|name|Name of the feature that is declared in the component|`string`|Yes|
-|required|Indicates if the component requires that feature or not|`boolean`|Yes|
### Example
@@ -40,18 +42,18 @@ Model-driven apps
```
-The table below shows the relationship of these settings to what happens in the code at runtime whether the feature function will be available to call based upon the uses-feature settings defined in the manifest.
+The following table shows the relationship of these settings to what happens in the code at runtime whether the feature function is available to call based upon the `uses-feature` settings defined in the manifest.
|Manifest|If Host supports|If Host doesn't support|
|----|----|-----|
-|`uses-feature name="device.captureImage" required="true"`|`Context.device.captureImage != null`, no check needed.|Warning at design time. Component load will fail at runtime.|
+|`uses-feature name="device.captureImage" required="true"`|`Context.device.captureImage != null`, no check needed.|Warning at design time. Component load fails at runtime.|
|`uses-feature name="device.captureImage" required="false"`|`Context.device.captureImage != null`|`Context.device.captureImage == null`, component can adaptively check this at runtime. |
|(none)|`Context.device.captureImage == null` |`Context.device.captureImage == null` |
-### Related topics
+### Related articles
-[Power Apps component framework manifest schema reference](index.md)
-[Power Apps component framework API reference](../reference/index.md)
+[Power Apps component framework manifest schema reference](index.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/media/component-events-onchange-example.png b/powerapps-docs/developer/component-framework/media/component-events-onchange-example.png
new file mode 100644
index 0000000000..0a8d70e3e9
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/component-events-onchange-example.png differ
diff --git a/powerapps-docs/developer/component-framework/media/custom-events-in-canvas-designer.png b/powerapps-docs/developer/component-framework/media/custom-events-in-canvas-designer.png
new file mode 100644
index 0000000000..6088a7caf5
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/custom-events-in-canvas-designer.png differ
diff --git a/powerapps-docs/developer/component-framework/media/define-custom-event-tutorial-diagram.png b/powerapps-docs/developer/component-framework/media/define-custom-event-tutorial-diagram.png
new file mode 100644
index 0000000000..da4b2604d9
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/define-custom-event-tutorial-diagram.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-after-example.png b/powerapps-docs/developer/component-framework/media/dependent-library-after-example.png
new file mode 100644
index 0000000000..da74bcf518
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-after-example.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-before-example.png b/powerapps-docs/developer/component-framework/media/dependent-library-before-example.png
new file mode 100644
index 0000000000..d7c9778dd5
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-before-example.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png b/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png
new file mode 100644
index 0000000000..3567011838
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-libprojectview.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-loaded.png b/powerapps-docs/developer/component-framework/media/dependent-library-loaded.png
new file mode 100644
index 0000000000..dd4f7bcf45
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-loaded.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-loading.png b/powerapps-docs/developer/component-framework/media/dependent-library-loading.png
new file mode 100644
index 0000000000..cf9de9dd3d
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-loading.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-on-demand-load.png b/powerapps-docs/developer/component-framework/media/dependent-library-on-demand-load.png
new file mode 100644
index 0000000000..49db58ec8b
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-on-demand-load.png differ
diff --git a/powerapps-docs/developer/component-framework/media/dependent-library-running.png b/powerapps-docs/developer/component-framework/media/dependent-library-running.png
new file mode 100644
index 0000000000..f728924c7b
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/dependent-library-running.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_canvas_sample_app.png b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app.png
new file mode 100644
index 0000000000..c707ad2bc8
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_customevents.png b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_customevents.png
new file mode 100644
index 0000000000..8f2a84e34f
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_customevents.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_displaymode.png b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_displaymode.png
new file mode 100644
index 0000000000..847251c1b7
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_displaymode.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_visible.png b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_visible.png
new file mode 100644
index 0000000000..bcfed542b6
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_canvas_sample_app_visible.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_mda_sample_jsbinding.png b/powerapps-docs/developer/component-framework/media/event_mda_sample_jsbinding.png
new file mode 100644
index 0000000000..35a4162b95
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_mda_sample_jsbinding.png differ
diff --git a/powerapps-docs/developer/component-framework/media/event_mda_sample_param.png b/powerapps-docs/developer/component-framework/media/event_mda_sample_param.png
new file mode 100644
index 0000000000..0622681cb7
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/event_mda_sample_param.png differ
diff --git a/powerapps-docs/developer/component-framework/media/passing-payload-in-events.png b/powerapps-docs/developer/component-framework/media/passing-payload-in-events.png
new file mode 100644
index 0000000000..537f7e9bcb
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/passing-payload-in-events.png differ
diff --git a/powerapps-docs/developer/component-framework/media/src/define-custom-event-tutorial-diagram.vsdx b/powerapps-docs/developer/component-framework/media/src/define-custom-event-tutorial-diagram.vsdx
new file mode 100644
index 0000000000..e731bf7d36
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/src/define-custom-event-tutorial-diagram.vsdx differ
diff --git a/powerapps-docs/developer/component-framework/media/src/passing-payload-in-events.vsdx b/powerapps-docs/developer/component-framework/media/src/passing-payload-in-events.vsdx
new file mode 100644
index 0000000000..85cd0b240e
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/src/passing-payload-in-events.vsdx differ
diff --git a/powerapps-docs/developer/component-framework/media/src/pcf_events_dependencies_diagrams.vsdx b/powerapps-docs/developer/component-framework/media/src/pcf_events_dependencies_diagrams.vsdx
new file mode 100644
index 0000000000..0cfe7cc936
Binary files /dev/null and b/powerapps-docs/developer/component-framework/media/src/pcf_events_dependencies_diagrams.vsdx differ
diff --git a/powerapps-docs/developer/component-framework/overview.md b/powerapps-docs/developer/component-framework/overview.md
index 6afc4829de..06ad7e9470 100644
--- a/powerapps-docs/developer/component-framework/overview.md
+++ b/powerapps-docs/developer/component-framework/overview.md
@@ -19,7 +19,7 @@ Power Apps component framework empowers professional developers and app makers t
- Replace a column on a form that displays a numeric text value with a `dial` or `slider` code component.
- Transform a list into an entirely different visual experience bound to the dataset, like a `Calendar` or `Map`.
-> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RE4slRe]
+> [!VIDEO https://learn-video.azurefd.net/vod/player?id=69a0fdf4-5b3c-461e-b921-94aad4b7f717]
> [!IMPORTANT]
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 268e51dccc..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
@@ -117,6 +117,7 @@ Platform libraries are made available both at the build and runtime to the contr
| ------ | --------------------------- | ---------------------- | -------------- |
| React | react | 16.14.0 | 17.0.2 (Model), 16.14.0 (Canvas) |
| Fluent | @fluentui/react | 8.29.0 | 8.29.0 |
+| Fluent | @fluentui/react | 8.121.1 | 8.121.1 |
| Fluent | @fluentui/react-components | >=9.4.0 <=9.46.2 | 9.46.2 |
> [!NOTE]
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/events.md b/powerapps-docs/developer/component-framework/reference/events.md
index 5ab5bc0bc8..25731e73c8 100644
--- a/powerapps-docs/developer/component-framework/reference/events.md
+++ b/powerapps-docs/developer/component-framework/reference/events.md
@@ -1,10 +1,10 @@
---
title: Events (Power Apps component framework API reference) | Microsoft Docs
-description: Provides methods to call maker-defined Power Fx events that are configured in Power Apps Studio.
+description: Provides methods to call events defined in a PCF. For canvas apps, makers configure these events using Power Fx. For model-driven apps, developers describe the events using JavaScript.
author: OliverDumrique
ms.author: olidum
ms.reviewer: jdaly
-ms.date: 11/20/2023
+ms.date: 03/17/2025
ms.topic: reference
ms.subservice: pcf
---
@@ -15,7 +15,7 @@ ms.subservice: pcf
## Available for
-Canvas apps only
+Canvas apps and model-driven apps
## Syntax
@@ -25,6 +25,8 @@ Canvas apps only
[event](../manifest-schema-reference/event.md) nodes in the manifest file are built as callable methods in the `context.events` object.
+[Define Events](../events.md)
+
## Example
```JSX
@@ -38,7 +40,8 @@ return (
```
### Related articles
-[Power Apps component framework API reference](../reference/index.md)
-[Power Apps component framework overview](../overview.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/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/includes/events-description.md b/powerapps-docs/developer/component-framework/reference/includes/events-description.md
index 79a6a56de7..0e61a58f50 100644
--- a/powerapps-docs/developer/component-framework/reference/includes/events-description.md
+++ b/powerapps-docs/developer/component-framework/reference/includes/events-description.md
@@ -1 +1 @@
-Provides methods to call maker-defined Power Fx events that are configured in Power Apps Studio.
+Provides methods to call events defined in a PCF. For canvas apps, makers configure these events using Power Fx. For model-driven apps, developers describe the events using JavaScript
diff --git a/powerapps-docs/developer/component-framework/reference/index.md b/powerapps-docs/developer/component-framework/reference/index.md
index 2bcd712849..fc0149f751 100644
--- a/powerapps-docs/developer/component-framework/reference/index.md
+++ b/powerapps-docs/developer/component-framework/reference/index.md
@@ -3,7 +3,7 @@ title: "Power Apps component framework API reference | MicrosoftDocs"
description: "The topic provides Power Apps component framework API reference."
ms.author: anuitz
author: anuitz
-ms.date: 12/04/2024
+ms.date: 03/24/2025
ms.reviewer: jdaly
ms.topic: reference
ms.subservice: pcf
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/angular-flip-control.md b/powerapps-docs/developer/component-framework/sample-controls/angular-flip-control.md
index fe19527c1e..4b4a55a10f 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/angular-flip-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/angular-flip-control.md
@@ -1,9 +1,9 @@
---
title: "Flip component| Microsoft Docs"
-description: "This sample shows how to use third-party libraries to create components in Power Apps component framework. The flip sample component is implemented based on angular.js, angular-ui, angular-animate, angular-sanitize, bootstrap."
+description: "This sample shows how to use external libraries/frameworks to create components in Power Apps component framework. The flip sample component is implemented based on angular.js, angular-ui, angular-animate, angular-sanitize, bootstrap."
author: anuitz
ms.author: anuitz
-ms.date: 03/12/2022
+ms.date: 03/17/2025
ms.reviewer: jdaly
ms.topic: sample
ms.subservice: pcf
@@ -15,7 +15,7 @@ contributors:
# Implementing Flip component
-This sample shows how to use third-party libraries to create components in Power Apps component framework. The flip sample component is implemented based on angular.js, angular-ui, angular-animate, angular-sanitize, bootstrap. The code may not reveal the best practices for the mentioned third-party libraries.
+This sample shows how to use external libraries/frameworks to create components in Power Apps component framework. The flip sample component is implemented based on angular.js, angular-ui, angular-animate, angular-sanitize, bootstrap. The code might not reveal the best practices for the mentioned external libraries/frameworks.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -30,22 +30,22 @@ Model-driven and canvas apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/AngularJSFlipControl).
-This sample provides examples on how to add dependencies for third-party libraries, showcasing how to perform data-binding between Power Apps component framework, component model and third-party inner data model in bi-direction.
+This sample provides examples on how to add dependencies for external libraries/frameworks, showcasing how to perform data-binding between Power Apps component framework, component model, and Angular inner data model in bi-direction.
-The flip component sample consists of a label and a button. When you click on the button, the text on the label toggles.
+The flip component sample consists of a label and a button. When you select on the button, the text on the label toggles.
- When the component is loaded, the label shows the text based on the bind column value. The `context.parameters.[property_name].attributes` contains the associated definitions.
-- For Yes/No columns, `context.parameters.[property_name].Options` will include both true and false value.
-- Selecting on the Flip button, the label will update the value using **notifyOutputEvents** method, [getOutputs](../reference/control/getoutputs.md) method will be called asynchronously and will flow to Power Apps component framework.
-- ClientAPI updates the bind column value, and the updated value flows to the component label. You can also use `ClientAPI` to update a column value to trigger control's [updateView](../reference/control/updateview.md) method. The component then updates the third-party model and the label gets updated.
+- For Yes/No columns, `context.parameters.[property_name].Options` includes both true and false value.
+- When you select the Flip button, the label updates the value using **notifyOutputEvents** method, [getOutputs](../reference/control/getoutputs.md) method is called asynchronously and flows to Power Apps component framework.
+- ClientAPI updates the bind column value, and the updated value flows to the component label. You can also use `ClientAPI` to update a column value to trigger control's [updateView](../reference/control/updateview.md) method. The component then updates the Angular model and the label gets updated.
-### Related topics
+### Related articles
-[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
-[How to use the sample components](../use-sample-components.md)
-[Power Apps component framework manifest schema reference](../manifest-schema-reference/index.md)
-[Power Apps component framework API reference](../reference/index.md)
+[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
+[How to use the sample components](../use-sample-components.md)
+[Power Apps component framework manifest schema reference](../manifest-schema-reference/index.md)
+[Power Apps component framework API reference](../reference/index.md)
[Power Apps component framework overview](../overview.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/control-state-api.md b/powerapps-docs/developer/component-framework/sample-controls/control-state-api.md
index b3b6d6ed4b..2fb1ea4f49 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/control-state-api.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/control-state-api.md
@@ -33,7 +33,7 @@ Model-driven and canvas apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/ControlStateAPI).
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/customized-editable-grid-control.md b/powerapps-docs/developer/component-framework/sample-controls/customized-editable-grid-control.md
index 10991a9611..5a244a064f 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/customized-editable-grid-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/customized-editable-grid-control.md
@@ -60,7 +60,7 @@ export const cellRendererOverrides: CellRendererOverrides = {
}
```
-### Related topics
+### Related articles
[Customize the editable grid control (Preview)](../customize-editable-grid-control.md)
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/data-set-component-canvas.md b/powerapps-docs/developer/component-framework/sample-controls/data-set-component-canvas.md
index d1eb297093..1c83c7b01e 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/data-set-component-canvas.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/data-set-component-canvas.md
@@ -38,13 +38,13 @@ You can download the complete sample component from [here](https://github.com/mi
In this sample, the column information is extracted using the `context.parameters.[dataset_property_name].columns`. It's an array type. The ways to access them are the same for both canvas and model-driven apps.
-You can define multiple datasets in the manifest. The first dataset in the manifest is as the primary dataset. When configuring the multi dataset component, the primary dataset property always has name `Items`. All non-primary dataset properties will have a `_Items` suffix after the dataset name.
+You can define multiple datasets in the manifest. The first dataset in the manifest is as the primary dataset. When you configure the multi dataset component, the primary dataset property always has name `Items`. All nonprimary dataset properties will have a `_Items` suffix after the dataset name.
-Certain features in the authoring panel will only apply to the primary dataset properties, such as data source selector, field selector, and view selector. To configure a non-primary dataset property, the maker needs to first import the data source to the app, then set the property value to that secondary data source. Property-set should be used for accessing columns in a non-primary dataset property.
+Certain features in the authoring panel only apply to the primary dataset properties, such as data source selector, field selector, and view selector. To configure a nonprimary dataset property, the maker needs to first import the data source to the app, then set the property value to that secondary data source. Property-set should be used for accessing columns in a nonprimary dataset property.
### Record binding
-- The sorted record Ids information can be extracted using `context.parameters.[dataset_property_name].sortedRecordIds`.
+- The sorted record IDs information can be extracted using `context.parameters.[dataset_property_name].sortedRecordIds`.
- Get all the records information using `context.parameters.[dataset_property_name].records`.
- Get each record object using `context.parameters.[dataset_property_name].records[record_Id]`
- Formatted value could be retrieved using `getFormattedValue` method.
@@ -55,14 +55,14 @@ The `context.parameters.[dataset_property_name].paging` method provides paging f
### Property sets
-Property-set is used to access individual column values for particular columns in the record. For example, map control can use the longitude and latitude in the data-set to show the location pings in the map. In this sample component, two property sets are defined in the manifest, `samplePropertySet` and `samplePropertySet2`. Users will see two empty columns when the component is added to canvas app before any column names is configured. For a property-set, the corresponding columns are added in the beginning and order will be 0.
+Property-set is used to access individual column values for particular columns in the record. For example, map control can use the longitude and latitude in the data-set to show the location pings in the map. In this sample component, two property sets are defined in the manifest, `samplePropertySet` and `samplePropertySet2`. Users see two empty columns when the component is added to canvas app before any column names is configured. For a property-set, the corresponding columns are added in the beginning and order is 0.
> [!div class="mx-imgBorder"]
> 
### Sizing
-This sample also showcases how the component listens to the container resize. The `trackContainerResize` method should be called within the `init` method so that the `mode.allocatedWidth` and `mode.allocatedHeight` will be provided each time when the `updateView` is being called. If this method is not called initially, they don't have `allocatedWidth` and `allocatedHeight` values provided. If the `allocatedHeight` is –1, that means there is no limit on height. The component should adjust its height based on the provided width.
+This sample also showcases how the component listens to the container resize. The `trackContainerResize` method should be called within the `init` method so that the `mode.allocatedWidth` and `mode.allocatedHeight` is provided each time when the `updateView` is being called. If this method isn't called initially, they don't have `allocatedWidth` and `allocatedHeight` values provided. If the `allocatedHeight` is –1, that means there's no limit on height. The component should adjust its height based on the provided width.
## Dataset API methods that aren't supported in canvas apps
@@ -72,9 +72,9 @@ In this preview for canvas apps, only a limited set of [filtering](../reference/
**View**
-In model-driven apps, views are required for dataset components to get the column's information. In canvas apps, views are used as a filter. It's up to the app maker to decide which columns to be added for each of the component. A view can be selected after a source is selected for the dataset component. This is applicable only when you choose Microsoft Dataverse as a source. Selecting a view applies the view's filter to the source. The view name and view id can be retrieved using the `context.parameters.[dataset_property_name].getTitle()` and `context.parameters.[dataset_property_name].getViewId()` methods.
+Views are applicable only when you choose Microsoft Dataverse as a source. In model-driven apps, views are required for dataset components to get the column's information. In canvas apps, views are used as a filter. It's up to the app maker to decide which columns to be added for each of the component. A view can be selected after a source is selected for the dataset component. Selecting a view applies the view's filter to the source. The view name and view ID can be retrieved using the `context.parameters.[dataset_property_name].getTitle()` and `context.parameters.[dataset_property_name].getViewId()` methods.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/data-set-grid-control.md b/powerapps-docs/developer/component-framework/sample-controls/data-set-grid-control.md
index 9a06d18f4c..815555e971 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/data-set-grid-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/data-set-grid-control.md
@@ -49,7 +49,7 @@ The ***onRowClick*** function attaches the context of the record using its GUID
The ***getSortedColumnsOnView*** method returns the list of columns based on the defined order on the view.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/device-api-control.md b/powerapps-docs/developer/component-framework/sample-controls/device-api-control.md
index cdc23d302c..133bbe8f2b 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/device-api-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/device-api-control.md
@@ -31,7 +31,7 @@ Model-driven and canvas apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/DeviceApiControl).
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
[Image upload component](./image-upload-control.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/formatting-api-control.md b/powerapps-docs/developer/component-framework/sample-controls/formatting-api-control.md
index e590e444f6..a3e68e1326 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/formatting-api-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/formatting-api-control.md
@@ -30,7 +30,7 @@ Model-driven and canvas apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/FormattingAPIControl).
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/iframe-control.md b/powerapps-docs/developer/component-framework/sample-controls/iframe-control.md
index 685061cfbc..735aa5b5ae 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/iframe-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/iframe-control.md
@@ -1,5 +1,5 @@
---
-title: " IFRAME component| Microsoft Docs"
+title: "Implementing an IFRAME component | Microsoft Docs"
description: "This sample describes how to bind a code component to different columns on the form and use the value of these columns as input properties to the component."
author: anuitz
ms.author: anuitz
@@ -12,7 +12,7 @@ search.audienceType:
contributors:
- JimDaly
---
-# Implementing a IFRAME component
+# Implementing an IFRAME component
This sample describes how to bind a code component to different columns on the form and use the value of these columns as input properties to the component.
@@ -30,20 +30,29 @@ Model-driven and canvas apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/IFrameControl).
> [!NOTE]
-> Power Apps component framework does not yet support composite columns, so you will not be able to bind this component to the out of the box latitude and longitude address columns. You need to bind the code component to a different floating-point field.
+> Power Apps component framework doesn't yet support composite columns, so you aren't able to bind this component to the out of the box latitude and longitude address columns. You need to bind the code component to a different floating-point field.
This sample component renders an `IFRAME` which displays `Bing Maps URL`. The component is bound to two floating point columns on the form, which are passed as parameters to the component and injected into the `IFRAME URL` to update the Bing Map to the latitude and longitude of the provided inputs.
-Update the `Manifest` file to include binding to two additional columns on the form.
+Update the `Manifest` file to include binding to two more columns on the form.
This change informs the Power Apps component framework that these bound columns need to be passed to the component during initialization and whenever one of the values is updated.
```xml
-
-
-
+
+
```
-Additional bound properties may be required or not. This will be enforced during the component configuration when the component is being bound to the form. This can be configured by setting the `required` attribute of the property node in the component manifest. Set the value to false if you don't want to require the component property be bound to a field.
+More bound properties might be required. This requirement is enforced during the component configuration when the component is being bound to the form. This can be configured by setting the `required` attribute of the property node in the component manifest. Set the value to false if you don't want to require the component property be bound to a field.
`ComponentFramework.d.ts` needs to be updated to add two columns to `IInputs` interface. This is the format the Power Apps component framework passes the field values. Adding these values to the `IInputs` interface allows your TypeScript file to reference the values and compile successfully.
@@ -56,9 +65,9 @@ Additional bound properties may be required or not. This will be enforced during
The initial rendering generates an `IFRAME` element and appends it to the controls container. This `IFRAME` is used to display the **Bing Map**. The url of the `IFRAME` is set to a `Bing Map URL` and includes the bound columns (latitudeValue and longitudeValue) in the url to center the map at the provided location.
-The [updateView](../reference/control/updateview.md) method is invoked whenever one of these columns are updated on the form. This method updates the url of the **Bing Map** IFRAME to use the new latitude and longitude values passed to the component. To view this component in run time, bind the component to a field on the form like any other code component.
+The [updateView](../reference/control/updateview.md) method is invoked whenever one of these columns is updated on the form. This method updates the url of the **Bing Map** IFRAME to use the new latitude and longitude values passed to the component. To view this component in run time, bind the component to a field on the form like any other code component.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/image-upload-control.md b/powerapps-docs/developer/component-framework/sample-controls/image-upload-control.md
index 28bf075e0f..8097aa8a57 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/image-upload-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/image-upload-control.md
@@ -52,7 +52,7 @@ The `device.pickFile` method opens a dialog box to select files for the upload.
> [!NOTE]
> If the same form or table is used on the legacy web client, then the field will show out-of-box text component on legacy web client, where there might have UX issues. To make it hidden on the legacy web client, we could uncheck the **Visibility** checkbox and check **Hide Default Control** checkbox together.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
[Device API component](./device-api-control.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/increment-control.md b/powerapps-docs/developer/component-framework/sample-controls/increment-control.md
index 1a98f70528..7f4e9677eb 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/increment-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/increment-control.md
@@ -39,7 +39,7 @@ When you click on the button, the value in the text box is increased by 1. The u
Edit the value in the text box, and if it is a valid integer, then it updates the value to Power Apps component framework. You can continuously click the `Increment` button and update it. If it's an invalid integer, an error message pops out.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/linear-input-control.md b/powerapps-docs/developer/component-framework/sample-controls/linear-input-control.md
index 9b94411cab..1b2b5618fc 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/linear-input-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/linear-input-control.md
@@ -61,7 +61,7 @@ public updateView(context: ComponentFramework.IPropBag)
}
```
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/localization-api-control.md b/powerapps-docs/developer/component-framework/sample-controls/localization-api-control.md
index 0b690314e2..25862710e7 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/localization-api-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/localization-api-control.md
@@ -50,7 +50,7 @@ When this line of code is executed, the Power Apps component framework automatic
|1033 |Increment |
|1035 |lisäys |
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/lookup-control.md b/powerapps-docs/developer/component-framework/sample-controls/lookup-control.md
index c17e3d0d00..00f22e8058 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/lookup-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/lookup-control.md
@@ -41,7 +41,7 @@ You'll notice that each of the `Lookup Objects` buttons have the same `onClick`
In `getOutputs`, the component sends back the newly selected record to consume and update. In `updateView`, the component uses the raw value of both lookup properties to display the currently selected lookups for both bound properties.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
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 c59e272a43..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,12 +5,12 @@ author: anuitz
ms.author: anuitz
ms.date: 03/12/2022
ms.reviewer: jdaly
-ms.topic: "article"
+ms.topic: concept-article
---
# Implementing map component
-This sample component changes the user experience of interacting with address fields on the form. Along with the text values of the address, this component provides the ability to visually identify a particular address on a map without navigating to another tab or screen.
+This sample component changes the user experience of interacting with address fields on the form. Along with the text values of the address, this component visually identifies a particular address on a map without navigating to another tab or screen.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -28,14 +28,14 @@ You can download the complete sample component from [here](https://github.com/mi
In the manifest file, we defined property of type `Single line of Text`. We use this to bind it to the address field on the form.
> [!NOTE]
-> You can use any of the map API's that are available in the market. In this example, we are going to show how to do it with the Google Map API.
+> You can use any of the map APIs that are available in the market. In this example, we're going to show how to do it with the Google Map API.
You need to create an API key for the component to access the Google Map API. Follow the instructions(https://developers.google.com/maps/documentation/embed/get-api-key to generate one).
Create a variable name `MAPS_API_KEY` that can be accessed in the context of the component.
Google Map API allows you only to render the maps inside an `IFRAME`. So, you need to create an `IFRAME` element that is going to render the map using the URL we generate.
-By default, we are setting the map to be hidden and display it only when the address value exists on the form.
+By default, we're setting the map to be hidden and display it only when the address value exists on the form.
-`buildMapUrl` and `renderMap` (you can even merge them into one) takes the address string and embeds it onto the map URL by encoding the address string and then sets the IFRAME element's src element to the URL respectively. Also, call the **notifyOutputChanged** method to ensure we notify the component that the rendering has changed.
+`buildMapUrl` and `renderMap` (you can even merge them into one) takes the address string and embeds it onto the map URL by encoding the address string and then sets the IFRAME element's src element to the URL respectively. Also, call the **notifyOutputChanged** method to ensure we notify the component that the rendering changed.
```TypeScript
public renderMap(mapUrl: string) {
@@ -51,7 +51,7 @@ By default, we are setting the map to be hidden and display it only when the add
Ensure you call the `renderMap` function inside the [updateView](../reference/control/updateview.md) function to ensure the control is refreshed every time the view is updated.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/multi-select-option-set-control.md b/powerapps-docs/developer/component-framework/sample-controls/multi-select-option-set-control.md
index d8984b96b3..47270bc1c4 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/multi-select-option-set-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/multi-select-option-set-control.md
@@ -43,7 +43,7 @@ The `getOutputs` method simply returns the currently selected set of values back
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/navigation-api-control.md b/powerapps-docs/developer/component-framework/sample-controls/navigation-api-control.md
index 51cfe4475b..3461a4dda9 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/navigation-api-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/navigation-api-control.md
@@ -15,7 +15,7 @@ contributors:
# Implementing Navigation API component
-This sample component explores the various methods available as part of the Power Apps component framework navigation API. In this sample, you create a series of input elements of type buttons which calls into the respective methods of the navigation API that matches with the value displayed.
+This sample component explores the various methods available as part of the Power Apps component framework navigation API. In this sample, you create a series of buttons that call into the respective methods of the navigation API that matches with the value displayed.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -32,33 +32,33 @@ You can download the complete sample component from [here](https://github.com/mi
The `openAlertDialog` method provides the capability to display an alert dialog containing a message and a button. You can also implement callback methods when the alert dialog is closed or if an error is encountered when loading the dialog.
-In this sample when you click on the `openAlertDialogButton` an alert dialog pops up and sets the value of it to `Alert dialog closed` when the dialog is closed either using the `OK` button or the `X` button.
+In this sample when you select on the `openAlertDialogButton` an alert dialog pops up and sets the value of it to `Alert dialog closed` when the dialog is closed either using the `OK` button or the `X` button.
> [!NOTE]
> This is similar to calling the [Xrm.Navigation.openAlertDialog](../../model-driven-apps/clientapi/reference/Xrm-Navigation/openAlertDialog.md) method in ClientAPI.
The `openConfirmDialog` method provides the ability to display an alert dialog containing a message and two buttons. You can use this method to implement different logic based on the button clicked. You can implement the success callback which is called when the dialog is closed by clicking either of the buttons.
-This sample shows you a confirm dialog when you click on the `openConfirmDialogButton` and sets the value of it to `Ok` or `Cancel`, or `X` depending on the button that was clicked.
+This sample shows you a confirm dialog when you select on the `openConfirmDialogButton` and sets the value of it to `Ok` or `Cancel`, or `X` depending on the button that was clicked.
> [!NOTE]
> This is similar to calling the [Xrm.Navigation.openConfirmDialog](../../model-driven-apps/clientapi/reference/Xrm-Navigation/openConfirmDialog.md) method in ClientAPI.
-The `openFile` method provides the ability to open a file. You'd need to pass in the file object which has the filename, content, mimetype and the filesize. You can also pass in the optional parameter of the mode you want to open the file as 1 or 2, 1 being the default which opens the file in read or open mode.
+The `openFile` method provides the ability to open a file. You'd need to pass in the file object which has the filename, content, mimetype, and the filesize. You can also pass in the optional parameter of the mode you want to open the file as 1 or 2, 1 being the default which opens the file in read or open mode.
This sample opens a file named `SampleDemo.txt` in save mode on clicking the `openFileButton`.
> [!NOTE]
> This is similar to calling the [Xrm.Navigation.openFile](../../model-driven-apps/clientapi/reference/Xrm-Navigation/openFile.md) method in ClientAPI.
-The `openUrl` method provides the ability to open a URL. You need to pass the URL as a string to the method and also pass the optional parameters of height, width and openInNewWindow as true if you want the URL to be opened in a new window.
+The `openUrl` method opens a URL. You need to pass the URL as a string to the method and also pass the optional parameters of height, width, and openInNewWindow as true if you want the URL to be opened in a new window.
This sample opens a new window and loads the microsoft.com home page on clicking the `openUrlButton`.
> [!NOTE]
> This is similar to calling the [Xrm.Navigation.openUrl](../../model-driven-apps/clientapi/reference/Xrm-Navigation/openUrl.md) method in ClientAPI.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/object-output.md b/powerapps-docs/developer/component-framework/sample-controls/object-output.md
index 74154d80ec..21740f338e 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/object-output.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/object-output.md
@@ -1,6 +1,6 @@
---
title: "Object Output Component Sample| Microsoft Docs"
-description: "Learn how you can use the object outout APIs."
+description: "Learn how you can use the object output APIs."
author: anuitz
ms.author: anuitz
ms.date: 06/07/2023
@@ -13,7 +13,7 @@ contributors:
# Object Output Component
-[This article is pre-release documentation and is subject to change.]
+[!INCLUDE [cc-beta-prerelease-disclaimer](../../../includes/cc-beta-prerelease-disclaimer.md)]
This sample component shows how to use object type output properties. This component generates a static object and output via a property which then can be accessed in a canvas app or via client APIs in a model form.
@@ -56,7 +56,7 @@ We also need to create a property dependency between these two properties.
```
-In the index.ts file we need to add [getOutputSchema](../reference/control/getoutputschema.md) method to provide the output object schema. When the control is added to a Canvas App, the platform will call to this method prior to control initialization to receive the output object(s) schema(s).
+In the index.ts file, we need to add [getOutputSchema](../reference/control/getoutputschema.md) method to provide the output object schema. When the control is added to a Canvas App, the platform calls to this method before control initialization to receive the output object(s) schema(s).
```typescript
public async getOutputSchema(context: ComponentFramework.Context): Promise> {
@@ -76,7 +76,7 @@ public getOutputs(): IOutputs {
}
```
-The `onLoadData` method will be called when the **Load Data** button is pressed to load the data to the output object and notify the platform about the output changes. This will trigger onChange behavior in the Canvas App for the control or [OnOutputChange](../../model-driven-apps/clientapi/reference/events/onoutputchange.md) event for client APIs.
+The `onLoadData` method is called when the **Load Data** button is pressed to load the data to the output object and notify the platform about the output changes. This triggers onChange behavior in the Canvas App for the control or [OnOutputChange](../../model-driven-apps/clientapi/reference/events/onoutputchange.md) event for client APIs.
```typescript
private onLoadData = async () => {
@@ -86,7 +86,7 @@ private onLoadData = async () => {
}
```
-### Related topics
+### Related articles
[onOutputChange Event](../../model-driven-apps/clientapi/reference/events/onoutputchange.md)
[StandardControl.getOutputSchema](../reference/control/getoutputschema.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/react-facepile-control.md b/powerapps-docs/developer/component-framework/sample-controls/react-facepile-control.md
index 0c29e92a98..a8ef0255f1 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/react-facepile-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/react-facepile-control.md
@@ -15,7 +15,7 @@ contributors:
# Implementing the FacePile component
-This sample shows how to use React to create components using Power Apps component framework. The facepile sample component is implemented based on React and the Office UI Fabric React components. The code may not reveal the best practices for the mentioned third-party libraries.
+This sample shows how to use React to create components using Power Apps component framework. The facepile sample component is implemented based on React and the Office UI Fabric React components. The code might not reveal the best practices for the mentioned third-party libraries.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -32,19 +32,19 @@ You can download the complete sample component from [here](https://github.com/mi
> [!IMPORTANT]
-> Although the Power Apps host applications work on top of React, the version of React you bundle will not communicate with the host version, nor is it dependent on that version. A new copy of React (or any third-party library you bundle with your component) will be loaded into the host page for every instance of that control, so be mindful of how large you are making your page(s) as you add components. We will have a solution to this issue in a future release.
+> Although the Power Apps host applications work on top of React, the version of React you bundle won't communicate with the host version, nor is it dependent on that version. A new copy of React (or any third-party library you bundle with your component) is loaded into the host page for every instance of that control, so be mindful of how large you're making your page(s) as you add components. We'll have a solution to this issue in a future release.
This sample provides examples on how to add dependencies for third-party libraries and Office UI Fabric, showcasing how to utilize the Office UI Fabric components for React for UI and perform bi-directional data-binding between the Power Apps component framework and the React state model.
-The component sample consists of three Office UI Fabric components: a facepile, a slider, a check box, and a drop-down list. When you move the slider, the number of faces in the facepile changes. The check box components whether the faces fade in and out or simply appear or disappear, and the options in the drop-down list control the size of the faces. If there is no value set, the number of faces defaults to 3.
+The component sample consists of three Office UI Fabric components: a facepile, a slider, a check box, and a drop-down list. When you move the slider, the number of faces in the facepile changes. The check box components whether the faces fade in and out or appear or disappear, and the options in the drop-down list control the size of the faces. If there's no value set, the number of faces defaults to 3.
- When the component is loaded, the slider is set to the bound attribute value. The `context.parameters.[property_name].attributes` property contains the associated metadata.
- An event handler is passed in the React component's props; this will allow the React component to notify the host Power Apps component framework control that a value has changed. The event handler then determines if a call to the **notifyOutputEvents** method is necessary.
-- Sliding the slider will cause React to update the bound value and call the passed in event handler. Inside that handler, if a call is made to the **notifyOutputEvents** method, then the control's [getOutputs](../reference/control/getoutputs.md) method will be called asynchronously and will flow to the Power Apps component framework.
+- Sliding the slider causes React to update the bound value and call the passed in event handler. Inside that handler, if a call is made to the **notifyOutputEvents** method, then the control's [getOutputs](../reference/control/getoutputs.md) method is called asynchronously and flows to the Power Apps component framework.
- The framework host updates the bound attribute value, and the updated value flows to the component, triggering the control's [updateView](../reference/control/updateview.md) method. The control then renders again the React component with the new value.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/table-control.md b/powerapps-docs/developer/component-framework/sample-controls/table-control.md
index bf618a593e..8a876e3fab 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/table-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/table-control.md
@@ -43,7 +43,7 @@ This method returns a `Promise` object, representing the completion or failure o
The callback method injects this information as HTML into a div rendered on the code component to showcase the selected results to the user. If the `Promise` is rejected, the error callback method is invoked where your component can handle the error scenario accordingly.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/table-grid-control.md b/powerapps-docs/developer/component-framework/sample-controls/table-grid-control.md
index 546c64fec5..eac86a3680 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/table-grid-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/table-grid-control.md
@@ -1,6 +1,6 @@
---
title: "Table grid component| Microsoft Docs"
-description: "This sample showcases how to create a simple dataset component, view's column metadata binding, record binding, more records from paging and record navigation to form."
+description: "This sample showcases how to create a basic dataset component, view's column metadata binding, record binding, more records from paging and record navigation to form."
author: anuitz
ms.author: anuitz
ms.date: 03/12/2022
@@ -15,7 +15,7 @@ contributors:
# Implementing table grid component
-This sample showcases how to create a simple dataset component, view's column metadata binding, record binding, more records from paging and record navigation to form.
+This sample showcases how to create a basic dataset component, view's column metadata binding, record binding, more records from paging and record navigation to form.
The component header columns and internal record values are bound to the existing views.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -31,28 +31,28 @@ Model-driven apps
You can download the complete sample component from [here](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework/TableGrid).
-Column Header bind to the View :
+Column Header bind to the View:
View column info lies at `context.parameters.[dataset_property_name].columns`. It's an array type.
-Record binding :
+Record binding:
-- The sorted record Ids are at `context.parameters.[dataset_property_name].sortedRecordIds`
+- The sorted record IDs are at `context.parameters.[dataset_property_name].sortedRecordIds`
- All records info is at `context.parameters.[dataset_property_name].records`
- For each record object, `context.parameters.[dataset_property_name].records[record_Id]`
- Formatted value could be retrieved at `getFormattedValue`
-Load more page of data if needed :
+Load more pages of data if needed:
-`context.parameters.[dataset_property_name].paging` will provide paging functionality like `hasNextPage` and `loadNextPage` data. The `Load More` button is shown if it has next page data.
+`context.parameters.[dataset_property_name].paging` provides paging functionality like `hasNextPage` and `loadNextPage` data. The `Load More` button is shown if it has next page data.
This sample also showcases how the component listens to the container resize.
-The `trackContainerResize` method should be called within [init](../reference/control/init.md) method so that the `mode.allocatedWidth` and `mode.allocatedHeight` will be provided each time [updateView](../reference/control/updateview.md) being called. If this method is not being called initially, then they don't have `allocatedWidth` and `allocatedHeight` provided.
+The `trackContainerResize` method should be called within [init](../reference/control/init.md) method so that the `mode.allocatedWidth` and `mode.allocatedHeight` is provided each time [updateView](../reference/control/updateview.md) being called. If this method isn't being called initially, then they don't have `allocatedWidth` and `allocatedHeight` provided.
-If the allocatedHeight is –1, that means there is no limit on height. The component should adjust its height based on the provided width.
+If the allocatedHeight is –1, that means there's no limit on height. The component should adjust its height based on the provided width.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/sample-controls/webapi-control.md b/powerapps-docs/developer/component-framework/sample-controls/webapi-control.md
index e1f06c50b8..554abaca12 100644
--- a/powerapps-docs/developer/component-framework/sample-controls/webapi-control.md
+++ b/powerapps-docs/developer/component-framework/sample-controls/webapi-control.md
@@ -1,6 +1,6 @@
---
title: "Web API component| Microsoft Docs"
-description: "The web API component is designed to perform create, retrieve, update and delete actions."
+description: "The web API component is designed to perform create, retrieve, update, and delete actions."
author: anuitz
ms.author: anuitz
ms.date: 03/12/2022
@@ -14,7 +14,7 @@ contributors:
---
# Implementing Web API component
-The web API component is designed to perform create, retrieve, update and delete actions. The component renders four buttons, which can be clicked to invoke different web API actions. The result of the web API call is injected into a HTML div element at the bottom of the code component.
+The web API component is designed to perform create, retrieve, update, and delete actions. The component renders four buttons, which can be clicked to invoke different web API actions. The result of the web API call is injected into an HTML div element at the bottom of the code component.
[!INCLUDE[cc-terminology](../../data-platform/includes/cc-terminology.md)]
@@ -31,7 +31,7 @@ You can download the complete sample component from [here](https://github.com/mi
By default, in the sample, the component is configured to perform the create, retrieve, update actions on the `Account` entity and set the name and revenue fields in the web API examples.
-To change the default configuration to any entity or field, update the below configuration values as shown
+To change the default configuration to any entity or field, update the following configuration values as shown
```TypeScript
private static _entityName:string = "account";
@@ -42,17 +42,17 @@ To change the default configuration to any entity or field, update the below con
The `createRecord` method renders three buttons, which allows you to create an account record with the revenue field set to different values (100, 200, 300).
-When you click one of the create buttons, the button's `onClick` event handler checks the value of the button clicked and use the web API action to create an account record with the revenue field set to the button's value. The name field of the account record will be set to `Web API code component (Sample)` with a random `int` appended to the end of the string. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
+When you select one of the create buttons, the button's `onClick` event handler checks the value of the button clicked and use the web API action to create an account record with the revenue field set to the button's value. The name field of the account record is set to `Web API code component (Sample)` with a random `int` appended to the end of the string. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
-The `deleteRecord` method renders a button which opens a lookup dialog when clicked. The lookup dialog allows you to select the account record you want to delete. Once an account record is selected from the lookup dialog, it is passed to the `deleteRecord` to delete the record from the database. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
+The `deleteRecord` method renders a button which opens a lookup dialog when clicked. The lookup dialog allows you to select the account record you want to delete. Once an account record is selected from the lookup dialog, it's passed to the `deleteRecord` to delete the record from the database. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
The FetchXML `retrieveMultiple` method renders a button in the code component. `onClick` of this button, FetchXML is generated and passed to the `retrieveMultiple` function to calculate the average value of the revenue field for all the accounts records. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
The OData `retrieveMultiple` method renders a button in the code component. `onClick` of this button, OData string is generated and passed to the `retrieveMultiple` function to retrieve all account records with a name field that is like 'code component Web API (Sample)', which is true for all account records created by this code component example.
-On successful retrieve of the records, the code component has logic to count how many account records have the revenue field set to 100, 200 or 300, and display this count into an OData status container div on the code component. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
+On successful retrieve of the records, the code component has logic to count how many account records have the revenue field set to 100, 200 or 300, and display this count into an OData status container div on the code component. The callback method from the web API call injects the result of the web API call (success or failure) into the custom control's result div.
-### Related topics
+### Related articles
[Download sample components](https://github.com/microsoft/PowerApps-Samples/tree/master/component-framework)
[How to use the sample components](../use-sample-components.md)
diff --git a/powerapps-docs/developer/component-framework/toc.yml b/powerapps-docs/developer/component-framework/toc.yml
index 0f076981b6..a65dfb5986 100644
--- a/powerapps-docs/developer/component-framework/toc.yml
+++ b/powerapps-docs/developer/component-framework/toc.yml
@@ -16,6 +16,10 @@ items:
href: react-controls-platform-libraries.md
- name: "Style components with modern theming (preview)"
href: fluent-modern-theming.md
+ - name: Dependent libraries (preview)
+ href: dependent-libraries.md
+ - name: Events (preview)
+ href: events.md
- name: Get tooling
href: get-powerapps-cli.md
- name: Limitations
@@ -30,6 +34,10 @@ items:
href: tutorial-create-model-driven-app-dataset-component.md
- name: Create a canvas app dataset component
href: tutorial-create-canvas-dataset-component.md
+ - name: Define an event in a component
+ href: tutorial-define-event.md
+ - name: Use dependent libraries
+ href: tutorial-use-dependent-libraries.md
- name: Online learning
href: /training/paths/use-power-apps-component-framework
- name: Code components ALM
@@ -54,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
@@ -146,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
@@ -452,6 +471,8 @@ items:
href: manifest-schema-reference/css.md
- name: data-set
href: manifest-schema-reference/data-set.md
+ - name: dependency
+ href: manifest-schema-reference/dependency.md
- name: domain
href: manifest-schema-reference/domain.md
- name: external-service-usage
@@ -464,6 +485,8 @@ items:
href: manifest-schema-reference/img.md
- name: manifest
href: manifest-schema-reference/manifest.md
+ - name: platform-action
+ href: manifest-schema-reference/platform-action.md
- name: platform-library
href: manifest-schema-reference/platform-library.md
- name: property-dependencies
diff --git a/powerapps-docs/developer/component-framework/tutorial-define-event.md b/powerapps-docs/developer/component-framework/tutorial-define-event.md
new file mode 100644
index 0000000000..10b4323e4c
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/tutorial-define-event.md
@@ -0,0 +1,455 @@
+---
+title: "Tutorial: Define a custom event in a component"
+description: "In this tutorial, learn how to define a custom event in a PCF control and use it in canvas and model-driven apps."
+author: anuitz
+ms.author: anuitz
+ms.date: 03/24/2025
+ms.reviewer: jdaly
+ms.topic: tutorial
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+# Tutorial: Define a custom event in a component
+
+[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)]
+
+In this tutorial, you'll build a code component that uses custom events and test it using both canvas and model-driven apps. [Learn more about the custom events preview](events.md).
+
+## Goal
+
+The steps in this tutorial guide you to create a code component with two buttons which raise different events for the hosting application can react to. You'll define two events: `customEvent1` and `customEvent2`. Then, the code component exposes two buttons that cause these events to occur.
+
+### Canvas App
+
+The canvas app uses Power Fx expressions on these events to toggle the visible and display mode properties of a control:
+
+:::image type="content" source="media/define-custom-event-tutorial-diagram.png" alt-text="Diagram shows the goal of this sample to define two custom events":::
+
+
+> [!VIDEO https://learn-video.azurefd.net/vod/player?id=9a59542b-cff6-4de5-a347-5da92aae2c9a]
+
+### Model-driven App
+
+The model-driven app uses client-side JavaScript to show an alert when the respective events occur.
+
+## Prerequisites
+
+You should already know how to:
+
+- [Create and build a code component](create-custom-controls-using-pcf.md)
+- [Package a code component](import-custom-controls.md)
+- [Add code components to a model-driven app](add-custom-controls-to-a-field-or-entity.md#add-a-code-component-to-a-column)
+- [Add components to a canvas app](component-framework-for-canvas-apps.md#add-components-to-a-canvas-app)
+
+## Create a new Control
+
+1. Create a new component using this command:
+
+ `pac pcf init -n EventSample -ns SampleNamespace -t field -fw react -npm`
+
+2. Edit the manifest to add the new events
+
+#### [Before](#tab/before)
+
+```xml
+
+
+
+
+
+
+
+
+```
+
+#### [After](#tab/after)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## Define events
+
+In the `EventSample\HelloWorld.tsx` control file, define two events in the interface and bind the events to two different buttons. Also update the import to include `DefaultButton` as the following changes show.
+
+#### [Before](#tab/before)
+
+```typescript
+import * as React from 'react';
+import { Label } from '@fluentui/react';
+
+export interface IHelloWorldProps {
+ name?: string;
+}
+
+export class HelloWorld extends React.Component {
+ public render(): React.ReactNode {
+ return (
+
+ )
+ }
+}
+```
+
+#### [After](#tab/after)
+
+```typescript
+import * as React from 'react';
+import { Label, DefaultButton } from '@fluentui/react';
+
+// This component renders two buttons each one will trigger an event passed via props
+
+export interface IHelloWorldProps {
+ onCustomEvent1: () => void;
+ onCustomEvent2: () => void;
+}
+
+export const HelloWorld: React.FunctionComponent = (props: IHelloWorldProps) => {
+ return (
+
+
+ Trigger event 1
+ Trigger event 2
+
+ );
+};
+```
+
+---
+
+## Modify `updateview` method
+
+In `EventSample\Index.ts`, modify [the updateView method ](reference/react-control/updateview.md) to add handlers for the two button events. These handlers add the two events defined in the manifest to the events in the context passed to the control.
+
+#### [Before](#tab/before)
+
+```typescript
+public updateView(context: ComponentFramework.Context): React.ReactElement {
+ const props: IHelloWorldProps = { name: 'Hello, World!' };
+ return React.createElement(
+ HelloWorld, props
+ );
+}
+```
+
+#### [After](#tab/after)
+
+```typescript
+public updateView(context: ComponentFramework.Context): React.ReactElement {
+ const props: IHelloWorldProps = {
+ onCustomEvent1: ()=> {
+ context.events.customEvent1()
+ },
+ onCustomEvent2: () => {
+ context.events.customEvent2()
+ }
+ };
+ return React.createElement(
+ HelloWorld, props
+ );
+}
+```
+
+---
+
+## Build and package
+
+As usual, you need to complete these steps to use this control:
+
+1. [Create and build the code component](create-custom-controls-using-pcf.md)
+1. [Package the code component](import-custom-controls.md)
+1. [Deploy the code component](import-custom-controls.md#deploying-code-components)
+
+## Use in a canvas app
+
+To use this control in a canvas app, you need to:
+
+1. [Create a new blank Canvas App](../../maker/canvas-apps/create-blank-app.md)
+1. [Add the new component to the canvas app](component-framework-for-canvas-apps.md#add-components-to-a-canvas-app)
+1. [Add a new control](../../maker/canvas-apps/add-configure-controls.md). This example uses a text control.
+
+ :::image type="content" source="media/event_canvas_sample_app.png" alt-text="Image of the Canvas App with controls added." lightbox="media/event_canvas_sample_app.png":::
+
+1. Add two global variables to the app: `isVisible` and `canEdit`.
+1. Set `canEdit` to the `DisplayMode` property of the text control.
+
+ :::image type="content" source="media/event_canvas_sample_app_displaymode.png" alt-text="Image of the DisplayMode property of the text control" lightbox="media/event_canvas_sample_app_displaymode.png":::
+
+1. Set `isVisible` to the `Visible` property of the text control.
+
+ :::image type="content" source="media/event_canvas_sample_app_visible.png" alt-text="Image of the Visible property of the text control" lightbox="media/event_canvas_sample_app_visible.png":::
+
+1. Set custom actions on the new custom control to update the `isVisible` and `canEdit` variables when the buttons are clicked.
+
+ :::image type="content" source="media/event_canvas_sample_app_customevents.png" alt-text="Image of the Custom Event properties of the new component" lightbox="media/event_canvas_sample_app_customevents.png":::
+
+ |Event|Power FX expression|
+ |---|---|
+ |customEvent1|`If(isVisible, Set (isVisible, false), Set (isVisible, true))`|
+ |customEvent2|`If(canEdit = DisplayMode.Edit, Set(canEdit, DisplayMode.Disabled), Set (canEdit, DisplayMode.Edit))`|
+
+### Test the canvas app
+
+1. Press **Trigger event 1**.
+
+ **Expected**: The text control toggles between visible and hidden
+
+1. Press **Trigger event 2**.
+
+ **Expected**: The text control toggles between editable and read only.
+
+## Use in a model-driven app
+
+> [!NOTE]
+> These steps refer to instructions described in [Walkthrough: Write your first client script](../model-driven-apps/clientapi/walkthrough-write-your-first-client-script.md).
+
+1. Create a new JavaScript web resource to run on the `onLoad` event of a form. This script binds two event handlers to the new events for the controls on load of the form.
+
+ ```javascript
+ /* eslint-disable */
+ "use strict";
+
+ var MyScriptsNameSpace = window.MyScriptsNameSpace || {};
+ (function () {
+
+ const controlName1 = "cr116_personid";
+
+ this.onLoad = function (executionContext) {
+ const formContext = executionContext.getFormContext();
+
+ const sampleControl1 = formContext.getControl(controlName1);
+ sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1);
+ sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2);
+ };
+
+ this.onSampleControl1CustomEvent1 = function (params) {
+ alert(`SampleControl1 Custom Event 1`);
+ }.bind(this);
+
+ this.onSampleControl1CustomEvent2 = function (params) {
+ alert(`SampleControl1 Custom Event 2`);
+ }.bind(this);
+
+ }).call(MyScriptsNameSpace);
+ ```
+
+1. Complete the following steps as you normally do:
+
+ 1. [Upload your new JavaScript file as a web resource](../model-driven-apps/clientapi/walkthrough-write-your-first-client-script.md#step-3-upload-your-code-as-a-web-resource).
+ 1. [Add the component to the model-driven form](code-components-model-driven-apps.md#add-code-components-to-model-driven-apps).
+ 1. [Associate the webresource to the form](../model-driven-apps/clientapi/walkthrough-write-your-first-client-script.md#step-4-associate-your-web-resource-to-a-form).
+
+1. [Configure the On Load event](../model-driven-apps/clientapi/walkthrough-write-your-first-client-script.md#configure-form-on-load-event) as shown in the following image:
+
+ :::image type="content" source="media/event_mda_sample_jsbinding.png" alt-text="Image of the JavaScript binding for the Model Driven App Form" lightbox="media/event_mda_sample_jsbinding.png":::
+
+1. Test your app.
+
+ When you navigate to the form and press **Trigger event 1**, an alert displays `SampleControl1 Custom Event 1`. When you press **Trigger event 2**, an alert displays `SampleControl1 Custom Event 2`.
+
+## Passing payload in events
+
+As described in [Defining an event for model-driven apps](events.md#defining-an-event-for-model-driven-apps), you can pass payload in events in model-driven apps. You can modify this example in the following way to see how this works.
+
+:::image type="content" source="media/passing-payload-in-events.png" alt-text="Diagram shows multiple controls generating multiple events with a call back being made":::
+
+
+
+### Pass payload with event
+
+Change the `EventSample\index.ts` so that the events pass a message payload and in the second event also pass a callback function that changes an internal variable
+
+#### [Before](#tab/before)
+
+```typescript
+public updateView(context: ComponentFramework.Context): React.ReactElement {
+ const props: IHelloWorldProps = {
+ onCustomEvent1: ()=> {
+ context.events.customEvent1()
+ },
+ onCustomEvent2: () => {
+ context.events.customEvent2()
+ }
+ };
+ return React.createElement(
+ HelloWorld, props
+ );
+}
+```
+
+#### [After](#tab/after)
+
+```typescript
+public updateView(context: ComponentFramework.Context): React.ReactElement {
+ const props: IHelloWorldProps = {
+ onCustomEvent1: () => {
+ // Trigger event with a string as payload
+ context.events.customEvent1("Hello from event 1")
+ },
+ onCustomEvent2: () => {
+ let defaultPrevented = false;
+ // Trigger event with a payload object and a preventDefault function
+ context.events.customEvent2({ message: "Hello from event 2", preventDefault: () => { defaultPrevented = true } })
+
+ // Check if the event was prevented
+ if (defaultPrevented) {
+ alert("Event 2 prevented default!");
+ } else {
+ alert("Event 2 default NOT prevented");
+ }
+ }
+ };
+ return React.createElement(
+ HelloWorld, props
+ );
+}
+```
+
+---
+
+Then:
+
+1. [Rebuild and Deploy the component](tutorial-define-event.md#build-and-package).
+1. Add another field to the form used [before](tutorial-define-event.md#use-in-a-model-driven-app) and also set that to use the new component.
+
+ :::image type="content" source="media/event_mda_sample_param.png" alt-text="Diagram shows multiple controls added to the form":::
+
+### Use the payload in the event handler
+
+Update the `onLoad` function to set the event handlers on the custom controls to react to events from both controls and also to make use of the parameters being passed
+
+#### [Before](#tab/before)
+
+```javascript
+/* eslint-disable */
+"use strict";
+
+var MyScriptsNameSpace = window.MyScriptsNameSpace || {};
+(function () {
+
+const controlName1 = "cr116_personid";
+
+this.onLoad = function (executionContext) {
+ const formContext = executionContext.getFormContext();
+
+ const sampleControl1 = formContext.getControl(controlName1);
+ sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1);
+ sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2);
+};
+
+this.onSampleControl1CustomEvent1 = function (params) {
+ alert(`SampleControl1 Custom Event 1`);
+}.bind(this);
+
+this.onSampleControl1CustomEvent2 = function (params) {
+ alert(`SampleControl1 Custom Event 2`);
+}.bind(this);
+
+}).call(MyScriptsNameSpace);
+```
+
+#### [After](#tab/after)
+
+```javascript
+/* eslint-disable */
+"use strict";
+
+var MyScriptsNameSpace = window.MyScriptsNameSpace || {};
+(function () {
+
+const controlName1 = "cr116_personid";
+const controlName2 = "cr116_haircolor";
+
+this.onLoad = function (executionContext) {
+ const formContext = executionContext.getFormContext();
+
+ const sampleControl1 = formContext.getControl(controlName1);
+ sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1);
+ sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2);
+
+ const sampleControl2 = formContext.getControl(controlName2);
+ if (sampleControl2) {
+ sampleControl2.addEventHandler("customEvent1", this.onSampleControl2CustomEvent1);
+ sampleControl2.addEventHandler("customEvent2", this.onSampleControl2CustomEvent2);
+ }
+};
+
+this.onSampleControl1CustomEvent1 = function (params) {
+ alert(`SampleControl1 Custom Event 1: ${params.message}`);
+}.bind(this);
+
+this.onSampleControl1CustomEvent2 = function (params) {
+ alert(`SampleControl1 Custom Event 2: ${params.message}`);
+}.bind(this);
+
+this.onSampleControl2CustomEvent1 = function (params) {
+ alert(`SampleControl2 Custom Event 1: ${params}`);
+}
+
+this.onSampleControl2CustomEvent2 = function (params) {
+ alert(`SampleControl2 Custom Event 2: ${params.message}`);
+ // prevent the default action for the event
+ params.preventDefault();
+}*/
+}).call(MyScriptsNameSpace);
+```
+
+---
+
+### Test the model-driven app
+
+1. Navigate to the form.
+1. Press **Trigger event 1** on the _first_ field.
+
+ **Expected**: A pop-up displays **SampleControl1 Custom Event 1: Hello from event 1** on the first field.
+
+1. Press **Trigger event 2** on the _first_ field.
+
+ **Expected**: A pop-up displays **SampleControl1 Custom Event 2: Hello from event 2** on the first field followed by an alert from the first control that says **Event 2 default NOT prevented**
+
+1. Press **Trigger event 1** on the _second_ field.
+
+ **Expected**: A pop-up displays **SampleControl2 Custom Event 1: Hello from event 1** on the second field.
+
+1. Press **Trigger event 2** on the _second_ field.
+
+ **Expected**: A pop-up displays **SampleControl2 Custom Event 2: Hello from event 2** on the second field followed by an alert from the second control that says **Event 2 default prevented**
+
+### Related articles
+
+[Define Events (preview)](events.md)
\ No newline at end of file
diff --git a/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md b/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md
new file mode 100644
index 0000000000..a314645db6
--- /dev/null
+++ b/powerapps-docs/developer/component-framework/tutorial-use-dependent-libraries.md
@@ -0,0 +1,628 @@
+---
+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: 04/04/2025
+ms.reviewer: jdaly
+ms.topic: tutorial
+ms.subservice: pcf
+contributors:
+ - JimDaly
+ - kierantpetrie
+---
+# Tutorial: Use dependent libraries in a component
+
+[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)]
+
+This tutorial shows how to build a code component for model-driven apps that is dependent on libraries that are contained in another component.
+[Learn more about the dependent libraries preview](dependent-libraries.md)
+
+## Goal
+
+Follow the steps in this tutorial to create a library control and a control that depends on it. This tutorial contains the following steps:
+
+1. [Build the library component](#1-build-the-library-component): Create a component that only contains the reusable library. For simplicity, this control only contains the reusable library. There's no reason it couldn't also provide functionality.
+1. [Build the dependent control](#2-build-the-dependent-control): Create a component that uses the library defined in the library control and add it to a form of a model-driven app to verify that it works.
+1. [Load dependent library on demand](#3-load-dependent-library-on-demand): Expand on the example to make the dependent component load the library resource on demand rather than have the framework load the library when the control loads.
+
+## Prerequisites
+
+You should already know how to:
+
+- [Create and build a code component](create-custom-controls-using-pcf.md)
+- [Package a code component](import-custom-controls.md)
+- [Add code components to a model-driven app](add-custom-controls-to-a-field-or-entity.md#add-a-code-component-to-a-column)
+
+## 1. Build the library component
+
+This component doesn't provide any capabilities by itself. It's simply a container for the library.
+
+The first step is to create a new component using the [pac pcf init command](/power-platform/developer/cli/reference/pcf#pac-pcf-init):
+
+ ```cmd
+ pac pcf init -n StubLibrary -ns SampleNamespace -t field -npm
+ ```
+
+### Define the library
+
+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`:
+
+ ```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`:
+
+ ```typescript
+ /* eslint-disable no-var */
+ declare global {
+ var myLib: typeof import('myLib');
+ }
+
+ export { };
+ ```
+
+1. Update tsconfig.json to allow UMD modules and javascript code as follows:
+
+ #### [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"
+ },
+ }
+ ```
+ ---
+
+### Add the library
+
+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";
+
+ function sayHello() {
+ return "Hello from myLib";
+ }
+
+ exports.sayHello = sayHello;
+
+ return exports;
+ })(/** @type {import('myLib')} */ ({}));
+ ```
+
+### Add Configuration data
+
+1. Add a file named `featureconfig.json` in the root folder of the project.
+1. Add the following text to the `featureconfig.json` file:
+
+ ```json
+ {
+ "pcfAllowCustomWebpack": "on",
+ "pcfAllowLibraryResources": "on"
+ }
+ ```
+
+ [Learn more about the featureconfig.json file](dependent-libraries.md#featureconfigjson)
+
+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"
+ },
+ }
+ ```
+
+ [Learn more about the webpack.config.js file](dependent-libraries.md#webpackconfigjs)
+
+1. Add a reference to the library under the `resources` in the control manifest.
+
+#### [Before](#tab/before)
+
+```xml
+
+
+
+```
+
+#### [After](#tab/after)
+
+```xml
+
+
+
+
+
+
+```
+
+---
+
+### Add the library to window
+
+The last step is to edit the `index.ts` of the control to bind the library to the [window](https://developer.mozilla.org/docs/Web/API/Window).
+
+#### [Before](#tab/before)
+
+```typescript
+import { IInputs, IOutputs } from "./generated/ManifestTypes";
+
+export class StubLibrary
+implements ComponentFramework.StandardControl
+{
+ 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 StubLibrary
+implements ComponentFramework.StandardControl
+{
+ 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.myLib = myLib;
+})();
+```
+
+---
+
+The library project should look like this:-
+
+:::image type="content" source="media/dependent-library-libprojectview.png" alt-text="View of the project folder":::
+
+### Build and package the library component
+
+To finish the library component, complete the following steps as usual:
+
+1. [Create and build the code component](create-custom-controls-using-pcf.md)
+1. [Package the code component](import-custom-controls.md)
+1. [Deploy the code component](import-custom-controls.md#deploying-code-components)
+
+## 2. Build the dependent control
+
+Now that you have a library control, you need a control to depend on it.
+
+1. Create a new component using this command:
+
+ ```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"
+ }
+ ```
+
+1. Add the dependent resource in the control manifest.
+
+ Use the `schemaName` of the dependent control `[solution prefix]_[namespace].[control name]` which you can find in the `solution.xml` file for the dependent component. The XML in the solution.xml file might look like this:
+
+ ```xml
+
+
+
+ ```
+
+#### [Before](#tab/before)
+
+```xml
+
+
+
+
+
+```
+
+#### [After](#tab/after)
+
+```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.
+
+#### [Before](#tab/before)
+
+```typescript
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+
+export interface IHelloWorldProps {
+ name?: string;
+}
+
+export class HelloWorld extends React.Component {
+ public render(): React.ReactNode {
+ return (
+
+ )
+ }
+}
+
+```
+
+#### [After](#tab/after)
+
+```typescript
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+
+export interface IHelloWorldProps {
+ name?: string;
+}
+
+export class HelloWorld extends React.Component {
+ public render(): React.ReactNode {
+ return (
+
+ )
+ }
+}
+```
+
+---
+
+### Build and package the dependent component
+
+To finish the dependent component, complete the following steps as usual:
+
+1. [Create and build the code component](create-custom-controls-using-pcf.md)
+1. [Package the code component](import-custom-controls.md)
+1. [Deploy the code component](import-custom-controls.md#deploying-code-components)
+
+### Add the component to a form
+
+1. [Add the component to the model-driven form](code-components-model-driven-apps.md#add-code-components-to-model-driven-apps).
+
+1. Navigate to the form and you should see the component show the text `Hello from myLib from Dependency`.
+
+ :::image type="content" source="media/dependent-library-running.png" alt-text="Image of component running in an environment":::
+
+## 3. Load dependent library on demand
+
+You can expand on this example by changing the dependent component to load the library resource on demand rather than have the framework load the library when the component loads. On demand load behavior is useful if the libraries being used by the control are large and would increase the load time of the form.
+
+### Specify on demand load behavior
+
+To specify on demand load behavior, modify the control manifest of the component created in [2. Build the dependent control](#2-build-the-dependent-control).
+
+#### [Before](#tab/before)
+
+```xml
+
+
+
+
+
+
+```
+
+#### [After](#tab/after)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+### Modify the dependent component to load library on demand
+
+Modify the `HelloWorld.tsx` to add a state and methods to update it once the dependency loads.
+
+#### [Before](#tab/before)
+
+```typescript
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+
+export interface IHelloWorldProps {
+ name?: string;
+}
+
+export class HelloWorld extends React.Component {
+ public render(): React.ReactNode {
+ return (
+
+ )
+ }
+}
+```
+
+#### [After](#tab/after)
+
+```typescript
+import * as React from 'react';
+import { Label } from '@fluentui/react-components';
+
+export interface IHelloWorldProps {
+ name?: string;
+}
+
+export class HelloWorld extends React.Component {
+ constructor(props: IHelloWorldProps) {
+ super(props);
+ this.state = {
+ loaded: false
+ };
+ }
+
+ public afterPageLoad() {
+ this.setState({ loaded: true });
+ }
+
+ public render(): React.ReactNode {
+ return (
+
+ )
+ }
+}
+```
+
+---
+
+### Update index.ts
+
+When the script is loaded on demand, you need to make slight adjustments to how the component is created and initialized. For example, new variables for references to the context and the container to update the state.
+
+Most importantly add a `getActions` method to react to the On Load and request the dependent control to be loaded.
+
+#### [Before](#tab/before)
+
+```typescript
+import { IInputs, IOutputs } from "./generated/ManifestTypes";
+import { HelloWorld, IHelloWorldProps } from "./HelloWorld";
+import * as React from "react";
+
+export class DependencyControl implements ComponentFramework.ReactControl {
+ private notifyOutputChanged: () => void;
+
+ constructor() {
+ // Empty
+ }
+
+ public init(
+ context: ComponentFramework.Context,
+ notifyOutputChanged: () => void,
+ state: ComponentFramework.Dictionary
+ ): void {
+ this.notifyOutputChanged = notifyOutputChanged;
+ }
+
+ public updateView(context: ComponentFramework.Context): React.ReactElement {
+ const props: IHelloWorldProps = { name: 'Power Apps' };
+ return React.createElement(
+ HelloWorld, props
+ );
+ }
+
+ public getOutputs(): IOutputs {
+ return { };
+ }
+
+ public destroy(): void {
+ // Add code to cleanup control if necessary
+ }
+}
+
+```
+
+#### [After](#tab/after)
+
+```typescript
+import { IInputs, IOutputs } from "./generated/ManifestTypes";
+import { HelloWorld} from "./HelloWorld";
+import * as React from "react";
+
+export class DependencyControl implements ComponentFramework.ReactControl {
+ private theComponent: ComponentFramework.ReactControl;
+ private notifyOutputChanged: () => void;
+ private context: ComponentFramework.Context;
+ private mainContainerRef: React.RefObject = React.createRef();
+
+ constructor() {
+ // Empty
+ }
+
+ public init(
+ context: ComponentFramework.Context,
+ notifyOutputChanged: () => void,
+ state: ComponentFramework.Dictionary
+ ): void {
+ this.notifyOutputChanged = notifyOutputChanged;
+ this.context = context;
+ }
+
+ public updateView(context: ComponentFramework.Context): React.ReactElement {
+ return React.createElement(
+ HelloWorld, {ref: this.mainContainerRef }
+ );
+ }
+
+ public getOutputs(): IOutputs {
+ return { };
+ }
+
+ public getActions(): {afterPageLoad: ()=>Promise} {
+ return {
+ afterPageLoad: async () => {
+ console.log("afterPageLoad");
+ const loadedControl = await this.context.utils.loadDependency?.("samples_SampleNamespace.StubLibrary");
+ if (loadedControl) {
+ this.mainContainerRef.current?.afterPageLoad();
+ }
+ },
+ };
+ }
+
+ public destroy(): void {
+ // Add code to cleanup control if necessary
+ }
+}
+```
+
+---
+
+### Final steps
+
+1. Update the version number of the control in the `ControlManifest.Input.xml` and the version in the `Solution.xml`
+1. Rebuild, package, deploy, and publish the solution with the updated control.
+
+### Verify results
+
+Now, when the page loads you see the control load with `Loading...` displayed.
+
+:::image type="content" source="media/dependent-library-loading.png" alt-text="Image of component while the form loads" lightbox="media/dependent-library-loading.png":::
+
+Once the page loads, the control updates to display `Hello from myLib Dependency On Demand Load`.
+
+:::image type="content" source="media/dependent-library-loaded.png" alt-text="Image of component once the form has loaded" lightbox="media/dependent-library-loaded.png":::
+
+### Related articles
+
+[Dependent Libraries (preview)](dependent-libraries.md)
diff --git a/powerapps-docs/developer/component-framework/use-sample-components.md b/powerapps-docs/developer/component-framework/use-sample-components.md
index a5ba819fec..5a9e41ccb3 100644
--- a/powerapps-docs/developer/component-framework/use-sample-components.md
+++ b/powerapps-docs/developer/component-framework/use-sample-components.md
@@ -5,7 +5,7 @@ author: anuitz
ms.author: anuitz
ms.date: 08/01/2023
ms.reviewer: jdaly
-ms.topic: article
+ms.topic: how-to
ms.subservice: pcf
contributors:
- JimDaly
diff --git a/powerapps-docs/developer/data-platform/TOC.yml b/powerapps-docs/developer/data-platform/TOC.yml
index cb74c42adf..7be9f6d78e 100644
--- a/powerapps-docs/developer/data-platform/TOC.yml
+++ b/powerapps-docs/developer/data-platform/TOC.yml
@@ -24,6 +24,8 @@
href: security-access-coding.md
- name: Security roles and templates
href: security-roles.md
+ - name: Column-level security
+ href: column-level-security.md
- name: Microsoft Entra ID group teams
href: aad-group-team.md
- name: Work with data using code
@@ -46,7 +48,7 @@
href: ./search/statistics-status.md
- name: Legacy search
href: ./search/legacy.md
- - name: Custom Analyzers
+ - name: Configure Azure AI built-in analyzers
href: ./search/custom-search-analyzer.md
- name: Query data using FetchXml
items:
@@ -137,11 +139,8 @@
- name: "Dataverse SQL"
href: how-dataverse-sql-differs-from-transact-sql.md
- name: Bulk Operation messages
- displayName: CreateMultiple, UpdateMultiple, UpsertMultiple
+ displayName: CreateMultiple, UpdateMultiple, UpsertMultiple, DeleteMultiple
href: bulk-operations.md
- items:
- - name: Use DeleteMultiple (preview)
- href: deletemultiple.md
- name: Restore deleted records (preview)
displayName: RecycleBin, Restore
href: restore-deleted-records.md
@@ -411,8 +410,6 @@
href: time-zone-entities.md
- name: BusinessUnit table
href: businessunit-entity.md
- - name: Field security tables
- href: field-security-entities.md
- name: Use access teams and owner teams to collaborate and share information
href: use-access-teams-owner-teams-collaborate-share-information.md
- name: Azure AD user tables
@@ -442,8 +439,8 @@
href: entity-attribute-metadata-messages.md
- name: Behavior and format of the date and time column
href: behavior-format-date-time-attribute.md
- - name: Formula, calculated, and rollup columns
- href: calculated-rollup-attributes.md
+ - name: Specialized columns
+ href: specialized-columns.md
- name: Create auto-number columns
href: create-auto-number-attributes.md
- name: Choices
@@ -537,8 +534,8 @@
href: walkthrough-register-app-azure-active-directory.md
- name: "Tutorial: Create an ASP.NET Core Blazor WebAssembly App"
href: walkthrough-blazor-webassembly-single-tenant.md
- - name: "Quick Start: Register and configure a SPA application with msal.js"
- href: quick-start-register-configure-simplespa-application-msal-js.md
+ - name: "Quick Start: Register and configure a SPA application with MSAL.js"
+ href: webapi/quick-start-js-spa.md
- name: Transition apps to Dataverse ServiceClient
href: sdk-client-transition.md
- name: Best practices
diff --git a/powerapps-docs/developer/data-platform/aad-group-team.md b/powerapps-docs/developer/data-platform/aad-group-team.md
index e49171c867..e5ebbca4ae 100644
--- a/powerapps-docs/developer/data-platform/aad-group-team.md
+++ b/powerapps-docs/developer/data-platform/aad-group-team.md
@@ -6,7 +6,7 @@ ms.date: 09/21/2023
ms.suite: ""
ms.tgt_pltfrm: ""
-ms.topic: "article"
+ms.topic: how-to
applies_to:
- "Dynamics 365 (online)"
ms.assetid: 767f39d4-6a8e-48f0-bf7d-69ea1191acef
diff --git a/powerapps-docs/developer/data-platform/aaduser-entity.md b/powerapps-docs/developer/data-platform/aaduser-entity.md
index ca07df0d7f..02a734eab1 100644
--- a/powerapps-docs/developer/data-platform/aaduser-entity.md
+++ b/powerapps-docs/developer/data-platform/aaduser-entity.md
@@ -1,14 +1,13 @@
---
-title: "Azure Active Directory user (AADUser) table (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
-description: "An Azure Active Directory user virtual table in Microsoft Dataverse." # 115-145 characters including spaces. This abstract displays in the search result.
-ms.custom: ""
+title: "Azure Active Directory user (AADUser) table (Microsoft Dataverse) | Microsoft Docs"
+description: "An Azure Active Directory user virtual table in Microsoft Dataverse."
ms.date: 04/20/2022
ms.reviewer: "pehecke"
ms.topic: "article"
-author: "NHelgren" # GitHub ID
+author: "NHelgren"
ms.service: powerapps
ms.subservice: dataverse-developer
-ms.author: "nhelgren" # MSFT alias of Microsoft employees only
+ms.author: "nhelgren"
search.audienceType:
- developer
---
diff --git a/powerapps-docs/developer/data-platform/access-web-services.md b/powerapps-docs/developer/data-platform/access-web-services.md
index bcd7eb4337..e21a9f3d81 100644
--- a/powerapps-docs/developer/data-platform/access-web-services.md
+++ b/powerapps-docs/developer/data-platform/access-web-services.md
@@ -2,16 +2,16 @@
title: "Access external web services (Microsoft Dataverse) | MicrosoftDocs"
description: "Learn how to access a web service from a custom plug-in or workflow activity."
ms.custom: ""
-ms.date: 06/23/2022
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
+ms.date: 06/10/2025
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: "pehecke"
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
- - PHecke
+ - phecke
---
# Access external web services
@@ -19,32 +19,80 @@ Plug-ins and custom workflow activities can access the network through the HTTP
- Your server must have the current [TLS and cipher suites](/power-platform/admin/onpremises-server-cipher-tls-requirements).
- Only the HTTP and HTTPS protocols are allowed.
-- Access to localhost (loopback) is not permitted.
-- IP addresses cannot be used. You must use a named web address that requires DNS name resolution.
-- Anonymous authentication is supported and recommended. There is no provision for prompting the logged on user for credentials or saving those credentials.
-- Your server must allow connections from [Power Platform and Dynamics 365 services IP address values specified under the AzureCloud service tag](/power-platform/admin/online-requirements#ip-addresses-required).
+- Access to localhost (loopback) isn't permitted.
+- IP addresses can't be used. You must use a named web address that requires DNS name resolution.
+- Anonymous authentication is supported and recommended. There's no provision for prompting the logged on user for credentials, or saving those credentials.
+- Your server must allow connections from Power Platform and Dynamics 365 services [IP address values](/power-platform/admin/online-requirements#ip-addresses-required) specified under the `PowerPlatformPlex` service tag.
-Other methods of accessing web services include the use of Webhooks and the [!INCLUDE [pn_azure_service_bus](../../includes/pn_azure_service_bus.md)]. Refer to the links provided below for more information on those topics.
+Other methods of accessing web services include the use of Webhooks and the [!INCLUDE [pn_azure_service_bus](../../includes/pn_azure_service_bus.md)]. Refer to the links provided in the next sections for more information on those topics.
## How to access external web services
-Today most people are familiar with the [System.Net.Http.HttpClient Class](/dotnet/api/system.net.http.httpclient). `HttpClient` was introduced with .NET 4.5 and provides significant capabilities over the [System.Net.WebClient Class](/dotnet/api/system.net.webclient) which is still available.
-
-For new plug-ins you should use `HttpClient` because [the .NET team doesn't recommend WebClient for new development](/dotnet/api/system.net.webclient?#remarks). However, this doesn't mean you must replace any legacy code uses of `WebClient` that you find. Most of the advantages provided in `HttpClient` do not necessarily provide advantages within a plug-in. `HttpClient` is intended to be re-used and is asynchronous by default. Unless you are making multiple HTTP requests within your plug-in, `WebClient` is designed for a single request. Because `HttpClient` is asynchronous by default, you need to break away from typical use patterns and add code to force the operations to be performed synchronously, typically by removing the `await` keyword and appending `.GetAwaiter().GetResult()` to any asynchronous calls.
-
-`WebClient` provides simple synchronous methods such as [UploadData](/dotnet/api/system.net.webclient.uploaddata), [DownloadFile](/dotnet/api/system.net.webclient.downloadfile) which don't clearly expose the underlying HTTP method used, but they can be set using specific overrides such as [UploadString(String, String, String)](/dotnet/api/system.net.webclient.uploadstring?#system-net-webclient-uploadstring(system-string-system-string-system-string)) in case you want to use `PATCH` instead of `POST`.
-
-In most cases outside of plug-ins, you will want to use `HttpClient`. Within plug-ins, you can also use `WebClient` if you prefer.
+Today most people are familiar with the [System.Net.Http.HttpClient Class](/dotnet/api/system.net.http.httpclient). `HttpClient` was introduced with .NET Framework 4.5 and provides significant capabilities over the [System.Net.WebClient Class](/dotnet/api/system.net.webclient), which is now obsolete.
+
+`HttpClient` is intended to be reused and is asynchronous by default. Because `HttpClient` is asynchronous by default, you need to break away from typical use patterns and add code to force the operations to be performed synchronously, typically by removing the `await` keyword and appending `.GetAwaiter().GetResult()` to any asynchronous calls.
+
+```csharp
+public void Execute(IServiceProvider serviceProvider)
+{
+ //Extract the tracing service for use in plug-in debugging.
+ ITracingService tracingService =
+ (ITracingService)serviceProvider.GetService(typeof(ITracingService));
+
+ try
+ {
+ tracingService.Trace("Downloading the target URI: " + webAddress);
+
+ try
+ {
+ // Download the target URI using a Web client. Any .NET class that uses the
+ // HTTP or HTTPS protocols and a DNS lookup should work.
+ using (HttpClient client = new HttpClient())
+ {
+ client.Timeout = TimeSpan.FromMilliseconds(15000); //15 seconds
+ client.DefaultRequestHeaders.ConnectionClose = true; //Set KeepAlive to false
+
+
+ HttpResponseMessage response = client.GetAsync(webAddress).Result; //Make sure it is synchonrous
+ response.EnsureSuccessStatusCode();
+
+ string responseText = response.Content.ReadAsStringAsync().Result; //Make sure it is synchonrous
+ tracingService.Trace(responseText);
+ //Log success in the Plugin Trace Log:
+ tracingService.Trace("HttpClientPlugin completed successfully.");
+ }
+ }
+
+ catch (AggregateException aex)
+ {
+ tracingService.Trace("Inner Exceptions:");
+
+ foreach (Exception ex in aex.InnerExceptions) {
+ tracingService.Trace(" Exception: {0}", ex.ToString());
+ }
+
+ throw new InvalidPluginExecutionException(string.Format(CultureInfo.InvariantCulture,
+ "An exception occurred while attempting to issue the request.", aex));
+ }
+ }
+ catch (Exception e)
+ {
+ tracingService.Trace("Exception: {0}", e.ToString());
+ throw;
+ }
+}
+```
+
+More information: [Sample: Web access from a plug-in](org-service/samples/web-access-plugin.md)
## Best practices
-As called out in the following best practices topics:
+As called out in the following best practices articles:
- [Set KeepAlive to false when interacting with external hosts in a plug-in](best-practices/business-logic/set-keepalive-false-interacting-external-hosts-plugin.md)
-- [Set Timeout when making external calls in a plug-in](best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md)
-
-You should make sure to set an appropriate `Timeout` period for your external calls and disable `KeepAlive`. See the above links for more information.
+- [Set time-out when making external calls in a plug-in](best-practices/business-logic/set-timeout-for-external-calls-from-plug-ins.md)
+You should make sure to set an appropriate `Timeout` period for your external calls and disable `KeepAlive`. See the previous links for more information.
## See also
@@ -52,7 +100,5 @@ You should make sure to set an appropriate `Timeout` period for your external ca
[Workflow extensions](workflow/workflow-extensions.md)
[Azure integration](azure-integration.md)
[Use Webhooks](use-webhooks.md)
-[Sample: Web access from a sandboxed plug-in](org-service/samples/web-access-plugin.md)
-
[!INCLUDE[footer-include](../../includes/footer-banner.md)]
diff --git a/powerapps-docs/developer/data-platform/activitypointer-activity-entity.md b/powerapps-docs/developer/data-platform/activitypointer-activity-entity.md
index 11d8a89c06..7fcf40ecca 100644
--- a/powerapps-docs/developer/data-platform/activitypointer-activity-entity.md
+++ b/powerapps-docs/developer/data-platform/activitypointer-activity-entity.md
@@ -3,7 +3,7 @@ title: Activity (ActivityPointer) table
description: Learn how to work with the Activity (ActivityPointer) table in Microsoft Dataverse.
ms.date: 07/03/2023
ms.reviewer: pehecke
-ms.topic: conceptual
+ms.topic: article
author: DanaMartens
ms.author: dmartens
ms.subservice: dataverse-developer
diff --git a/powerapps-docs/developer/data-platform/analyze-performance.md b/powerapps-docs/developer/data-platform/analyze-performance.md
index fda75ee8a8..cd4cd17224 100644
--- a/powerapps-docs/developer/data-platform/analyze-performance.md
+++ b/powerapps-docs/developer/data-platform/analyze-performance.md
@@ -1,12 +1,12 @@
---
title: "Analyze plug-in performance (Microsoft Dataverse) | Microsoft Docs"
description: "Learn how to find and analyze performance data on plug-ins execution."
-ms.date: 08/15/2023
-ms.reviewer: "pehecke"
-ms.topic: "article"
-author: MicroSri
+ms.date: 06/20/2025
+ms.reviewer: pehecke
+ms.topic: article
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: "pehecke"
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
@@ -14,16 +14,16 @@ contributors:
---
# Analyze plug-in performance
-When you add business logic to your plug-in you should be aware of the impact your plug-ins will have on overall system performance.
+When you add business logic to your plug-in you should be aware of the impact your plug-ins have on overall system performance.
## Time and resource constraints
-There is a hard **2-minute time limit** for a Dataverse message operation to complete. This limit includes executing the intended message operation and all registered synchronous plug-ins. There are also limitations on the amount of CPU and memory resources that can be used by extensions. If the limits are exceeded an exception is thrown and the entire message operation will be cancelled (rolled back).
+There's a hard **2-minute time limit** for a Dataverse message operation to complete. This limit includes executing the intended message operation and all registered synchronous plug-ins. There are also limitations on the amount of CPU and memory resources that extensions can use. If the limits are exceeded, Dataverse throws an exception and the entire message operation is canceled (rolled back).
-If the time limit is exceeded, an will be thrown. If any custom extension exceeds threshold CPU, memory, or handle limits or is otherwise unresponsive, that process will be killed by the platform. At that point any current extension in that process will fail with exceptions. However, the next time that the extension is executed it will run normally.
+If the time limit is exceeded, Dataverse throws a . If any custom extension exceeds threshold CPU, memory, or handle limits or is otherwise unresponsive, Dataverse kills that process. At that point any current extension in that process fails with exceptions. However, the next time that the extension is executed it will run normally.
> [!IMPORTANT]
-> You cannot control how long the message operation or other synchronous registered plug-ins take to execute. You can only control how long your plug-in takes to execute based on its design and coding.
+> You can't control how long the message operation or other synchronous registered plug-ins take to execute. You can only control how long your plug-in takes to execute based on its design and coding.
>
> Our general recommendation is to limit the time your plug-in takes to execute to no more than 2 seconds.
>
@@ -34,7 +34,7 @@ More information: [Best practices and guidance regarding plug-in and workflow de
## Monitor performance
> [!IMPORTANT]
-> This feature is no longer operational or supported. Do not use.
+> This feature is no longer operational or supported. Don't use.
>
> This section will be removed in a future article update.
diff --git a/powerapps-docs/developer/data-platform/api-limits.md b/powerapps-docs/developer/data-platform/api-limits.md
index 17090a6c3c..a60977575c 100644
--- a/powerapps-docs/developer/data-platform/api-limits.md
+++ b/powerapps-docs/developer/data-platform/api-limits.md
@@ -4,9 +4,9 @@ description: "Understand what a developer needs to do to manage service protecti
ms.date: 11/26/2024
ms.reviewer: jdaly
ms.topic: article
-author: MicroSri
+author: MsSQLGirl
ms.subservice: dataverse-developer
-ms.author: sriknair
+ms.author: jukoesma
search.audienceType:
- developer
contributors:
diff --git a/powerapps-docs/developer/data-platform/application-insights-ilogger.md b/powerapps-docs/developer/data-platform/application-insights-ilogger.md
index 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/asynchronous-service.md b/powerapps-docs/developer/data-platform/asynchronous-service.md
index 322eb0a3ea..f3a8a38fe7 100644
--- a/powerapps-docs/developer/data-platform/asynchronous-service.md
+++ b/powerapps-docs/developer/data-platform/asynchronous-service.md
@@ -900,7 +900,7 @@ Whether the requested operation occurs depends on the state of the system job. F
|Option|Valid StateCode values|Change|
|--|--|--|
|**Delete**|any|System Job is deleted|
-|**Cancel**|`0` (**Ready**) `1` (**Suspended**) `2` (**Locked**)|`StateCode` changed to `3` (**Completed**) and `StatusCode` changed to `32` (**Cancelled**)|
+|**Cancel**|`0` (**Ready**) `1` (**Suspended**) `2` (**Locked**)|`StateCode` changed to `3` (**Completed**) and `StatusCode` changed to `32` (**Cancelled**), or `StateCode` changed to `3` (**Completed**) and `StatusCode` changed to `31` (**Failed**) |
|**Resume**|`1` (**Suspended**)|StateCode changed to `0` (**Ready**)|
|**Postpone**|`0` (**Ready**) `2` (**Locked**)|Postpone Job dialog prompts user for datetime value to postpone the system job. [Learn to Postpone system jobs](#postpone-system-jobs)|
|**Pause**|`2` (**Locked**)|StateCode changed to `1` (**Suspended**)|
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 6a2d939330..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
@@ -1,38 +1,39 @@
---
-title: "Developers: Best practices and guidance regarding plug-in and workflow development for the Microsoft Dataverse | Microsoft Docs"
-description: Best practices and guidance regarding plug-in and workflow development for developers of the Microsoft Dataverse in Power Apps.
+title: "Developers: Best practices and guidance regarding plug-in and workflow development for Microsoft Dataverse | Microsoft Docs"
+description: Best practices and guidance regarding plug-in and workflow development for developers of Microsoft Dataverse in Power Apps.
suite: powerapps
author: jowells
ms.author: jowells
ms.reviewer: jdaly
-ms.topic: article
-ms.date: 10/25/2021
+ms.topic: best-practice
+ms.date: 04/03/2025
ms.subservice: dataverse-developer
search.audienceType:
- developer
---
-# Best practices and guidance regarding plug-in and workflow development for the Microsoft Dataverse
+# Best practices and guidance regarding plug-in and workflow development for Microsoft Dataverse
-
-This list below contains all of the guidance and best practices regarding the plug-in and workflow development within the Dataverse.
+This list contains guidance and best practices regarding the plug-in and workflow development within Dataverse.
|Best Practice |Description |
|---------|---------|
-|[Do not use batch request types in plug-ins and workflow activities](avoid-batch-requests-plugin.md)|Don't use ExecuteMultipleRequest or ExecuteTransactionRequest message request classes within the context of a plug-in or workflow activity.|
-|[Develop IPlugin implementations as stateless](develop-iplugin-implementations-stateless.md) |Members of classes that implement IPlugin are exposed to potential thread-safety issues, which could lead to data inconsistency or performance problems. |
-|[Do not duplicate plug-in step registration](do-not-duplicate-plugin-step-registration.md) |Duplicate plug-in step registration will cause the plug-in to fire multiple times on the same message/event. |
-|[Do not use parallel execution within plug-ins and workflow activities](do-not-use-parallel-execution-in-plug-ins.md)|Multi or parallel threading within plug-ins or custom workflow activities is not supported.|
-|[Implement all types of queries when filtering results using PreOperation RetrieveMultiple](implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md)|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|
-|[Include filtering attributes with plug-in registration](include-filtering-attributes-plugin-registration.md) |If no filtering attributes are set for a plug-in registration step, then the plug-in will execute every time an update message occurs for that event. |
+|[Don't use batch request types in plug-ins and workflow activities](avoid-batch-requests-plugin.md)|Don't use ExecuteMultipleRequest or ExecuteTransactionRequest message request classes within the context of a plug-in or workflow activity.|
+|[Develop `IPlugin` implementations as stateless](develop-iplugin-implementations-stateless.md) |Members of classes that implement `IPlugin` are exposed to potential thread-safety issues, which could lead to data inconsistency or performance problems. |
+|[Don't duplicate plug-in step registration](do-not-duplicate-plugin-step-registration.md) |Duplicate plug-in step registration cause the plug-in to fire multiple times on the same message/event. |
+|[Don't use parallel execution within plug-ins and workflow activities](do-not-use-parallel-execution-in-plug-ins.md)|Multi or parallel threading within plug-ins or custom workflow activities isn't supported.|
+|[Implement all types of queries when filtering results using `PreOperation` `RetrieveMultiple`](implement-all-types-of-queries-when-filtering-preoperation-retrievemultiple.md)|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|
+|[Include filtering attributes with plug-in registration](include-filtering-attributes-plugin-registration.md) |If no filtering attributes are set for a plug-in registration step, then the plug-in executes every time an update message occurs for that event. |
|[Limit the registration of plug-ins for Retrieve and RetrieveMultiple messages](limit-registration-plugins-retrieve-retrievemultiple.md) |Adding synchronous plug-in logic to the Retrieve and RetrieveMultiple message events can cause slowness. |
|[Manage plug-ins in single solution](manage-plug-ins-single-solution.md)|The definition of a plug-in assembly should be maintained within a single solution. |
|[Optimize custom assembly development](optimize-assembly-development.md) |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. |
|[Set KeepAlive to false when interacting with external hosts in a plug-in](set-keepalive-false-interacting-external-hosts-plugin.md) |KeepAlive property set to true in the HTTP request header or not explicitly defined as false can cause increased execution times of plug-ins. |
-|[Set Timeout when making external calls in a plug-in](set-timeout-for-external-calls-from-plug-ins.md) |Limit the time period that external calls will expect a response within plug-ins.|
+|[Set Timeout when making external calls in a plug-in](set-timeout-for-external-calls-from-plug-ins.md) |Limit the time period that external calls expect a response within plug-ins.|
|[Use InvalidPluginExecutionException in plug-ins and workflow activities](use-invalidpluginexecutionexception-plugin-workflow-activities.md) |Use InvalidPluginExecutionException when raising errors within the context of a plug-in or workflow activity. |
|[Use ITracingService in Plug-ins](use-itracingservice-plugins.md)| Use the ITracingService within your plug-ins to gain insight into what happens when your code runs.|
|[Verify certification dependencies for plug-ins making outbound calls](verify-certification-dependencies.md)|Ensure that any certificates that your code depends on for outbound calls have a valid chain of certificates.|
+|[Write memory efficient code](/troubleshoot/power-platform/dataverse/plug-in-execution/dataverse-plug-ins-errors#worker-process-reaches-the-memory-limit)|Retrieve only data within your plugin that is needed.|
+
### See Also
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 b3d30c61e9..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: 02/08/2024
-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).
@@ -411,7 +512,7 @@ The behavior when errors occur depends on whether you're using standard tables o
#### On Error behavior with standard tables
-Any error that occurs in a bulk operation with a standard table causes the entire operation to roll back. You should only use bulk operations on standard tables when you have a high degree of confidence that all the operations will succeed. You may want to use the SDK [ExecuteMultipleRequest class](xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest) or Web API `$batch` to allow the set of operations to fall back if the bulk operation fails. If the success rate for your initial attempts is low, this strategy results in worse performance. Only use this fallback strategy when you expect most operations to succeed.
+Any error that occurs in a bulk operation with a standard table causes the entire operation to roll back. You should only use bulk operations on standard tables when you have a high degree of confidence that all the operations will succeed. You may want to use the SDK [ExecuteMultipleRequest class](xref:Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest) or Web API `$batch` to allow the set of operations to roll back if the bulk operation fails. If the success rate for your initial attempts is low, this strategy results in worse performance. Only use this fallback strategy when you expect most operations to succeed.
#### On Error behavior 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/calculated-rollup-attributes.md b/powerapps-docs/developer/data-platform/calculated-rollup-attributes.md
deleted file mode 100644
index b9db2f9bcb..0000000000
--- a/powerapps-docs/developer/data-platform/calculated-rollup-attributes.md
+++ /dev/null
@@ -1,195 +0,0 @@
----
-title: Formula, calculated, and rollup columns using code
-description: "Learn about common elements and characteristics that formula, calculated, and rollup columns use. Learn how to retrieve a calculated rollup column value immediately, and about the SourceTypeMasks enumeration."
-ms.date: 09/15/2023
-ms.reviewer: jdaly
-ms.topic: article
-author: mkannapiran
-ms.author: kamanick
-ms.subservice: dataverse-developer
-search.audienceType:
- - developer
-contributors:
- - JimDaly
- - sanjeevgoyalmsft
----
-# Formula, calculated, and rollup columns using code
-
-*Formula*, *calculated*, and *rollup* columns free the user from having to manually perform calculations and focus on their work. System administrators can define a field 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 with code.
-
-This article focuses on how these columns are defined in the column definitions and APIs to interact with rollup columns. We don't support defining the formulas with code. You need to use [Power Apps](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc) to set the formulas for the respective type of column. Learn how:
-
-- [Work with formula columns (preview)](../../maker/data-platform/formula-columns.md)
-- [Define calculated columns to automate calculations](../../maker/data-platform/define-calculated-fields.md)
-- [Define rollup columns that aggregate values](../../maker/data-platform/define-rollup-fields.md)
-
-
-
-## Common elements and characteristics
-
-Formula, calculated, and rollup columns share some common elements and characteristics, for example:
-
-- They're read-only.
-- They're not specific to the user.
- The calculation is performed using a system user account, so the values may be based on records that the user doesn't otherwise have privileges to view, such as columns that have field-level security enabled.
-
-All columns that inherit from have a property that can contain the values shown in the following table.
-
-|Value|Description |
-|-----|-----|
-| Null |Not a valid type of column to be a formula, calculated, or rollup column.|
-|0| Simple column. The column isn't defined as a formula, calculated, or rollup column.|
-|1|Calculated column|
-|2|Rollup column|
-|3|Formula column|
-
-
-Formula, calculated, and rollup columns are based on existing column types that inherit from . The following tables show the available column types and which source types are supported:
-
-
-|Type|Supported source types|
-|---------|---------|
-||Formula, Calculated, & Rollup|
-| |Formula, Calculated, & Rollup|
-||Formula, Calculated, & Rollup|
-||Formula, Calculated, & Rollup|
-||Calculated & Rollup only|
-||Calculated & Rollup only|
-||Calculated & Rollup only|
-
-Each of these types of column has the following properties to support formulas, calculations, and rollups.
-
-| Property |Definition|
-|---------|--------|
-|`FormulaDefinition`| Contains the definition of the formula used to perform the calculation or rollup. Formula columns are defined using YAML. Calculated and rollup columns are defined using XAML. The only supported way to change this value is through the [Power Apps](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc) editor.|
-|`SourceTypeMask`| The bitmask value of this read-only property describes the types of sources used in the formula of the column or if the formula of the column isn't valid.
- 0: `Undefined`. The default value for simple and rollup columns. - 1: `Simple`. The formula or calculated column refers to a column in the same record. - 2: `Related`. The formula or calculated column refers to a column in a related record. - 4: `Logical`. The formula or calculated column refers to a column in the same record that is stored in a different database table. More information: [Logical columns](entity-attribute-metadata.md#logical-columns) - 8: `Calculated`. The formula or calculated column refers to another formula or calculated column. - 16: `Rollup`. The formula or calculated column refers a rollup column. - 32: `Invalid`. The formula, calculated, or rollup column is invalid. Typically, a column is invalid when it refers to a column that no longer exists.
**Note:** One or more of these conditions may be true for any calculated or rollup column. Because this is a bitmask value, you may find it useful to use the [SourceTypeMasks enumeration](calculated-rollup-attributes.md#BKMK_SourceTypeMasks) when performing bitwise operations. |
-
-## Formula and calculated columns
-
-Formula and calculated columns are calculated in real-time when they're retrieved. Formula and calculated can be composed using different data types. For example, an Integer calculated column may reference values from Decimal or Currency columns.
-
-Only calculated column values are available in the retrieve plug-in pipeline. Post image of a table record update or create contains the calculated column value in stage 40. More information: [Event execution pipeline](event-framework.md#event-execution-pipeline) and [Entity images](understand-the-data-context.md#entity-images)
-
-### Limitations
-
-Formula and calculated columns have the following limitations:
-
-#### Formula columns
-
-- Formula columns don't have values when a user with mobile client is offline.
-- `MaxValue` and `MinValue` column definitions properties can't be set on formula columns. More information:
-[Guidelines and limitations](../../maker/data-platform/formula-columns.md#guidelines-and-limitations)
-
-
-#### Calculated columns
-
-You can't use values in calculated columns on a *[Logical value](entity-attribute-metadata.md#logical-columns)* in the same table to sort data returned by a query. Although your query can specify that the results should be ordered using a calculated column, the sort direction is ignored and doesn't throw an error. If the calculated column references only simple values in the same record, sorting works normally. You can determine the sources used in a calculated column using the `SourceTypeMask` property on the column definitions.
-
-- Only columns from an immediate parent table can be used in a calculated column.
-- Saved queries, charts, and visualizations can have a maximum of 50 unique calculated columns.
-- Calculated columns can reference other calculated columns in their formula, but they can't reference themselves.
-- Calculated columns don't have values when a user with mobile client is offline.
-- `MaxValue` and `MinValue` column definitions properties can't be set on calculated columns
-
-
-
-## Rollup columns
-
-Because rollup columns persist in the database, they can be used for filtering or sorting just like regular columns. Any kind of process or plug-in uses the most recently calculated value of the column. System jobs calculate the rollup column values asynchronously. Administrators set when a job is run or pause the job. By default, each column is updated hourly.
-
-When a rollup column is created or updated, a **Mass Calculated Rollup Fields** job is scheduled to run in 12 hours. The 12-hour delay is intended to perform this resource intensive operation during a time that affects users the least. After the job completes, the next time it's scheduled to run will be 10 years in the future. If there's a problem with the calculation, the problem is reported with the system job. Locate the system job to find any errors with rollup fields. To find the system job, see [View Rollup jobs](../../maker/data-platform/define-rollup-fields.md#view-rollup-jobs).
-
-> [!TIP]
-> As a developer testing a solution in a development environment you may not want to wait for 12 hours. You can make it happen faster. In the **System Jobs** list, use the **Recurring System Jobs** view to filter the list and locate the **Mass Calculate Rollup Fields** job. With the job selected, use **More Actions** > **Postpone** and set the time to something that occurs sooner.
->
-> If you want to trigger the creation of a new **Mass Calculated Rollup Fields** job programmatically, retrieve the for the rollup column using and use to update the column without making any actual changes.
-
-The **Mass Calculated Rollup Fields** job occurs immediately when a solution containing a rollup column is imported. This is another reason to only install solutions during times that won't adversely impact users.
-
-Each rollup column for a table will also include two supporting columns for the rollup column:
-
-- *\* `_Date`: DateTime – When the rollup was last calculated.
-- *\* `_State`: Integer – The state of the rollup calculation. More information: [Rollup state values](calculated-rollup-attributes.md#BKMK_RollupStateValues)
-
-
-
-### Rollup state values
-
-The state of a rollup column calculation is available in the corresponding *\*`_State` column and in the .`FieldState` property. Values that indicate the state are shown in the following table.
-
-|State Value|Description|
-|-----|-----|
-|0|`NotCalculated`: Column value is yet to be calculated.|
-|1|`Calculated`: Column value has been calculated per the last update time in *\*`_Date` column.|
-|2|`OverflowError`: Column value calculation lead to overflow error.|
-|3|`OtherError`: Column value calculation failed due to an internal error, next run of calculation job will likely fix it.|
-|4|`RetryLimitExceeded`: Column value calculation failed because the maximum number of retry attempts to calculate the value were exceeded likely due to high number of concurrency and locking conflicts.|
-|5|`HierarchicalRecursionLimitReached`: Column value calculation failed because maximum hierarchy depth limit for calculation was reached.|
-|6|`LoopDetected`: Column value calculation failed because a recursive loop was detected in the hierarchy of the record.|
-
-### Retrieve a calculated rollup column value immediately
-
-Rollup columns support a `CalculateRollupField` message that developers can use to calculate a rollup column value on demand. For the SDK, use the [CalculateRollupFieldRequest class](xref:Microsoft.Crm.Sdk.Messages.CalculateRollupFieldRequest) and for Web API use the [CalculateRollupField Function](xref:Microsoft.Dynamics.CRM.CalculateRollupField)
-
-This message is a synchronous operation for just the column identified in the request. If the value of that record is included as part of other rollup columns, the values of those columns don't take the possible value change caused by calling this method into consideration until the regularly scheduled asynchronous jobs that perform those calculations occur.
-
-### Limitations
-
-- Rollup columns can't be used as a workflow event or wait condition. These columns don't raise the event to trigger workflows.
-- The `ModifiedBy` and `ModifiedOn` columns for the table aren't updated when the rollup column is updated.
-- A maximum of 100 rollup columns can be defined within an organization. Each table can have no more than 10 rollup column.
-- A rollup column formula can't reference another rollup column.
-- A rollup column formula can't reference complex calculated or formula column. Only calculated or formula columns that reference simple columns in the same record can be used with rollups.
-- A rollup column formula can't include records in many-to-many (N:N) relationships. It can only include records in one-to-many (1:N) relationships.
-- Rollup column formulas can't use one-to-many (1:N) relationships with the `ActivityPointer` or `ActivityParty` table.
-
-
-
-## SourceTypeMasks enumeration
-
-The `SourceTypeMask` property for those columns that support calculated and rollup columns contains a bitmask value. To extract the relevant information from the value, it helps to have an enumeration when performing bitwise operations. Use the following `SourceTypeMasks` enumeration when comparing the `SourceTypeMask` property value.
-
-```csharp
- public enum SourceTypeMasks
-{
- ///
- /// Undefined: 0 - The default value for simple and rollup columns.
- ///
- Undefined = 0,
- ///
- /// Simple: 1 - The calculated or formula column refers to a column in the same record.
- ///
- Simple = 1,
- ///
- /// Related: 2 - The calculated or formula column refers to a column in a related record.
- ///
- Related = 2,
- ///
- /// Logical: 4 - The calculated or formula column refers to a logical column.
- ///
- Logical = 4,
- ///
- /// Calculated: 8 - The calculated or formula column refers to another calculated column.
- ///
- Calculated = 8,
- ///
- /// Rollup: 16 - The calculated or formula column refers a rollup column.
- ///
- Rollup = 16,
- ///
- /// Invalid: 32 - The calculated,formula, or rollup column is invalid.
- /// Typically this would be where a field refers to a column that no longer exists.
- ///
- Invalid = 32
-}
-```
-
-### See also
-
-[Column definitions](entity-attribute-metadata.md)
-[Work with formula columns (preview)](../../maker/data-platform/formula-columns.md)
-[Define calculated columns](../../maker/data-platform/define-calculated-fields.md)
-[Define rollup columns](../../maker/data-platform/define-rollup-fields.md)
-[Sample: Rollup records related to a specific record](org-service/samples/rollup-records-related-to-specificed-record.md)
-
-[!INCLUDE[footer-include](../../includes/footer-banner.md)]
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 4435873124..0a87f80a42 100644
--- a/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md
+++ b/powerapps-docs/developer/data-platform/fetchxml/retrieve-data.md
@@ -1,12 +1,12 @@
---
title: Use FetchXml to retrieve data
description: Learn how to use the Dataverse SDK for .NET or Web API to send a request to retrieve data using FetchXml
-ms.date: 07/16/2024
+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:
@@ -18,7 +18,7 @@ contributors:
---
# Use FetchXml to retrieve data
-You can use FetchXml to retrieve data using either the SDK for .NET or Web API. With Power Automate, you can retrieve data using the Web API using the [Fetch Xml Query parameter of the List Rows command](/power-automate/dataverse/list-rows#fetch-xml-query).
+You can use FetchXml to retrieve data using either the SDK for .NET or Web API. With Power Automate, you can retrieve data using the Web API using the [Fetch Xml Query parameter of the List Rows command](/power-automate/dataverse/list-rows#fetch-xml-query). With PAC CLI, use the [pac env fetch](/power-platform/developer/cli/reference/env#pac-env-fetch) command.
You may also want to use [Community tools](overview.md#community-tools), like the [FetchXML Builder](https://fetchxmlbuilder.com/) in the [XrmToolBox](../community-tools.md#xrmtoolbox).
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-connect-plugin-registration-tool.md b/powerapps-docs/developer/data-platform/includes/cc-connect-plugin-registration-tool.md
index 595d170053..1ad72d6f02 100644
--- a/powerapps-docs/developer/data-platform/includes/cc-connect-plugin-registration-tool.md
+++ b/powerapps-docs/developer/data-platform/includes/cc-connect-plugin-registration-tool.md
@@ -1,15 +1,17 @@
### Connect using the Plug-in Registration tool
-1. After you have downloaded the Plug-in registration tool, click the `PluginRegistration.exe` to open it.
-1. Click **Create new Connection** to connect to your instance.
-1. Make sure **Office 365** is selected.
-1. If you are connecting using a Microsoft account other than one you are currently using, click **Show Advanced** and enter your credentials. Otherwise, leave **Sign-in as current user** selected.
+1. Open the Plug-in Registration tool by executing the PAC CLI `pac tool prt` command.
+1. Select **+Create new connection** to connect to your Dataverse environment.
+1. Make sure **Office 365** is checked.
+1. If you are connecting using a Microsoft account other than one you are currently using, select **Show Advanced** and enter your credentials. Otherwise, leave **Sign-in as current user** selected.
+ > [!NOTE]
+ > If your user account employs multifactor authentication (MFA), make sure the **Show Advanced** checkbox isn't checked.
1. If your Microsoft Account provides access to multiple environments, select **Display list of available organizations**.

-1. Click **Login**.
-1. If you selected **Display list of available organizations**, select the organization you would like to connect to and click **Login**.
-1. After you are connected, you will see any existing registered plug-ins, custom workflow activities and data providers.
+1. Select **Login**.
+1. If you selected **Display list of available organizations**, select the organization you would like to connect to and select **Login**.
+1. After you're connected, you'll see any existing registered plug-ins, custom workflow activities, and data providers.

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/cc-visual-studio-code-powershell-prerequisites.md b/powerapps-docs/developer/data-platform/includes/cc-visual-studio-code-powershell-prerequisites.md
index 5458d3cf2c..54b5e4a341 100644
--- a/powerapps-docs/developer/data-platform/includes/cc-visual-studio-code-powershell-prerequisites.md
+++ b/powerapps-docs/developer/data-platform/includes/cc-visual-studio-code-powershell-prerequisites.md
@@ -3,7 +3,7 @@
- Install Visual Studio Code. See [Download Visual Studio Code](https://code.visualstudio.com/download)
- Install the PowerShell extension for Visual Studio Code. See [PowerShell for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell)
- Install PowerShell 7.4 or higher. See [Install PowerShell on Windows, Linux, and macOS](/powershell/scripting/install/installing-powershell)
-- Install the Az PowerShell module version 11.1.0 or higher. See [How to install Azure PowerShell](/powershell/azure/install-azure-powershell)
+- Install the Az PowerShell module version 11.1.0 or higher. See [How to install Azure PowerShell](/powershell/azure/install-azure-powershell)
To [update an existing installation to the latest version](/powershell/module/powershellget/update-module), use `Update-Module -Name Az -Force`
diff --git a/powerapps-docs/developer/data-platform/includes/cc-web-api-spa-javascript-code-sample-note.md b/powerapps-docs/developer/data-platform/includes/cc-web-api-spa-javascript-code-sample-note.md
new file mode 100644
index 0000000000..b8728fe507
--- /dev/null
+++ b/powerapps-docs/developer/data-platform/includes/cc-web-api-spa-javascript-code-sample-note.md
@@ -0,0 +1,2 @@
+> [!NOTE]
+> This code is for a Single Page Application (SPA) and doesn't represent the pattern to use with model-driven apps, Power Apps components framework (PCF) components, or Power pages. Use the [Xrm.WebApi (Client API)](../../model-driven-apps/clientapi/reference/xrm-webapi.md), [Code components WebAPI](../../component-framework/reference/webapi.md), and [Power Pages Portals Web API](/power-pages/configure/web-api-overview) for these scenarios.
\ No newline at end of file
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 152d19783e..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.`|
@@ -42,9 +42,11 @@
|`0x80098006` `-2146861050`|Name: **AdoAadUserStateException** Message: `User identity within the azure active directory has changed (might be deleted).`|
|`0x80098013` `-2146861037`|Name: **AdoBranchNameAlreadyExistsError** Message: `Branch with the same name already exists.`|
|`0x80098008` `-2146861048`|Name: **AdoCircuitBreakerExceededConcurrencyException** Message: `Git internal error occurred.`|
+|`0x80098018` `-2146861032`|Name: **AdoFileTooBig** Message: `{0} of {1}({2}) is too big to fit in source control.`|
|`0x80098011` `-2146861039`|Name: **AdoInvalidBranchName** Message: `Invalid git branch name. Branch name cannot contain {0}.`|
|`0x80098012` `-2146861038`|Name: **AdoInvalidDirectoryName** Message: `Invalid directory name {0}.`|
|`0x80098000` `-2146861056`|Name: **AdoItemNotFoundException** Message: `Directory or Item was not found on provided path.`|
+|`0x80098017` `-2146861033`|Name: **AdoItemNotFoundWithPathException** Message: `Directory or Item was not found on provided path '{0}'.`|
|`0x80098004` `-2146861052`|Name: **AdoNeedsPermissionException** Message: `Commit to requested branch is forbidden (rejected by policy).`|
|`0x80098009` `-2146861047`|Name: **AdoObjectRejectedException** Message: `Commit was rejected because it contains one or more secrets.`|
|`0x80098003` `-2146861053`|Name: **AdoRefLockedException** Message: `Commit to requested branch is forbidden (rejected by policy).`|
@@ -55,8 +57,9 @@
|`0x80098007` `-2146861049`|Name: **AdoVssServiceException** Message: `Git resource does not exist or do not have permissions for the operation attempted.`|
|`0x80041d68` `-2147213976`|Name: **ADResourceNotFound** Message: `The Azure AD Group was not found in your Azure Active Directory. Please validate the Group ID and try again.`|
|`0x80061696` `-2147084650`|Name: **AdvancedSimilarityAzureSearchUnexpectedError** Message: `An unexpected error occurred executing the search. Try again later.`|
+|`0x80090207` `-2146893305`|Name: **AetherServiceError** Message: `Received unsuccessful response from Aether service.`|
|`0x8004D2B1` `-2147167567`|Name: **AggregateInnerQuery** Message: `The Inner Query must not be an aggregate query.`|
-|`0x8004E023` `-2147164125`|Name: **AggregateQueryRecordLimitExceeded** Message: `The maximum record limit is exceeded. Reduce the number of records.`|
+|`0x8004E023` `-2147164125`|Name: **AggregateQueryRecordLimitExceeded** Message: `The maximum record limit of {0} is exceeded. Reduce the number of aggregated or grouped records. Please see this link for more details: https://go.microsoft.com/fwlink/?linkid=2301313.`|
|`0x8009724C` `-2146864564`|Name: **AggregationOnSecuredAttributeCallerCantReadNotSupportedForElasticTables** Message: `Caller does not have read permission on secured attribute ('{0}'). Aggregation on this attribute without permission is not supported for Elastic Tables.`|
|`0x80090489` `-2146892663`|Name: **AICExportFailure** Message: `Error occured when exporting AttributeImageConfig record. Reason: {0}`|
|`0x8004F0FE` `-2147159810`|Name: **AlreadyLinkedToAnotherAttribute** Message: `Given linked attribute is alreadly linked to other attribute.`|
@@ -71,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.`|
@@ -150,6 +154,7 @@
|`0x80048956` `-2147186346`|Name: **AsyncReparentDBOperationOngoing** Message: `Async reparent db is currently executing for this entity. Please wait for the asynchronous job to complete before attempting to reparent this entity again. You may look up the status of this job by searching for the following AsyncJobName in the system jobs view. (EntityId: {0}, ParentId: {1}, EntityName: {2}, AsyncJobName: {3}, AsyncJobId: {4})`|
|`0x80048955` `-2147186347`|Name: **AsyncRestoreOperationOngoing** Message: `This entity is currently being restored as part of an asynchronous restore job. You may look up the status of this job by searching for the following AsyncJobName in the system jobs view. (MasterId: {0}, SubordinateId: {1}, EntityName: {2}, AsyncJobName: {3}, AsyncJobId: {4})`|
|`0x80048d23` `-2147185373`|Name: **AsyncRetainOperationOngoing** Message: `A retention policy is currently in progress for this table. Please wait for the policy run to complete before attempting to run the policy again.`|
+|`0x80097257` `-2146864553`|Name: **AsyncRetainRetriableError** Message: `This is an internal error that indicates to the async handler that this error occurred during marking is retriable.`|
|`0x80090456` `-2146892714`|Name: **AsyncSecondaryEntityKeyNotAllowed** Message: `Entity key '{0}' marked as IsSecondaryKey must have property IsSynchronous set as true.`|
|`0x80043e09` `-2147205623`|Name: **AttachmentBlocked** Message: `The attachment is either not a valid type or is too large. It cannot be uploaded or downloaded.`|
|`0x80044a08` `-2147202552`|Name: **AttachmentInvalidFileName** Message: `Attachment file name contains invalid characters.`|
@@ -195,6 +200,7 @@
|`0x80044369` `-2147204247`|Name: **AttributeUsedForInternalUseOnly** Message: `Attribute {0} on Entity {1} can only be set by the System.`|
|`0x80090452` `-2146892718`|Name: **AttributeWithValidForUpdateNotSupportedInSecondaryEntityKey** Message: `Attribute '{0}' must not be valid for update. The secondary Entity Key '{1}' does not support key attribue with (IsValidForUpdate = true) property.`|
|`0x8004D228` `-2147167704`|Name: **AuthenticateToServerBeforeRequestingProxy** Message: `Authenticate to serverType: {0} before requesting a proxy.`|
+|`0x800608B9` `-2147088199`|Name: **AuthNetworkFailure** Message: `Unable to authenticate. Select the Refresh button to try again.`|
|`0x80091042` `-2146889662`|Name: **AutoDataCaptureAuthorizationFailureException** Message: `You don’t have the proper Office 365 license to get untracked emails. Please contact your system administrator.`|
|`0x80091041` `-2146889663`|Name: **AutoDataCaptureDisabledError** Message: `Auto capture feature is not enabled.`|
|`0x80091043` `-2146889661`|Name: **AutoDataCaptureResponseRetrievalFailureException** Message: `Error while fetching untracked emails from Exchange.`|
@@ -231,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}.`|
@@ -330,6 +336,7 @@
|`0x80049946` `-2147182266`|Name: **BinAttrbuteNotReady** Message: `Attribute '{0}' on table '{1}' is not ready for recycle bin table queries. Please remove this attribute from your query. Please wait for recycle bin metadata sync operation to complete before using this attribute.`|
|`0x80160043` `-2146041789`|Name: **BindAttributeNotSpecifiedForLookup** Message: `BindAttribute for lookup property {0} is not provided. More Details:{1}`|
|`0x80160044` `-2146041788`|Name: **BindAttributeValuesAreDifferentAcrossControlConfigurations** Message: `Bind Attribute for lookup property {0} should be same for all form factor control configurations Please check the configuration: {1}. More Details:{2}`|
+|`0x80072523` `-2147015389`|Name: **BlobDownloadRetryableError** Message: `A retryable error occured while downloading a blob from file store.`|
|`0x80090018` `-2146893800`|Name: **BlobNotFound** Message: `Blob not found.`|
|`0x8004E10E` `-2147163890`|Name: **BookFirstInstanceFailed** Message: `Failed to book first instance.`|
|`0x8004431C` `-2147204324`|Name: **BooleanOptionOutOfRange** Message: `Boolean attribute options must have a value of either 0 or 1.`|
@@ -345,7 +352,9 @@
|`0x8004F096` `-2147159914`|Name: **BulkACSPartialErrors** Message: `Add Components To Solution: {0} out of {1} requests failed. \n{2}`|
|`0x80048459` `-2147187623`|Name: **BulkDeleteChildFailure** Message: `One of the Bulk Delete Child Jobs Failed`|
|`0x80005049` `-2147463095`|Name: **BulkDeleteJobNotComplete** Message: `The bulk delete operation '{0}' must be in the 'Succeeded', 'Failed', or 'Canceled' state to be restored.`|
+|`0x8004840B` `-2147187701`|Name: **BulkDeleteNotSupportedInDaac** Message: `Bulk Delete job is not supported for replicated entity from secondary parition in a dataverse as a cluster setup.`|
|`0x80048435` `-2147187659`|Name: **BulkDeleteRecordDeletionFailure** Message: `The record cannot be deleted.`|
+|`0x8004840A` `-2147187702`|Name: **BulkDetectDupsNotSupportedInSecondaryPartition** Message: `Duplicate Detection job is not supported from secondary parition in a dataverse as a cluster setup.`|
|`0x80048422` `-2147187678`|Name: **BulkDetectInvalidEmailRecipient** Message: `The e-mail recipient either does not exist or the e-mail address for the e-mail recipient is not valid.`|
|`0x8009000F` `-2146893809`|Name: **BulkDuplicateDetectionJobSendEmailFailed** Message: `Bulk Duplicate Detection successfully completed. Please review the results and perform a manual merge. We were unable to send a notification to your specified email address. If this persists, please validate the email address you provided and review any active plugins.`|
|`0x8004502D` `-2147200979`|Name: **BulkMailOperationFailed** Message: `The bulk e-mail job completed with {0} failures. The failures might be caused by missing e-mail addresses or because you do not have permission to send e-mail. To find records with missing e-mail addresses, use Advanced Find. If you need increased e-mail permissions, contact your system administrator.`|
@@ -375,6 +384,7 @@
|`0x80097628` `-2146863576`|Name: **BypassBusinessLogicExecutionStepIdsLimitExceeded** Message: `The number of step ids: {0} in the BypassBusinessLogicExecutionStepIds parameter exceeds the orgdb settings limit: {1}`|
|`0x80072330` `-2147015888`|Name: **CacheLoadConcurrencyError** Message: `Too many caches loaded concurrently. Please try again later.`|
|`0x80048d3d` `-2147185347`|Name: **CacheLockTimeout** Message: `Timed out when waiting to acquire a specific cache lock due to another thread is already loading the cache and taking longer time than expected.`|
+|`0x80098019` `-2146861031`|Name: **CachePreemptivelyFlushed** Message: `The specified call is for an organization whose cache was preemptively flushed, retrying the operation may succeed or you can specify a request header "x-ms-select-stable-service" to be directed to the stable endpoint.`|
|`0x80054817` `-2147137513`|Name: **CalculatedFieldCannotUseVirtualEntities** Message: `Virtual entities are not supported in Calculated Fields. Calculated Field {0} on Entity {1} is using Virtual Entity {2}.`|
|`0x8006042b` `-2147089365`|Name: **CalculatedFieldsAssignmentMismatch** Message: `You can’t set the value {0}, which is of type {1}, to type {2}.`|
|`0x80060431` `-2147089359`|Name: **CalculatedFieldsCyclicReference** Message: `Field {0} cannot be used in calculated field {1} because it would create a circular reference.`|
@@ -404,6 +414,7 @@
|`0x8009732D` `-2146864339`|Name: **CallbackUriSpecifiedTwice** Message: `Callback Uri provided in both prefer as well as x-ms-dyn-callback-url header. Use only one of them.`|
|`0x80097326` `-2146864346`|Name: **CallbackWithoutRespondAsync** Message: `The callback preference cannot be honored without respond-async preference.`|
|`0x80044161` `-2147204767`|Name: **CallerCannotChangeOwnDomainName** Message: `The caller cannot change their own domain name`|
+|`0x8004853D` `-2147187395`|Name: **CallerCannotReadComponentField** Message: `Caller does not have read permission on component {0} column.`|
|`0x8004025b` `-2147220901`|Name: **CalloutException** Message: `Callout Exception occurred.`|
|`0x80040326` `-2147220698`|Name: **CampaignActivityAlreadyPropagated** Message: `This campaign activity has been distributed already. Campaign activities cannot be distributed more than one time.`|
|`0x80040331` `-2147220687`|Name: **CampaignActivityClosed** Message: `This Campaign Activity is closed or canceled. Campaign activities cannot be distributed after they have been closed or canceled.`|
@@ -411,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.`|
@@ -451,6 +462,7 @@
|`0x80061009` `-2147086327`|Name: **CannotAddRetiredProductToPricelist** Message: `Retired products can not be added to pricelists.`|
|`0x8004051c` `-2147220196`|Name: **CannotAddSingleQueueEnabledEntityToQueue** Message: `The entity record cannot be added to the queue as it already exists in other queue.`|
|`0x8004F018` `-2147160040`|Name: **CannotAddSolutionComponentWithoutRoots** Message: `This item is not a valid solution component. For more information about solution components, see the Microsoft Dynamics 365 SDK documentation.`|
+|`0x80090920` `-2146891488`|Name: **CannotAddSyncGroupMembersToTeamJob** Message: `SyncGroupMembersToTeam cannot be called, Job already in the queue.`|
|`0x800609A6` `-2147087962`|Name: **CannotAddUserToMobileOfflineProfile** Message: `You can’t add this user to this mobile offline profile because the user’s role is either missing or doesn’t have the Dynamics 365 for mobile privilege.`|
|`0x8004F00C` `-2147160052`|Name: **CannotAddWorkflowActivationToSolution** Message: `Cannot add Workflow Activation to solution.`|
|`0x80048448` `-2147187640`|Name: **CannotAssignAddressBookFilters** Message: `Cannot assign address book filters`|
@@ -499,6 +511,7 @@
|`0x8004026c` `-2147220884`|Name: **CannotCompleteLockRequest** Message: `Cannot complete Request due to timeout taking {0} lock.`|
|`0x80048217` `-2147188201`|Name: **CannotConnectToSelf** Message: `Cannot connect a record to itself.`|
|`0x80061030` `-2147086288`|Name: **CannotConvertBundleToKit** Message: `You can't convert a bundle to a kit.`|
+|`0x80090919` `-2146891495`|Name: **CannotConvertDefaultTeamToAccess** Message: `The default business unit team cannot be converted to an access team. Please create a new access team with all users from the business unit.`|
|`0x80061018` `-2147086312`|Name: **CannotConvertProductAssociatedWithBundleToKit** Message: `You can't convert a product that is a part of a bundle to a kit.`|
|`0x80061016` `-2147086314`|Name: **CannotConvertProductAssociatedWithFamilyToKit** Message: `You can't convert a product that belongs to a product family to a kit.`|
|`0x80061029` `-2147086295`|Name: **CannotConvertProductFamilyToKit** Message: `You can't convert a product family to a kit.`|
@@ -525,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.`|
@@ -586,7 +599,7 @@
|`0x80731118` `-2139942632`|Name: **CannotDeleteQueueWithRouteRules** Message: `You can't delete this queue because one or more routing rule sets use this queue. Remove the queue from the routing rule sets and try again.`|
|`0x8004F859` `-2147157927`|Name: **CannotDeleteRelatedSla** Message: `The SLA record couldn't be deleted. Please try again or contact your system administrator`|
|`0x8004F006` `-2147160058`|Name: **CannotDeleteRestrictedPublisher** Message: `Attempting to delete a restricted publisher.`|
-|`0x8004F005` `-2147160059`|Name: **CannotDeleteRestrictedSolution** Message: `Attempting to delete a restricted solution.`|
+|`0x8004F005` `-2147160059`|Name: **CannotDeleteRestrictedSolution** Message: `Attempting to delete a restricted solution {0}.`|
|`0x80041d55` `-2147213995`|Name: **CannotDeleteSpecialRole** Message: `The role cannot be deleted.`|
|`0x80041d42` `-2147214014`|Name: **CannotDeleteSupportUser** Message: `The Support User Role cannot be deleted.`|
|`0x80041d2e` `-2147214034`|Name: **CannotDeleteSysAdmin** Message: `The System Administrator Role cannot be deleted.`|
@@ -615,6 +628,7 @@
|`0x80060303` `-2147089661`|Name: **CannotDisableRelevanceSearchManagedProperty** Message: `The {0} entity is currently syncing to an external search index. You must remove the entity from the external search index before you can set the "Can Enable Sync to External Search Index" property to False.`|
|`0x80041d2f` `-2147214033`|Name: **CannotDisableSysAdmin** Message: `A user cannot be disabled if they are the only user that has the System Administrator Role.`|
|`0x80041d65` `-2147213979`|Name: **CannotDisableTenantAdmin** Message: `Users who are granted the Microsoft Office 365 Global administrator or Service administrator role cannot be disabled in Microsoft Dynamics 365 Online. You must first remove the Microsoft Office 365 role, and then try again.`|
+|`0x80040d41` `-2147218111`|Name: **CannotDisableUserWithSdkMessageProcessingStep** Message: `The user with SystemUserId={0} cannot be disabled. User is ImpersonatingUserId for {1} SdkMessageProcessingSteps, which will fail after disabling. Delete or disable or change ImpersonatingUserId those SdkMessageProcessingStep: {2}.`|
|`0x8004F851` `-2147157935`|Name: **CannotEditActiveRule** Message: `You can not edit an active routing rule. Deactivate the rule to delete it.`|
|`0x8004F860` `-2147157920`|Name: **CannotEditActiveSla** Message: `You can't delete active SLA .Please deactivate the SLA to delete or Contact your system administrator.`|
|`0x80048357` `-2147187881`|Name: **CannotEnableDeletedUser** Message: `User with SystemUserId={0} was deleted (DeletedState={1}) and can't be enabled.`|
@@ -624,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`|
@@ -748,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.`|
@@ -788,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.`|
@@ -860,10 +877,12 @@
|`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`|
|`0x80090101` `-2146893567`|Name: **ColumnNameNotFound** Message: `The column with name '{0}' cannot be found on the table with name '{1}'.`|
+|`0x80040c08` `-2147218424`|Name: **ColumnSetAllColumnsUnsupportedForMultiPartitionDistinctQuery** Message: `The query indicates that all columns for the specified entity {0} should be retrieved. For multi-partition distinct queries, retrieving all columns is not supported.`|
|`0x8004F027` `-2147160025`|Name: **CombinedManagedPropertyFailure** Message: `The evaluation of the current component(name={0}, id={1}) in the current operation ({2}) failed during at least one managed property evaluations: {3}`|
|`0x80154B52` `-2146088110`|Name: **CommandNotSupported** Message: `Command is not supported in offline mode.`|
|`0x80072556` `-2147015338`|Name: **CommitFileFailure** Message: `Error occured when commiting file. (chunkList size: {0}, uploadToken: {1}, fileName:{2}, mimeType:{3})`|
@@ -978,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.`|
@@ -1034,6 +1053,7 @@
|`0x80073002` `-2147012606`|Name: **CrmSQLUniqueIndexOrConstraintViolation** Message: `The operation attempted to insert a duplicate value for an attribute with a unique constraint.`|
|`0x80040354` `-2147220652`|Name: **CRMUserDoesNotExist** Message: `No Microsoft Dynamics 365 user exists with the specified domain name and user ID`|
|`0x80092006` `-2146885626`|Name: **CrossEntityRelationshipInvalidOperation** Message: `Invalid cross-entity stage transition. Specified relationship cannot be modified.`|
+|`0x80097263` `-2146864541`|Name: **CrossPartitionTransactionNotAllowed** Message: `Cross-partition transaction is not allowed. The transaction boundary for '{0}' spans across multiple partitions: {1}.`|
|`0x80050141` `-2147155647`|Name: **CurrencyAttributeNotMoneyType** Message: `The Currency attribute {0} value is not of Money type`|
|`0x80048cfb` `-2147185413`|Name: **CurrencyCannotBeNullDueToNonNullMoneyFields** Message: `The currency cannot be null.`|
|`0x8004E026` `-2147164122`|Name: **CurrencyFieldMissing** Message: `Record currency is required to calculate rollup field of type currency. Provide a currency and try again.`|
@@ -1045,6 +1065,7 @@
|`0x8004501D` `-2147200995`|Name: **CustomActivityInvalid** Message: `Invalid custom activity.`|
|`0x8004F122` `-2147159774`|Name: **CustomActivityMustHaveOfflineAvailability** Message: `A custom entity defined as an activity must have Offline Availability.`|
|`0x80048841` `-2147186623`|Name: **CustomApiNotFound** Message: `CustomApi with unique name {0} not found.`|
+|`0x80048844` `-2147186620`|Name: **CustomApiNotFoundForSdkMessage** Message: `CustomApi not found for sdk message with guid {0}.`|
|`0x80048843` `-2147186621`|Name: **CustomApiNotFoundWithGuid** Message: `CustomApi with guid {0} not found.`|
|`0x80160019` `-2146041831`|Name: **CustomControlDescriptionMissingForControl** Message: `There needs to be a one-to-one mapping between the control and its description No matching ControlDescription found for the custom control {0}. More Details:{1}`|
|`0x80160004` `-2146041852`|Name: **CustomControlNotAllowedInFooter** Message: `Custom controls are not allowed in footer. More Details:{0}`|
@@ -1077,18 +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`|
+|`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`|
-|`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`|
+|`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 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}`|
@@ -1116,6 +1140,8 @@
|`0x8004025a` `-2147220902`|Name: **DateTimeFormatFailed** Message: `Failed to produce a formatted datetime value.`|
|`0x80048559` `-2147187367`|Name: **DBConnectionOpenCircuitBreakerThrottling** Message: `The connection to the database could not be opened due to a high number of recent connection failures. Please try again later.`|
|`0x80048551` `-2147187375`|Name: **DBConnectionOrTransactionInitializationFailed** Message: `Initialization of the database connection or transaction failed. This operation should be retried later. Initialization exception message: {0}`|
+|`0x80048562` `-2147187358`|Name: **DBQueryFailedDueToClosedTransaction** Message: `Cannot continue SQL query execution in a disposed transaction; the transaction may have been disposed after a Sandbox plug-in timeout. This operation should be retried later. Original exception: {0}`|
+|`0x80048563` `-2147187357`|Name: **DBSessionKilledByEscort** Message: `The database session was disconnected; this may be because a schema customization request is currently being ran in this environment. Please try again after the schema customization request is completed. Schema customization should be done outside of working hours if possible. Original exception: {0}`|
|`0x80048561` `-2147187359`|Name: **DBTransactionFailedToStart** Message: `The database transaction failed to start due to an internal server error. Please retry the operation. If you continue to encounter this error, please contact Support.`|
|`0x80048553` `-2147187373`|Name: **DBUpgradeCauseTimeout** Message: `The operation timed out because the database is currently being upgraded. Please try again after the database upgrade is complete.`|
|`0x8009050B` `-2146892533`|Name: **DeactivateEntityKeyOnlyForActiveIndexes** Message: `Deactivate entity key is only supported for Active EntityKey.`|
@@ -1136,7 +1162,8 @@
|`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.`|
|`0x80045005` `-2147201019`|Name: **DeleteWorkflowActivationWorkflowDependency** Message: `Cannot delete a workflow dependency associated with a workflow activation.`|
@@ -1182,6 +1209,8 @@
|`0x80043b02` `-2147206398`|Name: **DiscountRangeOverlap** Message: `The new quantities overlap the range covered by existing quantities.`|
|`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.`|
@@ -1352,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}'`|
@@ -1370,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`|
@@ -1502,7 +1531,7 @@
|`0x80072012` `-2147016686`|Name: **ExportKeyAttributeInvalidReferencesNonSolutionAware** Message: `Export key attribute {0} for component {1} is invalid. Attributes defined for export EntityKey must not have a lookup to non-solution aware components`|
|`0x800608AB` `-2147088213`|Name: **ExportKeyAttributeNotBeginWithLetterOrNonAlphaNumericCharacters** Message: `Export key attribute {0} for component {1} must begin with a letter and only consist of alpha-numeric and _.{}! characters.`|
|`0x800608AC` `-2147088212`|Name: **ExportKeyAttributeValuesIncorrectNumber** Message: `Incorrect number of export key attribute values for export key {0} for entity {1}.`|
-|`0x80072013` `-2147016685`|Name: **ExportKeyInvalidCreate** Message: `It is invalid to create component {0} with the same export key value(s) as an existing component. Please change the key. The current value(s) are {1}`|
+|`0x80072013` `-2147016685`|Name: **ExportKeyInvalidCreate** Message: `Cannot complete the creation of {0} because it violates a database constraint. The violation happens on the key {1}. Please delete the existing record or use update.`|
|`0x800608A8` `-2147088216`|Name: **ExportKeyNotSupported** Message: `Export keys are not supported for entity {0} because export keys are unsupported`|
|`0x800608AA` `-2147088214`|Name: **ExportKeyNotSupportedForMaxAttributes** Message: `Export key cannot be created for entity {0} because the key exceeds {1} attributes`|
|`0x800608A7` `-2147088217`|Name: **ExportKeyNotSupportedForNonCustomizableComponents** Message: `Export keys are not supported for entity {0} because the entity is not customizable`|
@@ -1572,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.`|
@@ -1667,6 +1697,7 @@
|`0x8009000D` `-2146893811`|Name: **ImageAttributeNotSupportedFullImage** Message: `Image attribute {0} of entity {1} does not support storing full image.`|
|`0x80090430` `-2146892752`|Name: **ImageFormatNotSupported** Message: `Image format '{0}' is not supported for image attribute '{1}' of entity '{2}'.`|
|`0x8009000E` `-2146893810`|Name: **ImageInvalidMaxSizeInKB** Message: `Invalid MaxSizeInKB for image attribute {0} of entity {1}. Valid size should be between [{2} - {3}] KB`|
+|`0x80072045` `-2147016635`|Name: **ImportAbortedDueToEcsChange** Message: `SupportUpgradeIsolationLevel become false during solution import, abort import to prevent data corruption.`|
|`0x8004800D` `-2147188723`|Name: **ImportArticleTemplateError** Message: `There was an error in parsing the article templates in Import Xml`|
|`0x80048062` `-2147188638`|Name: **ImportAttributeNameError** Message: `Invalid name for attribute {0}. Custom attribute names must start with a valid customization prefix. The prefix for a solution component should match the prefix that is specified for the publisher of the solution.`|
|`0x800608F3` `-2147088141`|Name: **ImportChannelPropertyGroupError** Message: `An error occurred while importing Channel Property Group.`|
@@ -1677,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.`|
@@ -1742,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.`|
@@ -1808,10 +1840,12 @@
|`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.`|
|`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.`|
|`0x80072555` `-2147015339`|Name: **InitializeFileRequestFailure** Message: `Error occured during initialize file request. (RecordId: {0}, EntityName: {1}) Details:{2}`|
+|`0x8004E028` `-2147164120`|Name: **InMemoryPaginationRecordLimitExceeded** Message: `In memory pagination limit of {0} exceeded. Cannot perform this operation.`|
|`0x80050134` `-2147155660`|Name: **InputAppModuleAssociatedWithDifferentProfile** Message: `AppModule ids are not associated with same profile id.`|
|`0x80050133` `-2147155661`|Name: **InputAppModuleNotAssociatedWithValidProfile** Message: `Input app is not associated with valid profile id.`|
|`0x80060378` `-2147089544`|Name: **InputParameterFieldIncorrect** Message: `Input parameter “{0}” does not match the input parameter field configured. Contact your system administrator to check the configuration metadata if the error persists.`|
@@ -1879,6 +1913,7 @@
|`0x80048dfd` `-2147185155`|Name: **InvalidApproveFromDraftArticle** Message: `You are trying to approve an article that has a status of draft. You can only approve an article with the status of unapproved.`|
|`0x80048dfb` `-2147185157`|Name: **InvalidApproveFromPublishedArticle** Message: `You are trying to approve an article that has a status of published. You can only approve an article with the status of unapproved.`|
|`0x80040203` `-2147220989`|Name: **InvalidArgument** Message: `Invalid argument.`|
+|`0x8004849B` `-2147187557`|Name: **InvalidArgumentException** Message: `Invalid Argument, Parameter Name: {0}, Message: {1}`|
|`0x800404fb` `-2147220229`|Name: **InvalidArticleState** Message: `The article state is undefined`|
|`0x800404fc` `-2147220228`|Name: **InvalidArticleStateTransition** Message: `This article state transition is invalid because of the current state of the article`|
|`0x800404fd` `-2147220227`|Name: **InvalidArticleTemplateState** Message: `The article template state is undefined`|
@@ -1958,6 +1993,7 @@
|`0x80060993` `-2147087981`|Name: **InvalidDataFiltersForUnownedEntities** Message: `You can’t set the All Record or Other Data filters for unowned entities.`|
|`0x80040356` `-2147220650`|Name: **InvalidDataFormat** Message: `The source data is not in the required format`|
|`0x80090206` `-2146893306`|Name: **InvalidDataLakeEndpoint** Message: `Datalake container endpoint is not a valid URL and cannot be returned.`|
+|`0x80096004` `-2146869244`|Name: **InvalidDataProcessingModuleExecuteRequest** Message: `The DataProcessingModuleExecuteRequest payload is invalid. Details: {0}.`|
|`0x80044826` `-2147203034`|Name: **InvalidDataSourceEndPoint** Message: `Invalid URI: A fully qualified URI without a query string must be provided.`|
|`0x80090411` `-2146892783`|Name: **InvalidDataTypeForCustomAttribute** Message: `"Cannot create custom attribute '{0}' of Entity '{1}' because the type '{2}' is not valid for custom attribute."`|
|`0x80090105` `-2146893563`|Name: **InvalidDataTypeMemberOperation** Message: `Unable to perform operation {0} on data type member with Id = '{1}', MemberName = '{2}', DisplayName = '{3}', and ParentTypeId = '{4}'.`|
@@ -2028,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.`|
@@ -2299,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.`|
@@ -2312,6 +2349,7 @@
|`0x80060386` `-2147089530`|Name: **InvalidUniqueName** Message: `Invalid unique name for action.`|
|`0x80048dfc` `-2147185156`|Name: **InvalidUnpublishFromDraftArticle** Message: `You are trying to unpublish an article that has a status of draft. You can only unpublish an article with the status of published.`|
|`0x80048dfe` `-2147185154`|Name: **InvalidUnpublishFromUnapprovedArticle** Message: `You are trying to unpublish an article that has a status of unapproved. You can only unpublish an article with the status of publish.`|
+|`0x8004846a` `-2147187606`|Name: **InvalidUpdateFilterCondition** Message: `Link filter in Update statement supports [Any] or [Not Any]. Additionally link condition attribute should not enable FLS. Invalid filter condition due to {0}.`|
|`0x8004F012` `-2147160046`|Name: **InvalidUpdateOnProtectedComponent** Message: `You cannot update {0} {1}. Updates cannot be performed when {0} is managed.`|
|`0x80048056` `-2147188650`|Name: **InvalidUrlConsecutiveSlashes** Message: `The Url contains consecutive slashes which is not allowed.`|
|`0x80090800` `-2146891776`|Name: **InvalidUrlForODataBindProperty** Message: `Invalid url value '{0}' for lookup property '{1}'.`|
@@ -2403,6 +2441,7 @@
|`0x8004A128` `-2147180248`|Name: **KeyVaultForbiddenByConnection** Message: `Access to Key Vault is blocked by network configuration. Please review your configuration to allow public access and configure firewall if needed. Refer https://learn.microsoft.com/en-us/power-platform/admin/online-requirements#ip-addresses-required`|
|`0x8004A124` `-2147180252`|Name: **KeyVaultForbiddenByFirewall** Message: `Access to Key Vault is blocked by firewall restrictions. Please review your configuration to allow Power Platform access to the key vault. Refer https://learn.microsoft.com/en-us/power-platform/admin/online-requirements#ip-addresses-required.`|
|`0x8004A125` `-2147180251`|Name: **KeyVaultNameNotValid** Message: `Key Vault name provided is not a valid name.`|
+|`0x8004A129` `-2147180247`|Name: **KeyVaultPlexServiceUnavailable** Message: `We're currently experiencing a delay in setting up the private connection. Please try again in a moment.`|
|`0x8004A115` `-2147180267`|Name: **KeyVaultPreAuthorizationValidationFailed** Message: `Key Vault PreAuthorization Validation failed.`|
|`0x8004A118` `-2147180264`|Name: **KeyVaultReferencePublisherRestriction** Message: `KeyVaultReference cannot be assigned to a component from different publisher.`|
|`0x8004A127` `-2147180249`|Name: **KeyVaultResourceGroupNotFound** Message: `Key Vault resource group name is not found.`|
@@ -2421,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}].`|
@@ -2448,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`|
@@ -2462,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`|
@@ -2532,7 +2573,8 @@
|`0x8005E206` `-2147098106`|Name: **MailboxHasOlderEmailProcessingDate** Message: `The supplied Process Email From date is later than the current Process Email From date on one or more active mailboxes. This action is prevented because this would otherwise cause the system to stop processing the related mailboxes until the specified date threshold has been reached. You may create an additional Email Server Profile with the specified Process Email From date and associate the required mailboxes as needed.`|
|`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.`|
-|`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.`|
+|`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.`|
|`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.`|
@@ -2549,6 +2591,7 @@
|`0x8004F897` `-2147157865`|Name: **MaxActiveSLAError** Message: `You can’t activate this SLA because you’ve exceeded the maxiumum number of entities that can have active SLAs for your organization.`|
|`0x8004F898` `-2147157864`|Name: **MaxActiveSLAKPIError** Message: `You can’t activate this SLA because you’ve exceeded the maxiumum number of SLA KPIs that are allowed per entity for your organization.`|
|`0x8003F454` `-2147224492`|Name: **MaxChildCasesLimitExceeded** Message: `A Parent Case cannot have more than maximum child cases allowed. Contact your administrator for more details`|
+|`0x80040c09` `-2147218423`|Name: **MaxColumnCountForMultiPartitionDistinctQueryExceededLimit** Message: `The multi-partition query exceeds the maximum allowed column count for a distinct query. The maximum allowed column count is {0}, but the current query includes {1} columns.`|
|`0x80071114` `-2147020524`|Name: **MaxConditionsMobileOfflineFilters** Message: `You can only define 3 Mobile offline Org filter for each entity.`|
|`0x80072608` `-2147015160`|Name: **MaxCustomCodeFileSizeExceededForConnector** Message: `Connector custom code file too large, size cannot exceed 1 MB.`|
|`0x80072602` `-2147015166`|Name: **MaxIconSizeExceededForConnector** Message: `Connector icon file too large, size cannot exceed 1 MB.`|
@@ -2782,6 +2825,8 @@
|`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.`|
|`0x8004B00D` `-2147176435`|Name: **OfferingIdNotSupported** Message: `This version does not support search for offering id.`|
@@ -2837,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.`|
@@ -2845,6 +2891,7 @@
|`0x8004B00F` `-2147176433`|Name: **OrganizationTakenBySomeoneElse** Message: `The organization {0} is already purchased by another customer.`|
|`0x8004B00E` `-2147176434`|Name: **OrganizationTakenByYou** Message: `The organization {0} is already purchased by you.`|
|`0x80044159` `-2147204775`|Name: **OrganizationUIDeprecated** Message: `The OrganizationUI entity is deprecated. It has been replaced by the SystemForm entity.`|
+|`0x80048517` `-2147187433`|Name: **OrgDBOrgSettingOutOfRange** Message: `Invalid Organization Setting passed in: {0}. Please make sure to input a value that falls within the acceptable range of '{1}' to '{2}'.`|
|`0x8004B067` `-2147176345`|Name: **OrgDoesNotExistInDiscoveryService** Message: `Organization not found in customer's discovery service`|
|`0x80090013` `-2146893805`|Name: **OrgIdMismsatch** Message: `Organization id does not match. Input: {0}, expected: {1}`|
|`0x80044353` `-2147204269`|Name: **OrgIdNotDetermined** Message: `Error. The current organization ID couldn’t be determined`|
@@ -2870,7 +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.`|
+|`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.`|
@@ -2892,6 +2940,7 @@
|`0x80048540` `-2147187392`|Name: **PatchMissingBase** Message: `You can't import the patch ({0}) for the solution ({1}) because the solution isn't present. The operation has been canceled.`|
|`0x8004F086` `-2147159930`|Name: **PendingUpgradeExists** Message: `This solution has a pending upgrade. Please complete the upgrade before proceeding`|
|`0x80048cf1` `-2147185423`|Name: **PercentageDiscountCannotHaveCurrency** Message: `Currency cannot be set when discount type is percentage.`|
+|`0x80048575` `-2147187339`|Name: **PerformanceValidationIssuesCauseTimeout** Message: `The database operation timed out; this may be due to the query performance issues identified in a query executed on this request. Please optimize the query by addressing the following identified performance issues: {0}. Please reference this document for guidance: https://go.microsoft.com/fwlink/?linkid=2300520`|
|`0x80050144` `-2147155644`|Name: **PersistedCalcFieldNotValidForUpdate** Message: `The Calculated Field {0} on entity {1} is persisted and not allowed to update.`|
|`0x8004E309` `-2147163383`|Name: **PersonalReportFound** Message: `A system dashboard cannot contain personal reports.`|
|`0x8004033f` `-2147220673`|Name: **PickListMappingExistsForTargetValue** Message: `This list value is mapped more than once. Remove any duplicate mappings, and then import this data map again.`|
@@ -2902,6 +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 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'."`|
@@ -2924,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.`|
@@ -2971,13 +3021,17 @@
|`0x80060489` `-2147089271`|Name: **PrimaryStageEntitynotSupplied** Message: `Primary stage entity lookup value is null. Please provide value for attribute {0}.`|
|`0x80097248` `-2146864568`|Name: **PrincipalOwnsNonRelationalRecords** Message: `Can't delete principal of type {0} and id {1} because they own a record of table {2} with id {3}. Reassign or delete the record and try again.`|
|`0x80040231` `-2147220943`|Name: **PrincipalPrivilegeDenied** Message: `Target user or team does not hold required privileges.`|
+|`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.`|
+|`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`|
@@ -2988,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.`|
@@ -3023,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}`|
@@ -3053,6 +3110,7 @@
|`0x80090490` `-2146892656`|Name: **PSqlResultTypeNotSupported** Message: `PSqlResultType {0} is not supported.`|
|`0x80041217` `-2147216873`|Name: **PSqlTableHintFormat** Message: `Error in table hint format.`|
|`0x80041203` `-2147216893`|Name: **PSqlTableInvalidForReports** Message: `Table is not available for reports.`|
+|`0x80041222` `-2147216862`|Name: **PSqlTimeoutDueToComplexQuery** Message: `The updated two minutes (2) timeout period elapsed prior to completion of the operation. Please avoid using "SELECT *", or NESTED FROMs and/or JOINs to execute the query with default five minutes (5) timeout.`|
|`0x80041214` `-2147216876`|Name: **PSqlUnsupportedColumnNameOrAliasInInputQuery** Message: `Unsupported column name in the input query.`|
|`0x80041207` `-2147216889`|Name: **PSqlUnsupportedDataType** Message: `Unsupported data type {0} for column {1}. Please remove the column from the query and retry.`|
|`0x80041200` `-2147216896`|Name: **PSqlUnsupportedStatement** Message: `Unsupported SQL statement.`|
@@ -3084,6 +3142,7 @@
|`0x8004111a` `-2147217126`|Name: **QueryBuilderDeserializeInvalidAggregate** Message: `An error occurred while processing Aggregates in Query`|
|`0x80041119` `-2147217127`|Name: **QueryBuilderDeserializeInvalidDescending** Message: `The only valid values for descending attribute are 'true', 'false', '1', and '0'.`|
|`0x80041115` `-2147217131`|Name: **QueryBuilderDeserializeInvalidDistinct** Message: `The only valid values for distinct attribute are 'true', 'false', '1', and '0'.`|
+|`0x80040c05` `-2147218427`|Name: **QueryBuilderDeserializeInvalidEnableCrossPartition** Message: `The only valid values for enable-crosspartition attribute are 'true', 'false', '1', and '0'.`|
|`0x8004111b` `-2147217125`|Name: **QueryBuilderDeserializeInvalidGetMinActiveRowVersion** Message: `The only valid values for GetMinActiveRowVersion attribute are 'true', 'false', '1', and '0'.`|
|`0x8004112E` `-2147217106`|Name: **QueryBuilderDeserializeInvalidGroupBy** Message: `The only valid values for groupby attribute are 'true', 'false', '1', and '0'.`|
|`0x80041117` `-2147217129`|Name: **QueryBuilderDeserializeInvalidLinkType** Message: `The only valid values for link-type attribute are 'natural', 'inner','in','exists','matchfirstrowusingcrossapply' and 'outer'.`|
@@ -3182,9 +3241,12 @@
|`0x8004E10B` `-2147163893`|Name: **RecurringSeriesCompleted** Message: `The series has invalid ExpansionStateCode.`|
|`0x8004E113` `-2147163885`|Name: **RecurringSeriesMasterIsLocked** Message: `The recurring series master record is locked by some other process.`|
|`0x80097578` `-2146863752`|Name: **RecycleBinAlreadyEnabledForEntity** Message: `RecycleBin is already enabled for entity.`|
+|`0x80099576` `-2146855562`|Name: **RecycleBinCleanupDeletedRecordsDisabled** Message: `RecycleBinCleanupDeletedRecords feature disabled by engineering team.`|
|`0x80097579` `-2146863751`|Name: **RecycleBinConfigChangeNeedsAdmin** Message: `User with SystemUserId={0} is not an Administrator. Any configuration change in RecycleBin needs Administrator privileges for caller.`|
-|`0x80097576` `-2146863754`|Name: **RecycleBinFeatureNotEnabled** Message: `Recycle Bin feature is not available for this organization.`|
+|`0x80098576` `-2146859658`|Name: **RecycleBinFeatureDisabledEngineering** Message: `Recycle Bin feature is not available for this organization due to Recycle Bin feature disabled for the organization by engineering team.`|
+|`0x80097576` `-2146863754`|Name: **RecycleBinFeatureNotEnabledLite** Message: `Recycle Bin feature is not available for this organization due to it being a trial or default environment.`|
|`0x80097577` `-2146863753`|Name: **RecycleBinNotEnabledForOrg** Message: `RecycleBin is not enabled on this organization.`|
+|`0x80097676` `-2146863498`|Name: **RecycleBinSolutionNotAvailable** Message: `Recycle Bin feature is not available for this organization due to Recycle Bin Solution not available please contact support.`|
|`0x80049959` `-2147182247`|Name: **RefCannotBeRestoredRecycleBinNotFound** Message: `Entity with id '{0}' and logical name '{1}' does not exist. We cannot restore the reference '{2}' that must be restored as part of this Restore call. ValueToBeRestored: {3}, ReferencedEntityName: {4}, AttributeName: {5}`|
|`0x80049969` `-2147182231`|Name: **RefCannotBeRestoredRecycleBinNotNull** Message: `Entity with id '{0}' and logical name '{1}' must have a null value for column '{2}' in order for Restore to be successful. ValueToBeRestored: {3}, ReferencedEntityName: {4}, AttributeName: {5}`|
|`0x80048470` `-2147187600`|Name: **RefEntityRelationshipRoleRequired** Message: `The entity relationship role of the referencing entity is required when creating a new one-to-many entity relationship.`|
@@ -3227,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}.`|
@@ -3270,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.`|
@@ -3281,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}`|
@@ -3414,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`|
@@ -3515,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}`|
@@ -3542,19 +3606,25 @@
|`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}' 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}' 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}' 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}' 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.`|
+|`0x80098014` `-2146861036`|Name: **SourceControlComponentInConflictError** Message: `One or more objects are updated in source control. Please resolve conflicts before committing the changes.`|
+|`0x80098015` `-2146861035`|Name: **SourceControlComponentResolveConflictError** Message: `Please resolve conflicts before committing the changes.`|
|`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`|
@@ -3653,17 +3723,26 @@
|`0x8004852D` `-2147187411`|Name: **SqlEncryptionSymmetricKeySourceDoesNotExistInConfigDB** Message: `Encryption Symmetric Key Source does not exist in Config DB.`|
|`0x8004C001` `-2147172351`|Name: **SqlErrorInStoredProcedure** Message: `SQL error {0} occurred in stored procedure {1}`|
|`0x80044157` `-2147204777`|Name: **SqlMaxRecursionExceeded** Message: `The maximum recursion has reached before statement completion.`|
+|`0x80048d43` `-2147185341`|Name: **SqlRowTooBigForInsertUpdate** Message: `The total size of the columns used in the database command exceeded the database limit. Please reduce the total size of columns inserted or updated. Database exception details: {0}`|
+|`0x80048d42` `-2147185342`|Name: **SqlRowTooBigForSelect** Message: `The total size of the columns used in the database command exceeded the database limit. Please reduce the number of columns selected. Database exception details: {0}`|
|`0x80040492` `-2147220334`|Name: **SrsDataConnectorNotInstalled** Message: `MSCRM Data Connector Not Installed`|
|`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.`|
|`0x80060450` `-2147089328`|Name: **StageIdIsNotPresentInBusinessProcess** Message: `Validation error: Stage ID ‘{0}’ is not present in Business Process. Please contact your system administrator.`|
|`0x80060458` `-2147089320`|Name: **StageIdIsNotValid** Message: `Validation error: Stage ID {0} is not valid for Business Process. Valid stages are: {1}`|
+|`0x80097701` `-2146863359`|Name: **StageSolutionOrgSchemaMismatchWarning** Message: `The solution file was exported from a different schema type of Dynamics 365 than the target organization. Importing this solution may result in unexpected behavior. Source org schema type: {0}, Target org schema type: {1}`|
+|`0x80097702` `-2146863358`|Name: **StageSolutionOrgVersionMismatchWarning** Message: `The solution file was exported from a newer version of Dynamics 365 than the target organization. Importing this solution may result in unexpected behavior. Source org version: {0}, Target org version: {1}`|
+|`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.`|
@@ -3684,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.`|
@@ -3706,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}'.`|
@@ -3716,7 +3803,7 @@
|`0x80040395` `-2147220587`|Name: **TargetEntityInvalidForMap** Message: `The file specifies an entity that is not valid for data migration.`|
|`0x80040391` `-2147220591`|Name: **TargetEntityNotFound** Message: `The file specifies an entity that does not exist in Microsoft Dynamics 365.`|
|`0x80048460` `-2147187616`|Name: **TargetEntityNotMapped** Message: `Target Entity Name not defined for source:{0} file.`|
-|`0x80040299` `-2147220839`|Name: **TargetPrincipalLacksReadPrivilege** Message: `{5}{2}(Id = {3}) is missing {0} privilege on {1} entity(OTC={4}). Consider adding missing privilege to one of the {5}{2} roles for the request to succeed.`|
+|`0x80040299` `-2147220839`|Name: **TargetPrincipalLacksReadPrivilege** Message: `{5} {2}(Id = {3}) is missing {0} privilege on {1} entity(OTC={4}). Please read through the document: https://go.microsoft.com/fwlink/?linkid=2292731 and consider adding missing privilege to one of the {5} {2} roles for the request to succeed.`|
|`0x80048342` `-2147187902`|Name: **TargetUserInsufficientPrivileges** Message: `The user can't be added to the team because the user doesn't have the "{0}" privilege.`|
|`0x80061712` `-2147084526`|Name: **TaskFlowEmptyName** Message: `The name field cannot be empty. Please enter a name.`|
|`0x80061717` `-2147084521`|Name: **TaskFlowEntityAttributeIsNotValid** Message: `Invalid attribute type: {0}.{1}.`|
@@ -3735,7 +3822,7 @@
|`0x80041d0a` `-2147214070`|Name: **TeamAdministratorMissedPrivilege** Message: `The team administrator does not have privilege read team.`|
|`0x8004140d` `-2147216371`|Name: **TeamInWrongBusiness** Message: `Cannot assign security role to the team because the security role's Business Unit does not match the team's Business Unit. To assign security role from different Business Unit, enable the "Record ownership across business Units" feature (https://go.microsoft.com/fwlink/?linkid=2250434) otherwise assign a security role from the team's Business Unit. Details: userid={0}, teamBU={1}, roleId={2}, roleBU={3}`|
|`0x80048d3a` `-2147185350`|Name: **TeamMembershipAttributeValidationFailure** Message: `{0} user with Id {1} does not have permissions to a {2} secured field on entity {3}. Adding/Removing a user to/from a Team requires {0} user to have all the field permissions the team currently has from all it's profile association.`|
-|`0x80048305` `-2147187963`|Name: **TeamNameTooLong** Message: `The specified name for the team is too long.`|
+|`0x80048305` `-2147187963`|Name: **TeamNameTooLong** Message: `The length of team name is greater than maximum length defined in metadata. Please increase maximum length of the column or shorten the team name.`|
|`0x80042f0a` `-2147209462`|Name: **TeamNotAssignedRoles** Message: `The team has not been assigned any roles.`|
|`0x80097210` `-2146864624`|Name: **TeamNotAssociatedToDelegatedAuthorization** Message: `Team '{0}' is not associated to a delegated authorization.`|
|`0x80048d39` `-2147185351`|Name: **TeamProfileAttributeValidationFailure** Message: `{0} user with Id {1} does not have permissions to a {2} secured field on entity {3}. Associating/Disassociating a Team to a Field Security Profile requires {0} user to have all the field permissions of the profile.`|
@@ -3838,6 +3925,7 @@
|`0x8005E220` `-2147098080`|Name: **UnapprovedMailbox** Message: `The mailbox is not in approved state. Send/Receive mails are allowed only for approved mailboxes.`|
|`0x80040277` `-2147220873`|Name: **UnauthorizedAccess** Message: `Attempted to perform an unauthorized operation.`|
|`0x80041221` `-2147216863`|Name: **UnauthorizedTDSAccess** Message: `Attempted to perform an unauthorized operation. User is missing prvAllowTDSAccess privilege.`|
+|`0x80041223` `-2147216861`|Name: **UnauthorizedTDSAccessForUserId** Message: `Attempted to perform an unauthorized operation. User {0} is missing prvAllowTDSAccess privilege.`|
|`0x80040216` `-2147220970`|Name: **UnExpected** Message: `An unexpected error occurred.`|
|`0x80040330` `-2147220688`|Name: **UnexpectedErrorInMailMerge** Message: `There was an unexpected error during mail merge.`|
|`0x8004F044` `-2147159996`|Name: **UnexpectedNullReferenceError** Message: `Unexpected null reference error: {0}.`|
@@ -3857,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`|
@@ -4237,6 +4325,7 @@
|`0x80061019` `-2147086311`|Name: **UnsupportedCudOperationForDynamicProperties** Message: `You can't create a property for a kit.`|
|`0x8004E30E` `-2147163378`|Name: **UnsupportedDashboardInEditor** Message: `The dashboard could not be opened.`|
|`0x8005E242` `-2147098046`|Name: **UnsupportedEmailServer** Message: `The email server isn't supported.`|
+|`0x80040c07` `-2147218425`|Name: **UnsupportedFieldTypeForMultiPartitionDistinctQuery** Message: `Field {0} from entity {1} is not supported for multi-partition distinct query.`|
|`0x80160011` `-2146041839`|Name: **UnsupportedFormFactorsUsedInForm** Message: `Unsupported Form factor {0} used for control with uniqueid {1}. More Details:{2}`|
|`0x80160014` `-2146041836`|Name: **UnsupportedFormFactorsUsedInNonFormContext** Message: `Unsupported form factor(s) {0} used. More Details:{1}`|
|`0x80061302` `-2147085566`|Name: **UnsupportedImportComponent** Message: `Sorry, your import failed because the {0} component isn’t supported for import and export.`|
@@ -4261,6 +4350,7 @@
|`0x8004501B` `-2147200997`|Name: **UpdatePublishedWorkflowTemplate** Message: `Cannot update a published workflow template.`|
|`0x8004E114` `-2147163884`|Name: **UpdateRecurrenceRuleFailed** Message: `Failed to update the recurrence rule. A corresponding recurrence rule cannot be found.`|
|`0x80044273` `-2147204493`|Name: **UpdateRIOrganizationDataAccessNotAllowed** Message: `This feature configuration can only be updated by a system administrator.`|
+|`0x80098016` `-2146861034`|Name: **UpdatesToGovernedSettingsNotAllowed** Message: `You can't change these settings because this environment is part of a group. If you're a tenant admin, modify the settings in the environment group.`|
|`0x80045003` `-2147201021`|Name: **UpdateWorkflowActivation** Message: `Cannot update a workflow activation.`|
|`0x80045007` `-2147201017`|Name: **UpdateWorkflowActivationWorkflowDependency** Message: `Cannot update a workflow dependency associated with a workflow activation.`|
|`0x80090017` `-2146893801`|Name: **UploadingAndDownloadingInMultipleChunksNotSupported** Message: `{0} in multiple chunks is not supported for the files stored in the database.`|
@@ -4271,6 +4361,7 @@
|`0x8004D24C` `-2147167668`|Name: **UserCannotEnableWithoutLicense** Message: `Cannot enable an unlicensed user`|
|`0x8004D211` `-2147167727`|Name: **UserDataNotFound** Message: `The user data could not be found.`|
|`0x80041d28` `-2147214040`|Name: **UserDirectoryObjectIdNotFoundInAAD** Message: `The User Object Id ({0}) does not exist. Ensure User account exists in AAD or Microsoft Entra ID.`|
+|`0x8004D24D` `-2147167667`|Name: **UserDisabledAndUnlicensed** Message: `The user(Id = {0}, accessMode = {1}) has not been assigned any License and is disabled. Please contact your system administrator to assign license to this user for the action to succeed and consider enabling this user. Additional Details: {2}`|
|`0x80044507` `-2147203833`|Name: **UserDoesNotHaveAccessToTheTenant** Message: `User does not have access to the tenant.`|
|`0x8004A113` `-2147180269`|Name: **UserDoesNotHaveAdminOnlyModePermissions** Message: `User does not have required privileges (or role membership) to access the org when it is in Admin Only mode.`|
|`0x80090432` `-2146892750`|Name: **UserDoesNotHaveAdminOrCustomizerPrivileges** Message: `You must be a system administrator or system customizer to execute this request.`|
@@ -4287,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.`|
@@ -4353,7 +4444,7 @@
|`0x80060800` `-2147088384`|Name: **WopiDiscoveryFailed** Message: `Request for retrieving the WOPI discovery XML failed.`|
|`0x80060803` `-2147088381`|Name: **WopiMaxFileSizeExceeded** Message: `{0} file exceeded size limit of {1}.`|
|`0x800608DB` `-2147088165`|Name: **WordTemplateFeatureNotEnabled** Message: `Word document template feature is not enabled.`|
-|`0x80072031` `-2147016655`|Name: **WorkerProcessCrashFailure** Message: `The status for this operation is unavailable, please try again.`|
+|`0x80072031` `-2147016655`|Name: **WorkerProcessCrashFailure** Message: `This operation completed without reporting its status. The end time is unknown and has been set to the start time. You can safely retry the operation.`|
|`0x80045045` `-2147200955`|Name: **WorkflowActivityNotSupported** Message: `This workflow cannot be created, updated or published because it's referring unsupported workflow step.`|
|`0x80045042` `-2147200958`|Name: **WorkflowAutomaticallyDeactivated** Message: `The original workflow definition has been deactivated and replaced.`|
|`0x80045001` `-2147201023`|Name: **WorkflowCompileFailure** Message: `An error has occurred during compilation of the workflow.`|
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/dataverse-web-api-javascript-spa-sample-app.png b/powerapps-docs/developer/data-platform/media/dataverse-web-api-javascript-spa-sample-app.png
new file mode 100644
index 0000000000..53d30fba97
Binary files /dev/null and b/powerapps-docs/developer/data-platform/media/dataverse-web-api-javascript-spa-sample-app.png differ
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/media/simple-spa.png b/powerapps-docs/developer/data-platform/media/simple-spa.png
deleted file mode 100644
index 9daa478d44..0000000000
Binary files a/powerapps-docs/developer/data-platform/media/simple-spa.png and /dev/null differ
diff --git a/powerapps-docs/developer/data-platform/media/ssms-connect-dialog.PNG b/powerapps-docs/developer/data-platform/media/ssms-connect-dialog.PNG
index 36d4b012a1..6fa03149dd 100644
Binary files a/powerapps-docs/developer/data-platform/media/ssms-connect-dialog.PNG and b/powerapps-docs/developer/data-platform/media/ssms-connect-dialog.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 3f61c38f9f..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
@@ -1,9 +1,9 @@
---
-title: "Use OAuth with Cross-Origin Resource Sharing to connect a Single-Page Application (Microsoft Dataverse)| Microsoft Docs"
-description: "Learn how to use OAuth with Cross-Origin Resource Sharing (CORS) to connect a Single-Page Application."
-ms.date: 09/08/2022
+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
@@ -13,40 +13,40 @@ search.audienceType:
- developer
---
-# Use OAuth with Cross-Origin Resource Sharing to connect a Single-Page Application
+# Use OAuth with CORS to connect a SPA
-You can create a Single-Page Application (SPA) which uses JavaScript to work with Microsoft Dataverse data using Web API. To provide this, Cross-Origin Resource Sharing (CORS) is enabled so that your SPAs can bypass browser restrictions that normally prevent requests that cross domain boundaries.
+You can create a [Single-Page Application (SPA)](https://developer.mozilla.org/docs/Glossary/SPA) which uses JavaScript to work with Microsoft Dataverse data using Web API. To enable creation of apps like these, Dataverse enabled [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/docs/Web/HTTP/Guides/CORS) so that your SPAs can bypass browser restrictions that normally prevent requests that cross domain boundaries.
## SPAs and Same-Origin policy
-SPAs depend on extensive use of client-side JavaScript to create a single dynamic page which doesn't need to load new pages. Instead they use [Ajax](https://developer.mozilla.org/docs/Web/Guide/AJAX) programming techniques to retrieve data and other resources from the server. SPAs work well when the data and resources exist in the same domain as the application. But to protect access to data and resources on other domains, all modern browsers enforce a [Same-Origin policy](https://developer.mozilla.org/docs/Web/Security/Same-origin_policy) to prevent sites from using data and resources from sites on a different domain. CORS provides a way to gain access to resources on another domain. Creating a SPA to access Dataverse data without CORS is not a viable option.
+SPAs depend on extensive use of client-side JavaScript to create a single dynamic page which doesn't need to load new pages. Instead they use programming patterns using [network requests](https://developer.mozilla.org/docs/Learn_web_development/Core/Scripting/Network_requests), sometimes called 'Ajax', to retrieve data and other resources from the server. SPAs work well when the data and resources exist in the same domain as the application. But to protect access to data and resources on other domains, all modern browsers enforce a [Same-Origin policy](https://developer.mozilla.org/docs/Web/Security/Same-origin_policy) to prevent sites from using data and resources from sites on a different domain. CORS provides a way to gain access to resources on another domain. Creating a SPA to access Dataverse data without CORS isn't a viable option.
## Use CORS with Dataverse
-The [CORS protocol](https://fetch.spec.whatwg.org/#http-cors-protocol) provides a detailed description of how to implement and use CORS. It explains all about the various headers and preflight requests that you need to apply to make CORS work. The good news is that you don't need to become an expert in CORS to use it with Dataverse. The server-side part has been done for you and all you need is to know how to consume it. You don't need to understand all the inner workings of CORS to use it with Dataverse. Instead you can use the [Microsoft Authentication Library for JavaScript (MSAL.js) 2.0 for Browser-Based Single-Page Applications](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser) and it will take care of much of the CORS complexity for you. Since Dataverse users are authenticated using Microsoft Entra ID, MSAL.js is the supported way to authenticate SPA users.
+The [CORS protocol](https://fetch.spec.whatwg.org/#http-cors-protocol) provides a detailed description of how to implement and use CORS. It explains all about the various headers and preflight requests that you need to apply to make CORS work. The good news is that you don't need to become an expert in CORS to use it with Dataverse. The server-side part was done for you and all you need is to know how to consume it. You don't need to understand all the inner workings of CORS to use it with Dataverse. Instead you can use the [Microsoft Authentication Library for JavaScript (MSAL.js)](/javascript/api/overview/msal-overview?view=msal-js-latest&preserve-view=true) and it takes care of much of the CORS complexity for you. Since Dataverse users are authenticated using Microsoft Entra ID, MSAL.js is the supported way to authenticate SPA users.
## Preparing to use MSAL.js with a SPA
-In order to configure your SPA to work with msal.js you will need to:
+In order to configure your SPA to work with MSAL.js, you need to:
1. Register your application with the Microsoft Entra ID tenant.
1. Set configuration variables in your SPA with information from that registration.
- You will need to include the following:
+ You need to include the following items:
- The URL to your Dataverse organization.
- - The Id of the Microsoft Entra ID tenant your organization uses to authenticate.
+ - The ID of the Microsoft Entra ID tenant your organization uses to authenticate.
- The client ID you get when you register your application.
- - The URL to where the SPA will be deployed or debugged during development.
+ - The URL to where the SPA is deployed or debugged during development.
-The set of steps required are described in [Quickstart: Register and configure a SPA application for Dataverse using msal.js](quick-start-register-configure-simplespa-application-msal-js.md)
+The set of steps required are described in [Quickstart: Web API with client-side JavaScript and Visual Studio Code](webapi/quick-start-js-spa.md).
### See also
-[Use OAuth to connect to Dataverse web services](authenticate-oauth.md)
-[Quickstart: Register and configure a SPA application for Dataverse using msal.js](quick-start-register-configure-simplespa-application-msal-js.md)
+[Use OAuth to connect to Dataverse web services](authenticate-oauth.md)
+[Quickstart: Web API with client-side JavaScript and Visual Studio Code](webapi/quick-start-js-spa.md)
[Quickstart: Register an application with the Microsoft identity platform](/azure/active-directory/develop/quickstart-register-app)
[!INCLUDE[footer-include](../../includes/footer-banner.md)]
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 6680a84e0f..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
@@ -1,9 +1,9 @@
---
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: 04/10/2023
-author: MicroSri
-ms.author: sriknair
+ms.date: 01/24/2025
+author: MsSQLGirl
+ms.author: jukoesma
ms.reviewer: pehecke
ms.topic: sample
search.audienceType:
@@ -17,7 +17,7 @@ contributors:
[!INCLUDE[cc-terminology](../../includes/cc-terminology.md)]
-This sample shows how to write a plug-in that can access web (network) resources like a web service or feed. It also demonstrates how to limit the time duration allowed for this call.
+This sample shows how to write a plug-in that can access network (web) resources like a web service or feed. It also demonstrates how to limit the time duration allowed for this call.
> [!div class="nextstepaction"]
> [SDK for .NET: Web access from a plug-in sample code](https://github.com/microsoft/PowerApps-Samples/tree/master/dataverse/orgsvc/CSharp/WebAccessPlugin)
@@ -25,36 +25,22 @@ This sample shows how to write a plug-in that can access web (network) resources
## 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. This sample is located under PowerApps-Samples-master\dataverse\orgsvc\C#\WebAccessPlugin.
-1. There are two different plug-in class examples:
- - WebClientPlugin uses [WebClient Class](/dotnet/api/system.net.webclient)
- - HttpClientPlugin uses [HttpClient Class](/dotnet/api/system.net.http.httpclient)
-1. Open the sample solution in Visual Studio, navigate to the project's properties, and verify the assembly will be signed during the build. Press F6 to build the sample's assembly (WebAccessPlugin.dll).
+1. Open the sample solution in Visual Studio, navigate to the project's properties, and verify the assembly is signed during the build. Press F6 to build the sample's assembly (WebAccessPlugin.dll).
1. Run the Plug-in Registration tool and register the assembly in the Microsoft Dataverse server's sandbox and database.
-1. For either plug-in type, when registering a step, specify a web URI string (i.e., `https://www.microsoft.com`) in the unsecure configuration column.
- - The default value `https://www.bing.com` will be used if none is provided.
+1. When registering a step, specify a web URI string (that is, `https://www.microsoft.com`) in the unsecure configuration column.
+ - The default value `https://www.bing.com` is used if none is provided.
1. Using an app or write code to perform the appropriate operation to invoke the message and table request that you registered the plug-in on.
-1. When the plug-in runs, if the duration of the call exceeds the 15 second limit, it will throw an error. Otherwise it should succeed.
-1. When you are done testing, unregister the assembly and step.
+1. When the plug-in runs, if the duration of the call exceeds the 15-second limit, it throw's an error. Otherwise it should succeed.
+1. When you're done testing, unregister the assembly and step using the Plug-in Registrations tool.
## What this sample does
When executed, the plug-in downloads web page data from the specified web service address (or the default address).
-If the request exceeds the 15 second limit it will throw an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception)
+If the request exceeds the 15-second limit, it throws an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception)
and write details to the Plug-in Trace Log.
-- If the `WebClientPlugin` plugin fails, it will write something like the following to the Plug-in Trace log:
+- If the `HttpClientPlugin` plug-in fails, it writes something like the following to the Plug-in Trace log:
- ```
- Downloading the target URI: https://www.bing.com
- Exception: Microsoft.Xrm.Sdk.InvalidPluginExecutionException: The timeout elapsed while attempting to issue the request. ---> System.Net.WebException: The operation has timed out
- at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
- at System.Net.WebClient.DownloadData(Uri address)
- at PowerApps.Samples.WebClientPlugin.Execute(IServiceProvider serviceProvider)
- --- End of inner exception stack trace ---
- at PowerApps.Samples.WebClientPlugin.Execute(IServiceProvider serviceProvider)
- ```
-
-- If the `HttpClientPlugin` plug-in fails, it will write something like the following to the Plug-in Trace log:
```
Downloading the target URI: https://www.bing.com
Inner Exceptions:
@@ -62,47 +48,21 @@ and write details to the Plug-in Trace Log.
Exception: Microsoft.Xrm.Sdk.InvalidPluginExecutionException: An exception occurred while attempting to issue the request.
at PowerApps.Samples.HttpClientPlugin.Execute(IServiceProvider serviceProvider)
```
- The [TaskCanceledException](/dotnet/api/system.threading.tasks.taskcanceledexception) is somewhat ambigous about the cause of the task being cancelled. For a more complete solution showing how to explicitly detect errors due to time outs, see this blog post: [Better timeout handling with HttpClient](https://thomaslevesque.com/2018/02/25/better-timeout-handling-with-httpclient/).
+
+ The [TaskCanceledException](/dotnet/api/system.threading.tasks.taskcanceledexception) is ambiguous about the cause of the task being canceled. For a more complete solution showing how to explicitly detect errors due to time-outs, see this blog post: [Better time out handling with HttpClient](https://thomaslevesque.com/2018/02/25/better-timeout-handling-with-httpclient/).
## 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:
+In order to simulate the scenario described in [What this sample does](#what-this-sample-does), the sample does the following:
### Setup
1. Checks the constructor's unsecure configuration parameter for a web address value; otherwise, the default value is used.
-2. Depending on which plug-in is registered, either the [WebClient Class](/dotnet/api/system.net.webclient) or [HttpClient Class](/dotnet/api/system.net.http.httpclient) class is used by the plug-in's `Execute` method to download web page data.
-3. If the call exceeds the 15 second duration specified, an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception) will be thrown and details about the error will be written to the Plug-in Trace Log.
+2. The [HttpClient Class](/dotnet/api/system.net.http.httpclient) class is used by the plug-in's `Execute` method to download web page data.
+3. If the call exceeds the 15-second duration specified, an [InvalidPluginExecutionException](/dotnet/api/microsoft.xrm.sdk.invalidpluginexecutionexception) is thrown and details about the error is written to the Plug-in Trace Log.
### Demonstrate
-#### WebClientPlugin plugin
-
-1. Uses a derived `CustomWebClient` class to set the [WebRequest.Timeout Property](/dotnet/api/system.net.webrequest.timeout) that is not available in the `WebClient` class.
-
- ```
- ///
- /// A class derived from WebClient with 15 second timeout and KeepAlive disabled
- ///
- public class CustomWebClient : WebClient
- {
- protected override WebRequest GetWebRequest(Uri address)
- {
- HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
- if (request != null)
- {
- request.Timeout = 15000; //15 Seconds
- request.KeepAlive = false;
-
- }
- return request;
- }
- }
- ```
-
-1. Uses the [WebClient.DownloadData Method](/dotnet/api/system.net.webclient.downloaddata) to download the data from the resource.
-1. Shows how to parse the expected [WebException Class](/dotnet/api/system.net.webexception) and use the [Status Property](/dotnet/api/system.net.webexception.status) to determine whether the cause of the failure was due to a timeout.
-
#### HttpClientPlugin plugin
1. Uses the [HttpClient Class](/dotnet/api/system.net.http.httpclient) and sets the [Timeout Property](/dotnet/api/system.net.http.httpclient.timeout) to limit the allowed time for the operation to complete.
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/quick-start-register-configure-simplespa-application-msal-js.md b/powerapps-docs/developer/data-platform/quick-start-register-configure-simplespa-application-msal-js.md
deleted file mode 100644
index 4237406a8d..0000000000
--- a/powerapps-docs/developer/data-platform/quick-start-register-configure-simplespa-application-msal-js.md
+++ /dev/null
@@ -1,436 +0,0 @@
----
-title: "Quickstart: Register and configure a SPA application for Dataverse using msal.js (Microsoft Dataverse) | Microsoft Docs"
-description: "Describes the process of registering and configuring the simplest Single-Page Application (SPA) to access data in Microsoft Dataverse using msal.js and Cross-origin Resource Sharing (CORS)."
-ms.date: 09/09/2022
-ms.topic: quickstart
-author: ritesp # GitHub ID
-ms.subservice: dataverse-developer
-ms.author: ritesp # MSFT alias of Microsoft employees only
-ms.reviewer: jdaly
-search.audienceType:
- - developer
-contributors:
- - JimDaly
----
-
-# Quickstart: Register and configure a SPA application for Dataverse using msal.js
-
-This topic describes the process of registering and configuring the simplest Single-Page Application (SPA) to access data in Microsoft Dataverse using msal.js and Cross-origin Resource Sharing (CORS). More information: [Use OAuth with Cross-Origin Resource Sharing to connect a Single-Page Application to Dataverse ](oauth-cross-origin-resource-sharing-connect-single-page-application.md).
-
-## Prerequisites
-
-- Access to a Dataverse environment.
-- An Azure account with an active subscription.
-- The Azure account must have permission to manage applications in Microsoft Entra ID. Any of the following Microsoft Entra ID roles include the required permissions:
-
- - [Application administrator](/azure/active-directory/roles/permissions-reference#application-administrator)
- - [Application developer](/azure/active-directory/roles/permissions-reference#application-developer)
- - [Cloud application administrator](/azure/active-directory/roles/permissions-reference#cloud-application-administrator)
-
-- Visual Studio Code (VS Code) [Download](https://code.visualstudio.com/download)
-
-
-
-## Goal of this quick start
-
-When you complete this quick start you will be able to run a simple SPA application that will provide the ability for a user to authenticate and retrieve data from Dataverse.
-
-When you debug the application initially there will only be a **Login** button.
-
-- Click **Login** and a pop-up will open to enter your credentials.
-- After you enter your credentials you will find the **Login** button is hidden and a **Logout** button and a **Get Accounts** button are visible. You will also see a greeting using information from your user account.
-- Click the **Get Accounts** button to retrieve 10 account records from your Dataverse organization. The result is shown in the following screenshot:
-
- 
-
-- Finally, you can click on **Logout** button to logout.
-
-> [!NOTE]
-> This SPA application is not intended to represent a pattern for developing robust SPA applications. It is simplified to focus on the process of registering and configuring the application.
-
-## Get your Dataverse Web API endpoint
-
-Use the instructions in [View developer resources](view-download-developer-resources.md) to identify a Web API endpoint for an environment you can access. It should look something like this: `https://yourorg.api.crm.dynamics.com/api/data/v9.2`.
-
-## Register your application
-
-1. From [Power Platform admin center](https://admin.powerplatform.microsoft.com) in the left navigation expand **Admin centers** and select **Microsoft Entra ID**.
-
- :::image type="content" source="media/azure-active-directory-from-ppac.png" alt-text="Microsoft Entra ID from Power Platform Admin Center":::
-
- This will open the **Microsoft Entra admin center**
-
-1. Expand **Applications** and select **App registrations**.
-
- :::image type="content" source="media/aad-app-registrations-from-entra-admin-center.png" alt-text="Azure App registrations from Microsoft Entra admin center":::
-
-1. Click **New registration**. This will open the **Register an application** form.
-
- :::image type="content" source="media/aad-app-registration-form.png" alt-text="Register and application form":::
-
-1. In the **Register an application** form, type a **Name**. For the purpose of this quickstart, use the name *Simple SPA*.
-1. For **Supported account types**, the default selection should be: **Accounts in this organizational directory only (<tenant name> only – Single tenant)**. Don't change this.
-1. For **Redirect URI (optional)**, use these options:
-
- - **Select a platform**: Single-page application (SPA)
- - `e.g. https://example.com/auth`: `http://localhost:5500/index.html`
-
-1. Click **Register**.
-1. In the **Overview** area, copy the following values because you will need them in the final step of [Create a web application project](#create-a-web-application-project).
-
- - **Application (client) ID**
- - **Directory (tenant) ID**
-
-1. Select **API permissions**.
-1. Click **Add a permission**.
-1. In the **Request API permissions** fly-out, select **Dynamics CRM**.
-
- - If you don't see **Dynamics CRM**, look for **Dataverse**. Or select the **APIs my organization uses** tab and search for *Dataverse*.
-
-1. Select the **user_impersonation** delegated permission.
-1. Click **Add permissions**.
-
-The configured permissions should look like this when you are done:
-
-:::image type="content" source="media/configured-permissions-for-simple-spa-app.png" alt-text="Configured permissions for Simple SPA app":::
-
-## Install Live Server Visual Studio Code extension
-
-[Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) is a Visual Studio Code extension that allows you to easily launch a local development server for web pages.
-
-1. Use these instructions to find and install the Live Server extension for VS Code in the VS Code marketplace:
-
- - [Browse for extensions](https://code.visualstudio.com/docs/editor/extension-marketplace#_browse-for-extensions)
- - [Install an extension](https://code.visualstudio.com/docs/editor/extension-marketplace#_install-an-extension)
-
-1. After you have installed the Live Server extension, make these changes to the default settings.
-1. Click the gear icon :::image type="icon" source="media/vscode-gear-icon.png" border="false"::: in VS Code and select **Settings** , or use the `Ctrl+,` keyboard shortcut.
-1. In the search window type `liveServer.settings.host` and change the default value from `127.0.0.1` to `localhost`.
-
-## Create a web application project
-
-1. Create a folder on your computer. The name is not important but for the purpose of these instructions name it `simplespa`.
-1. Open VS Code and select **File** > **Open Folder** in the menu. Select the `simplespa` folder.
-1. Create a new HTML file in the folder named `index.html`. (Not `index.htm`)
-1. Copy the contents below into the index.html file:
-
- ```html
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Name
City
-
-
-
-
-
-
- ```
-
- > [!NOTE]
- > The JavaScript code in the HTML page was adapted from the sample code published here: [https://github.com/Azure-Samples/ms-identity-javascript-v2](https://github.com/Azure-Samples/ms-identity-javascript-v2) which connects to Microsoft Graph.
- >
- > The key difference is the scopes used when getting the access token.
- >
- > Use these scopes for the login button:
- > ```javascript
- > // Called by the loginButton
- > function signIn() {
- > myMSALObj.loginPopup({
- > scopes: ["User.Read",baseUrl+"/user_impersonation"] //<= Includes Dataverse scope
- > })
- > ```
- > These scopes include both the Microsoft Graph `User.Read` scope, but also the Dataverse `user_impersonation` scope.
- > By including both of these scopes when signing in, the inital consent dialog will include all the necessary scopes used in the applicaiton.
- >
- > Then, when specifying the scope used for the call to Dataverse you can use either `/.default` or `/user_impersonation`.
- >
- > ```javascript
- > // Retrieves top 10 account records from Dataverse
- > function getAccounts(callback) {
- > // Gets the access token
- > getTokenPopup({
- > scopes: [baseUrl+"/.default"]
- > })
- > ```
- >
- > `/user_impersonation` scope only works for delegated permissions, which is the case here, so it could be used. `/.default` works for both delegated and application permissions.
- >
- > If you don't include the `baseUrl+"/user_impersonation"` scope when logging in, the user will have to consent a second time when they click the **Get Accounts** button for the first time.
- >
- >
- > You can find other SPA examples and tutorials here: [Single-page application (SPA) documentation](/azure/active-directory/develop/index-spa).
-
-1. Within the index.html page, locate the following configuration variables and set them using the information you gathered in earlier steps: [Get your Dataverse Web API endpoint](#get-your-dataverse-web-api-endpoint) and [Register your application](#register-your-application).
-
- ```javascript
- const baseUrl = "https://org.api.crm.dynamics.com"; //<= Change this
- const clientId = "00001111-aaaa-2222-bbbb-3333cccc4444"; //<= Change this
- const tenantId = "aaaabbbb-0000-cccc-1111-dddd2222eeee"; //<= Change this
- ```
-
-## Debug the app
-
-Because you installed the Live Server extension in [Install Live Server Visual Studio Code extension](#install-live-server-visual-studio-code-extension), in the VS Code tool bar you should find this button: :::image type="icon" source="media/vscode-live-server-go-live-button.png" border="false":::.
-
-1. Click the **Go Live** button and a new browser window will open to `http://localhost:5500/index.html` rendering the index.html page.
-
- The first time you run the app and click the **Login** button, you will get a consent dialog like this:
-
- :::image type="content" source="media/permissions-requested-dialog.png" alt-text="Permissions requested dialog":::
-
- If you are an administrator, you can select the **Consent on behalf of your organization** checkbox which will enable others to also run the app without having to use the **Permissions requested** dialog.
-
-1. Click **Accept** to continue testing to verify that the app works as described in [Goal of this quick start](#goal-of-this-quick-start).
-
-## Troubleshooting
-
-The experience in this quick start depends on the Live Server port setting to be the default value: `5500`. If you already have Live Server installed and have modified the port setting, you will need to change the default setting or the URL set in the app registration.
-
-Please note that the `liveServer.settings.port` may also be set for the **Workspace** and will override the **User** setting.
-
-If you open multiple Live Server instances, the port setting may increment to 5501 or higher. This will break the callback used for authentication because the port is 'hard-coded' into the application registration as `http://localhost:5500/index.html`.
-
-### See also
-
-[Single-page application (SPA) documentation](/azure/active-directory/develop/index-spa)
-[Use OAuth with Cross-Origin Resource Sharing to connect a Single-Page Application to Dataverse](oauth-cross-origin-resource-sharing-connect-single-page-application.md)
-[Create client applications](connect-dataverse.md)
-
-[!INCLUDE[footer-include](../../includes/footer-banner.md)]
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/aaduser.md b/powerapps-docs/developer/data-platform/reference/entities/aaduser.md
index e2cafb28e7..2a171bb0d8 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/aaduser.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/aaduser.md
@@ -1,16 +1,14 @@
---
title: "Microsoft Entra ID (aaduser) table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the Microsoft Entra ID (aaduser) table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# Microsoft Entra ID (aaduser) table/entity reference
+# Microsoft Entra ID (aaduser) table/entity reference (Microsoft Dataverse)
Virtual entity that represents Microsoft Entra ID
@@ -409,6 +407,6 @@ These columns/attributes return false for both **IsValidForCreate** and **IsVali
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/account.md b/powerapps-docs/developer/data-platform/reference/entities/account.md
index dbc5fdc358..6a6de4b33e 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/account.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/account.md
@@ -1,16 +1,14 @@
---
title: "Account table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the Account table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# Account table/entity reference
+# Account table/entity reference (Microsoft Dataverse)
Business that represents a customer or potential customer. The company that is billed in business transactions.
@@ -22,9 +20,11 @@ Messages represent operations that can be performed on the table. They may also
| Name Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
| `Assign` Event: True |`PATCH` /accounts(*accountid*) [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` /accounts 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` /accounts(*accountid*) 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: True | ||
| `Merge` Event: True | ||
@@ -3123,9 +3123,6 @@ These relationships are one-to-many. Listed by **SchemaName**.
- [Account_Letters](#BKMK_Account_Letters)
- [Account_MailboxTrackingFolder](#BKMK_Account_MailboxTrackingFolder)
- [account_master_account](#BKMK_account_master_account-one-to-many)
-- [account_msfp_alerts](#BKMK_account_msfp_alerts)
-- [account_msfp_surveyinvites](#BKMK_account_msfp_surveyinvites)
-- [account_msfp_surveyresponses](#BKMK_account_msfp_surveyresponses)
- [account_parent_account](#BKMK_account_parent_account-one-to-many)
- [Account_Phonecalls](#BKMK_Account_Phonecalls)
- [account_PostFollows](#BKMK_account_PostFollows)
@@ -3410,42 +3407,6 @@ Many-To-One Relationship: [account account_master_account](#BKMK_account_master_
|IsCustomizable|`True`|
|AssociatedMenuConfiguration|AvailableOffline: True Behavior: `DoNotDisplay` Group: `Details` Label: MenuId: null Order: QueryApi: null ViewId: `00000000-0000-0000-0000-000000000000`|
-### account_msfp_alerts
-
-Many-To-One Relationship: [msfp_alert account_msfp_alerts](msfp_alert.md#BKMK_account_msfp_alerts)
-
-|Property|Value|
-|---|---|
-|ReferencingEntity|`msfp_alert`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencedEntityNavigationPropertyName|`account_msfp_alerts`|
-|IsCustomizable|`True`|
-|AssociatedMenuConfiguration|AvailableOffline: True Behavior: `DoNotDisplay` Group: `Details` Label: MenuId: null Order: QueryApi: `CRMActivity.RollupRelatedByParty` ViewId: `00000000-0000-0000-00aa-000010001903`|
-
-### account_msfp_surveyinvites
-
-Many-To-One Relationship: [msfp_surveyinvite account_msfp_surveyinvites](msfp_surveyinvite.md#BKMK_account_msfp_surveyinvites)
-
-|Property|Value|
-|---|---|
-|ReferencingEntity|`msfp_surveyinvite`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencedEntityNavigationPropertyName|`account_msfp_surveyinvites`|
-|IsCustomizable|`True`|
-|AssociatedMenuConfiguration|AvailableOffline: True Behavior: `DoNotDisplay` Group: `Details` Label: MenuId: null Order: QueryApi: `CRMActivity.RollupRelatedByParty` ViewId: `00000000-0000-0000-00aa-000010001903`|
-
-### account_msfp_surveyresponses
-
-Many-To-One Relationship: [msfp_surveyresponse account_msfp_surveyresponses](msfp_surveyresponse.md#BKMK_account_msfp_surveyresponses)
-
-|Property|Value|
-|---|---|
-|ReferencingEntity|`msfp_surveyresponse`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencedEntityNavigationPropertyName|`account_msfp_surveyresponses`|
-|IsCustomizable|`True`|
-|AssociatedMenuConfiguration|AvailableOffline: True Behavior: `DoNotDisplay` Group: `Details` Label: MenuId: null Order: QueryApi: `CRMActivity.RollupRelatedByParty` ViewId: `00000000-0000-0000-00aa-000010001903`|
-
### account_parent_account
Many-To-One Relationship: [account account_parent_account](#BKMK_account_parent_account-many-to-one)
@@ -3696,6 +3657,6 @@ See [powerpagecomponent powerpagecomponent_mspp_webrole_account Many-To-Many Rel
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/aciviewmapper.md b/powerapps-docs/developer/data-platform/reference/entities/aciviewmapper.md
index fe0cad2cf0..c3fe9d0413 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/aciviewmapper.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/aciviewmapper.md
@@ -1,16 +1,14 @@
---
title: "ACIViewMapper table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the ACIViewMapper table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# ACIViewMapper table/entity reference
+# ACIViewMapper table/entity reference (Microsoft Dataverse)
Customized messages for an entity that has been renamed.
@@ -21,8 +19,10 @@ Messages represent operations that can be performed on the table. They may also
| Name Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
+| `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: False |`POST` /aciviewmappers 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)|
| `Delete` Event: False |`DELETE` /aciviewmappers(*aciviewmapperid*) 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)|
| `Retrieve` Event: False |`GET` /aciviewmappers(*aciviewmapperid*) 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: False |`GET` /aciviewmappers 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)|
| `SetState` Event: False |`PATCH` /aciviewmappers(*aciviewmapperid*) [Update](/powerapps/developer/data-platform/webapi/update-delete-entities-using-web-api#basic-update) the `statecode` and `statuscode` properties. ||
@@ -365,6 +365,6 @@ One-To-Many Relationship: [organization organization_aciviewmapper](organization
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/actioncard.md b/powerapps-docs/developer/data-platform/reference/entities/actioncard.md
index a612e9f910..3c6b0ff26a 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/actioncard.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/actioncard.md
@@ -1,16 +1,14 @@
---
title: "Action Card (ActionCard) table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the Action Card (ActionCard) table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# Action Card (ActionCard) table/entity reference
+# Action Card (ActionCard) table/entity reference (Microsoft Dataverse)
Action card entity to show action cards.
@@ -21,8 +19,10 @@ Messages represent operations that can be performed on the table. They may also
| Name Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
+| `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` /actioncards 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)|
| `Delete` Event: True |`DELETE` /actioncards(*actioncardid*) 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)|
| `Retrieve` Event: True |`GET` /actioncards(*actioncardid*) 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` /actioncards 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)|
| `Update` Event: True |`PATCH` /actioncards(*actioncardid*) 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)|
@@ -346,7 +346,7 @@ These columns/attributes return true for either **IsValidForCreate** or **IsVali
|LogicalName|`regardingobjectid`|
|RequiredLevel|None|
|Type|Lookup|
-|Targets|account, adx_inviteredemption, adx_portalcomment, appointment, chat, contact, email, fax, letter, msfp_alert, msfp_surveyinvite, msfp_surveyresponse, phonecall, recurringappointmentmaster, task|
+|Targets|account, adx_inviteredemption, adx_portalcomment, appointment, chat, contact, email, fax, letter, phonecall, recurringappointmentmaster, task|
### RegardingObjectTypeCode
@@ -693,9 +693,6 @@ These relationships are many-to-one. Listed by **SchemaName**.
- [lk_actioncardbase_createdonbehalfby](#BKMK_lk_actioncardbase_createdonbehalfby)
- [lk_actioncardbase_modifiedby](#BKMK_lk_actioncardbase_modifiedby)
- [lk_actioncardbase_modifiedonbehalfby](#BKMK_lk_actioncardbase_modifiedonbehalfby)
-- [msfp_alert_ActionCards](#BKMK_msfp_alert_ActionCards)
-- [msfp_surveyinvite_ActionCards](#BKMK_msfp_surveyinvite_ActionCards)
-- [msfp_surveyresponse_ActionCards](#BKMK_msfp_surveyresponse_ActionCards)
- [owner_actioncards](#BKMK_owner_actioncards)
- [phonecall_actioncard](#BKMK_phonecall_actioncard)
- [recurringappointmentmaster_actioncard](#BKMK_recurringappointmentmaster_actioncard)
@@ -884,45 +881,6 @@ One-To-Many Relationship: [systemuser lk_actioncardbase_modifiedonbehalfby](syst
|IsHierarchical||
|CascadeConfiguration|Archive: `NoCascade` Assign: `NoCascade` Delete: `NoCascade` Merge: `NoCascade` Reparent: `NoCascade` RollupView: `NoCascade` Share: `NoCascade` Unshare: `NoCascade`|
-### msfp_alert_ActionCards
-
-One-To-Many Relationship: [msfp_alert msfp_alert_ActionCards](msfp_alert.md#BKMK_msfp_alert_ActionCards)
-
-|Property|Value|
-|---|---|
-|ReferencedEntity|`msfp_alert`|
-|ReferencedAttribute|`activityid`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencingEntityNavigationPropertyName|`regardingobjectid_msfp_alert`|
-|IsHierarchical||
-|CascadeConfiguration|Archive: `NoCascade` Assign: `Cascade` Delete: `Cascade` Merge: `NoCascade` Reparent: `NoCascade` RollupView: `NoCascade` Share: `NoCascade` Unshare: `NoCascade`|
-
-### msfp_surveyinvite_ActionCards
-
-One-To-Many Relationship: [msfp_surveyinvite msfp_surveyinvite_ActionCards](msfp_surveyinvite.md#BKMK_msfp_surveyinvite_ActionCards)
-
-|Property|Value|
-|---|---|
-|ReferencedEntity|`msfp_surveyinvite`|
-|ReferencedAttribute|`activityid`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencingEntityNavigationPropertyName|`regardingobjectid_msfp_surveyinvite`|
-|IsHierarchical||
-|CascadeConfiguration|Archive: `NoCascade` Assign: `Cascade` Delete: `Cascade` Merge: `NoCascade` Reparent: `NoCascade` RollupView: `NoCascade` Share: `NoCascade` Unshare: `NoCascade`|
-
-### msfp_surveyresponse_ActionCards
-
-One-To-Many Relationship: [msfp_surveyresponse msfp_surveyresponse_ActionCards](msfp_surveyresponse.md#BKMK_msfp_surveyresponse_ActionCards)
-
-|Property|Value|
-|---|---|
-|ReferencedEntity|`msfp_surveyresponse`|
-|ReferencedAttribute|`activityid`|
-|ReferencingAttribute|`regardingobjectid`|
-|ReferencingEntityNavigationPropertyName|`regardingobjectid_msfp_surveyresponse`|
-|IsHierarchical||
-|CascadeConfiguration|Archive: `NoCascade` Assign: `Cascade` Delete: `Cascade` Merge: `NoCascade` Reparent: `NoCascade` RollupView: `NoCascade` Share: `NoCascade` Unshare: `NoCascade`|
-
### owner_actioncards
One-To-Many Relationship: [owner owner_actioncards](owner.md#BKMK_owner_actioncards)
@@ -1009,6 +967,6 @@ Many-To-One Relationship: [actioncarduserstate ActionCardUserState_ActionCard](a
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/actioncarduserstate.md b/powerapps-docs/developer/data-platform/reference/entities/actioncarduserstate.md
index 262248b6c7..1cb1aa6bf2 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/actioncarduserstate.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/actioncarduserstate.md
@@ -1,16 +1,14 @@
---
title: "ActionCardUserState table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the ActionCardUserState table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# ActionCardUserState table/entity reference
+# ActionCardUserState table/entity reference (Microsoft Dataverse)
@@ -21,8 +19,10 @@ Messages represent operations that can be performed on the table. They may also
| Name Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
+| `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: False |`POST` /actioncarduserstates 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)|
| `Delete` Event: False |`DELETE` /actioncarduserstates(*actioncarduserstateid*) 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)|
| `Retrieve` Event: False |`GET` /actioncarduserstates(*actioncarduserstateid*) 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: False |`GET` /actioncarduserstates 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)|
| `Update` Event: False |`PATCH` /actioncarduserstates(*actioncarduserstateid*) 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)|
@@ -342,6 +342,6 @@ One-To-Many Relationship: [transactioncurrency TransactionCurrency_ActionCardUse
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/activityfileattachment.md b/powerapps-docs/developer/data-platform/reference/entities/activityfileattachment.md
index b66f8e8f5f..300f6b4812 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/activityfileattachment.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/activityfileattachment.md
@@ -1,16 +1,14 @@
---
title: "Activity File Attachment (activityfileattachment) table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the Activity File Attachment (activityfileattachment) table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# Activity File Attachment (activityfileattachment) table/entity reference
+# Activity File Attachment (activityfileattachment) table/entity reference (Microsoft Dataverse)
Attachment entity with data stored in file type attribute
@@ -22,9 +20,11 @@ Messages represent operations that can be performed on the table. They may also
| Name Is Event? |Web API Operation |SDK for .NET |
| ---- | ----- |----- |
| `Assign` Event: True |`PATCH` /activityfileattachments(*activityfileattachmentid*) [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` /activityfileattachments 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` /activityfileattachments(*activityfileattachmentid*) 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 | ||
@@ -887,6 +887,6 @@ Many-To-One Relationship: [syncerror activityfileattachment_SyncErrors](syncerro
### See also
-[Dataverse table/entity reference](../about-entity-reference.md)
+[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/activitymimeattachment.md b/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
index a948fa9989..30692b0a27 100644
--- a/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
+++ b/powerapps-docs/developer/data-platform/reference/entities/activitymimeattachment.md
@@ -1,16 +1,14 @@
---
title: "Attachment (ActivityMimeAttachment) table/entity reference (Microsoft Dataverse)"
description: "Includes schema information and supported messages for the Attachment (ActivityMimeAttachment) table/entity with Microsoft Dataverse."
-ms.date: 01/06/2025
-ms.service: powerapps
-ms.topic: reference
+ms.topic: generated-reference
author: phecke
ms.author: pehecke
search.audienceType:
- developer
---
-# Attachment (ActivityMimeAttachment) table/entity reference
+# Attachment (ActivityMimeAttachment) table/entity reference (Microsoft Dataverse)
MIME attachment for an activity.
@@ -21,8 +19,10 @@ Messages represent operations that can be performed on the table. They may also
| Name