diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index 7db2a604c0..fd5c34e80f 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -1035,6 +1035,11 @@ "source_path": "power-platform/admin/onpremises-data-gateway-source-management.md", "redirect_url": "/power-platform/admin/wp-onpremises-gateway", "redirect_document_id": false + }, + { + "source_path": "power-platform/guidance/adoption/environment-strategy.md", + "redirect_url": "/power-platform/guidance/white-papers/environment-strategy", + "redirect_document_id": false } ] } diff --git a/full-image.jpg b/full-image.jpg new file mode 100644 index 0000000000..a09d862cc1 Binary files /dev/null and b/full-image.jpg differ diff --git a/power-platform/TOC.yml b/power-platform/TOC.yml index e615e00060..3f1119f6de 100644 --- a/power-platform/TOC.yml +++ b/power-platform/TOC.yml @@ -17,17 +17,21 @@ href: solution-templates/overview.md - name: International availability href: availability.md - - name: Turn on copilots and generative AI features - href: admin/geographical-availability-copilot.md - name: Important changes (deprecations) coming href: important-changes-coming.md - - name: Responsible AI + - name: Copilots and generative AI features items: - - name: Overview - href: responsible-ai-overview.md - - name: FAQ for Copilot data security and privacy - href: faqs-copilot-data-security-privacy.md - - name: FAQ for optional data sharing for Copilot - href: faqs-copilot-data-sharing.md - - name: FAQ for using Copilot to generate deployment notes in pipelines - href: alm/faqs-ai-deployment-notes-pipelines.md + - name: Copilots and generative AI in Power Platform + href: copilot.yml + - name: Turn on copilots and generative AI features + href: admin/geographical-availability-copilot.md + - name: Responsible AI + items: + - name: Overview + href: responsible-ai-overview.md + - name: FAQ for Copilot data security and privacy + href: faqs-copilot-data-security-privacy.md + - name: FAQ for optional data sharing for Copilot + href: faqs-copilot-data-sharing.md + - name: FAQ for using Copilot to generate deployment notes in pipelines + href: alm/faqs-ai-deployment-notes-pipelines.md diff --git a/power-platform/admin/TOC.yml b/power-platform/admin/TOC.yml index 35aaf923ce..6c7a80917f 100644 --- a/power-platform/admin/TOC.yml +++ b/power-platform/admin/TOC.yml @@ -462,6 +462,8 @@ href: security.yml - name: Overview of Power Platform security href: security/overview.md + - name: Manage security + href: security/security-posture-overview.md - name: Authenticating to Power Platform services href: security/authenticate-services.md - name: Data storage and governance @@ -948,6 +950,8 @@ items: - name: Configure incoming and outgoing email synchronization href: set-incoming-outgoing-email-synchronization.md + - name: Select the start date for processing incoming email + href: select-incoming-email-processing-start-date.md - name: Specify which emails are automatically tracked href: email-message-filtering-correlation.md - name: Associate an email address with a row @@ -1079,15 +1083,20 @@ href: connect-yammer.md - name: Unified admin experience for finance and operations apps (preview) items: - - name: Overview + - name: Overview of unified admin experience for finance and operations apps href: unified-experience/finance-operations-apps-overview.md - displayName: Overview of unified admin experience for finance and operations apps + - name: Administration for partners and systems implementers + href: unified-experience/partners-systems-implementers.md - name: "Tutorial: Provision a new environment with an ERP-based template" href: unified-experience/tutorial-deploy-new-environment-with-erp-template.md - name: "Tutorial: Install the Finance and Operations Provisioning apps" href: unified-experience/tutorial-install-finance-operations-provisioning-app.md + - name: "Tutorial: Update the Finance and Operations Provisioning app" + href: unified-experience/tutorial-update-finance-operations-provisioning-app.md - name: "Tutorial: Copy a Lifecycle Services environment to a unified environment" href: unified-experience/tutorial-copy-lifecycle-services-environment-unified-environment.md + - name: "Tutorial: Perform a transaction-less copy between environments" + href: unified-experience/tutorial-perform-transactionless-copy.md - name: "Admin trials for finance and operations apps" href: unified-experience/admin-trials.md - name: Performance tuning and optimization diff --git a/power-platform/admin/about-encryption.md b/power-platform/admin/about-encryption.md index 14159dee80..83aac4011b 100644 --- a/power-platform/admin/about-encryption.md +++ b/power-platform/admin/about-encryption.md @@ -24,7 +24,7 @@ Data is an organization’s most valuable and irreplaceable asset, and encryptio Encrypting your information renders it unreadable to unauthorized persons, even if they break through your firewalls, infiltrate your network, get physical access to your devices, or bypass the permissions on your local machine. Encryption transforms data so that only someone with the decryption key can access it. -Dynamics 365 uses heterogenous storage (Dataverse) to store the data. The data is distributed across different storage types: +Dynamics 365 uses heterogeneous storage (Dataverse) to store the data. The data is distributed across different storage types: - Azure SQL Database for relational data - Azure Blob storage for binary data, such as images and documents diff --git a/power-platform/admin/about-microsoft-cloud-china.md b/power-platform/admin/about-microsoft-cloud-china.md index b08f2d69be..f668083711 100644 --- a/power-platform/admin/about-microsoft-cloud-china.md +++ b/power-platform/admin/about-microsoft-cloud-china.md @@ -19,7 +19,7 @@ contributors: Microsoft Power Platform and Dynamics 365 apps services operated by 21Vianet are designed to comply with regulatory requirements in China. The services are a physically separated environment of cloud services that's currently operated and transacted by a local operator, Shanghai Blue Cloud Technology Co., Ltd ("21Vianet"). This is a wholly owned subsidiary of Beijing 21Vianet Broadband Data Center Co., Ltd., located in China. -The Dyamics 365 apps include Dynamics 365 Sales, Dynamics 365 Customer Service, Dynamics 365 Field Service, Dynamics 365 Marketing, and Dynamics 365 Project Service Automation. +The Dynamics 365 apps include Dynamics 365 Sales, Dynamics 365 Customer Service, Dynamics 365 Field Service, Dynamics 365 Marketing, and Dynamics 365 Project Service Automation. ## Provisioning diff --git a/power-platform/admin/about-team-templates.md b/power-platform/admin/about-team-templates.md index 30bdf78558..b95d6c870e 100644 --- a/power-platform/admin/about-team-templates.md +++ b/power-platform/admin/about-team-templates.md @@ -29,10 +29,10 @@ Only tables that are enabled for system-managed access teams can be specified in If you change access rights in the team template, the changes are only applied to new system-managed access teams. The existing teams aren’t affected. -For information about how to create a team template, enable an table for system-managed access teams and how to customize the table form to add the team template, see [Create a team template and add to an table form](create-team-template-add-entity-form.md). +For information about how to create a team template, enable a table for system-managed access teams and how to customize the table form to add the team template, see [Create a team template and add to a table form](create-team-template-add-entity-form.md). ### See also - [Create a team template and add to an table form](create-team-template-add-entity-form.md) + [Create a team template and add to a table form](create-team-template-add-entity-form.md) [Manage teams](manage-teams.md) diff --git a/power-platform/admin/about-teams-environment.md b/power-platform/admin/about-teams-environment.md index ca2cba8dfc..0269a8b9cf 100644 --- a/power-platform/admin/about-teams-environment.md +++ b/power-platform/admin/about-teams-environment.md @@ -119,7 +119,7 @@ There's a difference in the models for adding users to an environment with a Dat Dynamics 365 admin - These admins need to be owners or members of the team (because every team is linked to an Microsoft 365 group and the Dataverse for Teams environment will always be restricted for access to that Microsoft 365 group) to have System Administrator–level privileges to manage the health and maintenance of the environment. + These admins need to be owners or members of the team (because every team is linked to a Microsoft 365 group and the Dataverse for Teams environment will always be restricted for access to that Microsoft 365 group) to have System Administrator–level privileges to manage the health and maintenance of the environment. System Administrator if they are an owner in the team; System Administrator and Teams Member if they are a member in the team. No access if they aren't an owner or member in the team. diff --git a/power-platform/admin/about-unified-interface.md b/power-platform/admin/about-unified-interface.md index 9bcf697211..4214f5792c 100644 --- a/power-platform/admin/about-unified-interface.md +++ b/power-platform/admin/about-unified-interface.md @@ -64,7 +64,7 @@ There are certain capabilities that continue to be unavailable in Unified Interf ## Read-only entities on Unified Interface -There are certain entities that are currently read-only on Unified Interface. Users will not be able to make changes to these entity records within an Unified Interface app. We are working to make them editable in future releases. +There are certain entities that are currently read-only on Unified Interface. Users will not be able to make changes to these entity records within a Unified Interface app. We are working to make them editable in future releases. > [!NOTE] > Some entities are being deprecated. More information: [Important changes (deprecations) coming](/dynamics365/customer-service/deprecations-customer-service#contracts-contract-line-items-and-contract-templates-entities-are-deprecated) diff --git a/power-platform/admin/admin-activity-logging.md b/power-platform/admin/admin-activity-logging.md index e87fc406c9..073b1a254f 100644 --- a/power-platform/admin/admin-activity-logging.md +++ b/power-platform/admin/admin-activity-logging.md @@ -3,7 +3,7 @@ title: View Power Platform administrative logs using auditing solutions in Micro description: In this article, you learn how to view Power Platform administrative logs using auditing solutions in Microsoft Purview. ms.component: pa-admin ms.topic: conceptual -ms.date: 05/30/2024 +ms.date: 06/06/2024 author: sericks007 ms.subservice: admin ms.author: sericks @@ -51,7 +51,7 @@ Each activity event contains a payload of metadata that is specific to the indiv | Reset environment | A sandbox environment has been reset. | | Upgraded environment | A component of an environment has been upgraded to a new version. | | CMK-Renewed environment | The customer-managed key (CMK) has been renewed on the environment. | -| CMK-Reverted environment | Environment was removed from enterprise policy and encryption was retured to Microsoft-managed key. | +| CMK-Reverted environment | Environment was removed from enterprise policy and encryption was returned to Microsoft-managed key. | ## Activity category: Environment property and setting change activities @@ -164,6 +164,99 @@ Here's an example of the payload of metadata that can be expected from one of th ] ``` +## Activity category: Data policy events + +> [!NOTE] +> Activity logging for data policies is not currently available in sovereign clouds. + +All the data policy events show up under **GovernanceApiPolicyOperation** activity. Each activity event contains a property collection, which emits the following properties: +The following data policy events are delivered to Microsoft Purview. + +| **Category** | **Description** | +|-------------------------------------------------------------|-----------------------------------------| +| Create DLP Policy | Emitted when a new data policy is created. +| Update DLP Policy | Emitted when a data policy is updated. +| Delete DLP Policy | Emitted when a data policy is deleted. +| Create Custom Connector Patterns | Emitted when a new custom connector URL pattern is created. +| Update Custom Connector Patterns | Emitted when a custom connector URL pattern is updated. +| Delete Custom Connector Patterns | Emitted when a custom connector URL pattern is deleted. +| Create Connector Configurations | Emitted when a connector configuration is created for the data policy. +| Update Connector Configurations | Emitted when a connector configuration is updated for the data policy. +| Delete Connector Configurations | Emitted when a connector configuration is deleted for the data policy. +| Create Policy Scope | Emitted when a new policy scope is created. +| Update Policy Scope | Emitted when a policy scope is updated. +| Delete Policy Scope | Emitted when a policy scope is deleted. +| Create Exempt Resources | Emitted when an exempt resources list is created for the data policy. +| Update Exempt Resources | Emitted when an exempt resources list is updated for the data policy. +| Delete Exempt Resources | Emitted when an exempt resources list is deleted for the data policy. +| Create connector blocking policy | Emitted when a new connector blocking policy is created. +| Update connector blocking policy | Emitted when connector blocking policy is updated. +| Delete connector blocking policy | Emitted when connector blocking policy is deleted. + +Here's an example payload of metadata that can be expected from one of the events in the table. + +``` +[ + { + "Name": "powerplatform.analytics.resource.tenant.governance.api_policy.additional_resources", + "Value": "<>" + }, + { + "Name": "powerplatform.analytics.resource.display_name", + "Value": "ConnectorBlockingPolicy" + }, + { + "Name": "powerplatform.analytics.resource.tenant.governance.api_policy.operation_result", + "Value": "True" + }, + { + "Name": "powerplatform.analytics.resource.id", + "Value": "ConnectorBlockingPolicy" + }, + { + "Name": "powerplatform.analytics.resource.type", + "Value": "ApiPolicy" + }, + { + "Name": "powerplatform.analytics.resource.tenant.governance.api_policy.operation_name", + "Value": "DeleteDlpPolicy" + }, + { + "Name": "version", + "Value": "1.0" + }, + { + "Name": "type", + "Value": "PowerPlatformAdministratorActivityRecord" + }, + { + "Name": "powerplatform.analytics.activity.name", + "Value": "GovernanceApiPolicyOperation" + }, + { + "Name": "powerplatform.analytics.activity.id", + "Value": "99ac5d50-a0f4-4878-8ff4-e02b7da3a510" + }, + { + "Name": "enduser.id", + "Value": "888c1bf5-3127-4c8c-84ee-b6a9c684e315" + }, + { + "Name": "enduser.principal_name", + "Value": admin@contosotest.onmicrosoft.com + }, + { + "Name": "enduser.role", + "Value": "Admin" + }, + { + "Name": "powerplatform.analytics.resource.tenant.id", + "Value": "ce65293a-e07d-4638-9dfa-79483fcd5136" + } +] + +``` + ## View activities in Microsoft Purview When audit log search is turned on in the Microsoft Purview compliance portal, admin activity from your organization is recorded in the Microsoft Purview audit log. diff --git a/power-platform/admin/admin-documentation.md b/power-platform/admin/admin-documentation.md index 0a3658897f..ec674ed8d3 100644 --- a/power-platform/admin/admin-documentation.md +++ b/power-platform/admin/admin-documentation.md @@ -3,7 +3,7 @@ title: Administer Microsoft Power Platform description: The Power Platform admin center is a unified portal for administrators to manage environments and settings. author: sericks007 ms.topic: overview -ms.date: 05/04/2024 +ms.date: 06/12/2024 ms.author: sericks --- # Administer Microsoft Power Platform @@ -20,15 +20,16 @@ Currently, the admin center provides the following capabilities. |Feature |Description | |---------|---------| -|Environments | View, create, and manage your environments. Select an environment to see details and manage its setting. More information: [Manage environment settings](./admin-settings.md)| -|Analytics | Get a detailed view of key metrics for Microsoft Power Platform apps. More information: [Microsoft Dataverse analytics](./analytics-common-data-service.md) | -|Billing | View a summary of environments in your tenant requiring licensing attention and license consumption for your environments. More information: [Business subscription and billing documentation](/microsoft-365/commerce) and [View license consumption](view-license-consumption-issues.md) | -|Settings | Manage settings for all environments in your tenant. More information: [Tenant settings](tenant-settings.md) | -|Resources | View and manage resources in your tenant and environments. More information: [View and manage resources](view-manage-resources.md) | -|Help + support | Get a list of self-help solutions or create a support ticket for technical support. More information: [Get Help + Support](./get-help-support.md)

**Note**: Although, you administer Power BI using the Power BI admin portal, you request support for Power BI through Help + support in the Power Platform admin center. | -|Data integration| More information: [Integrate data into Dataverse](data-integrator.md) | -|Data| Manage your cloud and data gateway connections. More information: [Set up data transfer between on-premises data and cloud services](onpremises-data-gateway-management.md) | -|Policies | View and manage various policies for your tenant and environments. More information:
- [Manage data policies](prevent-data-loss.md)
- [Tenant isolation policy](cross-tenant-restrictions.md)
- [Customer Lockbox policy](about-lockbox.md)
- [Enterprise policies](customer-managed-key.md)
- [Billing policies](pay-as-you-go-overview.md)| +|Environments | View, create, and manage your environments. Select an environment to see details and manage its setting. Learn more: [Manage environment settings](./admin-settings.md)| +|Security | Run your organizational workloads in the safest way possible with a wide set of security features available. Learn more: [Manage security](security/security-posture-overview.md). | +|Analytics | Get a detailed view of key metrics for Microsoft Power Platform apps. Learn more:: [Microsoft Dataverse analytics](./analytics-common-data-service.md) | +|Billing | View a summary of environments in your tenant requiring licensing attention and license consumption for your environments. Learn more: [Business subscription and billing documentation](/microsoft-365/commerce) and [View license consumption](view-license-consumption-issues.md) | +|Settings | Manage settings for all environments in your tenant. Learn more: [Tenant settings](tenant-settings.md) | +|Resources | View and manage resources in your tenant and environments. Learn more: [View and manage resources](view-manage-resources.md) | +|Help + support | Get a list of self-help solutions or create a support ticket for technical support. Learn more: [Get Help + Support](./get-help-support.md)

**Note**: Although, you administer Power BI using the Power BI admin portal, you request support for Power BI through Help + support in the Power Platform admin center. | +|Data integration| Learn more: [Integrate data into Dataverse](data-integrator.md) | +|Data| Manage your cloud and data gateway connections. Learn more: [Set up data transfer between on-premises data and cloud services](onpremises-data-gateway-management.md) | +|Policies | View and manage various policies for your tenant and environments. Learn more:
- [Manage data policies](prevent-data-loss.md)
- [Tenant isolation policy](cross-tenant-restrictions.md)
- [Customer Lockbox policy](about-lockbox.md)
- [Enterprise policies](customer-managed-key.md)
- [Billing policies](pay-as-you-go-overview.md)| ## Dashboard overview for home page diff --git a/power-platform/admin/administer-catalog.md b/power-platform/admin/administer-catalog.md index d4f61848d3..b11b3c2a66 100644 --- a/power-platform/admin/administer-catalog.md +++ b/power-platform/admin/administer-catalog.md @@ -22,7 +22,7 @@ The catalog in Power Platform enables developers and makers to: Administering the catalog includes the following tasks: -- [Setup the catalog](#set-up-the-catalog) +- [Set up the catalog](#set-up-the-catalog) - [Approve and reject submission requests](#approve-and-reject-submission-requests) - [Review install history](#review-install-history) - [Review catalog items](#review-catalog-items) diff --git a/power-platform/admin/analytics-common-data-service.md b/power-platform/admin/analytics-common-data-service.md index 9d4184d335..bb67a457f6 100644 --- a/power-platform/admin/analytics-common-data-service.md +++ b/power-platform/admin/analytics-common-data-service.md @@ -149,7 +149,7 @@ For more information on the different roles for managing your tenant across the > | Workflow Executions | This chart shows how many workflows have been executed in the environment with a Dataverse database over the specified time. | > | System Jobs Pass Rate | This chart shows the system job's pass rate as percentage of system jobs that were executed in the environment with a Dataverse database over the specified time. | > | System Jobs Throughput/Minute | This chart shows the average system jobs that have been executed per hour in the environment with a Dataverse database over the specified time. | -> | Executions and Backlog | This chart shows the number of executions and the backlog for system jobs in the environment with a Dataverse databaset over the specified time. | +> | Executions and Backlog | This chart shows the number of executions and the backlog for system jobs in the environment with a Dataverse database over the specified time. | > | Most Active Workflows | This chart shows top 10 most executed workflows in the environment with a Dataverse database over the specified time. | > | Top Workflows by Failures | This chart shows top 10 most failing workflows in the environment with a Dataverse database over the specified time. Click on a workflow to see the failures and their number of occurrences. | diff --git a/power-platform/admin/analytics-ui-flow.md b/power-platform/admin/analytics-ui-flow.md index 27bfff828d..3aa253077c 100644 --- a/power-platform/admin/analytics-ui-flow.md +++ b/power-platform/admin/analytics-ui-flow.md @@ -5,7 +5,7 @@ author: Zeffin ms.topic: conceptual ms.date: 08/03/2023 ms.subservice: admin -ms.author: johnev +ms.author: cvassallo ms.reviewer: sericks search.audienceType: - flowadmin @@ -116,8 +116,6 @@ You can filter your view to display reports from a specific **environment** or f ## Learn more -- [Create desktop flows](/power-automate/desktop-flows/create-desktop). -- [Create Selenium IDE flows](/power-automate/ui-flows/create-web). - Run [desktop flows](/power-automate/desktop-flows/run-desktop-flow). [!INCLUDE[footer-include](../includes/footer-banner.md)] diff --git a/power-platform/admin/assign-security-roles.md b/power-platform/admin/assign-security-roles.md index a967a5d74c..ad7fb51ad2 100644 --- a/power-platform/admin/assign-security-roles.md +++ b/power-platform/admin/assign-security-roles.md @@ -8,7 +8,7 @@ ms.author: sericks ms.custom: "admin-security" ms.component: pa-admin ms.topic: conceptual -ms.date: 03/29/2024 +ms.date: 06/17/2024 search.audienceType: - admin contributors: @@ -56,6 +56,9 @@ When the [allow record ownership across business units](wp-security-cds.md#enabl > [!IMPORTANT] > You must assign at least one security role to every user either directly or indirectly as a member of a [group team](manage-group-teams.md). The service doesn't allow access to users who don't have at least one security role. +> [!NOTE] +> The panel shown above shows and manages only direct role assignments for the user. [Manage group teams](manage-group-teams.md) explains how to see and manage roles assigned as a member of a [group team](manage-group-teams.md). + ## User settings privileges for record ownership across business units If you have enabled [allow record ownership across business units](wp-security-cds.md#enable-the-matrix-data-access-structure), your users can access data in other business units by having a security role from these other business units directly assigned to them. The user also needs a security role assigned from the user's business unit with privileges from the following tables in order to update the user UI settings: diff --git a/power-platform/admin/automatic-environment-cleanup.md b/power-platform/admin/automatic-environment-cleanup.md index e7c4b9960b..f72b698404 100644 --- a/power-platform/admin/automatic-environment-cleanup.md +++ b/power-platform/admin/automatic-environment-cleanup.md @@ -47,7 +47,7 @@ If an environment has already been deleted, you have a limited window of time to A cleanup mechanism in Power Platform automatically removes environments that aren't being used. After 90 days of inactivity, an environment is disabled. After 30 days, if no action is taken, the disabled environment is deleted. You have seven days to recover deleted environments. -Only developer and [Dataverse for Teams environments](inactive-teams-environment.md) are affected by the actvity-based automatic cleanup. +Only developer and [Dataverse for Teams environments](inactive-teams-environment.md) are affected by the activity-based automatic cleanup. > [!IMPORTANT] > You can't turn off this cleanup mechanism. However, you can review the last activity date for developer environments in the Power Platform admin center. diff --git a/power-platform/admin/change-base-currency-environment.md b/power-platform/admin/change-base-currency-environment.md index db5582d598..68390466dd 100644 --- a/power-platform/admin/change-base-currency-environment.md +++ b/power-platform/admin/change-base-currency-environment.md @@ -2,7 +2,7 @@ title: Change the base currency of a Dataverse environment in Power Platform description: Learn how to change the base currency of a Dataverse environment in Power Platform. author: sanjeevgoyal -ms.date: 03/27/2024 +ms.date: 06/18/2024 ms.reviewer: matp ms.topic: conceptual ms.subservice: admin @@ -17,7 +17,7 @@ When you create an environment that includes a database in Power Platform, you m 1. Make a backup of the environment's database before starting base currency conversion. Learn more: [Back up and restore environments](backup-restore-environments.md) -1. Sign in to the Power Platform admin center, go to **Resources** > **Dynamics 365 apps**. Select **...** next to **Base Currency Conversion**, and then select **Install**. +1. Go to [AppSource](https://appsource.microsoft.com/), enter *base currency* in the search box, and then select **Get it now** next to **Base Currency Conversion**. Follow the steps to install the app into the Power Platform environment you want. 1. After the Base Currency Conversion solution installation completes, go to Power Apps (make.powerapps.com), select **Apps** on the left navigation pane, and then **Play** the **Base Currency Conversion** app. diff --git a/power-platform/admin/configure-default-sync-filters.md b/power-platform/admin/configure-default-sync-filters.md index 2d6e30873e..9ce56b9311 100644 --- a/power-platform/admin/configure-default-sync-filters.md +++ b/power-platform/admin/configure-default-sync-filters.md @@ -46,7 +46,7 @@ Open XrmToolBox and connect to your organization. On the **Configuration** tab, ## Step 1. Check the current default sync filter -1. In [XrmToolBox](https://www.xrmtoolbox.com/), go to the the **Tools** menu and open **Sync Filter Manager.** +1. In [XrmToolBox](https://www.xrmtoolbox.com/), go to the **Tools** menu and open **Sync Filter Manager.** > [!div class="mx-imgBorder"] > ![Open the Sync Filter Manager.](media/default-sync-filter-5.png "Sync filter manager") diff --git a/power-platform/admin/connect-exchange-online.md b/power-platform/admin/connect-exchange-online.md index 4ea2853d0a..65dd03c131 100644 --- a/power-platform/admin/connect-exchange-online.md +++ b/power-platform/admin/connect-exchange-online.md @@ -306,7 +306,7 @@ To approve emails, a Dynamics 365 user requires the **Approve Email Addresses fo #### Approve mailboxes -You can use a manual or programmatic processses to approve a mailbox. +You can use a manual or programmatic processes to approve a mailbox. ##### Approve a mailbox manually diff --git a/power-platform/admin/connect-exchange-server-onprem-hma.md b/power-platform/admin/connect-exchange-server-onprem-hma.md index d2534af7e2..aa3c027305 100644 --- a/power-platform/admin/connect-exchange-server-onprem-hma.md +++ b/power-platform/admin/connect-exchange-server-onprem-hma.md @@ -132,7 +132,7 @@ Before you [create an email server profile](connect-exchange-server-on-premises. - HMA Application Id: The App ID for HMA-App. It can be found on the main page for the app registration of HMA-App. - Key Vault Uri: The URI of the Key Vault used for certificate storage. - Key Vault KeyName: The certificate name used in Key Vault. -- KeyVault Application Id: The the app ID of the KV-App used by Dynamics to retrieve the certificate from Key Vault. +- KeyVault Application Id: The app ID of the KV-App used by Dynamics to retrieve the certificate from Key Vault. - KeyVault Client Secret: The client secret for the KV-App used by Dynamics 365. > [!div class="mx-imgBorder"] diff --git a/power-platform/admin/content-security-policy.md b/power-platform/admin/content-security-policy.md index 203989cc7f..9e19d9b7a5 100644 --- a/power-platform/admin/content-security-policy.md +++ b/power-platform/admin/content-security-policy.md @@ -1,7 +1,7 @@ --- title: "Content security policy" description: "Use content security policy to prevent clickjacking in Power Apps." -ms.date: 04/25/2024 +ms.date: 06/14/2024 ms.topic: conceptual author: JesseParsons ms.subservice: admin @@ -70,7 +70,9 @@ For Microsoft Teams integration using the [Dynamics 365 app](/dynamics365/teams- - `https://teams.microsoft.com/` - `https://msteamstabintegration.dynamics.com/` -For Dynamics 365 App for Outlook, you must add your Outlook Web App homepage origin to `frame-ancestors`. +For the Dynamics 365 App for Outlook, add the following to `frame-ancestors`: +- Your Outlook Web App homepage origin +- `https://outlook.office.com` For embedding Power Apps in Power BI reports, add the following to `frame-ancestors`: - `https://app.powerbi.com` diff --git a/power-platform/admin/control-user-access.md b/power-platform/admin/control-user-access.md index fb6e1e7713..b683232a35 100644 --- a/power-platform/admin/control-user-access.md +++ b/power-platform/admin/control-user-access.md @@ -11,7 +11,7 @@ ms.contributors: ms.custom: "admin-security" ms.component: pa-admin ms.topic: conceptual -ms.date: 04/21/2023 +ms.date: 06/27/2024 search.audienceType: - admin --- @@ -54,9 +54,10 @@ Note the following information about security groups: - When you select a security group, be sure to select a Microsoft Entra security group and not one created in on-premises Windows Active Directory. On-premises Windows AD security groups aren't supported. - If a user isn't part of the assigned security group to the environment but has the Azure tenant Global Administrator role, the user will still show as an active user and will be able to sign in. - If a user is assigned the Dynamics 365 Service Admin role, then the user must be part of the security group before they are enabled in the environment. They can't access the environment until they are added to the security group and enabled. +- If the security group associated to the environment changes (that is, the old security group is removed and a new one is associated to the environment), a clean-up of existing users in the environment is initiated, and then adding of new users to the environment happens. In most cases, this process is done in minutes, but depending on the number of users in the old and new security groups, this may take several hours. > [!NOTE] -> All licensed users, whether or not they are members of the security groups, must be assigned security roles to access data in the environments. You assign the security roles in the web application. If users don’t have a security role, they'll get a data access denied error when trying to run an app. Users can't access environments until they are assigned at least one security role for that environment. For more information, see [Configure environment security](database-security.md). +> All licensed users, whether or not they are members of the security groups, must be assigned security roles to access data in the environments. You [assign security roles](assign-security-roles.md) in the web application. If users don’t have a security role, they'll get a data access denied error when trying to run an app. Users can't access environments until they are assigned at least one security role for that environment. For more information, see [Configure environment security](database-security.md). > Automatic user assignment to an environment is not supported for trial environments. For trial environments, users must be assigned manually. ## Create a security group and add members to the security group @@ -124,4 +125,4 @@ Or, purchase and assign per-app passes: [About Power Apps per app plans](about-p [Create users](create-users.md) -[!INCLUDE[footer-include](../includes/footer-banner.md)] \ No newline at end of file +[!INCLUDE[footer-include](../includes/footer-banner.md)] diff --git a/power-platform/admin/conversation-diagnostics-application-insights.md b/power-platform/admin/conversation-diagnostics-application-insights.md index 1065aaa1d6..b470b78e7d 100644 --- a/power-platform/admin/conversation-diagnostics-application-insights.md +++ b/power-platform/admin/conversation-diagnostics-application-insights.md @@ -26,7 +26,7 @@ Connect your Dynamics 365 Customer Service environment to an Azure Application I You can then use the conversation lifecycle events data from Dynamics 365 Customer Service in Application Insights to monitor system health, export, and combine it with additional data sets to build custom dashboards per your business needs. -[!INCLUDE [preview-note](~/../shared-content/shared/preview-includes/preview-note.md)] +[!INCLUDE [preview-note](~/../shared-content/shared/preview-includes/preview-note-pp.md)] > [!NOTE] > Export of Power Automate and Dynamics 365 Customer Service data is not available in sovereign clouds, such as Government Community Cloud (GCC), Government Community Cloud - High (GCC High), and Department of Defense (DoD), at this time. diff --git a/power-platform/admin/copy-environment.md b/power-platform/admin/copy-environment.md index 37f3c69ce7..fe8fed1635 100644 --- a/power-platform/admin/copy-environment.md +++ b/power-platform/admin/copy-environment.md @@ -238,7 +238,7 @@ Confirm that search returns expected results. If results aren't accurate, you ca - Flows are initially disabled. - When enabling a flow, if an error is encountered, then open the flow in the designer to review errors and flow checker warnings. Adjust and resave the flow as needed. - Flow run history won't be copied to the target environment. - - Flows with a "When a HTTP request is received" trigger has a new HTTP URL. + - Flows with a "When an HTTP request is received" trigger has a new HTTP URL. - If the source environment was a default environment, then integrating services like SharePoint, Excel, Teams, Power BI, and OneDrive continue to point at any related flows in the source environment. Consider if those integration flows can remain in the source default environment. Remove any integration flows from the target environment that stays behind in the source default environment. Action items: @@ -246,7 +246,7 @@ Action items: 2. Review flows that use custom connectors to ensure they're pointing at the new custom connector in the target environment. For more details, see [Custom Connectors](#custom-connectors) below. 3. Before enabling flows in the target environment, consider if the corresponding flows should be disabled in the source environment and if appropriate, then disable those flows. Ensure that flow runs have completed before disabling flows. 4. Enable flows as needed. Any child flows need to be enabled before parent flows can be enabled. -5. For any flows using the "When a HTTP request is received" trigger, adjust any dependent flows or apps to call the new HTTP URL. If the flows in the source environment are disabled, then testing that the dependent apps have been redirected correctly becomes easier. +5. For any flows using the "When an HTTP request is received" trigger, adjust any dependent flows or apps to call the new HTTP URL. If the flows in the source environment are disabled, then testing that the dependent apps have been redirected correctly becomes easier. #### Connection References - Connection References require new connections. diff --git a/power-platform/admin/create-users.md b/power-platform/admin/create-users.md index 5d462d753f..28a1c21b89 100644 --- a/power-platform/admin/create-users.md +++ b/power-platform/admin/create-users.md @@ -372,7 +372,7 @@ We are in the process of moving application user management from the legacy web A stub user is a user record that has been created as a placeholder. For example, records have been imported that refer to this user but the user doesn't exist in customer engagement apps. This user can't sign in, can't be enabled, and can't be synchronized to Microsoft 365. This type of user can only be created through data import. > [!CAUTION] -> To prevent creating duplicate user records with the same UPN or throw errors during data import workflows, ensure that users exist in Entra ID and are sufficiently licensed for pre-provisioning. Office licenses aren't supported for pre-provisioning, but any Power Apps Premium or Dynamics 365 licenses are supported for pre-provisioning. Once users meet these requirements, they are syncronized with Dataverse environments. +> To prevent creating duplicate user records with the same UPN or throw errors during data import workflows, ensure that users exist in Entra ID and are sufficiently licensed for pre-provisioning. Office licenses aren't supported for pre-provisioning, but any Power Apps Premium or Dynamics 365 licenses are supported for pre-provisioning. Once users meet these requirements, they are synchronized with Dataverse environments. > If you must reassign records from a stub user to another user, use the [Add-BulkRecordsToUsers](https://github.com/microsoft/PowerApps-Samples/tree/master/powershell/UserManagement/Microsoft.PowerPlatform.Administration.UserManagement#command-add-bulkrecordstousers). A default security role is automatically assigned to these imported users. The **Salesperson** security role is assigned in an environment and the **Basic User** security role is assigned in a Power Apps environment. diff --git a/power-platform/admin/cross-tenant-restrictions.md b/power-platform/admin/cross-tenant-restrictions.md index 99ac322b5f..d9264f1b87 100644 --- a/power-platform/admin/cross-tenant-restrictions.md +++ b/power-platform/admin/cross-tenant-restrictions.md @@ -164,7 +164,7 @@ Selecting the failed run will show details of the failed flow run. ## Known issues -[Azure DevOps connector](/connectors/visualstudioteamservices) uses Microsoft Entra authentication as the identity provider, but uses its own OAuth flow and STS for authorizing and issuing a token. Since the token returned from the ADO flow based on that Connector’s configuration is not from Microsoft Entra ID, the tenant isolation policy is not enforced. As a mitigation, we recomend using other types of [data policies](wp-data-loss-prevention.md) to limit the use of the connector or its actions. +[Azure DevOps connector](/connectors/visualstudioteamservices) uses Microsoft Entra authentication as the identity provider, but uses its own OAuth flow and STS for authorizing and issuing a token. Since the token returned from the ADO flow based on that Connector’s configuration is not from Microsoft Entra ID, the tenant isolation policy is not enforced. As a mitigation, we recommend using other types of [data policies](wp-data-loss-prevention.md) to limit the use of the connector or its actions. [!INCLUDE[footer-include](../includes/footer-banner.md)] \ No newline at end of file diff --git a/power-platform/admin/customer-managed-key.md b/power-platform/admin/customer-managed-key.md index 0617a74404..b1591426a2 100644 --- a/power-platform/admin/customer-managed-key.md +++ b/power-platform/admin/customer-managed-key.md @@ -5,7 +5,7 @@ author: paulliew ms.author: paulliew ms.reviewer: sericks, matp, ratrtile ms.topic: how-to -ms.date: 05/10/2024 +ms.date: 06/17/2024 ms.custom: template-how-to contributors: - kavehkazms @@ -66,6 +66,9 @@ Currently, all your customer data stored *only* in the following apps and servic > [!NOTE] > Power Apps display names, descriptions, and connection metadata continues to be encrypted with a Microsoft-managed key. +> [!NOTE] +> Data analyzed by solution checker enforcement during a solution check continues to be encrypted with a Microsoft-managed key. + Environments with finance and operations apps where [Power Platform integration is enabled](/dynamics365/fin-ops-core/dev-itpro/power-platform/enable-power-platform-integration) can also be encrypted. Finance and operations environments without Power Platform integration will continue to use the default Microsoft managed key to encrypt data. More information: [Encryption in finance and operations apps](/dynamics365/fin-ops-core/dev-itpro/sysadmin/customer-managed-keys) :::image type="content" source="media/cmk-power-platform-diagram.png" alt-text="Customer-managed encryption key in the Power Platform"::: @@ -265,10 +268,9 @@ Register Power Platform as a resource provider. You only need to do this task on 1. Install PowerShell MSI. More information: [Install PowerShell on Windows, Linux, and macOS](https://ms.portal.azure.com/#create/Microsoft.Template) 1. After the PowerShell MSI is installed, go back to [Deploy a custom template](https://ms.portal.azure.com/#create/Microsoft.Template) in Azure. 1. Select the **Build your own template in the editor** link. -1. Copy the JSON template into a text editor such as Notepad. More information: [Enterprise policy json template](#enterprise-policy-json-template) +1. Copy [this JSON template](#enterprise-policy-json-template) into a text editor such as Notepad. More information: [Enterprise policy json template](#enterprise-policy-json-template) 1. Replace the values in the JSON template for: *EnterprisePolicyName*, *location where EnterprisePolicy needs to be created*, *keyVaultId*, and *keyName*. More information: [Field definitions for json template](#field-definitions-for-json-template) 1. Copy the updated template from your text editor then paste it into the **Edit template** of the **Custom deployment** in Azure, and select **Save**. - :::image type="content" source="media/cmk-keyvault-template.png" alt-text="Azure key vault template"::: 1. Select a **Subscription** and **Resource group** where the enterprise policy is to be created. 1. Select **Review + create**, and then select **Create**. @@ -432,7 +434,7 @@ Follow these steps if you want to return to a Microsoft managed encryption key. 1. Select **Save**. > [!IMPORTANT] - > The environment will be disabled when it is removed from the enterprise policy to revert the data encryption to the Microsoft-managed key. **Do not delete or disable the key, delete or disable the key vault, or remove the enteprise policy's permissions to the key vault.** The key and key vault's access is necessary to support database restoration. You may delete and remove the enterprise policy's permissions after 30 days. + > The environment will be disabled when it is removed from the enterprise policy to revert the data encryption to the Microsoft-managed key. **Do not delete or disable the key, delete or disable the key vault, or remove the enterprise policy's permissions to the key vault.** The key and key vault's access is necessary to support database restoration. You may delete and remove the enterprise policy's permissions after 30 days. ### Review the environment's encryption status @@ -465,7 +467,7 @@ You can see the [environment history](environments-overview.md#environment-histo ### Change the environment's encryption key with a new enterprise policy and key -To change your encryption key, create a new key and a new enterprise policy. You can then change the enterprise policy by removing the environments and then adding the environments to the new enterprise policy. The system is down 2 times when changing to a new enterprise policy - 1) to revert the encryption to Microsoft Managed key and 2) to apply the new enterprise policy. +To change your encryption key, create a new key and a new enterprise policy. You can then change the enterprise policy by removing the environments and then adding the environments to the new enterprise policy. The system is down two times when changing to a new enterprise policy - 1) to revert the encryption to Microsoft Managed key and 2) to apply the new enterprise policy. > [!Recommendation] > To rotate the encryption key, we recommend using the Key vaults' [**New version** or setting a **Rotation policy**. ](customer-managed-key.md#rotate-the-environments-encryption-key-with-a-new-key-version) @@ -480,7 +482,7 @@ To change your encryption key, create a new key and a new enterprise policy. You 1. Repeat steps 2-6 until all environments in the enterprise policy have been removed. > [!IMPORTANT] - > The environment will be disabled when it is removed from the enterprise policy to revert the data encryption to the Microsoft-managed key. **Do not delete or disable the key, delete or disable the key vault, or remove the enteprise policy's permissions to the key vault**. The key and key vault's access is necessary to support database restoration. You may delete and remove the enterprise policy's permissions after 30 days. + > The environment will be disabled when it is removed from the enterprise policy to revert the data encryption to the Microsoft-managed key. **Do not delete or disable the key, delete or disable the key vault, or remove the enterprise policy's permissions to the key vault**. The key and key vault's access is necessary to support database restoration. You may delete and remove the enterprise policy's permissions after 30 days. 1. Once all the environments are removed, from the Power Platform admin center go to **Enterprise policies**. 1. Select the new enterprise policy, and then select **Edit policy**. diff --git a/power-platform/admin/database-security.md b/power-platform/admin/database-security.md index 2c0112f90b..2b0618b6f5 100644 --- a/power-platform/admin/database-security.md +++ b/power-platform/admin/database-security.md @@ -12,7 +12,7 @@ ms.custom: - bap-template ms.component: pa-admin ms.topic: how-to -ms.date: 01/02/2024 +ms.date: 06/28/2024 search.audienceType: - admin --- @@ -53,12 +53,12 @@ The following table describes the predefined security roles in an environment th | App Opener | Has [minimum privileges for common tasks](create-edit-security-role.md#minimum-privileges-for-common-tasks). This role is primarily used as a template to [create a custom security role](#create-or-configure-a-custom-security-role) for model-driven apps. It doesn't have any privileges to the core business tables, such as Account, Contact, and Activity. However, it has **Organization**-level read access to system tables, such as **Process**, to support reading system-supplied workflows. Note that this security role is used when a [new, custom security role is created](create-edit-security-role.md#create-a-security-role). | | Basic User | For out-of-the-box entities only, can run an app in the environment and perform common tasks on the records they own. It has privileges to the core business tables, such as Account, Contact, and Activity.

**Note**: The Common Data Service **User** security role was renamed **Basic User**. Only the name was changed; user privileges and role assignment are the same. If you have a solution with the Common Data Service **User** security role, you should update the solution before you import it again. Otherwise, you might inadvertently change the security role name back to **User** when you import the solution. | | Delegate | Allows code to [*impersonate*, or run as, another user](/powerapps/developer/common-data-service/impersonate-another-user). Typically used with another security role to allow access to records. | -| Dynamics 365 Administrator | *Dynamics 365 administrator* is a Microsoft Power Platform service admin role. This role can do admin functions on Microsoft Power Platform because they have the system administrator role. | +| Dynamics 365 Administrator | *Dynamics 365 administrator* is a Microsoft Power Platform service admin role. Users of this role can do admin functions on Microsoft Power Platform after they [self-elevate](manage-high-privileged-admin-roles.md) to the system administrator role. | | Environment Maker | Can create new resources associated with an environment, including apps, connections, custom APIs, and flows using Microsoft Power Automate. However, this role doesn't have any privileges to access data in an environment.

Environment makers can also [distribute the apps they build](/powerapps/maker/canvas-apps/share-app) in an environment to other users in your organization. They can share the app with individual users, security groups, or all users in the organization. | -| Global Administrator | *Global administrator* is a Microsoft 365 administrator role. A person who purchases the Microsoft business subscription is a global administrator and has unlimited control over products in the subscription and access to most data. | +| Global Administrator | *Global administrator* is a Microsoft 365 administrator role. A person who purchases the Microsoft business subscription is a global administrator and has unlimited control over products in the subscription and access to most data. Users of this role must [self-elevate](manage-high-privileged-admin-roles.md) to the system administrator role. | | Global Reader | The [Global Reader](/azure/active-directory/roles/permissions-reference) role isn't supported yet in the Power Platform admin center. | | Office Collaborator |Has Read permission to tables in which a record was shared with the organization. Doesn't have access to any other core and custom table records. This role is assigned to the Office Collaborators owner team and not to an individual user. | -| Power Platform administrator | *Power Platform administrator* is a Microsoft Power Platform service administrator role. This role can perform admin functions on Microsoft Power Platform because they have the system administrator role. | +| Power Platform administrator | *Power Platform administrator* is a Microsoft Power Platform service administrator role. Users of this role can do admin functions on Microsoft Power Platform after they [self-elevate](manage-high-privileged-admin-roles.md) to the system administrator role. | | Service Deleted | Has full Delete permission to all entities, including custom entities. This role is primarily used by the service and requires deleting records in all entities. **This role can't be assigned to a user or team.** | | Service Reader | Has full Read permission to all entities, including custom entities. This role is primarily used by the service and requires reading all entities. **This role can't be assigned to a user or team.** | | Service Writer | Has full Create, Read, and Write permission to all entities, including custom entities. This role is primarily used by the service and requires creating and updating records. **This role can't be assigned to a user or team.** | @@ -107,7 +107,7 @@ The following table describes which resources each security role can author. |Connector |X (non–solution-aware) |X |X |X | |Connection* |X |X |X |X | |Data gateway |- |X |- |X | -|Dataflow |X |X |- |X | +|Dataflow |X |X |X |X | |Dataverse tables |- |- |X |X | |Model-driven app |X |- |X |X | |Solution framework |X |- |X |X | diff --git a/power-platform/admin/dataverse-privacy-dsr-guide.md b/power-platform/admin/dataverse-privacy-dsr-guide.md index be0a3b6a18..24b950c010 100644 --- a/power-platform/admin/dataverse-privacy-dsr-guide.md +++ b/power-platform/admin/dataverse-privacy-dsr-guide.md @@ -75,7 +75,7 @@ You can find personal data from Dataverse users within the following resources: |Resource | Purpose | Website access | Programmatic access | | --- | --- | --- | --- | | Table row | Known as the system User table, it stores a user's personal data. | [Power Platform admin center](https://admin.powerplatform.microsoft.com/) | Through the [Web API](/powerapps/developer/common-data-service/webapi/update-delete-entities-using-web-api#basic-update) | -| Audit history | Allows customers to identify resources that users created, accessed, changed, or deleted at an table level. | [Power Platform admin center](https://admin.powerplatform.microsoft.com/) | Through the [Web API](/powerapps/developer/common-data-service/webapi/update-delete-entities-using-web-api#basic-update) | +| Audit history | Allows customers to identify resources that users created, accessed, changed, or deleted at a table level. | [Power Platform admin center](https://admin.powerplatform.microsoft.com/) | Through the [Web API](/powerapps/developer/common-data-service/webapi/update-delete-entities-using-web-api#basic-update) | #### User User personal data is stored in the Microsoft Entra and is automatically synced to all environments with a Dataverse database. System administrators cannot update this personal data directly in Dataverse while the user is active—they must update the data from within the Microsoft 365 admin center. System administrators can add personal data (for example, custom attributes) directly to Dataverse, but they must manually manage this data. @@ -183,7 +183,7 @@ From the [Power Platform admin center](https://admin.powerplatform.microsoft.com 12. Select **Next**, and then select **Submit**. #### Permanently delete user -You can either remove user's personal data or permanently delete the user record from the Datavese user table. More information: [Permanently delete users in Power Platform](/power-platform/admin/delete-users#permanently-delete-users-in-power-platform). +You can either remove user's personal data or permanently delete the user record from the Dataverse user table. More information: [Permanently delete users in Power Platform](/power-platform/admin/delete-users#permanently-delete-users-in-power-platform). When the user record is permanently deleted, the user's name in all records where the deleted user was the creator or last modified by and in the audit logs will show as **No Name**. @@ -267,7 +267,7 @@ From the [Power Platform admin center](https://admin.powerplatform.microsoft.com Dataverse System Administrators can delete an individual's personal data from records where that data is stored. The Dataverse System Administrator can choose to either delete the record where the personal data is stored, or remove the contents of the personal data from the record. > [!NOTE] -> Dataverse administrators can customize an environment to prevent a record from being deleted from an table. If configured in this way, you'll have to remove the contents of the personal data from the record rather than delete the record itself. +> Dataverse administrators can customize an environment to prevent a record from being deleted from a table. If configured in this way, you'll have to remove the contents of the personal data from the record rather than delete the record itself. From the Dataverse search results, to the following: @@ -284,7 +284,7 @@ You may be storing personal data from individuals (such as your own customers) w Dataverse System Administrators are responsible for maintaining an inventory of where personal data is being stored within various tables for each individual so that they can locate that data in response to any DSR requests. -Personal data can then be exported, rectified, or deleted in an table using the in-product functionality. +Personal data can then be exported, rectified, or deleted in a table using the in-product functionality. ### Discover When Dataverse System Administrators receives a DSR request from an individual, they must identify which environments/environments with a Dataverse database contain personal data from that individual. Personal data is typically stored in key tables (for example, Account, Contact, Lead, Opportunity, etc.), but it's your responsibility to develop policies and procedures for maintaining an inventory of where you store each individual's personal data so you're prepared to respond to DSR requests. diff --git a/power-platform/admin/default-environment-routing.md b/power-platform/admin/default-environment-routing.md index 5cd972f194..aa47cc0b86 100644 --- a/power-platform/admin/default-environment-routing.md +++ b/power-platform/admin/default-environment-routing.md @@ -196,7 +196,7 @@ The maker is always routed to their own existing personal developer environment, ### What happens if the Power Platform admin changes the Developer environment assignments setting from "Everyone" to "Only specific admins" while Environment routing is **On**? -The admin recieves the following error "Something went wrong while saving your changes. Try again and if the problem persists, submit a support ticket with correlation id: 1234567910." The admin won't be able to change the Developer environment assignments setting unless they turn environment routing off. +The admin receives the following error "Something went wrong while saving your changes. Try again and if the problem persists, submit a support ticket with correlation id: 1234567910." The admin won't be able to change the Developer environment assignments setting unless they turn environment routing off. ### Where are makers routed to if they don’t have an existing developer environment? diff --git a/power-platform/admin/deploy-office-365-groups.md b/power-platform/admin/deploy-office-365-groups.md index c317041850..1432b7ea2f 100644 --- a/power-platform/admin/deploy-office-365-groups.md +++ b/power-platform/admin/deploy-office-365-groups.md @@ -30,7 +30,7 @@ Microsoft 365 Groups, available with Dynamics 365 apps, provides a new environme - Customer engagement apps -- This feature requires that you have an Microsoft 365 subscription or a subscription to an online service such as SharePoint Online or Exchange Online. +- This feature requires that you have a Microsoft 365 subscription or a subscription to an online service such as SharePoint Online or Exchange Online. - To use document storage with Microsoft 365 Groups, you will need SharePoint Online and access to the group OneNote notebook. @@ -44,7 +44,7 @@ Microsoft 365 Groups, available with Dynamics 365 apps, provides a new environme Microsoft 365 Groups is a solution you provision from your Microsoft 365 admin center. > [!NOTE] -> Users must have an Exchange Online mailbox set up to use Microsoft 365 Groups. Exchange Online is already properly configured for organizations as a part of Microsoft 365. You also need to enable server-based SharePoint integration to see documents in an Microsoft 365 Group; you don't have to use SharePoint integration, only set up the connection to SharePoint Online. Server-based SharePoint integration is also required to enable the group OneNote notebook. +> Users must have an Exchange Online mailbox set up to use Microsoft 365 Groups. Exchange Online is already properly configured for organizations as a part of Microsoft 365. You also need to enable server-based SharePoint integration to see documents in a Microsoft 365 Group; you don't have to use SharePoint integration, only set up the connection to SharePoint Online. Server-based SharePoint integration is also required to enable the group OneNote notebook. > > More information: [Set up customer engagement apps to use SharePoint Online](set-up-dynamics-365-online-to-use-sharepoint-online.md) diff --git a/power-platform/admin/disable-delete-address-records.md b/power-platform/admin/disable-delete-address-records.md index 775387e79e..b0c0ff3869 100644 --- a/power-platform/admin/disable-delete-address-records.md +++ b/power-platform/admin/disable-delete-address-records.md @@ -1,6 +1,6 @@ --- title: Set address record settings -description: Learn how to prevent empty address records from being created and how to allow users to delete address data. +description: Learn how to prevent the creation of empty address records and allow users to delete address data. author: mkannapiran ms.component: pa-admin ms.topic: conceptual @@ -16,11 +16,11 @@ search.audienceType: This article explains how to prevent empty address records from being created and how to allow users to delete address data. -## Prevent empty address records from being created +## Prevent creation of empty address records -The **Disable empty address record creation** setting helps you prevent address record creation in Dataverse when there's no data in the address segment of a payload. This feature only supports **Account** and **Contact** tables in Dataverse. Any other table that is associated with an address isn't impacted by this setting. +The **Disable empty address record creation** setting helps you prevent the creation of address records in Dataverse when the address segment of a payload contains no data. This feature only supports **Account** and **Contact** tables in Dataverse. This setting doesn't affect any other table that associates with an address. -For example, suppose there's an incoming payload for the **Account** table and the address data is empty. If the **Disable empty address record creation** setting is set to **On**, it prevents an empty record from being created in Dataverse. However, if the same payload contains address data, then an address record is created in Dataverse. +For example, suppose there's an incoming payload for the **Account** table with empty address data, the **Disable empty address record creation** setting, when turned **On**, prevents the creation of an empty record in Dataverse. However, if the same payload contains address data, then an address record is created in Dataverse. > [!Note] > Turning on the **Disable empty address record creation** setting doesn't remove existing empty address records. @@ -39,7 +39,8 @@ Complete the following steps to prevent empty address records from being created The **Enable deletion of address records** setting allows a user to delete address data in Dataverse. The default setting for this setting is **Off**, which means that users can't delete address records in Dataverse. The address record deletion capability is applicable only for **Account** and **Contact** tables in Dataverse. Turning on the **Enable deletion of address records** setting allows address records to be deleted in the following ways: -- Through the user experience in Power Platform. + +- In Power Platform through the user experience. - Through bulk delete operations - Through SDK. diff --git a/power-platform/admin/dlp-activity-logging.md b/power-platform/admin/dlp-activity-logging.md index a34380c793..743190333a 100644 --- a/power-platform/admin/dlp-activity-logging.md +++ b/power-platform/admin/dlp-activity-logging.md @@ -4,10 +4,10 @@ description: Data loss prevention activity logging ms.component: pa-admin ms.topic: conceptual -ms.date: 05/09/2023 +ms.date: 06/07/2024 ms.subservice: admin -author: Zeffin -ms.author: johnev +author: sericks007 +ms.author: sericks ms.reviewer: sericks search.audienceType: - admin @@ -15,6 +15,9 @@ search.audienceType: # Data loss prevention activity logging +> [!Warning] +> The schema documented in this article is deprecated and won't be available starting in July 2024. You can use the new schema available at [Activity category: Data policy events](admin-activity-logging.md#activity-category-data-policy-events). + > [!NOTE] > Activity logging for data loss protection policies is not currently available in sovereign clouds. @@ -60,7 +63,7 @@ Schemas define which fields are sent to the [Microsoft 365 Security and Complian |Operation |Edm.Date |No |Name of operation | |UserKey |Edm.String |No |Unique Identifier of the User in Microsoft Entra ID | |UserType |Self.UserType |No |The audit type (Admin, Regular, System) | -|Additional Info |Edm.String |No |Additional information if any (e.g. the environment name) | +|Additional Info |Edm.String |No |More information if any (e.g. the environment name) | ### Additional Info @@ -159,4 +162,4 @@ The following is an example of the **Additional Info** JSON for an update operat [Data loss prevention policies](wp-data-loss-prevention.md) -[!INCLUDE[footer-include](../includes/footer-banner.md)] \ No newline at end of file +[!INCLUDE[footer-include](../includes/footer-banner.md)] diff --git a/power-platform/admin/dlp-connector-classification.md b/power-platform/admin/dlp-connector-classification.md index 1b6e6128b6..45c8730575 100644 --- a/power-platform/admin/dlp-connector-classification.md +++ b/power-platform/admin/dlp-connector-classification.md @@ -27,7 +27,7 @@ A good way to categorize connectors is to place them in groups based on the busi When a new policy is created, by default all connectors are placed in the **Non-Business** group. From there they can be moved to **Business** or **Blocked** based on your preference. You manage the connectors in a data group when you create or modify the properties of a DLP policy from the admin center. See [Manage data policies](prevent-data-loss.md). You can also change the initial classification of connectors by editing your DLP policy. More information: [Edit a data policy](prevent-data-loss.md#edit-a-data-policy) > [!NOTE] -> Until recently, some HTTP connectors weren't readily available for DLP policy configuration by using the DLP policy UI or PowerShell. As of May 2020, the following HTTP connectors can now be classified by using the DLP policy UI and PowerShell, like any other Power Platform connector: **HTTP**, **HTTP Webhook**, and **When a HTTP request is received**. If legacy DLP policies are being updated by using the new DLP UI, a warning message will be displayed to admins indicating that these three HTTP connectors are now being added to the DLP purview and that they should ensure that these connectors are placed in the right DLP grouping. +> Until recently, some HTTP connectors weren't readily available for DLP policy configuration by using the DLP policy UI or PowerShell. As of May 2020, the following HTTP connectors can now be classified by using the DLP policy UI and PowerShell, like any other Power Platform connector: **HTTP**, **HTTP Webhook**, and **When an HTTP request is received**. If legacy DLP policies are being updated by using the new DLP UI, a warning message will be displayed to admins indicating that these three HTTP connectors are now being added to the DLP purview and that they should ensure that these connectors are placed in the right DLP grouping. > > Because child flows share an internal dependency with the HTTP connector, the grouping that admins choose for HTTP connectors in a DLP policy might affect the ability to run child flows in that environment or tenant. Make sure your HTTP connectors are classified in the appropriate group for your child flows to function. If there are any concerns in classifying the connector as **Business** in shared environments such as the default environment, our advice is to classify it as **Non-Business** or to block it. Then, create dedicated environments where makers can use HTTP connectors, but restrict the maker list so that you can unblock makers from building child flows. > diff --git a/power-platform/admin/doc-management-known-issues.md b/power-platform/admin/doc-management-known-issues.md index 5768f7e2a0..44f770a857 100644 --- a/power-platform/admin/doc-management-known-issues.md +++ b/power-platform/admin/doc-management-known-issues.md @@ -2,15 +2,15 @@ title: "Known issues with document management | MicrosoftDocs" description: "Learn about known issues with document management" keywords: encrypt -ms.date: 10/27/2023 +ms.date: 06/10/2024 ms.custom: ms.topic: article applies_to: - PowerApps ms.assetid: -author: Mattp123 +author: sericks007 ms.subservice: admin -ms.author: matp +ms.author: sericks ms.reviewer: ms.suite: ms.tgt_pltfrm: @@ -18,7 +18,6 @@ topic-status: Drafting search.audienceType: - admin ms.contributors: -- sericks - srihas --- # Known issues with document management @@ -26,7 +25,7 @@ ms.contributors: The customizations and configurations described here can cause issues with the document management feature. ## Components from an Iframe -Opening a component from an Iframe in an entity form from a Unified Interface app will not succeed. For example, loading the Document Associated Grid for an entity form in an Iframe loads the grid in the Iframe but users will not be able to interact with the document records from the grid. +Opening a component from an Iframe in an entity form from a Unified Interface app won't succeed. For example, loading the Document Associated Grid for an entity form in an Iframe loads the grid in the Iframe but users can't interact with the document records from the grid. ## Third-party solutions that modify Document Management folders Deploying third-party solutions that modify the folders used with the Document Management feature can cause unexpected behavior. @@ -54,13 +53,13 @@ The following describes the scenario that causes the error. 1. Run the Document Management Settings wizard for the default SharePoint site. -2. In the model-driven app in Dynamics 365, add a new SharePoint site (go to **Advanced Settings** > **Document Management** > **SharePoint Sites** > **Add SharePoint Site**). This creates a SharePoint site entry only in the application and does not create the document libraries in SharePoint that are required for document management. +2. In the model-driven app in Dynamics 365, add a new SharePoint site (go to **Advanced Settings** > **Document Management** > **SharePoint Sites** > **Add SharePoint Site**). This creates a SharePoint site entry only in the application and doesn't create the document libraries in SharePoint that are required for document management. 3. Open any entity where document management is enabled, and create the document location for the new site that you added in step 2 as the parent site. -4. You will encounter the "File Not Found" error. The cause of the error is that there are no document libraries for this new SharePoint site in SharePoint. +4. The "File Not Found" error is displayed. The cause of the error is that there are no document libraries for this new SharePoint site in SharePoint. -To mitigate this issue, run the Document Management Settings wizard for this newly added site as well. +To mitigate this issue, run the Document Management Settings wizard for this newly added site, as well. Points to consider: @@ -71,24 +70,23 @@ Points to consider: For more information, see [Create or edit document location records](./create-edit-document-location-records.md). ## SharePoint enforces resource throttling with 5000 or more documents -A document library with 5000 or more documents might experience resource throttling. -Users may experience the following behavior with document management and OneNote integration: +A document library with 5000 or more documents might experience resource throttling. Users may experience the following behavior with document management and OneNote integration: - A sort on columns other than the default sorted column, may return the error message "The throttling limit has been exceeded by this operation." -- Microsoft OneNote integration will not work when the document library has 5000 or more documents. +- Microsoft OneNote integration doesn't work when the document library has 5000 or more documents. If you have more than 5000 documents in your document library, you can view the documents in the default grid view. For more information, see [Manage large lists and libraries in SharePoint](https://support.office.microsoft.com/article/manage-large-lists-and-libraries-in-sharepoint-b8588dae-9387-48c2-9248-c24122f07c59?ui=en-US&rs=en-US&ad=US). ## Relationship must be one-to-many (1:N) between an entity and a SharePoint document entity -Users cannot see documents when many entities are pointing to a SharePoint document location, a many-to-many relationship (N:N). The relationship must be one-to-many (1:N) between any entity and a SharePoint document entity. +Users can't see documents when many entities are pointing to a SharePoint document location, a many-to-many relationship (N:N). The relationship must be one-to-many (1:N) between any entity and a SharePoint document entity. In Microsoft Dataverse, you can create an entity and enable the Document management property for the entity. This allows for the entity to participate in integration with SharePoint. Power Apps and Dataverse support only a one-to-many relationship (1:N) between any entity and a SharePoint document-related entity. A many-to-one or a many-to-many relationship between an entity and a SharePoint document entity results in the app not listing the documents that exist in the SharePoint document library. ## Document location for child entities -Documents of a child entity only appear in the parent documents folder when the parent document location has been created. To create the location, navigate to the Documents tab of the parent record. If no such location is created, child documents will not appear in the parent entity folder. Once the location is created, child documents will begin to appear in the parent entity folder. +Documents of a child entity only appear in the parent documents folder when the parent document location has been created. To create the location, navigate to the Documents tab of the parent record. If no such location is created, child documents don't appear in the parent entity folder. Once the location is created, child documents begin to appear in the parent entity folder. ## Document folder location for multiple lookups -If the entity selected for the Based on entity folder structure has two lookups, documents will not be stored inside the entity folder, but will be stored in the root folder. For example, if the Based on entity folder structure is set to Account, and you have an entity with two lookup accounts, such as Work Order, the documents related to Work Orders will not be stored inside any account document location, but will be stored in the root folder. +If the entity selected for the Based on entity folder structure has two lookups, documents can't be stored inside the entity folder, but can be stored in the root folder. For example, if the Based on entity folder structure is set to Account, and you have an entity with two lookup accounts, such as Work Order, the documents related to Work Orders can't be stored inside any account document location, but can be stored in the root folder. ## Entering a date for OneNote documents @@ -98,9 +96,9 @@ In order to add a date to a OneNote document, you can open the OneNote document ## SharePoint Document table doesn’t display inputs when you create a flow -When you create a flow trigger in Power Automate that acts on the Dataverse SharePoint Documents table (named Documents in Power Automate), no data from the table is passed to the flow editor and the flow inputs appear as an empty array. +When you create a flow trigger in Power Automate that acts on the Dataverse SharePoint Documents table (named Documents in Power Automate), no data from the table is passed to the flow editor, and the flow inputs appear as an empty array. -This behavior occurs because the SharePoint Documents table is a virtual table and the SharePoint and OneDrive document table data is not stored in Dataverse. Below is an example of a flow trigger using the SharePoint Documents table. +This behavior occurs because the SharePoint Documents table is a virtual table and the SharePoint and OneDrive document table data isn't stored in Dataverse. Below is an example of a flow trigger using the SharePoint Documents table. :::image type="content" source="media/flow-trigger-documents-table.png" alt-text="Low trigger using the SharePoint documents table from Dataverse"::: @@ -124,33 +122,33 @@ To resolve this issue, follow these steps. The Document Associated Grid is designed to show documents related to the entity context it's being rendered in. Embedding the Document Associated Grid in a related (child) entity quick view form and configuring the grid to show documents from its parent entity is unsupported. -### SharePoint integration does not support the Dynamics 365 editable grid +### SharePoint integration doesn't support the Dynamics 365 editable grid -SharePoint integration does not work with the Dynamics 365 editable grid, due to known side effects that prevent SharePoint integration from working properly. Side effects include: the document failing to load in the grid, an inability to create or upload documents, and an inability to search in the grid. +SharePoint integration doesn't work with the Dynamics 365 editable grid, due to known side effects that prevent SharePoint integration from working properly. Side effects include: the document failing to load in the grid, an inability to create or upload documents, and an inability to search in the grid. ### Maximum number of rows not honored in the document associated grid -Configuring the following in the **DocumentGrid** pane will be ignored. +Configuring the following in the **DocumentGrid** pane is ignored: - **Maximum number of rows**: a value - **Use available space**: unchecked For Unified Interface and backward compatibility, the row limit in the document associated grid is set to 5000 and **Use available space** is disabled. This is a known limitation. -### Error message when opening a record: "The record does not have a SharePoint location associated with it. Add a SharePoint location." +### Error message when opening a record: "The record doesn't have a SharePoint location associated with it. Add a SharePoint location." -This issue can occur when you are using the legacy list component for document management. The list component isn't supported with the current versions of Power Apps or Dynamics 365 apps. +This issue can occur when you're using the legacy list component for document management. The list component isn't supported with the current versions of Power Apps or Dynamics 365 apps. In 2015, [we announced the deprecation of the list component]( https://cloudblogs.microsoft.com/dynamics365/no-audience/2015/05/15/dynamics-crm-2015-update-1-list-component-deprecation/?source=crm). Notice that, a list component wasn’t released for Power Apps or the current versions of Dynamics 365 and previous versions of the list component aren’t supported with these versions. -If you are using the list component, you must move your document management to use server-based authentication. +If you're using the list component, you must move your document management to use server-based authentication. - For Power Apps and Dynamics 365 apps, see [Switch from the list component or change the SharePoint deployment](switching-list-component-changing-deployment.md). - For Dynamics 365 Customer Engagement (on-premises), see [Switching from the list component or changing the deployment](/dynamics365/customerengagement/on-premises/admin/switching-list-component-changing-deployment?view=op-9-0&preserve-view=true). ### Error message "An error has occurred while loading documents" when filtering by Name column -The error "An error has occurred while loading documents. Please reload the document. If the problem persists, contact your Dynamics 365 administrator for help" occurs when you filter by the Name column in the document associated grid. +The error "An error has occurred while loading documents" is displayed. Reload the document. If the problem persists, contact your Dynamics 365 administrator for help" occurs when you filter by the Name column in the document associated grid. This error occurs with the following filter by options in the document associated grid: @@ -163,11 +161,15 @@ This error occurs with the following filter by options in the document associate This error occurs because these filter by options aren't currently supported with the document associated grid. -### Next and previous page arrow buttons in the SharePoint grid do not work +### Next and previous page arrow buttons in the SharePoint grid don't work -The next and previours page arrow buttons in the SharePoint grid do not work. This is a known issue. +The next and previous page arrow buttons in the SharePoint grid don't work. This is a known issue. -**Resolution**: Users can selet the **Load More** button at the bottom of the page or select **Open Location** to go to the SharePoint site to access files. +**Resolution**: Users can select the **Load More** button at the bottom of the page or select **Open Location** to go to the SharePoint site to access files. + +### OneDrive for Business configuration + +OneDrive for Businees for new users can't be configured currently. This is a known issue and is planned to be fixed in a future release. ### See also diff --git a/power-platform/admin/enhanced-service-level-agreements.md b/power-platform/admin/enhanced-service-level-agreements.md index 7c5f0a436a..7341bacbfa 100644 --- a/power-platform/admin/enhanced-service-level-agreements.md +++ b/power-platform/admin/enhanced-service-level-agreements.md @@ -34,7 +34,7 @@ The customer engagement apps (Dynamics 365 Sales, Dynamics 365 Customer Service, [!INCLUDE[proc_more_information](../includes/proc-more-information.md)] [Define service level agreements (SLAs)](/dynamics365/customer-service/define-service-level-agreements) -## Considerations when you choose a SLA type +## Considerations when you choose an SLA type Because there are two types of SLAs that have different functionality, consider the following features before you choose an SLA type. We recommend that you use only one type of SLA for an organization. - After you select an SLA type, either standard or enhanced, you cannot change the SLA type for any record associated with the SLA. diff --git a/power-platform/admin/environment-groups.md b/power-platform/admin/environment-groups.md index 46e8d3fe4d..ad969f60fc 100644 --- a/power-platform/admin/environment-groups.md +++ b/power-platform/admin/environment-groups.md @@ -32,7 +32,7 @@ Admins can apply various rules to groups to govern many environments in bulk, re There are many ways to manage pockets of environments within your tenant using environment groups. For example, global organizations can create an environment group for all environments in each geographic region to ensure compliance with legal and regulatory requirements. You can also organize environment groups by department or other criteria. -:::image type="content" source="media/environment-groups-strategy.png" alt-text="Diagram depicting one strategy for using environment groups and aligning it to your existing orgnizational structure."::: +:::image type="content" source="media/environment-groups-strategy.png" alt-text="Diagram depicting one strategy for using environment groups and aligning it to your existing organizational structure."::: This article covers how to augment your _default environment strategy_ by combining _environment groups_ with [_default environment routing_](default-environment-routing.md). Default environment routing gives makers their own personal developer environment. This environment is a secure space to build with Microsoft Dataverse and is similar to [OneDrive](https://www.microsoft.com/microsoft-365/onedrive/online-cloud-storage) for personal productivity. diff --git a/power-platform/admin/environments-overview.md b/power-platform/admin/environments-overview.md index 90a5755b7a..e8272d3d6b 100644 --- a/power-platform/admin/environments-overview.md +++ b/power-platform/admin/environments-overview.md @@ -3,7 +3,7 @@ title: Power Platform environments overview description: Learn about Power Platform environments and how to use them. author: sericks007 ms.topic: overview -ms.date: 05/07/2024 +ms.date: 06/24/2024 ms.reviewer: sericks ms.subservice: admin ms.author: sericks @@ -63,18 +63,18 @@ There are multiple types of environments. The type indicates the purpose of the |Type |Description |Security | |---------|---------|---------| -|Production | This is intended to be used for permanent work in an organization. It can be created and owned by an administrator or anyone with a Power Apps license, provided there is 1 GB available database capacity. These environments are also created for each existing Dataverse database when it is upgraded to version 9.0 or later. Production environments are what you should use for any environments on which you depend. | Full control. | +|Production | This is intended to be used for permanent work in an organization. It can be created and owned by an administrator or anyone with a Power Apps license, provided there's 1 GB available database capacity. These environments are also created for each existing Dataverse database when it's upgraded to version 9.0 or later. Production environments are what you should use for any environments on which you depend. | Full control. | |Default | These are a special type of production environment. Each tenant has a default environment that's created automatically. Its characteristics are discussed in the following section, [The default environment](#default-environment) | Limited control. All licensed users1 have the environment maker role. | -|Sandbox | These are non-production environments, which offer features like copy and reset. Sandbox environments are used for development and testing, separate from production. Provisioning sandbox environments can be restricted to admins (because production environment creation can be blocked), but converting from a production to a sandbox environment can't be blocked. | Full control. If used for testing, only user access is needed. Developers require environment maker access to create resources. | +|Sandbox | These are nonproduction environments, which offer features like copy and reset. Sandbox environments are used for development and testing, separate from production. Provisioning sandbox environments can be restricted to admins (because production environment creation can be blocked), but converting from a production to a sandbox environment can't be blocked. | Full control. If used for testing, only user access is needed. Developers require environment maker access to create resources. | |Trial | Trial environments are intended to support short-term testing needs and are automatically cleaned up after a short period of time. They expire after 30 days and are limited to one per user. Provisioning trial environments can be restricted to admins. | Full control. | -| Developer | Developer environments are created by users who have the Developer Plan license. They're special environments intended only for use by the owner. Provisioning developer environments can be restricted to admins. More information: [Control environment creation](control-environment-creation.md#developer-environments). The developer environment will be available as long as you actively use the Power Apps Developer Plan. More information: [Power Apps Developer Plan](/powerapps/maker/developer-plan) | Limited control. Security groups can't be assigned to developer environments. | +| Developer | Developer environments are created by users who have the Developer Plan license. They're special environments intended only for use by the owner. Provisioning developer environments can be restricted to admins. More information: [Control environment creation](control-environment-creation.md#developer-environments). The developer environment is available as long as you actively use the Power Apps Developer Plan. More information: [Power Apps Developer Plan](/powerapps/maker/developer-plan) | Limited control. Security groups can't be assigned to developer environments. | | Microsoft Dataverse for Teams | Dataverse for Teams environments are automatically created for the selected team when you create an app in Teams using the app for the first time or install an app from the app catalog. More information: [About the Dataverse for Teams environment](about-teams-environment.md). | Limited control. Admins have limited settings available for Teams environments. No customizations of security role or assignments are available. Teams members are automatically mapped to their Teams membership type - owners, members, and guests - with a corresponding security role assigned by the system. | 1Users licensed for Power Apps, Power Automate, Microsoft 365, and Dynamics 365, standalone licenses, and free and trial licenses. ## Default environment -A single default environment is automatically created by Power Apps for each tenant and shared by all users in that tenant. Whenever a new user signs up for Power Apps, they're automatically added to the Maker role of the default environment. No users will be automatically added to the Environment Admin role of the default environment. The default environment is created in the region closest to the default region of the Microsoft Entra tenant, and is named as follows: "{Microsoft Entra tenant name} (default)". +A single default environment is automatically created by Power Apps for each tenant and shared by all users in that tenant. Whenever a new user signs up for Power Apps, they're automatically added to the Maker role of the default environment. No users are automatically added to the Environment Admin role of the default environment. The default environment is created in the region closest to the default region of the Microsoft Entra tenant, and is named as follows: "{Microsoft Entra tenant name} (default)". You can't delete the default environment. You can't manually back up the default environment; system backups are done continuously. @@ -84,11 +84,11 @@ The default environment is limited to 1 TB of storage capacity. To store more da - 3 GB Dataverse File Capacity - 1 GB Dataverse Log Capacity -The capacity check conducted prior to creating new environments will exclude the default environment's included storage capacity when calculating whether you have sufficient capacity to create a new environment. +The capacity check conducted prior to creating new environments exclude the default environment's included storage capacity when calculating whether you have sufficient capacity to create a new environment. ### Assign administrators to the default environment -Microsoft 365 Power Platform administrators are automatically assigned the Dataverse system administrator security role in the default environment. However, no other users are automatically added to the default environment as an administrator. To avoid the possibility of an administrative lockout to the default environment, we recommend that you assign the system administrator security role to a few trusted users without assigning those users the Power Platform administrator role. More information: [Environments with a Dataverse database](database-security.md#environments-with-a-dataverse-database) +Microsoft 365 Power Platform administrators are no longer automatically assigned the Dataverse system administrator security role in the default environment. For more information on how to gain access to the system administrator role, see [Manage admin roles with Microsoft Entra Privileged Identity Management](manage-high-privileged-admin-roles.md). No other users are automatically added to the default environment as an administrator. To avoid the possibility of an administrative lockout to the default environment, we recommend that you assign the system administrator security role to a few trusted users without assigning those users the Power Platform administrator role. More information: [Environments with a Dataverse database](database-security.md#environments-with-a-dataverse-database) ### Rename the default environment @@ -118,7 +118,7 @@ You can sort and search the list of environments; this is useful if you have a l ### Environment details -Select an environment to view the details of that environment, including the URL, region it is hosted in, and version. Select **See all** to see more environment details. +Select an environment to view the details of that environment, including the URL, region it's hosted in, and version. Select **See all** to see more environment details. > [!div class="mx-imgBorder"] > ![Environment details.](media/environment-details-see-all.png "Environment details") @@ -128,9 +128,45 @@ Select **Edit** to review and edit environment details. > [!div class="mx-imgBorder"] > ![More environment details.](media/environment-details-more.png "More environment details") +## Environment location + +Depending on the environment type, the environment location varies. + +|Type |Location information | +|---------|---------| +|Production |Set by user at creation time. | +|Default |Set to the tenant home location. To modify this, see [Preferred environment location](#preferred-environment-location).| +|Sandbox |Set by user at creation time. | +|Trial |Set by user at creation time. | +|Developer |If created through the admin portal, the location can be specified during creation. If created during [sign-up](/powerapps/maker/developer-plan), it's set to tenant home location. To modify, see [Preferred environment location](#preferred-environment-location). | +|Microsoft Dataverse for Teams |Set to the tenant home location. To modify this, see [Preferred environment location](#preferred-environment-location). | + +### Preferred environment location + +If you want Teams environments and developer environments (created on sign-up) to be created in a location different from the tenant location, you can set the **Preferred environment location** for your tenant using the [Power Platform PowerShell commandlets](powerapps-powershell.md). This change doesn't update existing environments and applies to new environments created after the change only. These settings can be found under **Settings > PowerPlatform > Environments**. + +```PowerShell +$requestBody = [pscustomobject]@{ +powerPlatform = [pscustomobject]@{ +environments = [pscustomobject]@{ +preferredEnvironmentLocation = "unitedstates" +} +} +} +Set-TenantSettings -RequestBody $requestBody +``` +If you have an [Office 365 multi-geo tenant ](/microsoft-365/enterprise/microsoft-365-multi-geo?view=o365-worldwide&preserve-view=true), you must set **settings.powerPlatform.powerApps.environments.disablePreferredDataLocationForTeamsEnvironment** to **true** for the **Preferred environment location** value to be used. + +```PowerShell +$settings = Get-TenantSettings +$settings.powerPlatform.environments.disablePreferredDataLocationForTeamsEnvironment = $true +Set-TenantSettings -RequestBody $settings +``` +Updating this value updates the default location that is populated in the Power Platform admin center create environment experience. + ### Environment history -Environment history gives admins a timeline of the full environment lifecycle from the moment it's created until it's completely deleted with all the actions performed on the environment in between, such as Edit, Copy, Reset, etc. Actions on the timeline format are: +Environment history gives admins a timeline of the full environment lifecycle from the moment it's created until it's deleted with all the actions performed on the environment in between, such as Edit, Copy, Reset, etc. Actions on the timeline format are: - Action name: for example, create - Start time diff --git a/power-platform/admin/finance-operations-storage-capacity.md b/power-platform/admin/finance-operations-storage-capacity.md index 98edcfa59a..eeccaf2342 100644 --- a/power-platform/admin/finance-operations-storage-capacity.md +++ b/power-platform/admin/finance-operations-storage-capacity.md @@ -4,7 +4,7 @@ description: Learn to use the finance and operations storage capacity report to author: ianceicys-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 06/04/2024 +ms.date: 06/17/2024 ms.subservice: admin ms.author: ceian ms.reviewer: sericks @@ -42,7 +42,6 @@ To determine whether you have any of these licenses, sign in to the [Microsoft 3 > [!NOTE] > The following licenses are eligible for entitlements but aren't represented in the current reporting: -> > - Dynamics AX (Online) licenses > - China-specific licenses for finance and operations apps > - Operations Sandbox Tier 4 and Tier 5 per-user subscription license incremental capacity @@ -53,7 +52,7 @@ To determine whether you have any of these licenses, sign in to the [Microsoft 3 The **Summary** page of the report provides a tenant-level view of where your organization is using finance and operations storage capacity. -To view the **Summary** page, sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com), and then select **Resources** > **Capacity** > **Summary** tab. +To view the **Summary** page, sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com), and then select the **Resources** > **Capacity** > **Summary** tab. :::image type="content" source="media/finance-operations-storage-summary-tab.png" alt-text="Screenshot of the Capacity Summary page including finance and operations data."::: @@ -65,12 +64,13 @@ If you're using the [legacy Dataverse storage capacity model](legacy-capacity-st The **Finance and Operations** page provides an environment-level view of where your organization is using finance and operations storage capacity. -To view the **Finance and Operations** page, sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com), and then select **Resources** > **Capacity** > **Finance and Operations** tab. +To view the **Finance and Operations** page, sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com), and then select the **Resources** > **Capacity** > **Finance and Operations** tab. :::image type="content" source="media/finance-operations-storage-finops-tab.png" alt-text="Screenshot of the Finance and Operations page with capacity data by environment."::: ### Table-level, drill-down view into storage consumption details for finance and operations environments -Select the finance and operations database usage entry on the **Finance and operations** tab to see a table-level, drill-down view of how each table in your finance and operations environment is using capacity. You have the ability to obtain a near real-time snapshot of the table-level storage consumption. Additionally, you can track the time series trend, gaining insights into the evolution of storage across finance and operation tables. You also have the option to download the details in csv format for streamlined, data analysis and reporting. + +Select the finance and operations database usage entry on the **Finance and operations** tab to see a table-level, drill-down view of how each table in your finance and operations environment is using capacity. You have the ability to obtain a near real-time snapshot of the table-level storage consumption. Additionally, you can track the time series trend, gaining insights into the evolution of storage across finance and operation tables. You also have the option to download the details in CSV format for streamlined data analysis and reporting. :::image type="content" source="media/finance-operations-storage-capacity/fno-database-usage.png " alt-text="Screenshot of the tab showing storage consumption for each finance and operations environment."::: @@ -104,10 +104,11 @@ Microsoft business applications work across multiple underlying technologies. Da ### How are my usage and entitlement calculated? -Finance and operations entitlement includes default capacity entitlement plus accrued capacity entitlement based on each operations base enterprise and activity license. For more information, go to the Capacity Licenses section of the [Dynamics 365 License Guide](https://www.microsoft.com/licensing/product-licensing/dynamics365). +Finance and operations entitlement includes default capacity entitlement plus accrued capacity entitlement based on each operation's base enterprise and activity license. For more information, go to the Capacity Licenses section of the [Dynamics 365 License Guide](https://www.microsoft.com/licensing/product-licensing/dynamics365). ### Why did the Finance Operations Database Base User Subscription License (USL) Entitlement calculation change? -This is due to a change in December 2023, where the Operations Database Capacity (Accrued/USL) was increased from 1.5GB to 4 GB. For more details on how base entitlement calculation works, go to the Capacity Licenses section of the [Dynamics 365 License Guide](https://www.microsoft.com/licensing/product-licensing/dynamics365). + +This is due to a change in December 2023, where the Operations Database Capacity (Accrued/USL) was increased from 1.5 GB to 4 GB. For more details on how base entitlement calculation works, go to the Capacity Licenses section of the [Dynamics 365 License Guide](https://www.microsoft.com/licensing/product-licensing/dynamics365). ### Why don’t I see which tables are causing the overage? diff --git a/power-platform/admin/get-recommendations-licensing.md b/power-platform/admin/get-recommendations-licensing.md index 23cffc546d..096c6df466 100644 --- a/power-platform/admin/get-recommendations-licensing.md +++ b/power-platform/admin/get-recommendations-licensing.md @@ -54,7 +54,7 @@ Complete the following steps to assign Power Apps premium licenses to users. 8. Select the license you want to assign to the users. Click **Assign**. -## View recently assiged licenses +## View recently assigned licenses Near the bottom of the page, admins can see the history of license assignment, including a summary of users who were assigned licenses and the date of assignment. [!INCLUDE[footer-include](../includes/footer-banner.md)] diff --git a/power-platform/admin/governance-considerations.md b/power-platform/admin/governance-considerations.md index 58b49feac6..6883ef3d0b 100644 --- a/power-platform/admin/governance-considerations.md +++ b/power-platform/admin/governance-considerations.md @@ -72,7 +72,7 @@ The following principals are supported for each role type. > - In the Default environment, all users in a tenant are granted access to the Environment Maker role. > - Microsoft Entra tenant Global Administrators have admin access to all environments. -#### FAQ - What permissions exist at an Microsoft Entra tenant level? +#### FAQ - What permissions exist at a Microsoft Entra tenant level? Today, Microsoft Power Platform admins can do the following: diff --git a/power-platform/admin/hierarchy-security.md b/power-platform/admin/hierarchy-security.md index 2e19d9dbc4..f8a17a22e5 100644 --- a/power-platform/admin/hierarchy-security.md +++ b/power-platform/admin/hierarchy-security.md @@ -110,7 +110,7 @@ The hierarchy security is disabled by default. To enable hierarchy security, com :::image type="content" source="media/hierarchy-security/hierarchy-security.png" alt-text="Screenshot that shows where to set up hierarchy security in Settings of the new, modern UI."::: - [!INCLUDE [preview-note](~/../shared-content/shared/preview-includes/preview-note.md)] + [!INCLUDE [preview-note](~/../shared-content/shared/preview-includes/preview-note-pp.md)] ### [Legacy UI](#tab/LegacyUI) diff --git a/power-platform/admin/how-field-security-affects-synchronization-between-outlook.md b/power-platform/admin/how-field-security-affects-synchronization-between-outlook.md index 606db4d20e..74bc562181 100644 --- a/power-platform/admin/how-field-security-affects-synchronization-between-outlook.md +++ b/power-platform/admin/how-field-security-affects-synchronization-between-outlook.md @@ -69,7 +69,7 @@ Securing a field with field-level security can impact synchronization between cu 6. Select the new profile > **Users** > **Add** -7. Select users and then celect **Select** > **Add**. +7. Select users and then select **Select** > **Add**. ### Set field permissions With a field security profile created and users added to the profile, John can now set permissions on the fields to match the organization's requirements. diff --git a/power-platform/admin/how-record-access-determined.md b/power-platform/admin/how-record-access-determined.md index 8289eb23fd..56be475a90 100644 --- a/power-platform/admin/how-record-access-determined.md +++ b/power-platform/admin/how-record-access-determined.md @@ -19,7 +19,7 @@ There are different ways to obtain access to a particular record in Dataverse. T ## Privilege check -The privilege check is the first barrier that needs to be passed in order to do a certain action with a record of an table. The privilege checks validate that the user has the required privilege for that table. For each table, whether out of the box or custom, there exist different privileges to provide interaction capabilities with the records of that type. +The privilege check is the first barrier that needs to be passed in order to do a certain action with a record of a table. The privilege checks validate that the user has the required privilege for that table. For each table, whether out of the box or custom, there exist different privileges to provide interaction capabilities with the records of that type. For example, for Account, the privileges are: @@ -106,7 +106,7 @@ In this case, the user would have access to the record if both of the following ## Record access check -For each record that is displayed in the web client, the user has the ability to see how they were granted access to the record through the [**Check Access**](/power-apps/user/access-checker) option on the command bar. The user can also see other users who have accecss to the record and their respective access level. +For each record that is displayed in the web client, the user has the ability to see how they were granted access to the record through the [**Check Access**](/power-apps/user/access-checker) option on the command bar. The user can also see other users who have access to the record and their respective access level. There are two environment database settings to configure to use the **Who has access** feature. [Install the **OrganizationSettingsEditor** tool](environment-database-settings.md#install-the-organizationsettingseditor-tool) and set the following to true: diff --git a/power-platform/admin/invite-users-azure-active-directory-b2b-collaboration.md b/power-platform/admin/invite-users-azure-active-directory-b2b-collaboration.md index 0b80e423d9..850fae3b0e 100644 --- a/power-platform/admin/invite-users-azure-active-directory-b2b-collaboration.md +++ b/power-platform/admin/invite-users-azure-active-directory-b2b-collaboration.md @@ -149,7 +149,7 @@ After the B2B guest users are given the required permissions to create and edit 4. B2B guests can [follow these steps](/power-apps/maker/canvas-apps/intro-maker-portal) to sign in the preferred Microsoft Entra tenant to build apps. ### Known limitations -1. To sign in to make.powerapps.com via Azure B2B, a user is required to sign in to an Microsoft Entra tenant. Microsoft Accounts (for example user@outlook.com, user@live.com, user@hotmail.com) cannot directly sign in to https://make.powerapps.com. +1. To sign in to make.powerapps.com via Azure B2B, a user is required to sign in to a Microsoft Entra tenant. Microsoft Accounts (for example user@outlook.com, user@live.com, user@hotmail.com) cannot directly sign in to https://make.powerapps.com. 2. If the Azure B2B maker is expected to build an app that uses Dataverse or build apps in a solution, they’ll need a license with Dataverse use rights assigned to them in the resource tenant. 3. B2B makers are currently not supported across sovereign cloud boundaries. For example, a B2B guest from a commercial tenant can't make apps in a GCC tenant. The same is applicable for GCC to GCC High, commercial to China cloud, and so on. diff --git a/power-platform/admin/ip-firewall.md b/power-platform/admin/ip-firewall.md index 0085f6ee8f..fb18ec90e1 100644 --- a/power-platform/admin/ip-firewall.md +++ b/power-platform/admin/ip-firewall.md @@ -1,7 +1,7 @@ --- title: IP firewall in Power Platform environments description: Learn how to configure the IP firewall in Microsoft Power Platform environments to help keep your organizational data secure. -ms.date: 05/29/2024 +ms.date: 06/27/2024 ms.topic: how-to author: ritesp ms.author: ritesp @@ -17,9 +17,6 @@ The IP firewall helps to protect your organizational data by limiting user acces :::image type="content" source="media/ip-firewall-dataverse-diagram.png" alt-text="Diagram illustrating the IP firewall feature in Dataverse."::: -> [!IMPORTANT] -> The IP firewall support for [TDS endpoint](settings-features.md#tds-endpoint) is in preview. - ## Key benefits Enabling the IP firewall in your Power Platform environments offers several key benefits. diff --git a/power-platform/admin/list-tenantsettings.md b/power-platform/admin/list-tenantsettings.md index 6feccea171..862805d3c9 100644 --- a/power-platform/admin/list-tenantsettings.md +++ b/power-platform/admin/list-tenantsettings.md @@ -5,7 +5,7 @@ author: laneswenka ms.reviewer: sericks ms.component: pa-admin ms.topic: reference -ms.date: 05/17/2024 +ms.date: 06/11/2024 ms.subservice: admin ms.author: laswenka search.audienceType: @@ -14,6 +14,8 @@ contributors: - arjunmayur - bibekTimalsina948 - dannylevymsft +ms.contributors: +- pandeyashish ms.collection: bap-ai-copilot --- @@ -103,7 +105,7 @@ The response is always a **200 OK** response, unless you aren't correctly authen |disableSurveyFeedback | Boolean | Ability to disable all NPS survey feedback prompts in Power Platform. Default value is false.| |disableTrialEnvironmentCreationByNonAdminusers | Boolean | Restrict all trial environments to be created by tenant admins, Power Platform admins, or Dynamics 365 service admins. Default value is false.| |disableCapacityAllocationByEnvironmentAdmins | Boolean | Ability to disable capacity allocation by environment administrators. Default value is false.| -|disableSupportTicketsVisibleByAllUsers | Boolean | Ability to disable support ticket creation by nonadmin users in the tenant. Default value is false.| +|disableSupportTicketsVisibleByAllUsers | Boolean | Allows users, who already have access to the **Help + Support** page in Power Platform admin center, to see support requests created by other users in the tenant. Default value is True, which means this feature is turned off by default.| |powerPlatform.search.disableDocsSearch | Boolean | When this setting is true, users in the environment can see a message that indicates Microsoft Learn and documentation search categories have been turned off by the administrator. Default value is false.| |powerPlatform.search.disableCommunitySearch | Boolean | When this setting is true, users in the environment can see a message that indicates community and blog search categories have been turned off by the administrator. Default value is false.| |powerPlatform.search.disableBingVideoSearch | Boolean | When this setting is true, users in the environment can see a message that indicates video search categories have been turned off by the administrator. Default value is false.| diff --git a/power-platform/admin/manage-application-users.md b/power-platform/admin/manage-application-users.md index 8a20707a43..1531adcb89 100644 --- a/power-platform/admin/manage-application-users.md +++ b/power-platform/admin/manage-application-users.md @@ -1,6 +1,6 @@ --- -title: "Manage application users in the Power Platform admin center | MicrosoftDocs" -description: How to manage application users from the Power Platform admin center +title: Manage application users in the Power Platform admin center | MicrosoftDocs +description: Learn how to manage application users from the Power Platform admin center. author: paulliew ms.subservice: admin ms.author: paulliew @@ -17,119 +17,119 @@ We're in the process of moving application user management from the legacy web c > [!NOTE] > [Deleting an inactive, application user](#delete-an-inactive-application-user-preview) is now supported in preview. - > [!TIP] > Check out the video: [Administer application users, security roles, teams, and users in the Power Platform admin center](https://www.microsoft.com/videoplayer/embed/RWJBr8). -## View application users in an environment +## View application users in an environment On the **Application users** page, you can view and manage application users. The **Custom** app type is your local app registration, as created in Microsoft Entra ID. -1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. +1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. -2. Select **Environments**, and then select an environment from the list. +1. Select **Environments**, and then select an environment from the list. -3. Select **Settings**. +1. Select **Settings**. -4. Select **Users + permissions**, and then select **Application users**. +1. Select **Users + permissions**, and then select **Application users**. - :::image type="content" source="media/manage-application-user.png" alt-text="Manage application users."::: + :::image type="content" source="media/manage-application-user.png" alt-text="Screenshot of Application users."::: -## Create an application user +## Create an application user -You can create an unlicensed application user in your environment. This application user will be given access to your environment's data on behalf of the user who's using your application. +You can create an unlicensed application user in your environment. This application user is given access to your environment's data on behalf of the user who's using your application. -In an environment, you can only have one application user for each Microsoft Entra–registered application. +In an environment, you can only have one application user for each Microsoft Entra–registered application. -1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. +1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. -2. Select **Environments**, and then select an environment from the list. +1. Select **Environments**, and then select an environment from the list. -3. Select **Settings**. +1. Select **Settings**. -4. Select **Users + permissions**, and then select **Application users**. +1. Select **Users + permissions**, and then select **Application users**. -5. Select **+ New app user** to open the **Create a new app user** page. +1. Select **+ New app user** to open the **Create a new app user** page. - :::image type="content" source="media/create-new-app-user.png" alt-text="Create a new application user."::: + :::image type="content" source="media/create-new-app-user.png" alt-text="Screenshot of Create a new application user."::: -6. Select **+ Add an app** to choose the registered Microsoft Entra application that was created for the selected user, and then select **Add**. +1. Select **+ Add an app** to choose the registered Microsoft Entra application that was created for the selected user, and then select **Add**. - :::image type="content" source="media/add-app-from-azure-ad.png" alt-text="Add an application from Microsoft Entra ID."::: + :::image type="content" source="media/add-app-from-azure-ad.png" alt-text="Screenshot of Add an application from Microsoft Entra ID."::: > [!NOTE] > In addition to entering the Application Name or Application ID, you can also enter an Azure Managed Identity Application ID. For Managed Identity, do not enter the Managed Identity Application Name, use the Managed Identity Application ID instead. - > + > > Enterprise applications don't show in the list of applications, only Microsoft Entra app registrations show in the list. Search for the multitenant application by name or ID to assign it to the application user. -7. The selected Microsoft Entra app is displayed under **App**. You can select **Edit** (![Edit.](media/edit-button.png)) to choose another Microsoft Entra application. Under **Business Unit**, select a business unit from the dropdown list. +1. The selected Microsoft Entra app is displayed under **App**. You can select **Edit** (![Edit.](media/edit-button.png)) to choose another Microsoft Entra application. Under **Business Unit**, select a business unit from the dropdown list. - :::image type="content" source="media/create-new-app-user-business-unit.png" alt-text="Select a business unit."::: + :::image type="content" source="media/create-new-app-user-business-unit.png" alt-text="Screenshot of select a business unit."::: -8. After choosing a business unit, you can select ![Edit.](media/edit-button.png) for **Security roles** to choose security roles for the chosen business unit to add to the new application user. After adding security roles, select **Save**. +1. After choosing a business unit, you can select ![Edit.](media/edit-button.png) for **Security roles** to choose security roles for the chosen business unit to add to the new application user. After adding security roles, select **Save**. - :::image type="content" source="media/create-new-app-user-security-roles.png" alt-text="Add security roles to the new application user."::: + :::image type="content" source="media/create-new-app-user-security-roles.png" alt-text="Screenshot of Add security roles to the new application user."::: -9. Select **Create**. +1. Select **Create**. -## View or edit the details of an application user +## View or edit the details of an application user -1. Sign in to the [Power Platform Admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. +1. Sign in to the [Power Platform Admin center](https://admin.powerplatform.microsoft.com) as a System Administrator. -2. Select **Environments**, and then select an environment from the list. +1. Select **Environments**, and then select an environment from the list. -3. Select **Settings**. +1. Select **Settings**. + +1. Select **Users + permissions**, and then select **Application users**. -4. Select **Users + permissions**, and then select **Application users**. +1. Select an application user, and then select **Details**. -5. Select an application user, and then select **Details**. + :::image type="content" source="media/application-user-details.png" alt-text="Screenshot of Select application user details."::: - :::image type="content" source="media/application-user-details.png" alt-text="Select application user details."::: + The **Details** page shows the following properties for the application user: - The **Details** page shows the following properties for the application user: - - - Name + - Name - Microsoft Entra application ID - State - - Assigned security roles - - App type + - Assigned security roles + - App type - Business unit - - Email address - + - Email address + The business unit, email address, and security roles can be edited. - - :::image type="content" source="media/application-user-details-page.png" alt-text="The application user details page."::: + + :::image type="content" source="media/application-user-details-page.png" alt-text="Screenshot of the application user details page."::: ## Sync the application user name with the Microsoft Entra application name -When an application user is first created, the username is the same as the name of the registered Microsoft Entra application. The two names can get out of sync when the name of the Microsoft Entra application is changed. You can sync the application user name with the Microsoft Entra application name by selecting **Refresh** on the **Details** page. +When an application user is first created, the username is the same as the name of the registered Microsoft Entra application. The two names can get out of sync when the name of the Microsoft Entra application is changed. You can sync the application user name with the Microsoft Entra application name by selecting **Refresh** on the **Details** page. > [!NOTE] -> **Refresh** and the Microsoft Entra app name are only shown when the two names are out of sync. +> **Refresh** and the Microsoft Entra app name are only shown when the two names are out of sync. -:::image type="content" source="media/sync-app-user-name-azure-ad-app-name.png" alt-text="Sync the application user name with the Microsoft Entra application name."::: +:::image type="content" source="media/sync-app-user-name-azure-ad-app-name.png" alt-text="Screenshot of Sync the application user name with the Microsoft Entra application name."::: -## Manage roles for an application user +## Manage roles for an application user -In addition to using the entry point on the **Details** page to manage roles, you can select **Edit security Roles** on the menu bar on the **Application users** page. If the application user has roles assigned already, those roles will appear as selected on the page. +In addition to using the entry point on the **Details** page to manage roles, you can select **Edit security Roles** on the menu bar on the **Application users** page. If the application user has roles assigned already, those roles appear as selected on the page. -You can select or deselect roles, and then select **Save**. All selected roles will become the current assigned roles for the application user. Any unselected roles won't be assigned. +You can select or deselect roles, and then select **Save**. All selected roles become the current assigned roles for the application user. Any unselected roles aren't assigned. -:::image type="content" source="media/application-user-edit-security-roles.png" alt-text="Editing security roles for an application user."::: +:::image type="content" source="media/application-user-edit-security-roles.png" alt-text="Screenshot of editing security roles for an application user."::: -## Activate or deactivate an application user +## Activate or deactivate an application user On the **Application user** page, do one of the following: - - To activate an application user, select **Activate** on the menu bar, and then select **Activate** in the confirmation dialog. +- To activate an application user, select **Activate** on the menu bar, and then select **Activate** in the confirmation dialog. + + :::image type="content" source="media/activate-application-user.png" alt-text="Screenshot of activate an application user."::: - :::image type="content" source="media/activate-application-user.png" alt-text="Activate an application user."::: +- To deactivate an application user, select **Deactivate** on the menu bar, and then select **Deactivate** in the confirmation dialog. - - To deactivate an application user, select **Deactivate** on the menu bar, and then select **Deactivate** in the confirmation dialog. - ## Delete an inactive, application user (preview) > [!IMPORTANT] +> > - This is a preview feature. > - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. @@ -146,16 +146,17 @@ To delete an inactive application user, complete the following steps. ## View the details of system-provided application users (preview) > [!IMPORTANT] +> > - This is a preview feature. > - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. -In each of your environments, there is a set of [system-provided application users](system-application-users.md#application-users). You can now view these application users from the Power Platform admin center. +In each of your environments, there's a set of [system-provided application users](system-application-users.md#application-users). You can now view these application users from the Power Platform admin center. -1. Sign in to the [Power Platform Admin center](https://admin.powerplatform.microsoft.com) as a system administrator. +1. Sign in to the [Power Platform Admin center](https://admin.powerplatform.microsoft.com) as a system administrator. 1. Select **Environments**, and then select an environment from the list. 1. Select **Settings**. 1. Select **Users + permissions** > **Application users**. -1. Select the **Filter** option from the comman bar. +1. Select the **Filter** option from the command bar. 1. Select the **Platform** option. A list of the platform, application users in the environment is displayed. 1. Select an application user. 1. Select **Details** from the command bar to view details of the platform, application user. diff --git a/power-platform/admin/manage-encryption-key.md b/power-platform/admin/manage-encryption-key.md index 7aadb9eca7..9aab888aee 100644 --- a/power-platform/admin/manage-encryption-key.md +++ b/power-platform/admin/manage-encryption-key.md @@ -21,7 +21,7 @@ All environments of Microsoft Dataverse use [!INCLUDE[pn_MS_SQL_Server](../inclu By default, [!INCLUDE[cc_Microsoft](../includes/cc-microsoft.md)] stores and manages the database encryption key for your environments so you don't have to. The manage keys feature in the Microsoft Power Platform admin center gives administrators the ability to self-manage the database encryption key that is associated with the Dataverse tenant. > [!IMPORTANT] -> - As of June 2, 2023, this service is upgraded to [Customer-managed encryption key](customer-managed-key.md). New customers who need to manage their own encryption key will use the upgraded service as this service is no longer offerred. +> - As of June 2, 2023, this service is upgraded to [Customer-managed encryption key](customer-managed-key.md). New customers who need to manage their own encryption key will use the upgraded service as this service is no longer offered. > - Self-managed database encryption keys are only available for customers who have more than 1000 Power Apps per user licenses, or more than 1000 Dynamics 365 Enterprise licenses, or more than 1000 licenses from a combination of both in a single tenant. To opt in to this program, submit a [support request](./support-overview.md#using-support). Encryption key management is only applicable to Azure SQL environment databases. The following features and services continue to use the Microsoft-managed encryption key to encrypt their data and can't be encrypted with the self-managed encryption key: diff --git a/power-platform/admin/manage-group-teams.md b/power-platform/admin/manage-group-teams.md index 339ce81e8d..a93a6eb4dc 100644 --- a/power-platform/admin/manage-group-teams.md +++ b/power-platform/admin/manage-group-teams.md @@ -15,7 +15,7 @@ search.audienceType: ## About group teams -An Microsoft Entra *group* team. Similar to *owner* team, a Microsoft Entra group team can own records and can have security roles assigned to the team. There are two *group* team types, and they correspond directly to the Microsoft Entra group types – Security and Microsoft 365. The *group* security role can be just for the team or for team member with User privileges [member's privilege inheritance](security-roles-privileges.md#team-members-privilege-inheritance). Team members are dynamically derived (added and removed) when they access the environment based on their Microsoft Entra group membership. +A Microsoft Entra *group* team. Similar to *owner* team, a Microsoft Entra group team can own records and can have security roles assigned to the team. There are two *group* team types, and they correspond directly to the Microsoft Entra group types – Security and Microsoft 365. The *group* security role can be just for the team or for team member with User privileges [member's privilege inheritance](security-roles-privileges.md#team-members-privilege-inheritance). Team members are dynamically derived (added and removed) when they access the environment based on their Microsoft Entra group membership. ### Using Microsoft Entra groups to manage a user's app and data access @@ -89,7 +89,7 @@ For more information, see [Assign a record to a user or team](/powerapps/user/as - Don't have the correct permissions? Contact your system administrator. Prerequisites: - 1. An Microsoft Entra Group is required for each group team. + 1. A Microsoft Entra Group is required for each group team. 2. Obtain the Microsoft Entra Group's **ObjectID** from your https://portal.azure.com site. 3. Create a custom security role that contains privileges per your team's collaboration requirement. See the discussion of [member's inherited privileges](security-roles-privileges.md#team-members-privilege-inheritance) if you need to extend the team member's privileges directly to a user. diff --git a/power-platform/admin/manage-high-privileged-admin-roles.md b/power-platform/admin/manage-high-privileged-admin-roles.md index 2c457f2785..34bf0a725f 100644 --- a/power-platform/admin/manage-high-privileged-admin-roles.md +++ b/power-platform/admin/manage-high-privileged-admin-roles.md @@ -9,7 +9,7 @@ ms.custom: "admin-security" ms.component: pa-admin contributors: srpoduri ms.topic: conceptual -ms.date: 05/29/2024 +ms.date: 06/07/2024 search.audienceType: admin --- @@ -45,6 +45,18 @@ Tenant admins can't perform activities that require direct access to Dataverse d > [!IMPORTANT] > Tenant admins must do another step before they can perform activities requiring access to Dataverse. They must elevate themselves to the **System Administrator** role in the environment where they need access. All elevation actions are logged to Microsoft Purview. +## Known limitations + +- When using the API, you'll notice that if the caller is a system administrator, the self-elevate call returns a success rather than notifying the caller that the system administrator already exists. + +- The user making the call must have the tenant admin role assigned. For a full list of users who meet the tenant admin criteria, see [Changes to feature support](#changes-to-feature-support) + +- The elevation API can only be invoked by the user who needs to elevate their status. It doesn't support making API calls on behalf of another user for elevation purposes. + +- A workaround is available for customers using the Microsoft Power Platform CoE Starter Kit. See [PIM Issue and Workaround #8119](https://github.com/microsoft/coe-starter-kit/issues/8119) for more information and details. + +- Role assignments through groups aren't supported. Make sure that you assign roles directly to the user. + ## Self-elevate to the system administrator role We support elevation using either PowerShell or through an intuitive experience in Power Platform admin center. @@ -194,15 +206,3 @@ Remove-RoleAssignmentFromUsers 1. The **System Administrators** pane is displayed. Add yourself to the system administrator role by selecting **Add me**. :::image type="content" source="media/self-elevate-membership-menu.png" alt-text="Use the Membership menu option to request self-elevation."::: - -## Known limitations - -- When using the API, you'll notice that if the caller is a system administrator, the self-elevate call returns a success rather than notifying the caller that the system administrator already exists. - -- The user making the call must have the tenant admin role assigned. For a full list of users who meet the tenant admin criteria, see [Changes to feature support](#changes-to-feature-support) - -- The elevation API can only be invoked by the user who needs to elevate their status. It doesn't support making API calls on behalf of another user for elevation purposes. - -- A workaround is available for customers using the Microsoft Power Platform CoE Starter Kit. See [PIM Issue and Workaround #8119](https://github.com/microsoft/coe-starter-kit/issues/8119) for more information and details. - -- Role assignments through groups aren't supported. Make sure that you assign roles directly to the user. diff --git a/power-platform/admin/manage-principalobjectaccess-storage.md b/power-platform/admin/manage-principalobjectaccess-storage.md index 64890fd708..97468c06ad 100644 --- a/power-platform/admin/manage-principalobjectaccess-storage.md +++ b/power-platform/admin/manage-principalobjectaccess-storage.md @@ -74,7 +74,7 @@ The POA table is managed by the system to ensure proper access of users or teams ## Troubleshooting guides When the cascade configuration of a table relationship is [changed from **Reparent** or **Share** to **No Cascade**](/power-apps/developer/data-platform/configure-entity-relationship-cascading-behavior#inherited-access-repair), use this article to clean up the inherited access. This removes unnecessary POA records. More information: [How to clean up inherited access](/troubleshoot/power-platform/power-apps/dataverse/cleanup-inherited-access?tabs=sdk). -Inherited access rights cleanup is a system job that cleans up the legacy, inherited access rights that remain after the cascading behavior is changed to **Cascade None**. More information: [Inherited acccess rights cleanup](/power-apps/maker/data-platform/create-edit-entity-relationships#inherited-access-rights-cleanup) +Inherited access rights cleanup is a system job that cleans up the legacy, inherited access rights that remain after the cascading behavior is changed to **Cascade None**. More information: [Inherited access rights cleanup](/power-apps/maker/data-platform/create-edit-entity-relationships#inherited-access-rights-cleanup) To learn whether user access was granted because of POA, see [Determine why a user has access](/power-apps/developer/data-platform/security-sharing-assigning?tabs=sdk#determine-why-a-user-has-access). diff --git a/power-platform/admin/manage-teams.md b/power-platform/admin/manage-teams.md index 3b49fba34d..cf38511c9d 100644 --- a/power-platform/admin/manage-teams.md +++ b/power-platform/admin/manage-teams.md @@ -3,7 +3,7 @@ title: "Teams in Dataverse | MicrosoftDocs" description: Understand the different types of teams and how to view and manage settings. ms.component: pa-admin ms.topic: conceptual -ms.date: 05/23/2024 +ms.date: 06/06/2024 author: paulliew ms.subservice: admin ms.author: paulliew @@ -25,7 +25,7 @@ Using Microsoft Dataverse teams is optional. However, teams provide an easy way **Access team:** An *access team* doesn't own records and doesn't have security roles assigned to the team. The team members have privileges defined by their individual security roles and by roles from the teams they're members of. These members share records with an access team, and the team is granted access rights to the records. Access rights include Read, Write, and Append. -**Microsoft Entra group team:** Similar to owner teams, an *Microsoft Entra group team* can own records and can have security roles assigned to the team. Security and Office are two group team types, and they correspond directly to Microsoft Entra group types. Group security roles can be assigned only for a specific team or for a team member with user privileges that include [members' privilege inheritance](security-roles-privileges.md#team-members-privilege-inheritance). Team members are dynamically derived (added and removed) when they access an environment based on their Microsoft Entra group membership. More information: [Manage group teams](manage-group-teams.md) +**Microsoft Entra group team:** Similar to owner teams, a *Microsoft Entra group team* can own records and can have security roles assigned to the team. Security and Office are two group team types, and they correspond directly to Microsoft Entra group types. Group security roles can be assigned only for a specific team or for a team member with user privileges that include [members' privilege inheritance](security-roles-privileges.md#team-members-privilege-inheritance). Team members are dynamically derived (added and removed) when they access an environment based on their Microsoft Entra group membership. More information: [Manage group teams](manage-group-teams.md) > [!NOTE] > You can assign security roles directly to owner teams and Microsoft Entra group teams and users. The environment picker only recognizes users who are members of Microsoft Entra group teams and users who have security roles assigned to them directly. @@ -56,10 +56,9 @@ A list of all of the teams in the environment is displayed. - **Description:** Enter a description of the team. - **Business unit:** Select the business unit from the dropdown list. - **Administrator:** Search for users in the organization. Start entering characters. - - > [!Note] - > The **Administrator** field is only for reference and it doesn't have any special processing. You can use this field to restrict who can add and remove team members by registering a [plug-in](/power-apps/developer/data-platform/plug-ins) on the [associate and disassociate](/power-apps/developer/data-platform/webapi/associate-disassociate-entities-using-web-api) APIs for the **teammembership_association** relationship. These actions can be enforced when the user is the administrator of the team. For more information, see the community [sample code](https://community.dynamics.com/crm/b/mylifemicrosoftdynamiccrm/posts/ms-dynamics-crm-associate-disassociate-message-plugin). - + > [!NOTE] + > The **Administrator** field is only for reference and it doesn't have any special processing. You can use this field to restrict who can add and remove team members by registering a [plug-in](/power-apps/developer/data-platform/plug-ins) on the [AddMembersTeam](/power-apps/developer/data-platform/webapi/reference/addmembersteam) API for the **teammembership_association** relationship. These actions can be enforced when the user is the administrator of the team. For more information, see the community [sample code](https://community.dynamics.com/crm/b/mylifemicrosoftdynamiccrm/posts/ms-dynamics-crm-associate-disassociate-message-plugin). + - **Team type:** Select the team type from the dropdown list. :::image type="content" source="media/dataverse-team-manage-new-team.png" alt-text="Screenshot of settings for a new Dataverse team."::: @@ -97,7 +96,7 @@ After you create the team, you can add team members and select corresponding sec You can add and delete members from a team. > [!NOTE] -> Managing team members is allowed only for the Owner and Access team types. For Microsoft Entra group teams, managing team members must be performed by an Microsoft Entra admin. +> Managing team members is allowed only for the Owner and Access team types. For Microsoft Entra group teams, managing team members must be performed by a Microsoft Entra admin. 1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com). diff --git a/power-platform/admin/media/start-date-incoming-email.png b/power-platform/admin/media/start-date-incoming-email.png new file mode 100644 index 0000000000..75e89df71e Binary files /dev/null and b/power-platform/admin/media/start-date-incoming-email.png differ diff --git a/power-platform/admin/online-requirements.md b/power-platform/admin/online-requirements.md index b47eb91265..f5a2001f2d 100644 --- a/power-platform/admin/online-requirements.md +++ b/power-platform/admin/online-requirements.md @@ -4,7 +4,7 @@ description: Provides information about URLs and IP addresses to be added to the author: sericks007 ms.component: pa-admin ms.topic: conceptual -ms.date: 04/08/2024 +ms.date: 06/20/2024 ms.subservice: admin ms.author: sericks contributors: @@ -81,7 +81,7 @@ All IP addresses for various services for public and government clouds are avail The IP address values in these JSON files are grouped by service tags that define the service they're applicable for. -For Power Platform and Dynamics 365 services, you must add the IP address values specified under the `AzureCloud` service tag. The service tags also have a regional scope to define the IP addresses required per Azure datacenter region. For example, to find out the required IP address values for accessing services in the *Australia* region, use the [Azure IP Ranges and Service Tags – Public Cloud](https://www.microsoft.com/download/details.aspx?id=56519) file, and search for `AzureCloud.Australia`. +For Power Platform and Dynamics 365 services, you must add the IP address values specified under the `AzureCloud` service tag. The service tags also have a regional scope to define the IP addresses required per Azure datacenter region. For example, to find out the required IP address values for accessing services in the *Australia* region, use the [Azure IP Ranges and Service Tags – Public Cloud](https://www.microsoft.com/download/details.aspx?id=56519) file, and search for `AzureCloud.Australia`. For real-time collaboration features, you must add the IP address values specified under the `MicrosoftAzureFluidRelay` service tag. :::image type="content" source="media/ip-example.png" alt-text="PowerPlatformInfra service tag for Power Platform IPs"::: diff --git a/power-platform/admin/pay-as-you-go-issues-faq.md b/power-platform/admin/pay-as-you-go-issues-faq.md index 5d5459fa04..a7286727eb 100644 --- a/power-platform/admin/pay-as-you-go-issues-faq.md +++ b/power-platform/admin/pay-as-you-go-issues-faq.md @@ -157,7 +157,7 @@ If the user accesses the site using different browsers or devices or cleans up b If the users are accessing only sign in page, then they won't be counted as anonymous users. There are several types of pages that aren't counted for the anonymous user meter. The pages are described in [Power Pages – Anonymous user meter](pay-as-you-go-meters.md#anonymous-user-meter). -### I use Application Insights (or Google Analytics) on my website and monthly active user count shown by that is different then what I see in Power Pages licensing reports. Is that expected? +### I use Application Insights (or Google Analytics) on my website and monthly active user count shown by that is different than what I see in Power Pages licensing reports. Is that expected? User counts generated by analytics providers like Application Insights or Google Analytics can differ from the counts of the Power Pages meters. diff --git a/power-platform/admin/pay-as-you-go-meters.md b/power-platform/admin/pay-as-you-go-meters.md index 99dc6d37cf..c61d5b3c6d 100644 --- a/power-platform/admin/pay-as-you-go-meters.md +++ b/power-platform/admin/pay-as-you-go-meters.md @@ -123,7 +123,7 @@ Example: If an environment has Unattended bot add on units assigned and then PAY If the owner of a flow is service principal, the flow runs are charged unless the flow has a per-flow license. > [!NOTE] -> Assigning a Power Automate per user/per flow license ensures that any runs of the flow doesnt trigger Power Automate flow run meter if the flow features are within their license entitlements. But, if the flow uses more Power platform requests than the [limits](/power-platform/admin/api-request-limits-allocations#licensed-user-request-limits), Power platform request meter is triggered for any overages. +> Assigning a Power Automate per user/per flow license ensures that any runs of the flow doesn't trigger Power Automate flow run meter if the flow features are within their license entitlements. But, if the flow uses more Power platform requests than the [limits](/power-platform/admin/api-request-limits-allocations#licensed-user-request-limits), Power platform request meter is triggered for any overages. |User |Standard flow runs |Premium cloud flow runs |Attended RPA flow runs |Unattended RPA runs| Azure billable runs| |---------|----------------------|----------------|--------------|-------------|-------------| diff --git a/power-platform/admin/policies-communications.md b/power-platform/admin/policies-communications.md index 1b537a968d..f6fed6de1e 100644 --- a/power-platform/admin/policies-communications.md +++ b/power-platform/admin/policies-communications.md @@ -133,7 +133,7 @@ If the Microsoft 365 admin portal is unavailable, we will provide status updates **What information is provided about service incidents?** -During the event, we include information that is related to the user impact, duration, any feasible workaround, and preliminary root cause. Our goal is to provide status updates on a hourly cadence, although this guideline may be reduced for substantive new information or extended based on waiting on recovery activities. At the restoration of the service to optimal operation, we will publish a final status update and determine if additional post incident report will be provided based on the breadth and type of impact to customers. +During the event, we include information that is related to the user impact, duration, any feasible workaround, and preliminary root cause. Our goal is to provide status updates on an hourly cadence, although this guideline may be reduced for substantive new information or extended based on waiting on recovery activities. At the restoration of the service to optimal operation, we will publish a final status update and determine if additional post incident report will be provided based on the breadth and type of impact to customers. A post incident report (PIR) may be published after five business days on the Microsoft 365 Service health dashboard for certain events. diff --git a/power-platform/admin/power-automate-licensing/when-flows-are-turned-off.md b/power-platform/admin/power-automate-licensing/when-flows-are-turned-off.md index f9f7d06009..3774d96986 100644 --- a/power-platform/admin/power-automate-licensing/when-flows-are-turned-off.md +++ b/power-platform/admin/power-automate-licensing/when-flows-are-turned-off.md @@ -9,7 +9,7 @@ contributors: - v-aangie ms.component: pa-admin ms.topic: conceptual -ms.date: 05/21/2024 +ms.date: 06/20/2024 ms.author: samathur ms.reviewer: angieandrews search.audienceType: @@ -31,7 +31,7 @@ To ensure compliance and prevent surprises, admins should keep up-to-date with t - Admins are encouraged to enable Auto-claim so license assignment is automated. - Admins should periodically review the Power Automate license reporting, which now includes both tenant and environment level reporting views. To learn more, go to [View license consumption for Power Apps and Power Automate (preview)](../view-license-consumption-issues.md). - The report identifies flows that require a license for a subset of scenarios that are in scope of the power platform licensing guide. This subset of scenarios constitues the current scope of enforcement. We expect customers to ensure compliance with all licensing requirements covered in the [Power Platform Licensing Guide](https://go.microsoft.com/fwlink/?linkid=2085130). We expect to add more scenarios to this report to help administrators identify flows that require their attention. We might broaden the scope of enforcements at such time. + The report identifies flows that require a license for a subset of scenarios that are in scope of the power platform licensing guide. This subset of scenarios constitutes the current scope of enforcement. We expect customers to ensure compliance with all licensing requirements covered in the [Power Platform Licensing Guide](https://go.microsoft.com/fwlink/?linkid=2085130). We expect to add more scenarios to this report to help administrators identify flows that require their attention. We might broaden the scope of enforcements at such time. ## Types of enforcements @@ -41,10 +41,10 @@ Enforcement using the environment lifecycle operations commences in the third qu |Enforcement type |Exceptions |Recommended action  | |---------|---------|---------| -|Premium flows where flow owner left the organization  |Manual flows |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. | -|Premium flows where the flow owner doesn't have a Premium license (owner previously had a trial/license that is expired now) |Manual flows |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. | -|Premium flows created by flow owner with a Power Apps license, but the flow isn't triggered by the app built with Power Apps |Power Apps licensed user flows that are triggered from canvas apps, or that use the Microsoft Dataverse 'For a select record' trigger in a model driven app, are automatically considered as being in context of the app built with Power Apps and are excluded from enforcement |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. Alternatively, if the flow is supporting an app built with Power Apps, [associate the flow to the app](faqs.md#how-can-i-associate-in-context-flows-to-power-appsdynamics-365-apps). | -|Premium flows created by the flow owner with a Dynamics 365 license, but the flow isn't in a Dynamics environment, or the flow isn't interacting with Dynamics entities |Dynamics 365 licensed user flows that are using a Dataverse connector to talk to Dynamics entities in the environment, or using First party Dynamics connectors like finance and operations, are automatically considered as being in context of the Dynamics 365 app in the environment and are excluded from enforcement |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. Alternatively, if the flow is supporting a Dynamics 365 app, [associate the flow to the app](faqs.md#how-can-i-associate-in-context-flows-to-power-appsdynamics-365-apps). | +|Premium flows where flow owner left the organization  |Manual flows licensing is evaluated at runtime and is based on the invoking user license unless the flow is licensed using a per flow or per process plan. |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. | +|Premium flows where the flow owner doesn't have a Premium license (owner previously had a trial/license that is expired now) |Manual flows licensing is evaluated at runtime and is based on the invoking user license unless the flow is licensed using a per flow or per process plan. |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. | +|Premium flows created by flow owner with a Power Apps license, but the flow isn't triggered by the app built with Power Apps |Power Apps licensed user flows that are triggered from canvas apps, or that use the Microsoft Dataverse 'For a select record' trigger in a model driven app, are automatically considered as being in context of the app built with Power Apps and are excluded from enforcement. |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. Alternatively, if the flow is supporting an app built with Power Apps, [associate the flow to the app](faqs.md#how-can-i-associate-in-context-flows-to-power-appsdynamics-365-apps). | +|Premium flows created by the flow owner with a Dynamics 365 license, but the flow isn't in a Dynamics environment, or the flow isn't interacting with Dynamics entities |Dynamics 365 licensed user flows that are using a Dataverse connector to talk to Dynamics entities in the environment, or using First party Dynamics connectors like finance and operations, are automatically considered as being in context of the Dynamics 365 app in the environment and are excluded from enforcement. |Assign a Power Automate license to the flow owner or per-flow/process license to the flow. Alternatively, if the flow is supporting a Dynamics 365 app, [associate the flow to the app](faqs.md#how-can-i-associate-in-context-flows-to-power-appsdynamics-365-apps). | Dynamics 365 and Power Apps licenses include a limited set of Power Automate capabilities that allow users to run in-context flows as outlined in the [Power Platform Licensing Guide](https://go.microsoft.com/fwlink/?linkid=2085130). To learn more, go to [What Power Automate capabilities are included in Dynamics 365 licenses](faqs.md#what-power-automate-capabilities-are-included-in-dynamics-365-licenses). diff --git a/power-platform/admin/powerapps-analytics-reports.md b/power-platform/admin/powerapps-analytics-reports.md index 836f2a866d..d7a7f4bb4b 100644 --- a/power-platform/admin/powerapps-analytics-reports.md +++ b/power-platform/admin/powerapps-analytics-reports.md @@ -56,7 +56,7 @@ Power Apps reports provide insights into tenant and environment usage and invent ## Power Apps - Maker Activity report -The Power Apps Maker Activity report provide insights into tenant and environment usage and inventory of all apps and connectors. The report answers questions such as: +The Power Apps Maker Activity report provides insights into tenant and environment usage and inventory of all apps and connectors. The report answers questions such as: - What is the total number of apps created/published/modified/deleted by app makers across the tenant or environments? - What is the count of first-time makers across canvas and model-driven apps? diff --git a/power-platform/admin/powerapps-privacy-export-dsr.md b/power-platform/admin/powerapps-privacy-export-dsr.md index 961d224b48..2ac3d34ae9 100644 --- a/power-platform/admin/powerapps-privacy-export-dsr.md +++ b/power-platform/admin/powerapps-privacy-export-dsr.md @@ -92,7 +92,7 @@ Users can be assigned permissions (such as Environment Admin, Environment Maker, #### Power platform admin center Administrators can export a user's environment permissions from the [Power Platform admin center](https://admin.powerplatform.microsoft.com/) by following these steps: -1. From the Power Platform admin center, select each environment in your organization. You must be an [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or an [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. +1. From the Power Platform admin center, select each environment in your organization. You must be a [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or a [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. 2. Select both **Environment Admin** and **Environment Maker** separately, and then using the search bar, search for the user's name. @@ -127,7 +127,7 @@ A user can export an app from the [Power Apps portal](https://make.powerapps.com ### Power Platform admin center An administrator can export apps created by a user starting from the [Power Platform admin center](https://admin.powerplatform.microsoft.com/) by following these steps: -1. From the Power Platform admin center, select each environment in your organization. You must be an [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or an [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. +1. From the Power Platform admin center, select each environment in your organization. You must be a [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or a [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. 2. Select **Resources**, and then select **Power Apps**. @@ -160,7 +160,7 @@ Get-PowerAppRoleAssignment | ConvertTo-Json | Out-File -FilePath "UserDetails.js ### Power Platform admin center Administrators can export app roles assignments for a user from the [Power Platform admin center](https://admin.powerplatform.microsoft.com/) by following these steps: -1. From the Power Platform admin center, select each environment in your organization. You must be an [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or an [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. +1. From the Power Platform admin center, select each environment in your organization. You must be a [Microsoft 365 Global admin](/microsoft-365/admin/add-users/about-admin-roles) or a [Microsoft Entra Global Administrator](/entra/identity/role-based-access-control/permissions-reference) to be able to review all environments created within your organization. 2. For each environment, select **Resources**, and then select **Power Apps**. diff --git a/power-platform/admin/replicate-data-microsoft-azure-sql-database.md b/power-platform/admin/replicate-data-microsoft-azure-sql-database.md index 0c08df2b0c..f5536e5e58 100644 --- a/power-platform/admin/replicate-data-microsoft-azure-sql-database.md +++ b/power-platform/admin/replicate-data-microsoft-azure-sql-database.md @@ -244,7 +244,7 @@ For information about the programmatic interface for managing configuration and ## Resolving synchronization issues Even after several retry attempts, record synchronization failures may occur from database storage constraints or table locking due to long running queries. To resolve these failures you can force a resynchronization of only failed records or a resynchronization of all records. -1. View your export profiles to look for any that have record synchronization failures. You do this by viewing the data profiles in the Synchronization area or by opening a Export Profile , such as this profile that has a contact entity record synchronization failure. +1. View your export profiles to look for any that have record synchronization failures. You do this by viewing the data profiles in the Synchronization area or by opening an Export Profile , such as this profile that has a contact entity record synchronization failure. ![DataExport_failed_records_exist.](../admin/media/data-export-failed-records-exist.PNG "DataExport_failed_records_exist") diff --git a/power-platform/admin/restore-deleted-table-records.md b/power-platform/admin/restore-deleted-table-records.md index 7324222e52..e1cd833c87 100644 --- a/power-platform/admin/restore-deleted-table-records.md +++ b/power-platform/admin/restore-deleted-table-records.md @@ -4,11 +4,13 @@ description: "Learn how to use the Power Platform admin center to view restore d author: Mattp123 ms.component: pa-admin ms.topic: conceptual -ms.date: 04/30/2024 +ms.date: 06/28/2024 ms.subservice: admin ms.author: adkuppa search.audienceType: - admin +contributors: +- adkuppa --- # Restore deleted Microsoft Dataverse table records (preview) @@ -19,9 +21,11 @@ As part of the regular business processes with Microsoft Dataverse, users often Developers should read [Restore deleted records with code (preview)](/power-apps/developer/data-platform/restore-deleted-records) to learn how to interact with this feature using code. > [!IMPORTANT] +> > - This is a preview feature. > - [!INCLUDE [cc-preview-features-definition](../includes/cc-preview-features-definition.md)] > - This feature is currently being deployed and might not yet be available in your region. +> - During preview, any storage used by the recycle bin will not count against your organization's storage capacity. ## Prerequisites @@ -51,13 +55,23 @@ Viewing and acting on the deleted records in the Power Apps user experience is o 1. Select **Ok** to confirm the action to restore. ## Known issues - ### Some records aren't restored Some organizations add custom business logic that deletes records related to a record that is deleted. To restore related records deleted by custom business logic, you need to apply the opposite logic on the `Restore` operation to recover the records when you restore the original record that was deleted. Records deleted via the table relationship cascade behavior process can be restored. For more information about cascade behavior, go to [Configure table relationship cascading behavior](/power-apps/developer/data-platform/configure-entity-relationship-cascading-behavior). +### Deleted records aren't shown after turning on the recycle bin + +Deleted records might not appear when the recycle bin feature is turned on. Verify that the **Enable RecycleBin for Organization** system job is turned on. Go to the Power Platform admin center, select the environment where this issue is happening, and select **Settings** > **Audit and logs** > **System jobs**. On the **System Jobs** page, search for **Enable RecycleBin**. Confirm that the **Status Reason** is **Succeeded**. + +If the **Status Reason** isn't **Succeeded**, or despite the success state appearing correct, and you're not seeing the **Restore** option for deleted records, contact a [Microsoft support representative and create a support request](get-help-support.md). + +### Records deleted through cascading behaviors aren't present in Deleted Records view + +Records that were deleted through automated, cascading behaviors can't be restored independently. These records need to be restored in the order in which they were deleted. The original record that was deleted must be restored before any related records that were deleted through automated cascading behaviors. + +For more information about cascading behavior, go to [Configure table relationship cascading behavior](/power-apps/developer/data-platform/configure-entity-relationship-cascading-behavior). ### See also diff --git a/power-platform/admin/security/media/Analytics-toggle.png b/power-platform/admin/security/media/Analytics-toggle.png new file mode 100644 index 0000000000..2644175253 Binary files /dev/null and b/power-platform/admin/security/media/Analytics-toggle.png differ diff --git a/power-platform/admin/security/media/No-data.png b/power-platform/admin/security/media/No-data.png new file mode 100644 index 0000000000..5452f0051c Binary files /dev/null and b/power-platform/admin/security/media/No-data.png differ diff --git a/power-platform/admin/security/media/customer-lockbox.png b/power-platform/admin/security/media/customer-lockbox.png new file mode 100644 index 0000000000..6b0c2b6539 Binary files /dev/null and b/power-platform/admin/security/media/customer-lockbox.png differ diff --git a/power-platform/admin/security/media/enable-customerlockbox.png b/power-platform/admin/security/media/enable-customerlockbox.png new file mode 100644 index 0000000000..632a1e636c Binary files /dev/null and b/power-platform/admin/security/media/enable-customerlockbox.png differ diff --git a/power-platform/admin/security/media/full-image.jpg b/power-platform/admin/security/media/full-image.jpg new file mode 100644 index 0000000000..3cb41783a2 Binary files /dev/null and b/power-platform/admin/security/media/full-image.jpg differ diff --git a/power-platform/admin/security/security-posture-overview.md b/power-platform/admin/security/security-posture-overview.md new file mode 100644 index 0000000000..cfe1269806 --- /dev/null +++ b/power-platform/admin/security/security-posture-overview.md @@ -0,0 +1,155 @@ +--- +title: Manage security +description: Learn how to manage security in the Power Platform admin center with security features available to run your organizational workloads in the safest way possible. +ms.subservice: admin +ms.component: pa-admin +ms.topic: conceptual +ms.date: 06/19/2024 +author: jahnavisunil +ms.author: jasunil +ms.reviewer: sericks +search.audienceType: + - admin +--- + +# Manage security + +The **Security** page in the Power Platform admin center offers a consolidated experience that brings together all the best practices and a wide set of security features available to run your organizational workloads in the safest way possible. Take advantage of the following capabilities: + +- **Security assessment**: Admins can understand and improve their organization’s security policies specific to their needs. +- **Reactive governance through recommendations**: Admins can identify and act on the top-most, impactful recommendations to improve the assessment. +- **Proactive governance with security features**: Admins can use the rich set of tools and security capabilities available to gain deep visibility, detect threats, and proactively set policies in place to help safeguard the organization from vulnerabilities and risks. + +## Prerequisite + +To get insights into the security assessment and recommendations for your tenant, turn on tenant-level analytics. To turn on tenant-level analytics, see [How do I enable tenant-level analytics](../tenant-level-analytics.md#how-do-i-enable-tenant-level-analytics). + +> [!Note] +> After the tenant-level analytics feature is turned on, it might take up to 48 hours to populate all the insights, as shown in the following image. Until the page is populated, most sections on the page display “Not available”. + +1. Go to the [Power Platform admin center](https://admin.powerplatform.microsoft.com). +2. From the left-side menu, select **Security**. + + :::image type="content" source="media/full-image.jpg" alt-text="The Security Hub page with data."::: + + If you don't turn on tenant-level analytics, no data is displayed on the page. + + :::image type="content" source="media/No-data.png" alt-text="The Security Hub page when it doesn't show data."::: + +## Security assessment for your tenant + +The security assessment is illustrated on a qualitative scale with labels of _Standard_, _Enhanced_, or _Advanced_. The assessment is calculated based on system recommendations, user and maker activity, and security configurations already applied by the administrators. It's a measurement of your organizational security position for Power Platform workloads. _Enhanced_ and _Advanced_ assessment labels indicate that more recommended actions have been taken and the security position of the tenant is improved. + +Your security assessment is calculated as a sum of your achieved impact over total possible impact. + +**Formula: Total achieved impact/Total possible impact** + +Each feature is assigned an impact status based on the feature scope (tenant or environment), and the number of resources impacted by turning the feature on or off. + +| Feature | Impact | +|---------|--------| +| IP firewall | 1 x each environment | +| IP cookie bindings | 1 x each environment | +| Environment security group | 1 x each environment | +| Tenant data policies | Total number of environments | +| Tenant isolation | Total number of environments | +| Customer Lockbox | If turned on, the total number of Managed Environments.
Zero if not turned on.
Zero if not turned on and there are no Managed Environments. | + +Example: Tenant with 10 environments (five Managed Environments and five non-Managed Environments) + +| Feature | Impact | Maximum impact | +|---------|--------|----------------| +| IP firewall | 1 x each environment | 10 environments x 1 or 10 | +| IP cookie bindings | 1 x each environment | 10 environments x 1 or 10 | +| Environment security group | 1 x each environment | 10 environments x 1 or 10 | +| Tenant data policies | Total number of environments | 10 environments | +| Tenant isolation | Total number of environments | 10 environments | +| Customer Lockbox | If turned on, the total number of Managed Environments.
0 if not turned on.
0 if not turned on and there are no Managed Environments. | 5 environments | + +The maximum impact possible is 55. + +Assume the following information about an environment: + +- Tenant isolation is used (10) +- At least one data policy is configured on the tenant (10) +- 5 of 10 environments have a security group +- 2 of 10 environments have IP firewall +- 3 of 10 Environments have IP cookie bindings +- Customer Lockbox is off + +Based on the example outlined above, the achieved status is: 10 + 10 + 5 + 2 + 3 or 30. Given the formula: **Total achieved impact/Total possible impact** the assessment is 30/55, which has a label of _Enhanced_. + +> [!Note] +> The advisor can have more recommendations than the number of environments in the tenant because an environment can have multiple recommendations. There can be one-to-many relationships. For example, an environment can have a recommendation to enable IP firewall and IP cookie binding. + +## Reactive governance through recommendations + +The system generates various recommendations based on common, best practices that improve the security assessment of your tenant. Recommendations refer to actions or measures that the administrator can take to enhance their overall security status. + +- System-generated recommendations can be acted upon by selecting the link under the recommended action of that feature. +- To configure features outside of the recommendations, select the **Manage** button. + +## Manage proactive policies for governance and security + +There are several security features that help secure your tenant, including: + +- **Tenant isolation**: This is a feature that is turned on at the tenant-level for both Managed and non-Managed Environments. Tenant isolation allows global administrators and Power Platform administrators to govern the movement of tenant data from Microsoft Entra-authorized data sources to and from their tenant. Learn more: [Cross-tenant inbound and outbound restrictions](../cross-tenant-restrictions.md) + +- **Customer Lockbox**: This feature is applicable to only Managed Environments. Customer Lockbox provides an interface for customers to review and approve (or reject) data access requests on the rare occasions when access to customer data is needed. It's used in cases where a Microsoft engineer needs to access customer data, in response to a customer-initiated support ticket, or a problem identified by Microsoft. Learn more: [Securely access customer data using Customer Lockbox in Power Platform and Dynamics 365](../about-lockbox.md) + +- **IP firewall**: This feature is applicable to only Managed Environments with Dataverse. The IP firewall helps to protect your organizational data by limiting user access to Dataverse from only allowed IP locations. The IP firewall analyzes the IP address of each request in real time. Learn more: [IP firewall in Power Platform environments](../ip-firewall.md) + +- **IP address-based cookie binding**: This feature is applicable to only Managed Environments with Dataverse. It prevents session, hijacking exploits in Dataverse with IP address-based cookie binding. Learn more: [Safeguarding Dataverse sessions with IP cookie binding](../block-cookie-replay-attack.md) + +- **Data policies**: This feature is applicable at both tenant-level and environment-level to both Managed Environments and non-Managed Environments. Setting up data policies at the environment or tenant-level acts as guardrails to help reduce the risk of users from unintentionally exposing organizational data. Learn more: [Data policies](../wp-data-loss-prevention.md) + + > [!Note] + > The recommendation for data policies is triggered when there is no tenant-level policy defined. At this time, any environment-scoped data policies are not considered when performing the security assessment for the tenant. + +- **Environment security group**: This feature is applicable to both Managed Environments and non-Managed Environments. Setting up security groups helps control which licensed users can access environments. Learn more: [Control user access to environments: security groups and licenses](../control-user-access.md) + +- **Azure Virtual Network:** This feature is applicable to only Managed Environments. Setting up Azure Virtual Network helps you integrate Power Platform with resources inside your + virtual network without exposing them over the public internet. Learn more: [Virtual Network support for Power Platform overview](../vnet-support-overview.md) + + > [!Note] + > Recommendations for Azure Virtual Netwroks aren't available in the current version, but are planned for future updates. + +- **Auditing:** This feature is applicable to only Managed Environments and non-Managed Environments with Dataverse. Auditing log changes are made to customer records in an environment with a Dataverse database. Dataverse auditing also logs user access through an app or through the SDK in an environment. Learn more: [Manage Dataverse auditing](../manage-dataverse-auditing.md) + + > [!Note] + > Recommendations for auditing aren't available in the current version, but are planned for future updates. + +## Frequently asked questions (FAQ) + +### When will the Security page be available for Government Community Cloud (GCC)? + +The **Security** page is planned for availability in GCC after the general availability release. + +### Can customers modify the recommendations or parameters based on their needs? + +No. The recommendations are system-generated and are based on Microsoft's best practices and guidance. + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-platform/admin/select-incoming-email-processing-start-date.md b/power-platform/admin/select-incoming-email-processing-start-date.md new file mode 100644 index 0000000000..fa581459db --- /dev/null +++ b/power-platform/admin/select-incoming-email-processing-start-date.md @@ -0,0 +1,31 @@ +--- +title: Select the start date for processing incoming email +description: Provides tips for selecting the incoming email processing start date. +author: rahulmital +ms.component: pa-admin +ms.topic: overview +ms.date: 06/07/2024 +ms.subservice: admin +ms.author: rahulmital +ms.reviewer: sericks +search.audienceType: + - admin +--- +# Select the start date for processing incoming email + +When you test and enable a mailbox that is configured for processing incoming email from the mailbox form, you're prompted to select a start date to process email from. + +:::image type="content" source="media/start-date-incoming-email.png" alt-text="Set the start date for processing incoming email."::: + +## ProcessEmailReceivedAfter column +The selected date and time set the **ProcessEmailReceivedAfter** column on the mailbox. This column determines the starting position for synchronizing emails that were received after the supplied date within the remote mailbox once the test and enable process completes. + +> [!TIP] +> - This functionality is available on the **Test and Enable** window when launched directly from the **Mailbox** form. It's not available when the window is launched from the **Mailbox** grid. +> - The date and time provided must be greater than the **Process Email From** date on the mailbox’s associated Email Server Profile. +> - Server-side synchronization evaluates all emails for synchronization within your root Inbox folder that were received after the date specified. This means that emails that were previously synchronized and then deleted are re-evaluated for synchronization. This also applies to the Sent Items folder if [AutoTrackSentFolderItems](/power-platform/admin/track-sent-folder-items) is activated. For [Folder-Based Tracking](/power-platform/admin/configure-outlook-exchange-folder-level-tracking) folders, emails that have been modified after the specified date are synchronized. + +## Implications of using past dates +Setting a past date may create a large backlog of emails to process, which may delay the synchronization of recent emails. The processing time of emails can also be impacted by the number of synchronous customizations that are executed during the email creation process in Dataverse. Learn more: [Server-side synchronization frequency](server-side-synchronization.md#server-side-synchronization-frequency). + +[!INCLUDE[footer-include](../includes/footer-banner.md)] diff --git a/power-platform/admin/server-cipher-tls-requirements.md b/power-platform/admin/server-cipher-tls-requirements.md index d341a7f5c8..c7f312df31 100644 --- a/power-platform/admin/server-cipher-tls-requirements.md +++ b/power-platform/admin/server-cipher-tls-requirements.md @@ -44,7 +44,7 @@ To comply with our security policy for a secure connection, your server must hav > Older TLS 1.0 & 1.1 and cipher suites, (for example TLS_RSA) have been deprecated; see the [announcement](../important-changes-coming.md#tls-rsa-cipher-suites-are-deprecated). > Your servers must have the above security protocol to continue running the Dataverse services. > - > **TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 and TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384** may show up as weak when you performed a SSL report test. This is due to known attacks toward OpenSSL implementation. Dataverse uses Windows implementation that is not based on OpenSSL and therefore is not vulnerable. + > **TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 and TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384** may show up as weak when you performed an SSL report test. This is due to known attacks toward OpenSSL implementation. Dataverse uses Windows implementation that is not based on OpenSSL and therefore is not vulnerable. You may either upgrade the [Windows version](/windows/win32/secauthn/cipher-suites-in-schannel) or update the [Windows TLS registry](/windows-server/security/tls/tls-registry-settings) to make sure that your server endpoint supports one of these ciphers. diff --git a/power-platform/admin/settings-features.md b/power-platform/admin/settings-features.md index 107137d039..97a9546e97 100644 --- a/power-platform/admin/settings-features.md +++ b/power-platform/admin/settings-features.md @@ -144,7 +144,7 @@ Allow canvas editors to insert the Copilot answer component, which allows users | Enable Finance and Operations user impersonation in Dataverse | When enabled, the Finance and Operations application in this environment has permissions to impersonate Dataverse users. This allows users of Finance and Operations to make calls to Dataverse which run as that same user in Dataverse, using the Dataverse permissions assigned to that user. Only select this option if the Finance and Operations administrator is trusted with the same level of permissions in Dataverse as the Dataverse administrator. | Off | > [!IMPORTANT] -> Beginning March 1, 2024 the **Enable Finance and Operations user impersonation in Dataverse** toggle will be removed. With continued efforts to unify finance and operations apps with the Power Platform through the [Power Platform integration](/dynamics365/fin-ops-core/dev-itpro/power-platform/overview) and [unified admin exeriences](unified-experience/finance-operations-apps-overview.md), finance and operations apps are now considered applications within the Power Platform environment. In a unified environment, the capabilities granted by the toggle are now assumed to be true for any environment with finance and operations apps installed with the same level of governance, oversight and scrutiny as all other apps in a Power Platform environment. +> Beginning March 1, 2024 the **Enable Finance and Operations user impersonation in Dataverse** toggle will be removed. With continued efforts to unify finance and operations apps with the Power Platform through the [Power Platform integration](/dynamics365/fin-ops-core/dev-itpro/power-platform/overview) and [unified admin experiences](unified-experience/finance-operations-apps-overview.md), finance and operations apps are now considered applications within the Power Platform environment. In a unified environment, the capabilities granted by the toggle are now assumed to be true for any environment with finance and operations apps installed with the same level of governance, oversight and scrutiny as all other apps in a Power Platform environment. ## Data validation | Setting | Description | Default value | diff --git a/power-platform/admin/signup-for-powerapps-admin.md b/power-platform/admin/signup-for-powerapps-admin.md index 7d14495a89..5cb2a453d3 100644 --- a/power-platform/admin/signup-for-powerapps-admin.md +++ b/power-platform/admin/signup-for-powerapps-admin.md @@ -17,7 +17,7 @@ search.audienceType: This topic provides information on how to purchase Power Apps for your organization as an administrator. You can purchase Power Apps through the Power Apps website directly, through the [Microsoft 365 admin center](https://admin.microsoft.com), or through your Microsoft representative or partner. This article will also provide information about the trial options available for a Power Apps plan and then explain how to purchase a Power Apps plan as an organization. For more information, see [Manage licenses in your organization](signup-question-and-answer.md). > [!NOTE] -> To purchase Power Apps for an organization, you must already be an Microsoft 365 Global or Billing Admin of a tenant, or you must create a tenant. +> To purchase Power Apps for an organization, you must already be a Microsoft 365 Global or Billing Admin of a tenant, or you must create a tenant. > > Beginning January 2020, self-service purchase, subscription, and license management capabilities for Microsoft Power Platform products (Power BI, Power Apps, and Power Automate) are available for commercial cloud customers in the United States. For more information, including steps to enable or disable self-service purchasing in your organization, see [Self-service purchase FAQs](/microsoft-365/commerce/subscriptions/self-service-purchase-faq). diff --git a/power-platform/admin/support-overview.md b/power-platform/admin/support-overview.md index 099f0b1301..70ca7a06cf 100644 --- a/power-platform/admin/support-overview.md +++ b/power-platform/admin/support-overview.md @@ -222,7 +222,7 @@ Technical support does not conduct RCAs as part of any support experience. If an Data may become corrupt due to a variety of reasons (malfunctioning software, custom code, partner or ISV software, power outages, etc.). Microsoft does not provide assistance for correcting damaged data. Note that per the Service Provider License Agreement (SPLA), Microsoft does not have a legal obligation to change or correct data being corrupted due to malfunctioning software. Microsoft may execute scripts provided by partners/customers in the production environment if the script was tested in the UAT environment by the partner/customer prior. -### What happens if the issue can not be reproduced or has to do with customized databases? +### What happens if the issue can't be reproduced or has to do with customized databases? In scenarios where a problem is not able to be reproduced in a standard non-modified Dynamics installation, the Microsoft Dynamics support team will invest best effort support up to 4 hours of time on a break fix case to assist. If after 4 hours, we have not yet identified the repro steps of an issue, consulting a partner or the community forums will be recommended for further investigation and the technical support incident will be closed. diff --git a/power-platform/admin/sync-logic.md b/power-platform/admin/sync-logic.md index 420755342c..0a937f4b60 100644 --- a/power-platform/admin/sync-logic.md +++ b/power-platform/admin/sync-logic.md @@ -5,7 +5,7 @@ author: danamartens ms.service: power-platform ms.component: pa-admin ms.topic: conceptual -ms.date: 07/18/2023 +ms.date: 06/19/2024 ms.subservice: admin ms.author: dmartens ms.reviewer: sericks @@ -63,7 +63,7 @@ How appointments sync between Dynamics 365 and Exchange depends on the sync dire ### Appointment organizer -The appointment organizer is a key field for appointment synchronization. It drives different synchronization behaviors. For example, only the Dynaamics 365 appointment organizer can synchronize and distribute appointments from Dynamics 365 to Exchange attendees. When you create appointments using customizations such as Power Automate or custom code, make sure the organizer is specified correctly. The organizer field isn't exposed on the appointment form by default. You can add it to forms, views, or advanced find queries, as needed, to confirm the value is present and correct. +The appointment organizer is a key field for appointment synchronization. It drives different synchronization behaviors. For example, only the Dynamics 365 appointment organizer can synchronize and distribute appointments from Dynamics 365 to Exchange attendees. When you create appointments using customizations such as Power Automate or custom code, make sure the organizer is specified correctly. The organizer field isn't exposed on the appointment form by default. You can add it to forms, views, or advanced find queries, as needed, to confirm the value is present and correct. If an appointment organizer is changed in Dynamics 365 after it has been synchronized to Exchange, this may cause the original organizer to issue a cancellation. This can happen because the appointment no longer meets the conditions of the user’s sync filters. Additionally, the new organizer may synchronize the appointment as a new meeting in Exchange. The behavior of sending a cancellation from the previous organizer can be modified using the [OrgDBOrgSetting](https://support.microsoft.com/en-us/topic/orgdborgsettings-tool-for-microsoft-dynamics-crm-20a10f46-2a24-a156-7144-365d49b842ba) named DistinctPhysicalAndLogicalDeletesForExchangeSync. @@ -121,7 +121,7 @@ If the organizer has deleted past instances of the series, then Dynamics 365 see - **Mapping:** Meetings in Exchange sync to Dynamics 365 as appointments. Recurring meetings sync to Dynamics 365 as a recurring appointment primary and its instances. If individual instances of a recurring meeting are modified in Exchange, they sync to Dynamics 365 as exception appointment records. -- **Appointment status and Free/Busy state:** If the appointment state in Exchange is **Free**, the appointment state syncs to Dynamics 365 as **Free**. If the state is **Completed** or **Canceled** in Dynamics 365, the appointment status in Dynamics 365 is set to **Completed**. If the state is **Open** in Dynamics 365, the appointment status is set to **Free**. Working elsewhere, Free/Busy status syncs to Dynamics 365 as state **Open** and status **Free**. +- **Appointment status and Free/Busy state:** If the appointment state in Exchange is **Free**, the appointment state syncs to Dynamics 365 as **Free**. If the state is **Completed** or **Canceled** in Dynamics 365, the appointment status in Dynamics 365 is set to **Completed**. If the state is **Open** in Dynamics 365, the appointment status is set to **Free**. If the Exchange appointment's **Free/Busy** status is set to **Working elsewhere**, the Dynamics 365 appointment is set to the **Open** state and the status is **Free**. - **Appointments with Completed or Canceled state in Dynamics 365:** If the appointment state in Dynamics 365 is **Completed** or **Canceled**, any changes to the meeting in Exchange will not sync to Dynamics 365. diff --git a/power-platform/admin/system-settings-dialog-box-formats-tab.md b/power-platform/admin/system-settings-dialog-box-formats-tab.md index 6b17cb1a21..46d8ee49db 100644 --- a/power-platform/admin/system-settings-dialog-box-formats-tab.md +++ b/power-platform/admin/system-settings-dialog-box-formats-tab.md @@ -17,7 +17,7 @@ You can control how customer engagement apps (Dynamics 365 Sales, Dynamics 365 C -## Open the Formats System Settings dialog box (it it isn't already open) +## Open the Formats System Settings dialog box (it isn't already open) 1. [!INCLUDE[proc_permissions_system_admin_and_customizer](../includes/proc-permissions-system-admin-and-customizer.md)] diff --git a/power-platform/admin/trial-environments.md b/power-platform/admin/trial-environments.md index 7a2010ce56..f78e7f1a07 100644 --- a/power-platform/admin/trial-environments.md +++ b/power-platform/admin/trial-environments.md @@ -155,7 +155,7 @@ Your trial will be extended 30 days from the original expiration date. ## Extend a trial (subscription-based) environment -The expiration of subscription-based trial (also know as an admin trial) environments is tied to the expiration of the subscription. Therefore, subscription-based trial environments cannot be independently extended. There are limited options for extending admin trial subscriptions which affects extending the expiration of any associated trial environments. +The expiration of subscription-based trial (also known as an admin trial) environments is tied to the expiration of the subscription. Therefore, subscription-based trial environments cannot be independently extended. There are limited options for extending admin trial subscriptions which affects extending the expiration of any associated trial environments. **To extend a subscription-based (admin) trial:** diff --git a/power-platform/admin/troubleshoot-missing-environments.md b/power-platform/admin/troubleshoot-missing-environments.md index 050e776f7a..dbf45d3aa0 100644 --- a/power-platform/admin/troubleshoot-missing-environments.md +++ b/power-platform/admin/troubleshoot-missing-environments.md @@ -65,7 +65,7 @@ If the environment hasn't been deleted and still doesn’t show up in the admin The most common reason for environments to not show up in the list is a missing [role assignment](assign-security-roles.md). Compare the roles assigned to the user with the requirements in the [Requirements table](#requirements-for-access-by-product-experience) above. -In Dataverse environments, the role may be assigned directly to the user or indirectly via an assignment of the role to an [Microsoft Entra group team](manage-teams.md). +In Dataverse environments, the role may be assigned directly to the user or indirectly via an assignment of the role to a [Microsoft Entra group team](manage-teams.md). > [!NOTE] > Role assignments made via Dataverse owner teams will not cause an environment to be included in the environment list. Do not attempt to use owner teams for this purpose. diff --git a/power-platform/admin/troubleshooting-monitoring-server-side-synchronization.md b/power-platform/admin/troubleshooting-monitoring-server-side-synchronization.md index d09a130299..6df6848fa5 100644 --- a/power-platform/admin/troubleshooting-monitoring-server-side-synchronization.md +++ b/power-platform/admin/troubleshooting-monitoring-server-side-synchronization.md @@ -30,7 +30,7 @@ The **Sync Error** column contains information about why the item didn't synchro Selecting the link directs you to a **Learn** article for the error, if one exists. -The data for the dashboard is stored in the ExchangeSyncIdMapping table and is retained by the system for up to three days after the failure occured. This value can be modified by changing the ExchangeSyncIdMappingPersistenceTimeInDays OrgDbOrgSetting. +The data for the dashboard is stored in the ExchangeSyncIdMapping table and is retained by the system for up to three days after the failure occued. This value can be modified by changing the ExchangeSyncIdMappingPersistenceTimeInDays OrgDbOrgSetting. ## Known Issues: diff --git a/power-platform/admin/troubleshooting-user-needs-read-write-access-organization.md b/power-platform/admin/troubleshooting-user-needs-read-write-access-organization.md index 5f6104e20b..d0f02dc9c2 100644 --- a/power-platform/admin/troubleshooting-user-needs-read-write-access-organization.md +++ b/power-platform/admin/troubleshooting-user-needs-read-write-access-organization.md @@ -71,13 +71,13 @@ See [How access to a record is determined](how-record-access-determined.md). ### Troubleshoot license and membership issues 1. Verify if a license has been assigned to the user and assign one if not already. See: [Add a license to a user account](assign-licenses.md). -2. Once a license is assigned, it may take some time for the license change to sync to the environment. To trigger a sync for this user, the system administrator for the environment can readd the user to the environment. See: [Add users to an environment that has a Dataverse database](add-users-to-environment.md#add-users-to-an-environment-that-has-a-dataverse-database). +2. Once a license is assigned, it may take some time for the license change to sync to the environment. To trigger a sync for this user, the system administrator for the environment can read the user to the environment. See: [Add users to an environment that has a Dataverse database](add-users-to-environment.md#add-users-to-an-environment-that-has-a-dataverse-database). ### Troubleshoot access issues 1. As a system administrator of the environment, verify that the environment is associated with any Microsoft Entra group. See: [Associate a security group with an environment](control-user-access.md#associate-a-security-group-with-an-environment). 2. Ensure the user with the access issue is a member of the group associated with the environment. See: [Create a security group and add members to the security group](control-user-access.md#create-a-security-group-and-add-members-to-the-security-group). -3. Once user membership in the environment’s group is updated, it may take some time for the change to sync to the environment. To trigger a sync for this user, the system administrator for the environment can readd the user to the environment. See: [Add users to an environment that has a Dataverse database](add-users-to-environment.md#add-users-to-an-environment-that-has-a-dataverse-database). +3. Once user membership in the environment’s group is updated, it may take some time for the change to sync to the environment. To trigger a sync for this user, the system administrator for the environment can read the user to the environment. See: [Add users to an environment that has a Dataverse database](add-users-to-environment.md#add-users-to-an-environment-that-has-a-dataverse-database). ### Troubleshoot permission issues diff --git a/power-platform/admin/try-powerapps-dynamics-365.md b/power-platform/admin/try-powerapps-dynamics-365.md index eaf0ddd043..5355b0150d 100644 --- a/power-platform/admin/try-powerapps-dynamics-365.md +++ b/power-platform/admin/try-powerapps-dynamics-365.md @@ -20,7 +20,7 @@ You can explore all Power Platform apps for free by signing up for trial license |Microsoft Copilot Studio | [Sign up for a Microsoft Copilot Studio trial](/microsoft-copilot-studio/sign-up-individual) | > [!NOTE] -> You can sign up for for a 30-day free trial of customer engagement apps (such as Dynamics 365 Sales, Dynamics 365 Customer Service) by visiting , and selecting the appropriate app. +> You can sign up for a 30-day free trial of customer engagement apps (such as Dynamics 365 Sales, Dynamics 365 Customer Service) by visiting , and selecting the appropriate app. > > For detailed information about signing up, purchasing or using individual customer engagement apps, see the respective app's documentation at [Dynamics 365 documentation](/dynamics365/). diff --git a/power-platform/admin/unified-experience/admin-trials.md b/power-platform/admin/unified-experience/admin-trials.md index 70770e560f..31f1fb5ed2 100644 --- a/power-platform/admin/unified-experience/admin-trials.md +++ b/power-platform/admin/unified-experience/admin-trials.md @@ -1,26 +1,23 @@ --- -title: "Unified admin trials (preview)" +title: "Unified admin trials" description: "Subscription-based trial environments for administrators of finance and operations apps." author: laneswenka ms.topic: conceptual -ms.date: 09/13/2023 +ms.date: 06/06/2024 ms.subservice: admin ms.author: laswenka ms.reviewer: sericks ---- -# Unified admin trials (preview) +--- -[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] +# Unified admin trials Administrators, partners, and ISVs historically have had to use cloud-hosted environments in Lifecycle Services to create demo or trial environments for finance and operations apps. This was to demonstrate the software capabilities and try out new features of the product on a low-cost basis. To improve this experience, Microsoft has made available free subscription-based trial environments for finance and operations apps, including Dynamics 365 Finance, Supply Chain Management, Project Operations, and Commerce apps. > [!IMPORTANT] -> - This is a preview feature. -> - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. -> - The trial environments don't support development with Visual Studio. For development, you'll need a developer-focused sandbox environment. More information: [Install and configure development tools](/power-platform/developer/unified-experience/finance-operations-install-config-tools). +> The trial environments don't support development with Visual Studio. For development, you need a developer-focused sandbox environment. More information: [Install and configure development tools](/power-platform/developer/unified-experience/finance-operations-install-config-tools). ## Acquire a free subscription-based trial license diff --git a/power-platform/admin/unified-experience/finance-operations-apps-overview.md b/power-platform/admin/unified-experience/finance-operations-apps-overview.md index 5a74a0eba3..0b46d16c70 100644 --- a/power-platform/admin/unified-experience/finance-operations-apps-overview.md +++ b/power-platform/admin/unified-experience/finance-operations-apps-overview.md @@ -1,50 +1,46 @@ --- -title: "Unified admin experience for finance and operations apps (preview)" -description: "Overview of unified admin experiences for finance and operations apps customers in the Power Platform admin center." +title: Overview of unified admin experience for finance and operations apps +description: Overview of unified admin experiences for finance and operations apps customers in the Power Platform admin center. author: laneswenka ms.topic: overview -ms.date: 2/26/2024 +ms.date: 06/06/2024 ms.subservice: admin ms.author: laswenka ms.reviewer: sericks ---- -# Unified admin experience for finance and operations apps (preview) +--- -[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] +# Overview of unified admin experience for finance and operations apps Users of finance and operations apps can now administer their environments, policies, licensing, and capacity in the [Power Platform admin center](https://admin.powerplatform.microsoft.com). -As part of the unification of admin experiences of finance and operations apps within Power Platform, the environment for finance and operations apps is now an application within Power Platform. Therefore, multiple Dynamics 365 applications, such as Sales, Marketing, finance and operations, and apps, flows, and websites in Power Platform can be installed and hosted in the same Power Platform environment [with a Dataverse database](/power-platform/admin/create-environment#create-an-environment-with-a-database). This unification provides a consistent and single set of lifecycle operations that an admin can perform across all artifacts. +As part of the unification of admin experiences of finance and operations apps within Power Platform, the environment for finance and operations apps is now an application within Power Platform. In this new experience, multiple Dynamics 365 applications, such as Sales, Marketing, and finance and operations apps, and also low-code apps, flows, and websites can be installed and hosted in the same Power Platform environment [with a Dataverse database](/power-platform/admin/create-environment#create-an-environment-with-a-database). This unification provides a consistent and single set of lifecycle operations that an admin can perform across all artifacts in a particular environment. :::image type="content" source="media/one-admin-journey.png" alt-text="Screenshot that shows the unified admin experience for finance and operations apps."::: -> [!IMPORTANT] -> -> - This is a preview feature. -> - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. - -This article gives an overview to finance and operations apps administrators who are new to the Power Platform admin center. Learn some key differences between your prior admin center called Lifecycle Services and the new experience. You can also browse more resources and articles that provide detailed information for common tasks. +This article gives an overview to finance and operations apps administrators who are new to the Power Platform admin center. Learn some key differences between your prior admin center called Microsoft Dynamics Lifecycle Services and the new experience. You can also browse more resources and articles that provide detailed information for common tasks. -To learn more about the admin unification journey, watch this video on the Microsoft Dynamics 365 Community channel on YouTube: [Video: Unified admin experience for finance and operations apps](https://www.youtube.com/embed/VPQSmtgzfjM). +To learn more about the admin unification journey, see the [Power Platform admin center integration with Lifecyle Services (LCS) TechTalk](https://www.youtube.com/watch?v=HmJIuHhx3Hg). ## How do finance and operations apps surface in the Power Platform admin center? -There are no new environment types in the Power Platform admin center. We integrated the finance and operations apps into the Power Platform fabric. +Finance and operations apps now have the same behavior that other Dynamics 365 apps have within the Power Platform admin center. The apps are available to licensed customers both during new environment creation and when they are installed in an existing environment. -You can deploy the finance and operations apps within the Power Platform admin center in one of two ways. +You can deploy finance and operations apps within the Power Platform admin center in one of the following ways. ### Option A: Create a new environment through templates -When you create a new environment in the Power Platform admin center, you can add a Dataverse database and enable Dynamics 365 apps. You see a list of environment app templates that becomes available under **Automatically deploy these apps**. This list is a group of applications preinstalled on a Dataverse database. +A template is simply a bundle of Microsoft-published applications that are pre-installed in a Dataverse-based Power Platform environment. Templates help increase productivity, because you can quickly deploy an environment with a known configuration of apps without having to manually install each app in the correct sequence. When you use a template, you always get the very latest version that is available for each app at that moment. + +When you create a new environment in the Power Platform admin center, you can add a Dataverse data store and select **Enable Dynamics 365 apps**. A list of environment templates then becomes available under **Automatically deploy these apps**. :::image type="content" source="media/new-environment-template.png" alt-text="Environment templates"::: -This list is dynamic, so you only see references to **Finance**, **Supply Chain Management**, **Commerce**, **Project Operations**, and other finance and operations apps based on the license of the admin creating the environment. For step-by-step instructions, see [Tutorial: Provision a new environment with an ERP-based template](./tutorial-deploy-new-environment-with-ERP-template.md). +This list is dynamic, so you only see references to **Finance**, **Supply Chain Management**, **Commerce**, **Project Operations**, and other finance and operations apps, based on the licenses assigned to the admin creating the environment. For step-by-step instructions, see [Tutorial: Provision a new environment with an ERP-based template](./tutorial-deploy-new-environment-with-ERP-template.md). ### Option B: Install the provisioning app on an existing environment -You can install finance and operations apps on an existing Power Platform environment with a Dataverse database. Select an environment, navigate to the **Resources** > **Dynamics 365 apps** page, and select the **Dynamics 365 Finance and Operations Provisioning App**. +If you already have an environment that should function with finance and operations apps, you can simply install it instead of creating a separate environment that requires a complex integration. The environment that you use must support Dynamics 365 apps. As part of the installation process, you can select any of the supported versions of finance and operations apps. This flexibility is helpful if you want to use a version that isn't the latest generally available version. :::image type="content" source="media/install-provisioning-app.png" alt-text="Install provisioning app"::: @@ -61,7 +57,7 @@ With either option, your environment has two runtime URLs: When you purchase a license for any finance and operations app, such as Dynamics 365 Finance or Dynamics 365 Supply Chain Management, your tenant is entitled to 60 GB of operations database capacity and an additional 10 GB of Dataverse database capacity. With each user license, you receive an incremental amount of both operations and Dataverse database capacity. -:::image type="content" source="media/PPI-Capacity.png" alt-text="Capacity view in Power Platform admin center"::: +:::image type="content" source="media/PPI-Capacity.png" alt-text="Capacity view in the Power Platform admin center"::: A license is required to create or install any finance and operations app in the Power Platform admin center. You must also have at least 1 GB available of both operations and Dataverse database capacity to provision one more environment. There are no strict limits on how many environments you can create. Lifecycle Services is different, where each sandbox and production environment slot has a predetermined purchase. @@ -77,7 +73,7 @@ With the unified experience, customers no longer deploy all-in-one VMs. Instead, 1. Build new solutions that span the entire platform set of capabilities. 1. Deploy solutions to a sandbox environment provisioned through the Power Platform admin center. -## Terminology differences between Lifecycle Services and Power Platform admin center +## Terminology differences between Lifecycle Services and the Power Platform admin center The following table is a reference for each operation type and explains any nuances between the two environment lifecycle operations. @@ -95,27 +91,22 @@ The following table is a reference for each operation type and explains any nuan These continually updated scenario tutorials give a walkthrough for administrators in new experiences. -- [Tutorial: Provision a new environment with an ERP-based template (preview)](./tutorial-deploy-new-environment-with-ERP-template.md) -- [Tutorial: Copy a Lifecycle Services environment to a unified environment (preview)](./tutorial-copy-lifecycle-services-environment-unified-environment.md) -- [Unified admin trials (preview)](admin-trials.md) +- [Tutorial: Provision a new environment with an ERP-based template](./tutorial-deploy-new-environment-with-ERP-template.md) +- [Tutorial: Copy a Lifecycle Services environment to a unified environment](./tutorial-copy-lifecycle-services-environment-unified-environment.md) +- [Unified admin trials](admin-trials.md) - [Manage storage and capacity](../finance-operations-storage-capacity.md) -### Known limitations during preview - -As part of the preview, there are a few limitations soon to be removed, so check back often to determine their resolution. +### Known limitations -- The environment templates don't include Project Operations. - The environment name can't exceed 20 characters—a limitation on the finance and operations runtime. -### Frequently asked questions for the public preview - -We continue to publish common questions and resolve open items before making the experience generally available (GA). +### Frequently asked questions #### I don't know what licenses I have assigned You can view the licenses assigned to you at [My Account - Subscriptions](https://portal.office.com/account/?ref=MeControl#subscriptions). -View the templates that allow you to deploy: [Tutorial: Provision a new environment with an ERP-based template (preview)](tutorial-deploy-new-environment-with-ERP-template.md#knowing-which-template-to-provision). +View the templates that allow you to deploy: [Tutorial: Provision a new environment with an ERP-based template](tutorial-deploy-new-environment-with-ERP-template.md#knowing-which-template-to-provision). #### I don't have any available capacity @@ -134,7 +125,7 @@ Direct SQL access isn't available at this time. However, we're working on a just ### Related articles -- [Unified developer experience for finance and operations apps (preview)](../../developer/unified-experience/finance-operations-dev-overview.md) +- [Unified developer experience for finance and operations apps](../../developer/unified-experience/finance-operations-dev-overview.md) - [Finance and operations apps documentation](/dynamics365/fin-ops-core/fin-ops/) - [Create and manage environments in the Power Platform admin center](/power-platform/admin/create-environment) - [Manage Dynamics 365 apps](/power-platform/admin/manage-apps) diff --git a/power-platform/admin/unified-experience/media/transactionless-copy-process.png b/power-platform/admin/unified-experience/media/transactionless-copy-process.png new file mode 100644 index 0000000000..df5011c415 Binary files /dev/null and b/power-platform/admin/unified-experience/media/transactionless-copy-process.png differ diff --git a/power-platform/admin/unified-experience/media/tutorial-install-app-platformTools.png b/power-platform/admin/unified-experience/media/tutorial-install-app-platformTools.png new file mode 100644 index 0000000000..781ca9f7f3 Binary files /dev/null and b/power-platform/admin/unified-experience/media/tutorial-install-app-platformTools.png differ diff --git a/power-platform/admin/unified-experience/media/tutorial-install-app2.png b/power-platform/admin/unified-experience/media/tutorial-install-app2.png index 0bd790db28..b89e8a935e 100644 Binary files a/power-platform/admin/unified-experience/media/tutorial-install-app2.png and b/power-platform/admin/unified-experience/media/tutorial-install-app2.png differ diff --git a/power-platform/admin/unified-experience/partners-systems-implementers.md b/power-platform/admin/unified-experience/partners-systems-implementers.md new file mode 100644 index 0000000000..f66868967a --- /dev/null +++ b/power-platform/admin/unified-experience/partners-systems-implementers.md @@ -0,0 +1,107 @@ +--- +title: Administration for partners and systems implementers +description: This article provides an overview and explains key differences between the Power Platform admin center and Lifecycle Services. +author: laneswenka +ms.reviewer: sericks +ms.component: pa-admin +ms.topic: reference +ms.date: 06/06/2024 +ms.subservice: admin +ms.author: laswenka +search.audienceType: + - admin +--- + +# Administration for partners and systems implementers + +Microsoft partners and systems implementers play a crucial role in deploying, managing, and optimizing solutions that are built for finance and operations apps. The transition of administrative capabilities to the Power Platform admin center brings significant changes and enhancements in both technology and processes. This article provides an overview of the improvements. It focuses on the key differences in terminology and processes between the Power Platform admin center and the previous admin center, Microsoft Dynamics Lifecycle Services. + +## A single, unified admin center + +The Power Platform admin center is designed to provide a unified, streamlined experience for managing all components within the Power Platform ecosystem. For finance and operations partners, this transition brings new administrative capabilities and processes that are more closely aligned with the broader Power Platform and Microsoft 365 environments. + +### Key features of the Power Platform admin center + +**Unified environment management** + +- Manage environments for all Dynamics 365 workloads and low-code resources in a single place by using a single set of APIs and a single user interface (UI). +- In a single action, perform lifecycle operations, such as copy, backup, and restore, that work on the whole environment, including finance and operations apps components. + +**User and role management** + +- Assign and manage user roles and permissions across different environments. +- All users who have the System Administrator role in Dataverse have the same role in finance and operations apps experiences. (This feature is planned for a future release.) + +**License and capacity reporting** + +- Review capacity consumption across various categories, such as Dataverse database and Operations database. +- Slice consumption by environment or geography. View which tables or files are consuming most of your entitlements. +- Manage add-on capabilities such as AI Builder credits and per-app passes. + +**Compliance and policy** + +- Implement data policies to control connector usage by low-code makers and reduce operational risk. +- Use advanced security features such as customer-managed keys for data encryption, tenant isolation, and virtual network (VNet) firewalls for your Power Platform workloads. + +### Differences in terminology and process + +As part of the transition, partners and customers can achieve similar results through new approaches and by using new terminology. + +#### Terminology changes + +| Lifecycle Services terminology | Power Platform admin center terminology | +|--------------------------------|-----------------------------------------| +| Project | Not applicable | +| Finance and operations environment | Finance and operations app | +| Project Owner role | Power Platform administrator role in Microsoft Entra | +| Asset library | Not applicable | +| Software deployable package | Unified package | +| Database refresh | Environment copy | +| Maintenance mode | Admin mode | + +#### Process changes + +- Environment creation + + - **Lifecycle Services**: Environments are deployed through Lifecycle Services and correspond to exactly one app: a finance and operations app. + - **Power Platform admin center**: Environments are created by using templates that contain Dataverse as a baseline. Many Dynamics 365 apps and low-code apps are included. Every environment can contain more than one kind of app. + +- Customization deployment + + - **Lifecycle Services**: Software deployable packages are built and then uploaded to the Asset library. From there, they can be installed in a sandbox environment. Later, a snapshot of the sandbox is promoted to become the compute for production environments. There's no automation for the production deployment. It must be done in the Lifecycle Services UI. + - **Power Platform admin center**: Unified packages are created by using Power Platform CLI or Azure DevOps tasks that contain both Dataverse solutions and X++ modules. These packages are hosted offline in source control as a build artifact or in your local storage. Power Platform CLI or Azure DevOps tasks are used to install them in any target, regardless of whether that target is a sandbox environment or a production environment. Full automation is possible through service principal authentication. + +- User management + + - **Lifecycle Services**: Project users can manage data in Lifecycle Services and can also manage the environment lifecycle. Users can be added to a finance and operations apps environment only from inside the environment itself. + - **Power Platform admin center**: Service-level admins and environment admins can manage resources in the Power Platform admin center. They can also add or remove users directly from the Power Platform admin center, without having to access the environment's Dataverse instance or apps. + +- Environment health monitoring + + - **Lifecycle Services**: Monitoring tools are available for each sandbox and production environment. Features such as compute load, slow loading forms, and database deadlocks are available, but there's a delay of at least 15 minutes. + - **Power Platform admin center**: Application Insights is the preferred tool for application health and proactive monitoring. This tool is available in near-real time. + +- Support + + - **Lifecycle Services**: Support requests are created from within a specific project in Lifecycle Services. You can create tickets only for environments in that specific project. + - **Power Platform admin center**: Support tickets are created in the Power Platform admin center, for any environment in the tenant that you have access to manage. + +### Granular delegated administrative privileges + +Granular delegated administrative privileges (GDAP) give partners more precise control over the administrative privileges that they have when they manage their customers' environments. Unlike traditional delegated administrative privileges (DAP), which give broad access, GDAP allows for more specific permissions. Therefore, it enhances security and compliance. + +Key aspects of GDAP include: + +- **Granular permissions**: Partners can request specific administrative permissions that are tailored to their role and responsibilities. In this way, GDAP helps reduce the risk that is associated with broad administrative access. +- **Enhanced security**: Access is limited to necessary resources and actions. In this way, GDAP enhances the security posture of both partners and customers. +- **Compliance**: Access is granted based on the principle of least privilege. In this way, GDAP is aligned with regulatory and compliance requirements. + +#### Request a GDAP relationship with customers + +Partners can request a GDAP relationship with their customers through Partner Center. The process involves three steps: + +1. **Initiate a request**: Partners submit a request, where they specify the required permissions and the duration of access. +2. **Receive customer approval**: Customers review the request and approve it to grant the specified permissions. +3. **Manage access**: Partners manage their access through Partner Center and adjust permissions as needed. + +For more detailed information about how to set up and manage GDAP, review the [Granular Delegated Admin Privileges](/partner-center/gdap-introduction) documentation. diff --git a/power-platform/admin/unified-experience/tutorial-copy-lifecycle-services-environment-unified-environment.md b/power-platform/admin/unified-experience/tutorial-copy-lifecycle-services-environment-unified-environment.md index 223c322158..c94fa260b4 100644 --- a/power-platform/admin/unified-experience/tutorial-copy-lifecycle-services-environment-unified-environment.md +++ b/power-platform/admin/unified-experience/tutorial-copy-lifecycle-services-environment-unified-environment.md @@ -1,38 +1,31 @@ --- -title: "Tutorial: Copy a Lifecycle Services environment to a unified environment (preview) | Microsoft Docs" -description: This tutorial will demonstrate how to perform environment copy with respect to unified environments. +title: "Tutorial: Copy a Lifecycle Services environment to a unified environment | Microsoft Docs" +description: This tutorial demonstrates how to perform environment copy with respect to unified environments. author: laneswenka ms.reviewer: sericks ms.component: pa-admin ms.topic: reference -ms.date: 09/13/2023 +ms.date: 06/06/2024 ms.subservice: admin ms.author: laswenka search.audienceType: - admin --- -# Tutorial: Copy a Lifecycle Services environment to a unified environment (preview) +# Tutorial: Copy a Lifecycle Services environment to a unified environment -[!INCLUDE [preview-banner](~/../shared-content/shared/preview-includes/preview-banner.md)] +Finance and operations apps have been reimagined as an application hosted by Microsoft Dataverse. A common function for administrators of finance and operations apps is to copy environments. Historically, this has been done in Microsoft Dynamics Lifecycle Services, but now everything can be managed in the Power Platform admin center. -Finance and operations apps have been reimagined as an application hosted by Microsoft Dataverse. A common function for administrators of finance and operations apps is to copy environments. Historically, this has been done in Microsoft Dynamics 365 Lifecycle Services, but now everything can be managed in the Power Platform admin center. - -In this tutorial, you'll learn how to: +In this tutorial, learn how to: - Prepare the source environment - Copy the environment to the target As an example of this scenario, a customer who operates their finance and operations apps environments through the Lifecycle Services site today would like to copy their production environment data into their new, unified, developer environment in the Power Platform admin center. -> [!IMPORTANT] -> -> - This is a preview feature. -> - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. - ## Before you begin -The target environment in this tutorial is always a unified environment that contains finance and operations apps hosted by Microsoft Dataverse. To learn how to deploy one of these environments, see [Tutorial: Provision a new environment with an ERP-based template (preview)](./tutorial-deploy-new-environment-with-ERP-template.md). +The target environment in this tutorial is always a unified environment that contains finance and operations apps hosted by Microsoft Dataverse. To learn how to deploy one of these environments, see [Tutorial: Provision a new environment with an ERP-based template ](./tutorial-deploy-new-environment-with-ERP-template.md). The source environment in this tutorial is always a finance and operations apps environment in Lifecycle Services that was set up through the [Power Platform integration](/dynamics365/fin-ops-core/dev-itpro/power-platform/enable-power-platform-integration). @@ -40,12 +33,12 @@ Ensure that both the source and target environments are provisioned in the same ## Prepare the source environment -Before the source environment can be copied, you must perform several steps to ensure that data and code copy correctly to the target environment. Without performing these steps, code or data loss can occur. +Before the source environment can be copied, you must perform several steps to ensure that data and code are copied correctly to the target environment. If you don't perform these steps, code or data loss can occur. ### Install or update the latest Dynamics 365 Finance and Operations Platform Tools app > [!NOTE] -> This application is necessary in the source environment because it helps to store the X++ code in Microsoft Dataverse. This allows the code to copy to the target environment alongside the data. Without this, data loss can occur. +> This application is necessary in the source environment because it helps to store the X++ code in Microsoft Dataverse. This allows the code to copy to the target environment alongside the data. Without this, data loss can occur. 1. In the Power Platform admin center, select **Environments**. 2. Select the source environment from which you want to start the copy. From the **Resources** menu, select **Dynamics 365 apps**. @@ -58,7 +51,7 @@ If you see **Update Available** in the **Status** for Dynamics 365 Finance and O :::image type="content" source="media/copy-to-ode-platform-tools.png" alt-text="Dynamics 365 Finance and Operations platform tools showing an Update available status."::: -If Dynamics 365 Finance and Operations Platform Tools is not listed, select **Install App** to add this app to your organization. +If Dynamics 365 Finance and Operations Platform Tools isn't listed, select **Install App** to add this app to your organization. From the list on the right side, find and select the **Dynamics 365 Finance and Operations Platform Tools** app, select **Install**, and follow the instructions to install. @@ -80,25 +73,25 @@ This deploy command makes no changes to the finance and operations environment h 1. Install [PAC CLI](https://aka.ms/PowerAppsCLI). 2. [Authenticate and connect to source Dataverse](../../developer/cli/reference/auth.md#pac-auth-create). -3. Run the following: +3. Run the following command: -``` -pac auth list -pac auth select --index 1 -pac package deploy --logConsole --package \.dll -``` + ``` + pac auth list + pac auth select --index 1 + pac package deploy --logConsole --package \.dll + ``` # [Power Platform admin center](#tab/PPAC) ## Begin the copy operation -In the Power Platform admin center, go to the source environment you want to copy. From there, select the **Copy** button in the top action pane. In the slider window that appears, choose to copy **Everything**, which incorporates both the Dataverse and X++ source code, as well as the data from the source. Select the **Target** environment to be the unified, developer environment. +In the Power Platform admin center, go to the source environment you want to copy. From there, select the **Copy** button in the top action pane. In the slider window that appears, choose to copy **Everything**, which incorporates both the Dataverse and X++ source code, and the data from the source. Select the **Target** environment to be the unified, developer environment. # [PowerShell](#tab/PowerShell) ## Copy via PowerShell -Load the PowerShell console and execute the following commands to generate the environment. For more information on how to install and use the PowerShell module, see [Get started with PowerShell for Power Platform Administrators](../powershell-getting-started.md). +Load the PowerShell console and execute the following commands to copy the environment. For more information on how to install and use the PowerShell module, see [Get started with PowerShell for Power Platform Administrators](../powershell-getting-started.md). ```PowerShell #Install the module @@ -124,4 +117,4 @@ Add-PowerAppsAccount -Endpoint prod -TenantID $TenantId -ApplicationId $SPNId -C Copy-PowerAppEnvironment -EnvironmentName $TargetEnvironmentID -CopyToRequestDefinition $copyToRequest ``` ---- \ No newline at end of file +--- diff --git a/power-platform/admin/unified-experience/tutorial-deploy-new-environment-with-ERP-template.md b/power-platform/admin/unified-experience/tutorial-deploy-new-environment-with-ERP-template.md index ddad531bc7..7adab03322 100644 --- a/power-platform/admin/unified-experience/tutorial-deploy-new-environment-with-ERP-template.md +++ b/power-platform/admin/unified-experience/tutorial-deploy-new-environment-with-ERP-template.md @@ -1,22 +1,20 @@ --- -title: "Tutorial: Provision a new environment with an ERP-based template (preview) | Microsoft Docs" +title: "Tutorial: Provision a new environment with an ERP-based template | Microsoft Docs" description: This tutorial demonstrates how to use the Power Platform to Provision an environment with finance and operations apps installed. author: laneswenka ms.reviewer: sericks ms.component: pa-admin ms.topic: reference -ms.date: 09/29/2023 +ms.date: 06/06/2024 ms.subservice: admin ms.author: laswenka search.audienceType: - admin --- -# Tutorial: Provision a new environment with an ERP-based template (preview) +# Tutorial: Provision a new environment with an ERP-based template -[!INCLUDE [preview-banner](~/../shared-content/shared/preview-includes/preview-banner.md)] - -Finance and operations apps have been reimagined as an application hosted by Microsoft Dataverse. No longer do customers need to provision their enterprise resource planning (ERP) system separately from their low-code and other Dynamics 365 platform applications. Additionally, most administrative actions in Power Platform are available through the admin center and an API-based experience. +Finance and operations apps have been reimagined as an application hosted by Microsoft Dataverse. No longer do customers need to provision their enterprise resource planning (ERP) system separately from their low-code and other Dynamics 365 platform applications. Additionally, most administrative actions in Power Platform are available through the admin center and an API-based experience. In this tutorial, learn how to: @@ -24,38 +22,33 @@ In this tutorial, learn how to: - Provision a developer-focused sandbox using PowerShell to use with X++ code. - Delete an environment when no longer in use. -As an example of this scenario, a customer who operates their finance and operations apps environments in Microsoft Dynamics 365 Lifecycle Services can provision one of the newer, developer-focused sandboxes in the Power Platform admin center. - -> [!IMPORTANT] -> -> - This is a preview feature. -> - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. +As an example of this scenario, a customer who operates their finance and operations apps environments in Microsoft Dynamics Lifecycle Services can provision one of the newer, developer-focused sandboxes in the Power Platform admin center. ## Environment provisioning -The easiest way to get finance and operations apps up and running in Power Platform is to create a new environment using a template. A template is simply an efficiency in terms of creating a Dataverse-based Power Platform environment with several applications preinstalled. In this scenario, the finance and operations ERP application is installed automatically upon environment creation. +The easiest way to get finance and operations apps up and running in Power Platform is to create a new environment using a template. A template is simply an efficiency in terms of creating a Dataverse-based Power Platform environment with several applications preinstalled. In this scenario, the finance and operations ERP application is installed automatically upon environment creation. ### Before you begin -You can't provision finance and operations apps in Power Platform unless you have a license assigned that grants this permission. An example license is Dynamics 365 Finance or Dynamics 365 Supply Chain Management for customers, and Dynamics 365 Operations Application Partner Sandbox for partners and ISVs. This must be assigned by your license administrator to your user account in Microsoft Entra. You can review the licenses currently assigned to you in the Subscription table on the [MyAccount](https://portal.office.com/account/?ref=MeControl) page. +You can't provision finance and operations apps in Power Platform unless you have a license assigned that grants this permission. An example license is Dynamics 365 Finance or Dynamics 365 Supply Chain Management for customers, and Dynamics 365 Operations Application Partner Sandbox for partners and ISVs. This must be assigned by your license administrator to your user account in Microsoft Entra. You can review the licenses currently assigned to you in the Subscription table on the [MyAccount](https://portal.office.com/account/?ref=MeControl) page. -You also must have at least 1 gigabyte of available Operations and Dataverse database capacities. For more information, see [Manage storage and capacity](../finance-operations-storage-capacity.md). +You also must have at least 1 gigabyte of available Operations and Dataverse database capacities. For more information, see [Manage storage and capacity](../finance-operations-storage-capacity.md). ### Knowing which template to provision -All Dynamics 365 environment templates are associated with their related full user licenses. This means that the admin user in the Power Platform admin center must have a full license assigned to them to be able to create one of these environments, and the same holds true when using tools like PowerShell as well. Below is a table which shows the mapping between various finance and operations apps licenses and their template details. +All Dynamics 365 environment templates are associated with their related full user licenses. This means that the admin user in the Power Platform admin center must have a full license assigned to them to be able to create one of these environments, and the same holds true when using tools like PowerShell as well. The following table shows the mapping between various finance and operations apps licenses and their template details. | License | Template name | Template ID | Comments | | ----------- | ----------- |----------- |----------- | | Dynamics 365 Finance| Finance (preview) | D365_FinOps_Finance | | | Dynamics 365 Supply Chain Management (preview) | Supply Chain Management (preview) | D365_FinOps_SCM | | -| Dynamics 365 Project Operations | Project Operations Integrated (preview) | D365_FinOps_ProjOps | This is not yet available in the public preview but will be soon. | -| Dynamics 365 Operations Application Partner Sandbox | Project Operations Integrated (preview) | D365_FinOps_ProjOps | This is not yet available in the public preview but will be soon. Partners may temporarily use the D365_FinOps_Finance template until this is resolved. | -| Dynamics 365 Commerce| Commerce (preview) | D365_FinOps_Commerce | This is not yet available in the public preview but will be soon. | +| Dynamics 365 Project Operations | Project Operations Integrated (preview) | D365_FinOps_ProjOps | | +| Dynamics 365 Operations Application Partner Sandbox | Project Operations Integrated (preview) | D365_FinOps_ProjOps | | +| Dynamics 365 Commerce| Commerce (preview) | D365_FinOps_Commerce | This template is available only for trials. | ### Known limitations -Be sure to check out the latest known limitations available in the overview article [Unified admin experience for finance and operations apps (preview)](finance-operations-apps-overview.md#known-limitations-during-preview). +Be sure to check out the latest known limitations available in the overview article [Unified admin experience for finance and operations apps](finance-operations-apps-overview.md#known-limitations). ## Step-by-step provisioning guide @@ -63,29 +56,18 @@ Be sure to check out the latest known limitations available in the overview arti ### Create an environment -> [!Note] -> During public preview, this will initially not be visible in the Power Platform admin center. Instead you may provision these new environments using PowerShell on the related tab on this page. However, this will eventually be visible when non-developer sandboxes are supported for finance and operations apps. - -1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com). -1. Select **Environments** in the navigation pane. The **Environments** page is displayed. -1. Select **New**. The **New environment** pane is displayed. - - :::image type="content" source="media/tutorial-new-environment1.png" alt-text="Click the New button to create a new environment."::: - -1. Enter a name for the environment. Environment names don't need to be unique in Power Platform, unlike in Lifecycle Services. -1. Choose your Provisionment region. -1. From the **Type** list, select **Sandbox**. -1. Enable the Dataverse data store option, and select **Next**. -1. On the next screen, enter the Dataverse-required fields. -1. Select **Enable Dynamics 365 apps** and choose the appropriate template for your license. +> [!IMPORTANT] +> You can't currently use the user interface (UI) to create new sandbox and production environments that have finance and operations apps. However, this capability is planned for a future release. - :::image type="content" source="media/new-environment-template.png" alt-text="Enable the Dynamics 365 apps and select the appropriate template for your license."::: +If you want to create a new environment where finance and operations apps are pre-installed, you can use the information on the "PowerShell" tab to complete this task in a single action. If you require the UI, follow the steps in [Tutorial: Install the Finance and Operations Provisioning App](./tutorial-install-finance-operations-provisioning-app.md). # [PowerShell](#tab/PowerShell) ### Create an environment -Load up your PowerShell console and execute the following commands to generate the environment. Note the variables so that you can change the input values as required. If you wish to use a service principal, please follow the instructions at [Creating a service principal application using PowerShell](../powershell-create-service-principal.md). +Open your PowerShell console application, and run the following commands to generate the environment. Note the variables, so that you can change the input values as required. If you want to use a service principal, follow the instructions in [Creating a service principal application using PowerShell](../powershell-create-service-principal.md). + +In the following script, the **DevToolsEnabled** parameter determines whether your sandbox environment is provisioned with support for X++ development, or whether it becomes a traditional sandbox environment for user acceptance testing (UAT) and training purposes. If you set the value to **true**, you can do development. If you set the value to **false** or omit the parameter, you receive a traditional sandbox environment that has finance and operations apps installed. ```powershell #Install the module @@ -114,24 +96,23 @@ New-AdminPowerAppEnvironment -DisplayName "MyUniqueNameHere" -EnvironmentSku San ``` --- -In the above example, we used the **Finance** environment template. See above in this article for a table reference of all templates available by license. Also note that your environment name must be **globally unique and less than 20 characters** because that derives the environment URL. We will be adding upfront validation in the future. +In the above example, we used the **Finance** environment template. See above in this article for a table reference of all templates available by license. Also note that your environment name must be **globally unique and less than 20 characters** because that derives the environment URL. There are plans to add upfront validation in the future. ## Delete the environment -In this step, delete the environment you previously created. Deleting an environment is an action commonly done by admins who want to reclaim capacity for other purposes. An environment can be deleted using the Power Platform admin center, or PowerShell as follows. +In this step, delete the environment you previously created. Deleting an environment is an action commonly done by admins who want to reclaim capacity for other purposes. An environment can be deleted using the Power Platform admin center, or PowerShell as follows. # [Power Platform admin center](#tab/PPAC) -Select a specific environment, and then select the **Delete** button in the action bar at the top of the page. - -Confirm that you want to delete the environment and proceed. This starts the deletion process and will eventually free up the Dataverse and Operations storage consumed by this environment for other needs. +Select a specific environment, and then select the **Delete** button in the action bar at the top of the page. +Confirm that you want to delete the environment and proceed. This operation starts the deletion process and frees up the Dataverse and Operations storage consumed by this environment for other needs. # [PowerShell](#tab/PowerShell) -Use the following script to delete the previously created environment. Set the **environmentID** appropriately. +Use the following script to delete the previously created environment. Set the **environmentID** appropriately. ```powershell #Remove the previously created environment by ID Remove-AdminPowerAppEnvironment -EnvironmentName [Guid] ``` ---- \ No newline at end of file +--- diff --git a/power-platform/admin/unified-experience/tutorial-install-finance-operations-provisioning-app.md b/power-platform/admin/unified-experience/tutorial-install-finance-operations-provisioning-app.md index e21bc0c59b..f3b8cd1bdd 100644 --- a/power-platform/admin/unified-experience/tutorial-install-finance-operations-provisioning-app.md +++ b/power-platform/admin/unified-experience/tutorial-install-finance-operations-provisioning-app.md @@ -1,87 +1,95 @@ --- -title: "Tutorial: Install the Finance and Operations Provisioning App (preview) | Microsoft Docs" -description: Learn how to install the Finance and Operations Provisioning App onto an existing Power Platform environment. +title: "Tutorial: Install the Finance and Operations Provisioning app | Microsoft Docs" +description: Learn how to install the Finance and Operations Provisioning app onto an existing Power Platform environment. author: laneswenka ms.reviewer: sericks ms.component: pa-admin ms.topic: reference -ms.date: 09/29/2023 +ms.date: 06/06/2024 ms.subservice: admin ms.author: laswenka search.audienceType: - admin --- -# Tutorial: Install the Finance and Operations Provisioning App (preview) - -[!INCLUDE [preview-banner](~/../shared-content/shared/preview-includes/preview-banner.md)] +# Tutorial: Install the Finance and Operations Provisioning app Finance and operations apps are reimagined as an application hosted by Microsoft Dataverse. Customers don't need to provision their enterprise resource planning (ERP) system separately from their low-code and other Dynamics 365 platform applications. Most administrative actions in Power Platform are available through the admin center and an API-based experience. -In this article, learn how to: +In this tutorial, learn how to: - Locate an existing environment in the Power Platform admin center with other Dynamics 365 apps installed. - Install the Finance and Operations Provisioning app to see finance and operations apps capabilities. -For example, a customer who already purchased other Dynamics 365 apps wants to add finance and operations apps capabilities to one of their existing environments. - -> [!IMPORTANT] -> -> - This is a preview feature. -> - Preview features aren't meant for production use and may have restricted functionality. These features are available before an official release so that customers can get early access and provide feedback. +For example, a customer who already purchased other Dynamics 365 apps wants to add finance and operations apps capabilities to one of their existing environments. ## Prerequisites - You must have a license to install finance and operations apps in Power Platform. - Example licenses: + Example licenses: - - Dynamics 365 Finance - - Dynamics 365 Supply Chain Management for customers - - Dynamics 365 Operations Application Partner Sandbox for partners and ISVs + - Dynamics 365 Finance + - Dynamics 365 Supply Chain Management for customers + - Dynamics 365 Operations Application Partner Sandbox for partners and ISVs - Your license administrator must assign the license to your user account in Microsoft Entra. You can review the licenses currently assigned to you from the [Subscriptions](https://portal.office.com/account/?ref=MeControl#subscriptions) page. - - Have at least 1 GB of available Operations and Dataverse database capacities. For more information, see [Manage storage and capacity](../finance-operations-storage-capacity.md). +- You must use an environment where the **Enable Dynamics 365 apps** option was turned on when the environment is created. This option is a prerequisite for all Dynamics 365 apps, including Sales, Customer Service, Field Service, and all finance and operations apps. -- You can only install finance and operations apps into a Power Platform environment created with Microsoft Dataverse. The Dataverse instance must have the **Enable Dynamics 365 apps** option enabled during creation. For more information on how to create a Dataverse instance, see [Create and manage environments in the Power Platform admin center](../create-environment.md). + > [!IMPORTANT] + > If you try to install without turning on the **Enable Dynamics 365 apps** option, you receive an error such as "Dynamics 365 Finance and Operations Provisioning App isn't supported on SchemaType: Standard." The schema isn't a visible property in the Power Platform admin center and can't be changed after the environment is created. You can try to install finance and operations apps in another environment, or you can [create an environment by using an ERP template](./tutorial-deploy-new-environment-with-ERP-template.md). -## Known limitations +- You must install the platform tools app before you install the provisioning app. Detailed steps are given in the [Install on an environment](#install-on-an-environment) section. -Limitations for an installation of the provisioning app: + > [!IMPORTANT] + > If you don't install the platform tools app first, you receive an error such as "Please install the Dynamics 365 Finance and Operations Platform Tools application before installing the Dynamics 365 Finance and Operations Provisioning app." You can install the missing app and then retry the installation of the provisioning app. -1. You must use an environment with the **Enable Dynamics 365 apps** enabled when the environment is created. This enabling is a prerequisite for all Dynamics 365 apps, including Sales, Customer Service, Field Service, and all finance and operations apps. - - > [!NOTE] - > If you try to install without enabling Dynamics 365 apps, you receive an error such as **Dynamics 365 Finance and Operations Provisioning App isn't supported on SchemaType: Standard**. The schema isn't a visible property in Power Platform admin center and can't be changed after the environment is created. You can try installing finance and operations apps in another environment, or [Create an environment with an ERP template](./tutorial-deploy-new-environment-with-ERP-template.md). +## Known limitations -2. You must first install the Platform tools app before installing the Provisioning app. The detailed steps are outlined in [Install on an environment](#install-on-an-environment). +Installation of the provisioning app has the following known limitations: - > [!NOTE] - > If you don't install the Provisioning app first, you get an error such as **Please install the Dynamics 365 Finance and Operations Platform Tools application before installing the Dynamics 365 Finance and Operations Provisioning app**. You can install the missing app, and then retry the installation of the Provisioning app. +- **Environment URL length**: The hostname of your Dataverse environment URL must be less than or equal to 19 characters in length. Otherwise, installation of the Finance and Operations Provisioning app fails. To bypass this limitation, edit the URL of your environment so that it's the required length. +- **Finance and operations URL missing**: After the installation is successful, the finance and operations URL might not be shown on the environment details page in the Power Platform admin center. To bypass this limitation, edit the environment, and change a field such as **Description** to a new value. This edit operation synchronizes the new URL value and shows it on the screen. ## Step-by-step installation guide ### Install on an environment 1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com). -1. Select **Environments** in the navigation pane. The **Environments** list page is displayed. -1. Select a given environment that meets the prerequisite criteria. -1. Select **Dynamics 365 apps** under the **Resources** card on the environment details page. +1. On the navigation pane, select **Environments**. The **Environments** list page is shown. +1. Select an environment that meets the prerequisite criteria. +1. On the environment details page, on the **Resources** card, select **Dynamics 365 apps**. +1. Select **Install app**. +1. Select **Dynamics 365 Finance and Operations Platform Tools**. This app provides platform support for installing ERP-based applications. It must be installed before you move on to the next step. If you have more than one license that provides access to this app, there might be multiple entries for the same app. In this case, select any entry that has a status of **Enabled**. Then select **Next**. + + :::image type="content" source="media/tutorial-install-app-platformTools.png" alt-text="Screenshot where an entry for Dynamics 365 Finance and Operations Platform Tools that has a status of Enabled is selected for installation."::: + +1. Agree to the terms and conditions, and then select **Install** to start the installation. Wait for the installation to be completed before you move on to the next step. When the installation is completed, the value in the **Status** column changes from **Installing** to **Installed**. 1. Select **Install app**. -1. Locate and install the **Dynamics 365 Finance and Operations Platform Tools** app. This application provides platform support for installing ERP-based applications. -1. Locate and install the **Dynamics 365 Finance and Operations Provisioning app**. This application provides the finance and operations apps capabilities for Dynamics 365 Finance, Supply Chain Management, Project Operations, Human Resources, and Commerce workloads. - :::image type="content" source="media/tutorial-install-app1.png" alt-text="A pop-up dialog is shown with the option to proceed to install the application or to cancel the action."::: -1. Select **OK** to go to the installation configuration page for the provisioning app. - :::image type="content" source="media/tutorial-install-app2.png" alt-text="A configuration page is shown with several check boxes for options to enable."::: +1. Select **Dynamics 365 Finance and Operations Provisioning App**. This app provides the finance and operations apps capabilities for Dynamics 365 Finance, Supply Chain Management, Project Operations, Human Resources, and Commerce workloads. If you have more than one license that provides access to this app, there might be multiple entries for the same app. In this case, select any entry that has a status of **Configured**. Then select **Next**. + + :::image type="content" source="media/tutorial-install-app1.png" alt-text="Screenshot where an entry for Dynamics 365 Finance and Operations Provisioning App that has a status of Configured is selected for installation."::: + +1. Select **OK** to open the installation configuration page for the provisioning app. +1. On the **Dynamics 365 Finance and Operations Provisioning App** page, set the following fields to configure the app: + + - **Enable Developer Tools for Finance and Operations**: Select this checkbox to get a developer-enabled sandbox environment where you can connect Visual Studio and make X++ changes. If you leave this checkbox cleared, you get a standard sandbox or production environment. + - **Enable Demo Data for Finance and Operations**: Select this checkbox to deploy the standard Contoso demo data with your app. + - **Select the version of the product to be installed**: You can select any of the available supported versions for installation. + + :::image type="content" source="media/tutorial-install-app2.png" alt-text="Screenshot of the installation configuration page for the provisioning app."::: + +1. Agree to the terms and conditions, and then select **Install** to start the installation. The installation takes about an hour to be completed. While the installation is still in progress, the status of the Finance and Operations Provisioning app is shown as **Installing**. - You see options to configure the app. +## Application versions - - **Enable Developer Tools**: This option allows you to have a developer-enabled sandbox where you can connect Visual Studio and make X++ changes. If you leave this option unchecked, you get a standard environment—sandbox or production. - - **Enable Demo Data**: This option deploys the standard Contoso Demo Data with your app. - > [!NOTE] - > This option is going to be available soon. +As was mentioned in the previous section, you can now install any available version of finance and operations apps. The following table represents some example versions that you might encounter. -1. Agree to the terms and conditions and select the **Install** button to start the installation. +| Application version | Details | Available in | +|---------------------|---------|--------------| +| 10.0.40.2 (Preview) | Version 10.0.40, with three proactive quality updates (PQUs) installed. This version is also a preview build. | [Early release cycle environments](/power-platform/admin/early-release) only. | +| 10.0.39.4 | Version 10.0.39, with five PQUs installed. | All geos. | +| 10.0.38.9 | Version 10.0.38, with ten PQUs installed. | All geos. | - Once installed successfully, you see the Finance and Operations URL available from the environment details page. +Each application version includes its latest PQU. There's no way to get an earlier build of an application version. Preview builds are available only to [early release cycle environments](/power-platform/admin/early-release). diff --git a/power-platform/admin/unified-experience/tutorial-perform-transactionless-copy.md b/power-platform/admin/unified-experience/tutorial-perform-transactionless-copy.md new file mode 100644 index 0000000000..0750f9444b --- /dev/null +++ b/power-platform/admin/unified-experience/tutorial-perform-transactionless-copy.md @@ -0,0 +1,83 @@ +--- +title: "Tutorial: Perform a transaction-less copy between environments | Microsoft Docs" +description: This tutorial demonstrates how to perform a transaction-less copy between unified environments. +author: laneswenka +ms.reviewer: sericks +ms.component: pa-admin +ms.topic: reference +ms.date: 06/19/2024 +ms.subservice: admin +ms.author: laswenka +search.audienceType: + - admin +--- + +# Tutorial: Perform a transaction-less copy between environments + +Environment copy for finance and operations apps has traditionally been a full copy, meaning it includes the entire database worth of configuration, master data, and transactions. While helpful for debugging specific situations, this has a side effect of significantly increasing the storage consumption for both finance and operations apps and Dataverse. + +:::image type="content" source="media/transactionless-copy-process.png" alt-text="Diagram of the copy process."::: + +In this tutorial, learn how to: + +- Prepare the source environment +- Copy the environment to the target + +As an example of this scenario, assume that a customer would like to reduce their storage consumption on their sandbox and unified developer environments, where there's no need for having 100% of the transactions from production. To achieve this, the customer copies their production environment directly to their unified, developer environment and specifies that transactions are to be skipped. + +## Before you begin + +The target environment in this tutorial is always a unified environment that contains finance and operations apps hosted by Dataverse. To learn how to deploy one of these environments, see [Tutorial: Provision a new environment with an ERP-based template ](./tutorial-deploy-new-environment-with-ERP-template.md). + +The source environment in this tutorial can either be an environment controlled by Lifecycle Services, or it can be another unified environment hosted by Dataverse. + +Be sure that both the source and target environments are provisioned in the same region. For general information on copying environments, see [Copy an environment](../copy-environment.md). + +### Transactional tables +To ensure that the resulting environment is still functional after the copy is completed, all of the transactional tables must be cleared together. Due to the highly normalized schema of finance and operations apps, skipping even one table in a joined relationship could result in breaking behavior in the user interface and in business logic after the copy finishes. + +By using metadata present on the X++ tables, all transaction tables and their related tables can be truncated as part of transaction-less copy. This includes custom tables and ISV-sourced tables as long as the **Table Group** property is one of the following: + +- Transaction (4) +- WorksheetHeader (5) +- WorksheetLine (6) +- Worksheet (9) +- TransactionHeader (10) +- TransactionLine (11) +- Staging (12) + +## Prerequisites +The source environment must have had a servicing action performed on it after April 3, 2024, such as a DBSync, software deployable package install (through Lifecycle Services, if applicable) or a unified package deployed through Power Platform CLI, if the source environment is managed by Power Platform admin center. + +You also need the details of the source and target environments, including the **Environment ID** for each, in the subsequent step. + +## Copy through PowerShell + +Load the PowerShell console and execute the following commands to copy the environment. For more information on how to install and use the PowerShell module, see [Get started with PowerShell for Power Platform Administrators](../powershell-getting-started.md). + +```PowerShell +#Install the module +Install-Module -Name Microsoft.PowerApps.Administration.PowerShell + +# Set variables for your session +$TenantId = "YOUR_TENANT_GUID_FROM_Microsoft Entra ID" +$SPNId = "YOUR_AZURE_APPLICATION_REGISTRATION_CLIENT_ID" +$ClientSecret = "YOUR_AZURE_APPLICATION_CLIENT_SECRET" +$SourceEnvironmentID = "YOUR_SOURCE_ENVIRONMENT_ID_HERE" +$TargetEnvironmentID = "YOUR_TARGET_ENVIRONMENT_ID_HERE" + +Write-Host "Creating a session against the Power Platform API" + +Add-PowerAppsAccount -Endpoint prod -TenantID $TenantId -ApplicationId $SPNId -ClientSecret $ClientSecret + + $copyToRequest = \[pscustomobject\]@{ + SourceEnvironmentId = $SourceEnvironmentID + TargetEnvironmentName = "Copied from source" + CopyType = "FullCopy" + SkipAuditData: true + ExecuteAdvancedCopyForFinanceAndOperations: true + } + +Copy-PowerAppEnvironment -EnvironmentName $TargetEnvironmentID -CopyToRequestDefinition $copyToRequest +``` +The above PowerShell command executes a full copy between the source and the target environment, allowing for the code, software, master, and reference data to be copied. The transaction tables are then truncated before the environment is made available to the administrator. diff --git a/power-platform/admin/unified-experience/tutorial-update-finance-operations-provisioning-app.md b/power-platform/admin/unified-experience/tutorial-update-finance-operations-provisioning-app.md new file mode 100644 index 0000000000..c74ff4f011 --- /dev/null +++ b/power-platform/admin/unified-experience/tutorial-update-finance-operations-provisioning-app.md @@ -0,0 +1,60 @@ +--- +title: "Tutorial: Update the Finance and Operations Provisioning app | Microsoft Docs" +description: This tutorial demonstrates how to use the Power Platform admin center to provision an environment with finance and operations apps installed. +author: laneswenka +ms.reviewer: sericks +ms.component: pa-admin +ms.topic: reference +ms.date: 06/06/2024 +ms.subservice: admin +ms.author: laswenka +search.audienceType: + - admin +--- + +# Tutorial: Update the Finance and Operations Provisioning app + +Finance and operations apps are reimagined as an application that is hosted by Microsoft Dataverse. Customers no longer have to provision their enterprise resource planning (ERP) system separately from their low-code applications and other Dynamics 365 applications. Most administrative actions in Power Platform are available through the admin center and an API-based experience. + +In this tutorial, learn how to: + +- Find an existing environment in the Power Platform admin center where the Finance and Operations Provisioning app is installed. +- Update the Finance and Operations Provisioning app to a newer application version. + +For example, a customer reads that a new service update is available and wants to update their sandbox environment to evaluate the new capabilities. + +## Update the application to a newer version + +1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com). +1. On the navigation pane, select **Environments**. The **Environments** list page is shown. +1. Select an environment where the Finance and Operations Provisioning app is already installed. +1. On the environment details page, on the **Resources** card, select **Dynamics 365 apps**. +1. Select the checkbox next to **Dynamics 365 Finance and Operations Provisioning App**, select the **More applications actions** button (**…**), and then select **Manage**. + + > [!NOTE] + > If the **Manage** command isn't available, you're running the latest version, and no update is available. + +1. A message box informs you that you're about to go to a new page where you can manage the Finance and Operations Provisioning app. Select **OK**. + + :::image type="content" source="media/tutorial-install-app1.png" alt-text="Message box that gives you the option to proceed with management of the application or cancel the action."::: + +1. The **Dynamics 365 Finance and Operations Provisioning App** update experience page is opened on a new browser tab or in a new browser window. In the dropdown list, select a new application version. + + > [!NOTE] + > The dropdown list includes only versions that are later than your currently installed version. If no versions are listed, the current version of your environment is the latest version. + +1. Agree to the terms and conditions, and then select **Install** to start the update. + + The update takes about an hour to be completed. While the update is still in progress, the status of the Finance and Operations Provisioning app is shown as **Installing**. + +## Application versions + +As was mentioned in the previous section, if you're able to update your environment, you must select a version of finance and operations apps. The following table represents some example versions that you might encounter. + +| Application version | Details | Available in | +|---------------------|---------|--------------| +| 10.0.40.2 (Preview) | Version 10.0.40, with three proactive quality updates (PQUs) installed. This version is also a preview build. | [Early release cycle environments](/power-platform/admin/early-release) only. | +| 10.0.39.4 | Version 10.0.39, with five PQUs installed. | All geos. | +| 10.0.38.9 | Version 10.0.38, with ten PQUs installed. | All geos. | + +Each application version includes its latest PQU. There's no way to get an earlier build of an application version. Preview builds are only available to [early release cycle environments](/power-platform/admin/early-release). diff --git a/power-platform/admin/use-service-admin-role-manage-tenant.md b/power-platform/admin/use-service-admin-role-manage-tenant.md index 531f48b5be..a594cd0390 100644 --- a/power-platform/admin/use-service-admin-role-manage-tenant.md +++ b/power-platform/admin/use-service-admin-role-manage-tenant.md @@ -45,7 +45,7 @@ Both service admin roles cannot do functions restricted to the Microsoft 365 glo Follow these steps to assign a service admin role. > [!NOTE] -> When the Dynamics 365 administrator, Power Platform administrator, or Global administrator role is assigend to a user in Microsoft Entra ID, the user is no longer automatically assigned to the system administrator role in environments. For more information on how to gain access to the system dministrator role and remove such access, see [Manage admin roles with Microsoft Entra Privileged Identity Management](manage-high-privileged-admin-roles.md). +> When the Dynamics 365 administrator, Power Platform administrator, or Global administrator role is assigned to a user in Microsoft Entra ID, the user is no longer automatically assigned to the system administrator role in environments. For more information on how to gain access to the system administrator role and remove such access, see [Manage admin roles with Microsoft Entra Privileged Identity Management](manage-high-privileged-admin-roles.md). > > To opt-out of automatic license-based user roles, see [Opt-out of automatic license-based user roles management](opt-out-automatic-license.md). diff --git a/power-platform/admin/view-license-consumption-finops-apps.md b/power-platform/admin/view-license-consumption-finops-apps.md index 3274871a08..35bdbf82f4 100644 --- a/power-platform/admin/view-license-consumption-finops-apps.md +++ b/power-platform/admin/view-license-consumption-finops-apps.md @@ -27,7 +27,7 @@ You can use the **Licenses** page in the [Power Platform admin center](https://a ## Summary tab -To see an summary of license usage: +To see a summary of license usage: 1. Sign in to the [Power Platform admin center](https://admin.powerplatform.microsoft.com/). 1. From **Billing**, select **Licenses**. diff --git a/power-platform/admin/view-license-consumption-issues.md b/power-platform/admin/view-license-consumption-issues.md index 84acad2391..032e5af0e9 100644 --- a/power-platform/admin/view-license-consumption-issues.md +++ b/power-platform/admin/view-license-consumption-issues.md @@ -73,7 +73,7 @@ This view is available for users with global admin, Power Platform admin, and Dy The **Power Automate licensing summary** section provides details of how many Power Automate licenses have been purchased, assigned, and consumed in your entire tenant. It provides details of which flow runs are consuming licenses. -The **Attention neded** section provides a summary count of flows requiring licensing attention in your entire tenant. +The **Attention needed** section provides a summary count of flows requiring licensing attention in your entire tenant. | Setting | Description | | ------- | ----------- | @@ -134,7 +134,7 @@ The **Environments** tab on the **Licenses (preview)** page displays licensing i | Premium feature | Indicates if a premium feature, such as a premium connector, custom connector, or Dataverse connector, was used in the flow. | | Flow type | Indicates if the flow is scheduled, instant, or automated. | | Download | Downloads the information in CSV format. Select a specific license type to start the download. After a CSV file is generated, you can download the same file again within five days without having to start a new download. | -| Attention needed | Summary count of flows requiring licensing attention, which includes:

  • List of flow not having an owner.

  • Standalone, Premium flow using standard or expired licenses.

  • Out of Context flow, such as Premium flows using Power Apps, Microsoft Copilot Studio, or Dynamics 365 licenses but not running in in the context of Power Apps, Microsoft Copilot Studio, or Dynamics 365.

| +| Attention needed | Summary count of flows requiring licensing attention, which includes:

  • List of flow not having an owner.

  • Standalone, Premium flow using standard or expired licenses.

  • Out of Context flow, such as Premium flows using Power Apps, Microsoft Copilot Studio, or Dynamics 365 licenses but not running in the context of Power Apps, Microsoft Copilot Studio, or Dynamics 365.

| ## Other ways to view licensing pages diff --git a/power-platform/admin/vnet-support-overview.md b/power-platform/admin/vnet-support-overview.md index 8f4cb07577..d00ea854e1 100644 --- a/power-platform/admin/vnet-support-overview.md +++ b/power-platform/admin/vnet-support-overview.md @@ -4,9 +4,10 @@ description: Learn about Microsoft Azure Virtual Network support for Power Platf author: ritesp ms.component: pa-admin ms.topic: conceptual -ms.date: 03/30/2024 +ms.date: 06/27/2024 ms.subservice: admin ms.author: ritesp +ms.reviewer: sericks search.audienceType: - admin --- @@ -43,6 +44,7 @@ Power Platform enables Virtual Network support for both Dataverse plug-ins and [ - Use [Azure Key Vault](/connectors/keyvault/) (preview) connector to securely connect to private, endpoint-protected Azure Key Vault. - Use [HTTP With Microsoft Entra ID](/connectors/webcontentsv2/) (preview) to securely connect to service authentication by Microsoft Entra ID. - Use [custom connectors](/connectors/custom-connectors/) (preview) to securely connect to your services that are protected by private endpoints in Azure or services that are hosted within your private network. +- Use [Azure File Storage](/connectors/azurefile/) (preview) to securely connect to private, endpoint-enabled Azure file storage. ### Limitations @@ -81,8 +83,9 @@ The following table lists the services that support Azure subnet delegation for | Area | Power Platform services | Virtual Network support availability| |-----------|-------------------------|-------------------------| | Dataverse | [Dataverse plug-ins](/power-apps/developer/data-platform/plug-ins) | Generally available | -| Connectors |
  • [SQL Server](/connectors/sql/)
  • [Azure SQL Data Warehouse](/connectors/sqldw/)
  • [Azure Queues](/connectors/azurequeues/)
  • [Custom connectors](/connectors/custom-connectors/)
  • [Azure Key Vault](/connectors/keyvault/)
  • [HTTP With Microsoft Entra ID](/connectors/webcontentsv2/)
| Preview | +| Connectors |
  • [SQL Server](/connectors/sql/)
  • [Azure SQL Data Warehouse](/connectors/sqldw/)
  • [Azure Queues](/connectors/azurequeues/)
  • [Custom connectors](/connectors/custom-connectors/)
  • [Azure Key Vault](/connectors/keyvault/)
  • [HTTP With Microsoft Entra ID](/connectors/webcontentsv2/)
  • [Azure File Storage](/connectors/azurefile/)
| Production ready preview | +[!INCLUDE [preview-note](~/../shared-content/shared/preview-includes/production-ready-preview-dynamics365.md)] ## Licensing requirements @@ -144,9 +147,9 @@ Yes. You can use Network Security Group and firewalls to monitor outbound traffi You need to delegate at least 24 Classless Inter-Domain Routing (CIDR), or 255 IP addresses, in the subnet. If you want to delegate the same subnet to multiple environments, you might need more IP addresses in that subnet. -### Can I make internet-bound calls from plug-ins after my environment is subnet-delegated? +### Can I make internet-bound calls from plug-ins or connectors after my environment is subnet-delegated? -Yes. You can make internet-bound calls from plug-ins, but the subnet must be configured with an [Azure NAT gateway](/azure/nat-gateway/nat-overview). +Yes. You can make internet-bound calls from plug-ins or connectors, but the subnet must be configured with an [Azure NAT gateway](/azure/nat-gateway/nat-overview). ### Can I update the subnet IP address range after it's delegated to "Microsoft.PowerPlatform/enterprisePolicies"? @@ -208,6 +211,9 @@ As a customer, you have ownership and control over the Virtual Network and its a One Virtual Network and one dedicated subnet in each of your primary and secondary Azure regions are required for production workloads to ensure proper failover. However, for Dev/Test environments, we recommend a single Virtual Network together with two dedicated subnets for Power Platform. +### Do [Azure-aware plug-ins](/power-apps/developer/data-platform/write-custom-azure-aware-plugin) support Virtual Network? +No, [Azure-aware plug-ins](/power-apps/developer/data-platform/write-custom-azure-aware-plugin) don't support Virtual Network. + ## Next steps [Set up Virtual Network support](vnet-support-setup-configure.md) diff --git a/power-platform/admin/wp-management-monitoring.md b/power-platform/admin/wp-management-monitoring.md index ff98f8a129..e00bc2d80a 100644 --- a/power-platform/admin/wp-management-monitoring.md +++ b/power-platform/admin/wp-management-monitoring.md @@ -27,7 +27,7 @@ Portals are typically considered the primary path for completing administrative - **Power Automate Management connector** is designed to help with administrative management and monitoring ([Power Automate Management](/connectors/flowmanagement/)). - **Microsoft Flow for Admins** allows you to complete typical admin actions, such as disabling a flow and deleting a flow ([Power Automate for Admins](/connectors/microsoftflowforadmins/)). - **Power Apps for Admins connector** can be used to set permissions on Power Apps or set permissions to a certain connector being used by this app ([Power Apps for Admins](/connectors/powerappsforadmins/)). -- **PowerApps for App Makers** can be used by the makers themselves, though some actions being an overlay to administrational tasks, such as settings permissions to an app as mentioned previously ([Power Apps for Makers](/connectors/powerappsforappmakers/)). +- **PowerApps for App Makers** can be used by the makers themselves, though some actions being an overlay to administrative tasks, such as settings permissions to an app as mentioned previously ([Power Apps for Makers](/connectors/powerappsforappmakers/)). - **Power Platform for Admins** can be used to perform tasks against platform components, such as creating an environment or provisioning a Microsoft Dataverse database or creating a DLP policy for a specific environment ([Power Platform for Admins](/connectors/powerplatformforadmins/)). Check out the Admin-in-a-day content that can be found in the ([GitHub repository](https://github.com/microsoft/powerapps-tools/tree/master/Administration/AdminInADay)) that walks you through examples via hands-on labs with step-by-step instructions. diff --git a/power-platform/alm/TOC.yml b/power-platform/alm/TOC.yml index 9c2a2d73a8..8890391276 100644 --- a/power-platform/alm/TOC.yml +++ b/power-platform/alm/TOC.yml @@ -96,7 +96,7 @@ href: redeploy-past-solution-versions.md - name: Use Copilot to generate deployment notes in pipelines href: copilot-deployment-notes-pipelines.md - - name: Block unmanaged customizations (preview) + - name: Block unmanaged customizations href: block-unmanaged-customizations.md - name: ALM for developers href: alm-for-developers.md @@ -150,6 +150,8 @@ href: configure-and-deploy-tools.md - name: Package Deployer tool href: package-deployer-tool.md + - name: ImportConfig reference + href: importconfig-reference.md - name: Solution Packager tool href: solution-packager-tool.md - name: Source control with solution files diff --git a/power-platform/alm/block-unmanaged-customizations.md b/power-platform/alm/block-unmanaged-customizations.md index 854d64c01d..2cc473e18a 100644 --- a/power-platform/alm/block-unmanaged-customizations.md +++ b/power-platform/alm/block-unmanaged-customizations.md @@ -11,16 +11,10 @@ ms.topic: "article" search.audienceType: - maker --- -# Block unmanaged customizations in Dataverse (preview) - -[!INCLUDE [cc-beta-prerelease-disclaimer](../includes/cc-beta-prerelease-disclaimer.md)] +# Block unmanaged customizations in Dataverse This article describes how you as a Power Platform administrator can enable the **Block unmanaged customizations** environment setting in the Power Platform admin center for your Microsoft Dataverse environments. Unmanaged customizations reside at the top layer for a component and subsequently define the runtime behavior of the component. In most situations, you don't want unmanaged customizations determining the behavior of your components. -> [!IMPORTANT] -> - This is a preview feature. -> - [!INCLUDE [cc-preview-features-definition](../includes/cc-preview-features-definition.md)] - This environment setting allows system administrators to prevent unmanaged customizations in Microsoft Dataverse environments. By blocking unmanaged customizations, you ensure the changes to the environment are only coming from approved application lifecycle management (ALM) processes that have sufficient safety, visibility, and auditing. Block unmanaged customizations continues to allow solution operations that are needed to transport the unmanaged customizations to development environments while keeping the environment unmanaged customization free by removing the unmanaged customizations. This feature is helpful in reducing unmanaged customizations in production environments. When the setting is enabled, these operations are blocked for the environment: diff --git a/power-platform/alm/create-solutions-support-multiple-languages.md b/power-platform/alm/create-solutions-support-multiple-languages.md index f7435f7ad1..cd154e79f1 100644 --- a/power-platform/alm/create-solutions-support-multiple-languages.md +++ b/power-platform/alm/create-solutions-support-multiple-languages.md @@ -70,7 +70,7 @@ Microsoft Dataverse supports multiple languages. If you want your solution to be 2. Create your solution and modify the components. -3. After you have finished developing your solution use the “Export Translations” functionality. This generates a Office Excel spreadsheet (CrmTranslations.xml) that contains all the labels that need translation. +3. After you have finished developing your solution use the “Export Translations” functionality. This generates an Office Excel spreadsheet (CrmTranslations.xml) that contains all the labels that need translation. 4. In the spreadsheet, provide the corresponding translations. diff --git a/power-platform/alm/devops-github-actions.md b/power-platform/alm/devops-github-actions.md index 2534031c87..900c2b34e3 100644 --- a/power-platform/alm/devops-github-actions.md +++ b/power-platform/alm/devops-github-actions.md @@ -81,7 +81,7 @@ GitHub Actions for Microsoft Power Platform can run on both Microsoft Windows ag ***How do I get GitHub Actions for Microsoft Power Platform working in my repository?*** -*Go to the [GitHub Marketplace for Actions](https://github.com/marketplace/actions/powerplatform-actions) and search for Power Platform. When you arrive on the page, select the green button to instatiate the actions into your repository.* +*Go to the [GitHub Marketplace for Actions](https://github.com/marketplace/actions/powerplatform-actions) and search for Power Platform. When you arrive on the page, select the green button to instantiate the actions into your repository.* ![GitHub Actions Install](media/github-actions-tutorial/GHActionsinstall.png "GitHub Actions Install") diff --git a/power-platform/alm/environment-strategy-alm.md b/power-platform/alm/environment-strategy-alm.md index ad4211fc37..241213d974 100644 --- a/power-platform/alm/environment-strategy-alm.md +++ b/power-platform/alm/environment-strategy-alm.md @@ -51,7 +51,7 @@ should include using a test environment prior to deploying anything to the produ environment. This ensures that you have a place to test your app, but also ensures that the deployment itself can be tested. -More information: [Establishing an environment strategy for Microsoft Power Platform](../guidance/adoption/environment-strategy.md) +More information: [Establishing an environment strategy for Microsoft Power Platform](../guidance/white-papers/environment-strategy.md) ## Multi-geographical considerations diff --git a/power-platform/alm/importconfig-reference.md b/power-platform/alm/importconfig-reference.md new file mode 100644 index 0000000000..4946d19529 --- /dev/null +++ b/power-platform/alm/importconfig-reference.md @@ -0,0 +1,197 @@ +--- +title: "ImportConfig Reference" +description: "Contains reference information about editing the ImportConfig.xml file used by the package deployer tool" +author: marcelbf +ms.author: marcelbf +ms.subservice: alm +ms.date: 06/10/2024 +ms.reviewer: jdaly +ms.topic: reference +search.audienceType: + - developer +--- +# ImportConfig Reference + +The ImportConfig.xml file used with package deployer contains information about the solutions and data to import. The following is an example: + +```xml + + + + + + + + + + + + + + + + + + + + + + + +``` + +The following sections provide details about the valid XML elements and attributes for this document. + +## `configdatastorage` element + +`configdatastorage` is the root element. + +### configdatastorage attributes + +All of these attributes are optional. + +|Name|Description| +|---------|---------| +|`installsampledata`|Whether to install sample data. This is the same sample data installed using these other methods:
- [Add or remove sample data](../admin/add-remove-sample-data.md)
- [Add and remove sample data with code](/power-apps/developer/data-platform/sample-data) | +|`waitforsampledatatoinstall`|If `true`, and if `installsampledata` is also set to `true`, waits for sample data to install before deploying the package. Don't set this to `true` when `installsampledata` is `false`.| +|`agentdesktopzipfile`|File name of the zip file to unpack. If you specify a .zip file name here, it adds a screen during the package deployment process that prompts you to select a location where you want to unpack the contents of the file.

This attribute is commonly used for creating packages for [Unified Service Desk for Dynamics 365](/dynamics365/unified-service-desk/unified-service-desk). | +|`agentdesktopexename`|Name of the .exe or .msi file in the zip file or a URL to be invoked at the end of the deployment process.

This attribute is commonly used for creating packages for [Unified Service Desk for Dynamics 365](/dynamics365/unified-service-desk/unified-service-desk).| +|`crmmigdataimportfile`|File name of the default configuration data file (.zip) exported using the Configuration Migration tool.| + +### configdatastorage elements + +These are the valid child elements: + +|Element|Descriptions| +|---------|---------| +|`solutions`|Contains 0 or many [`configsolutionfile` elements](#configsolutionfile-element) that describe solutions to import.| +|`filestoimport`|Contains
- 1 or many [`configimportfile` elements](#configimportfile-element)
- 0 or many [`zipimportdetails` element](#zipimportdetails-element) that describe individual files and zip files to be imported.| +|`filesmapstoimport`|Contains 1 or many [`configimportmapfile` element](#configimportmapfile-element). The order of the map files in this element indicates the order in which they're imported. [Learn more about creating data maps for import](/power-apps/developer/data-platform/create-data-maps-for-import) | +|`cmtdatafiles`|Contains 1 or many [`cmtdatafile` elements](#cmtdatafile-element) that contain localized version of the configuration data file to be imported.| + +## `configsolutionfile` element + +Describes solutions to import in the `configdatastorage.solutions` element. + +### configsolutionfile attributes + +|Name|Description| +|---------|---------| +|`solutionpackagefilename`|**Required** Specify the .zip file name of your solution.| +|`overwriteunmanagedcustomizations`|**Optional** Whether to overwrite any unmanaged customizations when importing a solution that already exists in the target environment. If you don't specify this behavior, the unmanaged customizations in the existing solution are maintained on the target environment.| +|`publishworkflowsandactivateplugins`|**Optional** Whether to publish workflows and activate plug-ins in the target environment after the solution is imported.If you don't specify this behavior, the workflow are published and plug-ins activated.| + +## `configimportfile` element + +Describes files to import in the `configdatastorage.filestoimport` element. + +### configimportfile attributes + +|Name|Description| +|---------|---------| +|`filename`|Name of the file that contains the import data. | +|`filetype`|This value can be `csv`, `xml`, or `zip`. If the file is a .zip file, a [`zipimportdetails` element](#zipimportdetails-element) must be present with a [`zipimportdetail` element](#zipimportdetail-element) for each file in the .zip file.| +|`associatedmap`|Name of the Dataverse import data map to use with this file. If blank, Dataverse attempts to use the system determined import data map name for this file.| +|`importtoentity`|Can be the name of the exe in the zip file, a URL, or an .msi file to provide a link to invoke at the end of the process.| +|`datadelimiter`|Name of the data delimiter used in the import file. Valid values are single quote or double quotes.| +|`fielddelimiter`|Name of the field delimiter used in the import file. Valid values are comma or colon, or single quote.| +|`enableduplicatedetection`|Whether to enable duplicate detections rules on data import. Valid values are `true` or `false`.| +|`isfirstrowheader`|Whether the first row of the import file contains the field names. Valid values are `true` or `false`.| +|`isrecordownerateam`|Whether the owner of the record on import should be a team. Valid values are `true` or `false`.| +|`owneruser`|The user ID that should own the records. The default value is the currently logged in user.| +|`waitforimporttocomplete`|If `true`, the system waits for the import to complete before proceeding. If `false`, it queues the jobs and moves on.| + + +## `zipimportdetails` element + +Describes zip files to import in the `configdatastorage.filestoimport` element when the `configimportfile.filetype` is `zip`. + +Contains 1 or more [`zipimportdetail` elements](#zipimportdetail-element) that provide information about an individual file within the zip file specified in the [`configimportfile` element](#configimportfile-element). + + +## `zipimportdetail` element + +Provide information about an individual file within the zip file specified in the [`configimportfile` element](#configimportfile-element). + +### zipimportdetail attributes + +|Name|Description| +|---------|---------| +|`filename`|Name of the file that contains the import data.| +|`filetype`|This value can be `csv` or `xml`.| +|`importtoentity`|Can be the name of the exe in the zip file, a url, or an .msi file to provide a link to invoke at the end of the process.| + +## `configimportmapfile` element + +Contains information about an individual map file to import in Dataverse. + +### configimportmapfile attributes + +|Name|Description| +|---------|---------| +|`filename`|The name of the file containing the mapping data.| + +## `cmtdatafile` element + +Specifies the localized configuration data files along with locale ID (required) and user information map file (optional). + +### cmtdatafile example + +```xml + + + + +``` + +### cmtdatafile attributes + +|Name|Description| +|---------|---------| +|`filename`|The name of the file containing the mapping data.| +|`lcid`|The string representation of the LCID language code identifier.| +|`usermapfilename`|For Dynamics 365 (on-premises) only. Contains the user map file (.xml) generated using the Configuration Migration tool in your project. This file is required to import user information to a Dynamics 365 (on-premises) instance on a different domain.| diff --git a/power-platform/alm/move-from-unmanaged-managed-alm.md b/power-platform/alm/move-from-unmanaged-managed-alm.md index efcb4aab19..3e7f18b46e 100644 --- a/power-platform/alm/move-from-unmanaged-managed-alm.md +++ b/power-platform/alm/move-from-unmanaged-managed-alm.md @@ -30,7 +30,7 @@ With the exception of your development environment, the end result is to only ha 1. Remove tables and components that are not needed from your production environment. For example, consider deleting tables with no records or very old records, or tables and components that have no dependencies. More information: [View dependencies for a component](/powerapps/maker/data-platform/view-component-dependencies) 2. Create a solution to use to convert components from unmanaged to managed. - - In your development environment, create a *single* unmanaged solution that will be used to contain *all* Microsoft Dataverse model-driven apps, tables, and dependant components, such as forms, views, fields, charts, and dashboards. Incorporating all of these components together can help reduce the chances of cross-solution layering issues that might occur later when you update or introduce new model-driven apps and customizations. More information: [Create a solution](/power-apps/maker/data-platform/create-solution) + - In your development environment, create a *single* unmanaged solution that will be used to contain *all* Microsoft Dataverse model-driven apps, tables, and dependent components, such as forms, views, fields, charts, and dashboards. Incorporating all of these components together can help reduce the chances of cross-solution layering issues that might occur later when you update or introduce new model-driven apps and customizations. More information: [Create a solution](/power-apps/maker/data-platform/create-solution) - For *unmanaged* components, such as custom unmanaged tables, you won't use segmentation but will select **Include all components** when adding those components to the solution. - If there are *managed* components that you've customized, use segmentation when adding those components to the solution. For example, if you've added a custom column or changed the display name for an existing column to a Power Apps standard table, such as **Account** and **Contact**, use segmentation so you only export the customized components your project needs and not additional components that you don't intend to service. To do this, choose **Select components**, and then add only your customized components to the solution. > [!TIP] diff --git a/power-platform/alm/package-deployer-tool.md b/power-platform/alm/package-deployer-tool.md index c41928d0d6..0771a17798 100644 --- a/power-platform/alm/package-deployer-tool.md +++ b/power-platform/alm/package-deployer-tool.md @@ -1,14 +1,13 @@ --- -title: "Package Deployer tool | Microsoft Docs" +title: "Create packages for the Package Deployer tool" description: "Learn about migrating configuration data, solutions, and more from one environment to another." keywords: author: marcelbf ms.author: marcelbf ms.subservice: alm -ms.custom: "" -ms.date: 10/20/2022 -ms.reviewer: "pehecke" -ms.topic: "article" +ms.date: 06/10/2024 +ms.reviewer: pehecke +ms.topic: article search.audienceType: - developer --- @@ -46,7 +45,7 @@ These steps are described in detail in this article. ## Create a package project -The first step is to create a Visual Studio or MSBuild project for the package. To do that, you must have one of two available tool extensions installed on your development computer. If using Visual Studio Code, install [Microsoft Power Platform CLI](../developer/cli/introduction.md#install-microsoft-power-platform-cli). Otherwise, if using Visual Studio 2019, install [Power Platform tools for Visual Studio](/power-apps/developer/data-platform/tools/devtools-install). The Power Platform tools extension is currently only available for Visual Studio 2019. However, the created project can be built using Visual Studio 2019 or later. +The first step is to create a Visual Studio or MSBuild project for the package. To do that, you must have one of two available tool extensions installed on your development computer. If using Visual Studio Code, install [Microsoft Power Platform CLI](../developer/cli/introduction.md#install-microsoft-power-platform-cli). Otherwise, if using Visual Studio 2019 or later, install [Power Platform tools for Visual Studio](/power-apps/developer/data-platform/tools/devtools-install). Select the appropriate tab below to find out how to create a project using the desired tool extension. Both tools output the project in a similar format. @@ -143,234 +142,7 @@ Next, update the HTML language specific files. ## Configure the package -1. Define the package configuration by adding information about your package in the **ImportConfig.xml** file in the project. Open the file for editing. The following list provides information about each parameter and node in the config file. - - `installsampledata` - `True` or `false`. If `true`, installs sample data to Dataverse instance. This data is the same sample data that you can install from **Settings** > **Data Management** area in Dataverse. - - `waitforsampledatatoinstall` - **True** or **false**. If **true**, and if **installsampledata** is also set to **true**, waits for sample data to install before deploying the package. - - > [!NOTE] - > Ensure that you set **installsampledata** to **true** if you are setting `waitforsampledatatoinstall` to **true**. - - `agentdesktopzipfile` - File name of the zip file to unpack. If you specify a .zip file name here, it adds a screen during the package deployment process that prompts you to select a location where you want to unpack the contents of the file. - - This attribute is commonly used for creating packages for Unified Service Desk for Dynamics 365. For information about Unified Service Desk, see [Administration Guide for Unified Service Desk 3.0](/dynamics365/unified-service-desk/administration-guide-unified-service-desk-3). - - `agentdesktopexename` - Name of the .exe or .msi file in the zip file or a URL to be invoked at the end of the deployment process. - - This attribute is commonly used for creating packages for Unified Service Desk. - - `crmmigdataimportfile` - File name of the default configuration data file (.zip) exported using the Configuration Migration tool. - - - You can also import a localized version of the configuration data file based on the locale ID (LCID) specified using new runtime settings while running the package deployer. Use the `` node (explained later) to specify the localized versions of the configuration data file in a package and then use the `OverrideConfigurationDataFileLanguage` method (explained later) to specify the logic for importing the configuration data file based on the locale ID specified using the runtime settings. You can't import more than one configuration data file using a package at a time. - - - For Dataverse (on-premises), if your configuration data file contains user information, and both the source and target Dataverse instances are on the same Active Directory Domain, user information is imported to the target Dataverse instance. To import user information to a Dataverse (on-premises) instance on a different domain, you must include the user map file (.xml) generated using the Configuration Migration tool in your project, and specify it along with the configuration data file using the `usermapfilename` attribute in the `` node explained later. User information can't be imported to Dataverse instances. - `` node - Contains an array of `` nodes that describe the solutions to import. The order of the solutions under this node indicates the order in which the solutions will be imported on the target Dataverse instance. - - `` node - Use this node under the `` node to specify the individual solutions and the following information for each solution to be imported: - - - `solutionpackagefilename`: Specify the .zip file name of your solution. Required. - - - `overwriteunmanagedcustomizations`: Specify whether to overwrite any unmanaged customizations when importing a solution that already exists in the target Dynamics 365 instance. This attribute is optional, and if you don't specify this attribute, by default the unmanaged customizations in the existing solution are maintained on the target Dynamics 365 instance. - - - `publishworkflowsandactivateplugins`: Specify whether to publish workflows and activate plug-ins in the target Dynamics 365 instance after the solution is imported. This attribute is optional, and if you don't specify not specify this attribute, by default the workflows are published and plug-ins are activated after the solution is imported on the target Dynamics 365 instance. - - You can add multiple solution file names in a package by adding as many `` nodes. For example, if you want three solution files to be imported, add them as shown below: - - ```xml - - - - - - - - ``` - - `` node - Contains an array of `` and `` nodes that are used to describe individual files and zip files respectively to be imported. - - `` node - Use this node under the `` node to describe a file to be imported to Dataverse. You can add multiple files in a package by adding as many `` nodes. - - ```xml - - - - - - - - ``` - - Below is a list of supported attributes: - - |Attribute|Description| - |--|-| - |`filename`| Name of the file that contains the import data. If the file is a .zip file, a `` node must be present with a `` node for each file in the .zip file. | - |`filetype`|This value can be csv, xml, or zip. | - |`associatedmap`|Name of the Dataverse import data map to use with this file. If blank, attempts to use the system determined import data map name for this file.| - |`importtoentity`| Can be the name of the exe in the zip file, a URL, or an .msi file to provide a link to invoke at the end of the process.| - |`datadelimiter`| Name of the data delimiter used in the import file. Valid values are single quote or double quotes.| - |`fielddelimiter`|Name of the field delimiter used in the import file. Valid values are comma or colon, or single quote.| - |`enableduplicatedetection`|Indicates whether to enable duplicate detections rules on data import. Valid values are **true** or **false**.| - |`isfirstrowheader`|Used to denote that the first row of the import file contains the field names. Valid values are `true` or `false`. | - |`isrecordownerateam`|Indicates whether the owner of the record on import should be a team. Valid values are `true` or `false`.| - |`owneruser`|Indicates the user ID that should own the records. The default value is the currently logged in user. | - |`waitforimporttocomplete`|If `true`, the system waits for the import to complete before proceeding. If `false`, it queues the jobs and moves on.| - - `` node - This node contains an array of `` nodes that describe the files included in a zip file that is used to import to Dynamics 365. - - `` node - Use this node under the `` node to provide information about an individual file in a .zip file that is specified in the `` node. - - ```xml - - ... - ... - - - - - - - ``` - - Supported attributes are listed below: - - |Attribute|Description| - |---------------|-----------------| - |`filename`|Name of the file that contains the import data.| - |`filetype`|This value can be csv or xml.| - |`importtoentity`|Can be the name of the exe in the zip file, a url, or an .msi file to provide a link to invoke at the end of the process.| - - `` node - This node contains an array of `` nodes to import. The order of the map files in this node indicates the order in which they're imported. For information about data maps, see [Create data maps for import](/powerapps/developer/common-data-service/create-data-maps-for-import). - - `` node - Use this node under the `` node to provide information about an individual map file to import in Dataverse. - - ```xml - - - - ``` - - `` node - This node contains an array of `` nodes that contains localized version of the configuration data file to be imported. - - `` node - Use this node under the `` node to specify the localized configuration data files along with locale ID (required) and user information map file (optional). For example: - - ```xml - - - - - ``` - - You can define your custom logic in the `OverrideConfigurationDataFileLanguage` method (explained later) to import a localized configuration data file instead of the default one (specified in crmmigdataimportfile) based on the locale ID (LCID) value specified using the runtime settings (explained later). - -2. Select **Save All**. - - The following xml represents the contents of a sample `ImportConfig.xml` file. - - ```xml - - - - - - - - - - - - - - - - - - - - - - - - - ``` +Define the package configuration by adding information about your package in the **ImportConfig.xml** file in the project. Refer to [ImportConfig Reference](importconfig-reference.md) for an example and descriptions of the valid elements and attributes to use. ## Add custom code diff --git a/power-platform/alm/plugin-component.md b/power-platform/alm/plugin-component.md index 1d31e3a6b8..2c52bb260b 100644 --- a/power-platform/alm/plugin-component.md +++ b/power-platform/alm/plugin-component.md @@ -97,7 +97,7 @@ Let's get started adding those components to our solution. 5. Add a step to the solution by selecting **Add existing** \> **Other** \> **Plug-in step**. > [!TIP] - > In the Plug-in Registration tool, a step is called a **step**. In the classic interface **Solution Explorer**, a step is called an **Sdk message processing step**. In the modern maker interface, a step is called an **Plug-in step**. + > In the Plug-in Registration tool, a step is called a **step**. In the classic interface **Solution Explorer**, a step is called an **Sdk message processing step**. In the modern maker interface, a step is called a **Plug-in step**. 6. Search for the registered step, select it, and then select **Add**. diff --git a/power-platform/alm/remove-table-app.md b/power-platform/alm/remove-table-app.md index 297aa6464c..1700fef06d 100644 --- a/power-platform/alm/remove-table-app.md +++ b/power-platform/alm/remove-table-app.md @@ -12,7 +12,7 @@ ms.date: 01/09/2023 To remove dependencies between tables and model-driven apps, open the app in the app designer, remove the component, such as a table, from the app navigation, and then remove the component from the app. 1. Sign into Power Apps (make.powerapps.com) and then go to in the **Apps** on the left navigation pane. -1. Open the model-driven app in the app designer, then find the the component you no longer want the app to depend on. In this example, you see the table **Custom table** in the **Pages** left pane. Select **...** next to the item, and then select **Remove from navigation**. +1. Open the model-driven app in the app designer, then find the component you no longer want the app to depend on. In this example, you see the table **Custom table** in the **Pages** left pane. Select **...** next to the item, and then select **Remove from navigation**. :::image type="content" source="media/remove-from-navigation.png" alt-text="Remove the custom table from the navigation" lightbox="media/remove-from-navigation.png"::: 1. The component appears under the **All other pages** area near the bottom of the **Pages** left pane. Select **...** next to the item, and then select **Remove from app**. diff --git a/power-platform/alm/solution-api.md b/power-platform/alm/solution-api.md index 4247757245..89ce9065cf 100644 --- a/power-platform/alm/solution-api.md +++ b/power-platform/alm/solution-api.md @@ -484,7 +484,7 @@ public void DependencyReport(Dependency dependency) requiredComponentTypeName = opt.Label.UserLocalizedLabel.Label; } } - // The name or display name of the compoent is retrieved in different ways depending on the component type + // The name or display name of the component is retrieved in different ways depending on the component type dependentComponentName = getComponentName(dependency.DependentComponentType.Value, (Guid)dependency.DependentComponentObjectId); requiredComponentName = getComponentName(dependency.RequiredComponentType.Value, (Guid)dependency.RequiredComponentObjectId); diff --git a/power-platform/alm/solution-async.md b/power-platform/alm/solution-async.md index 929cac14f3..9daa593bc1 100644 --- a/power-platform/alm/solution-async.md +++ b/power-platform/alm/solution-async.md @@ -67,7 +67,7 @@ public static ImportSolutionAsyncResponse ImportSolution( // Import the staged solution var componentDetails = stagingResults.SolutionComponentsDetails; - // TODO These are not referenced in the code but are usefull to explore + // TODO These are not referenced in the code but are useful to explore var missingDependencies = stagingResults.MissingDependencies; // Contains missing dependencies var solutionDetails = stagingResults.SolutionDetails; // Contains solution details diff --git a/power-platform/alm/solution-concepts-alm.md b/power-platform/alm/solution-concepts-alm.md index 06b18fbacd..bf388464c6 100644 --- a/power-platform/alm/solution-concepts-alm.md +++ b/power-platform/alm/solution-concepts-alm.md @@ -131,7 +131,7 @@ Because of the way that managed solutions are layered, some managed solutions ca The system tracks these dependencies between solutions. If you try to install a solution that requires a base solution that isn’t installed, you won’t be able to install the solution. You will get a message saying that the solution requires another solution to be installed first. Similarly, because of the dependencies, you can’t uninstall the base solution while a solution that depends on it is still installed. You have to uninstall the dependent solution before you can uninstall the base solution. More information: [Removing dependencies](removing-dependencies.md) ## Solution component dependencies -A solution component represents something that you can potentially customize. Anything that can be included in a solution is a solution component and some components are dependant on other components. For example, the website field and account summary report are both dependant on the account entity. More information: [Dependency tracking for solution components](dependency-tracking-solution-components.md) +A solution component represents something that you can potentially customize. Anything that can be included in a solution is a solution component and some components are dependent on other components. For example, the website field and account summary report are both dependent on the account entity. More information: [Dependency tracking for solution components](dependency-tracking-solution-components.md) ### See also diff --git a/power-platform/alm/tutorials/github-actions-deploy.md b/power-platform/alm/tutorials/github-actions-deploy.md index 728e17b3fb..fedaafdcd3 100644 --- a/power-platform/alm/tutorials/github-actions-deploy.md +++ b/power-platform/alm/tutorials/github-actions-deploy.md @@ -42,7 +42,7 @@ Related tutorials: [Get started](github-actions-start.md), and [Build a model-dr ![Initiate repo.](../media/github-actions-tutorial/gh-lab-2.40.png "Initiate repo") ### Creating a new secret for Service Principal Authentication -1. Navigate to to you repository and click **Settings**, then expand **Secrets**, and then and click **Actions**. +1. Navigate to your repository and click **Settings**, then expand **Secrets**, and then and click **Actions**. 2. On the *Secrets* page, name the secret 'PowerPlatformSPN'. Use the client secret from the application registration created in Microsoft Entra and enter it into the **Value** field, and then select **Add secret**. The client secret will be referenced in the YML files used to define the GitHub workflows later in this lab. @@ -252,4 +252,4 @@ Congratulations, you have successfully setup a sample CI/CD workflow using GitHu [Automate your workflow from idea to production](https://github.com/features/actions) -[!INCLUDE[footer-include](../../includes/footer-banner.md)] \ No newline at end of file +[!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/alm/when-edit-customization-file.md b/power-platform/alm/when-edit-customization-file.md index c069835239..016da09b94 100644 --- a/power-platform/alm/when-edit-customization-file.md +++ b/power-platform/alm/when-edit-customization-file.md @@ -37,7 +37,7 @@ The customizations.xml file that is exported as part of an unmanaged solution ca For more information, see [Change Application Navigation using the SiteMap](/dynamics365/customer-engagement/developer/customize-dev/change-application-navigation-using-sitemap) **Editing FormXml** - FormXml is used to define entity forms and dashboards. The form editor and dashboard designer in the application are the most commonly used tools for this purpose. Editing the customizations.xml file is an alternative method. For more information, see [Customize entity forms](/powerapps/developer/model-driven-apps/customize-entity-forms)and [Create a Dashboard](/powerapps/developer/model-driven-apps/create-dashboard). + FormXml is used to define entity forms and dashboards. The form editor and dashboard designer in the application are the most commonly used tools for this purpose. Editing the customizations.xml file is an alternative method. For more information, see [Customize entity forms](/powerapps/developer/model-driven-apps/customize-entity-forms) and [Create a Dashboard](/powerapps/developer/model-driven-apps/create-dashboard). **Editing saved queries** Definitions of views for entities are included in the customizations.xml file and may be manually edited. The view editor in the application is the most commonly used tool for this purpose. Editing customizations.xml is an alternative method. For more information, see [Customize entity views](/powerapps/developer/model-driven-apps/customize-entity-views). diff --git a/power-platform/copilot.yml b/power-platform/copilot.yml new file mode 100644 index 0000000000..0d5056a7ec --- /dev/null +++ b/power-platform/copilot.yml @@ -0,0 +1,97 @@ +### YamlMime:Landing + +title: Copilots and generative AI in Power Platform +summary: Get an overview of where to find documentation and training for copilots and generative AI in Power Platform. + +metadata: + title: Copilots and generative AI in Power Platform + description: Get an overview of where to find documentation and training for copilots and generative AI in Power Platform. + author: jhaskett-msft + ms.author: jhaskett + ms.date: 05/29/2024 + ms.topic: landing-page # DON'T CHANGE + ms.custom: bap-template #Required; don't change. + ms.collection: bap-ai-copilot + +# linkListType: concept | deploy | download | get-started | how-to-guide | overview | reference | sample | video | whats-new + +landingContent: + +# Card + - title: Copilot in Power Platform + linkLists: + - linkListType: get-started + links: + - text: Turn on copilots and generative AI features + url: admin/geographical-availability-copilot.md + - text: Copilot in Power Apps + url: /power-apps/maker/canvas-apps/ai-overview + - text: Copilot in Power Automate + url: /power-automate/copilot-overview + - text: Copilot in Power Pages + url: /power-pages/configure/ai-copilot-overview + +# Card + - title: Copilot training for Power Platform + linkLists: + - linkListType: learn + links: + - text: Get started with Copilot for Microsoft Power Platform + url: /training/paths/copilot-power-platform/ + - text: Create Power Platform solutions with AI and Copilot + url: /training/paths/copilot-solutions/ + - text: Create apps, copilots, flows, and more with Microsoft Dataverse and Teams + url: /training/paths/work-power-platform-teams/ + - text: Explore more training available + url: /training/browse/?products=power-platform&terms=copilot + + - title: Copilot guidance and development + linkLists: + - linkListType: concept + links: + - text: Use Copilot to generate deployment notes in pipelines + url: alm/copilot-deployment-notes-pipelines.md + - text: Microsoft Copilot for Microsoft 365 extensibility + url: /microsoft-365-copilot/extensibility/ + - linkListType: reference + links: + - text: Power Platform CLI pac copilot command + url: developer/cli/reference/copilot.md + +# Card +# - title: Copilot for industries +# linkLists: +# - linkListType: overview +# links: +# - text: Copilot for Finance +# url: /copilot/finance/index +# - text: Copilot for Sales +# url: /microsoft-copilot-sales/ +# - text: Copilot for Service +# url: /microsoft-copilot-service/ + +# Card + - title: Responsible AI + linkLists: + - linkListType: overview + links: + - text: FAQs for Microsoft Power Platform + url: responsible-ai-overview.md + - text: FAQs for Power Apps + url: /power-apps/maker/common/responsible-ai-overview + - text: FAQs for Power Automate + url: /power-automate/responsible-ai-overview + - text: FAQs for Power Pages + url: /power-pages/responsible-ai-overview + +## Card + - title: Related copilot products and resources + linkLists: + - linkListType: reference + links: + - text: Copilot availability in Power Platform by geography, language, product, and feature + url: https://aka.ms/bapcopilot-intl-report-external + - text: Microsoft Copilot Studio + url: /microsoft-copilot-studio/ + - text: Microsoft Copilot learning hub + url: /copilot/ diff --git a/power-platform/developer/TOC.yml b/power-platform/developer/TOC.yml index 4607e6cfb7..a878372e82 100644 --- a/power-platform/developer/TOC.yml +++ b/power-platform/developer/TOC.yml @@ -42,8 +42,10 @@ displayName: Overview of unified developer experience for finance and operations apps - name: Install development tools href: unified-experience\finance-operations-install-config-tools.md - - name: Write, deploy, and debug X++ code + - name: Tutorial-Write, deploy, and debug X++ code href: unified-experience\finance-operations-debug.md + - name: Workflow to write, deploy, debug and troubleshoot X++ code across multiple environments + href: unified-experience\finance-operations-innerloop.md - name: Unit testing href: unified-experience\finance-operations-testing.md - name: Request credentials for product database access @@ -75,50 +77,50 @@ - name: Power Platform CLI reference href: cli\reference\index.md items: - - name: pac admin - href: cli\reference\admin.md - - name: pac application - href: cli\reference\application.md - - name: pac auth - href: cli\reference\auth.md - - name: pac canvas - href: cli\reference\canvas.md - - name: pac catalog - href: cli\reference\catalog.md - - name: pac connection - href: cli\reference\connection.md - - name: pac connector - href: cli\reference\connector.md - - name: pac copilot - href: cli\reference\copilot.md - - name: pac data - href: cli\reference\data.md - - name: pac env - href: cli\reference\env.md - - name: pac help - href: cli\reference\help.md - - name: pac modelbuilder - href: cli\reference\modelbuilder.md - - name: pac package - href: cli\reference\package.md - - name: pac pages - href: cli\reference\pages.md - - name: pac pcf - href: cli\reference\pcf.md - - name: pac pipeline - href: cli\reference\pipeline.md - - name: pac plugin - href: cli\reference\plugin.md - - name: pac power-fx - href: cli\reference\power-fx.md - - name: pac solution - href: cli\reference\solution.md - - name: pac telemetry - href: cli\reference\telemetry.md - - name: pac test - href: cli\reference\test.md - - name: pac tool - href: cli\reference\tool.md + - name: pac admin + href: cli\reference\admin.md + - name: pac application + href: cli\reference\application.md + - name: pac auth + href: cli\reference\auth.md + - name: pac canvas + href: cli\reference\canvas.md + - name: pac catalog + href: cli\reference\catalog.md + - name: pac connection + href: cli\reference\connection.md + - name: pac connector + href: cli\reference\connector.md + - name: pac copilot + href: cli\reference\copilot.md + - name: pac data + href: cli\reference\data.md + - name: pac env + href: cli\reference\env.md + - name: pac help + href: cli\reference\help.md + - name: pac modelbuilder + href: cli\reference\modelbuilder.md + - name: pac package + href: cli\reference\package.md + - name: pac pages + href: cli\reference\pages.md + - name: pac pcf + href: cli\reference\pcf.md + - name: pac pipeline + href: cli\reference\pipeline.md + - name: pac plugin + href: cli\reference\plugin.md + - name: pac power-fx + href: cli\reference\power-fx.md + - name: pac solution + href: cli\reference\solution.md + - name: pac telemetry + href: cli\reference\telemetry.md + - name: pac test + href: cli\reference\test.md + - name: pac tool + href: cli\reference\tool.md - name: Power Platform Tools for Visual Studio items: - name: What is Power Platform Tools for Visual Studio diff --git a/power-platform/developer/appsource/appendix-add-license-information-to-your-solution.md b/power-platform/developer/appsource/appendix-add-license-information-to-your-solution.md index 78bc89f3f0..d6d69dd37e 100644 --- a/power-platform/developer/appsource/appendix-add-license-information-to-your-solution.md +++ b/power-platform/developer/appsource/appendix-add-license-information-to-your-solution.md @@ -84,7 +84,7 @@ The plan definition file must include the following columns laid out in the form **Service ID:** This is created automatically when you create a plan in the Partner Center as part of the offer creation. Copy it from partner center into the plan definition file. More information: [Create plans in Partner Center](/azure/marketplace/dynamics-365-customer-engage-plans). -**Display Name:** This is a descriptive name for your plan which you can choose. It will be show to users on license check error screens so it should be easily recognizable to your customers. +**Display Name:** This is a descriptive name for your plan which you can choose. It will be shown to users on license check error screens so it should be easily recognizable to your customers. **More info URL:** This is a URL where you would like to direct users to get more information about your solution, in the event they run into a license check error. diff --git a/power-platform/developer/cli/reference/includes/auth-create-intro.md b/power-platform/developer/cli/reference/includes/auth-create-intro.md index b02c5eb9e1..aba0932ce8 100644 --- a/power-platform/developer/cli/reference/includes/auth-create-intro.md +++ b/power-platform/developer/cli/reference/includes/auth-create-intro.md @@ -28,7 +28,7 @@ pac auth create --environment < Your environment ID > > [!TIP] > To find an environment id: -> 1. Open [Power Platform admin center](https://admin.powerplatform.microsoft.com) and select an the **Environment** you want to connect to. +> 1. Open [Power Platform admin center](https://admin.powerplatform.microsoft.com) and select the **Environment** you want to connect to. > In the **Details** section, look for **Environment ID** #### Named Create diff --git a/power-platform/developer/cli/reference/includes/connector-init-intro.md b/power-platform/developer/cli/reference/includes/connector-init-intro.md index b166f8cf9c..d82ca82538 100644 --- a/power-platform/developer/cli/reference/includes/connector-init-intro.md +++ b/power-platform/developer/cli/reference/includes/connector-init-intro.md @@ -9,7 +9,7 @@ This example initializes a connector in the current directory. ```powershell pac connector init ` --connection-template "OAuthAAD" ` - --generate-script-file "contoso_script_file" ` - --generate-settings-file "contoso_settings_file" ` + --generate-script-file ` + --generate-settings-file ` --outputDirectory "contoso_Connector" ``` diff --git a/power-platform/developer/cli/reference/includes/connector-list-remarks.md b/power-platform/developer/cli/reference/includes/connector-list-remarks.md index c7a031cb6e..820703bbdb 100644 --- a/power-platform/developer/cli/reference/includes/connector-list-remarks.md +++ b/power-platform/developer/cli/reference/includes/connector-list-remarks.md @@ -1,3 +1,7 @@ #### `--json` -Returns the output of the command as a JSON formatted string. \ No newline at end of file +Returns the output of the command as a JSON formatted string. + +### Remarks + +Only solution-aware connectors are shown. When your connector isn't in this command's response, it's probably because of the fact that your connector isn't solution-aware. diff --git a/power-platform/developer/cli/reference/includes/copilot-list-intro.md b/power-platform/developer/cli/reference/includes/copilot-list-intro.md index 4dc88d94b3..4546744d21 100644 --- a/power-platform/developer/cli/reference/includes/copilot-list-intro.md +++ b/power-platform/developer/cli/reference/includes/copilot-list-intro.md @@ -10,6 +10,6 @@ The command returns output like the following: ```Text Name Bot ID Component State Is Managed Solution ID Status Code State Code -Ask Me Anytyhing Copilot 584e012c-dc95-46d6-af5a-1263b6a44342 Published Unmanaged 285af946-6383-49a0-8615-4e2afafeaf38 Active Provisioned +Ask Me Anything Copilot 584e012c-dc95-46d6-af5a-1263b6a44342 Published Unmanaged 285af946-6383-49a0-8615-4e2afafeaf38 Active Provisioned New Test Copilot 9ee3f7aa-ab79-4cf6-a726-d85c8c18cc3e Published Unmanaged 285af946-6383-49a0-8615-4e2afafeaf38 Active Provisioned ``` diff --git a/power-platform/developer/cli/reference/includes/env-list-settings-intro.md b/power-platform/developer/cli/reference/includes/env-list-settings-intro.md index fc415d3715..ab00959ceb 100644 --- a/power-platform/developer/cli/reference/includes/env-list-settings-intro.md +++ b/power-platform/developer/cli/reference/includes/env-list-settings-intro.md @@ -1,9 +1,29 @@ - \ No newline at end of file +C:\Users\you>pac env list-settings --filter number +Connected as you@yourorg.com +Setting Value +currentbulkoperationnumber 1,000 +currentcampaignnumber 1,000 +currentcasenumber 1 +currentcategorynumber 1,000 +currentcontractnumber 1,000 +currentimportsequencenumber 1 +currentinvoicenumber 1,000 +currentkanumber 1,000 +currentkbnumber 1,000 +currentordernumber 1,000 +currentparsedtablenumber 1 +currentquotenumber 1,000 +maximumtrackingnumber 999 +nexttrackingnumber 0 +numberformat us +numbergroupformat 3 +numberseparator , +recurrencedefaultnumberofoccurrences 10 +showweeknumber No +timezoneruleversionnumber 0 +versionnumber 19,810,412 +``` \ No newline at end of file diff --git a/power-platform/developer/cli/reference/includes/env-list-settings-remarks.md b/power-platform/developer/cli/reference/includes/env-list-settings-remarks.md index 89e8a8dd68..35f59c2ffd 100644 --- a/power-platform/developer/cli/reference/includes/env-list-settings-remarks.md +++ b/power-platform/developer/cli/reference/includes/env-list-settings-remarks.md @@ -1,8 +1,9 @@ - \ No newline at end of file +[Learn more about reading and updating environment settings](/power-apps/developer/data-platform/organization-table) \ No newline at end of file diff --git a/power-platform/developer/cli/reference/includes/env-update-settings-remarks.md b/power-platform/developer/cli/reference/includes/env-update-settings-remarks.md index 89e8a8dd68..c2f6211d66 100644 --- a/power-platform/developer/cli/reference/includes/env-update-settings-remarks.md +++ b/power-platform/developer/cli/reference/includes/env-update-settings-remarks.md @@ -1,8 +1,5 @@ - \ No newline at end of file +[Learn more about reading and updating environment settings](/power-apps/developer/data-platform/organization-table) \ No newline at end of file diff --git a/power-platform/developer/cli/reference/includes/power-fx-repl-remarks.md b/power-platform/developer/cli/reference/includes/power-fx-repl-remarks.md index 9376f9d288..a87f5907c6 100644 --- a/power-platform/developer/cli/reference/includes/power-fx-repl-remarks.md +++ b/power-platform/developer/cli/reference/includes/power-fx-repl-remarks.md @@ -20,7 +20,7 @@ The following examples show the use of the `pac power-fx repl` command. ##### Add rows -```powerapps-dot +```power-fx Collect(Contacts, { firstname: "Patti", lastname: "Fernandez" }) ``` @@ -34,7 +34,7 @@ The Power Fx repl responds with the following: Run the following command to get help about all the commands that are available in Power Fx repl: -```powerapps-dot +```power-fx Help() ``` diff --git a/power-platform/developer/cli/reference/includes/power-fx-run-intro.md b/power-platform/developer/cli/reference/includes/power-fx-run-intro.md index 60d02e6983..9c86a82d91 100644 --- a/power-platform/developer/cli/reference/includes/power-fx-run-intro.md +++ b/power-platform/developer/cli/reference/includes/power-fx-run-intro.md @@ -22,7 +22,7 @@ The following examples show the use of the `pac power-fx run` command. 1. Add the following text to `test-pfx.txt` and save the file. - ```powerapps-dot + ```power-fx Collect(Contacts, { firstname: "Megan", lastname: "Bowen" }) Collect(Contacts, { firstname: "Garth", lastname: "Forth" }) Collect(Contacts, { firstname: "Adele", lastname: "Vance" }) @@ -49,7 +49,7 @@ The following examples show the use of the `pac power-fx run` command. 1. Add this text to `test-pfx.txt` and save the file. - ```powerapps-dot + ```power-fx FirstN(Contacts, 5) ``` @@ -81,7 +81,7 @@ The following examples show the use of the `pac power-fx run` command. 1. Add the following text to `test-pfx.txt` and save the file. - ```powerapps-dot + ```power-fx Set(x, 1) Result = If( Mid( "asdf",x,1 ) = "a", "X", "Y" ) ``` diff --git a/power-platform/developer/howto/install-cli-net-tool.md b/power-platform/developer/howto/install-cli-net-tool.md index 29858e70e8..f1010b28a0 100644 --- a/power-platform/developer/howto/install-cli-net-tool.md +++ b/power-platform/developer/howto/install-cli-net-tool.md @@ -26,7 +26,7 @@ You can install, update, and uninstall the Power Platform CLI using [.NET tool c ## Prerequisites -You must have .NET installed. .NET 6.0 is recommended. +You must have .NET installed. (.NET 6.0 is recommended.) # [Windows](#tab/windows) diff --git a/power-platform/developer/howto/install-vs-code-extension.md b/power-platform/developer/howto/install-vs-code-extension.md index 658d0878e0..3a898294a1 100644 --- a/power-platform/developer/howto/install-vs-code-extension.md +++ b/power-platform/developer/howto/install-vs-code-extension.md @@ -97,7 +97,7 @@ If you choose to [install a previous version](#install-a-previous-version), you' By default, the Visual Studio Code extension only enables commands using the Visual Studio Code PowerShell terminal. -To enable using PAC CLI in in Command Prompt (CMD) and PowerShell terminals for Windows, you can do any of the following: +To enable using PAC CLI in Command Prompt (CMD) and PowerShell terminals for Windows, you can do any of the following: - [Install Power Platform CLI with .NET Tool](install-cli-net-tool.md) - [Install Power Platform CLI using Windows MSI](install-cli-msi.md) diff --git a/power-platform/developer/index.yml b/power-platform/developer/index.yml index e6e5afec82..3940e7b7a4 100644 --- a/power-platform/developer/index.yml +++ b/power-platform/developer/index.yml @@ -152,7 +152,7 @@ landingContent: url: /analysis-services/analysis-services-developer-documentation/ # Card - - title: Power Virtual Agents + - title: Copilot Studio linkLists: - linkListType: reference links: diff --git a/power-platform/developer/unified-experience/finance-operations-debug.md b/power-platform/developer/unified-experience/finance-operations-debug.md index 23617538c7..d4c6172be2 100644 --- a/power-platform/developer/unified-experience/finance-operations-debug.md +++ b/power-platform/developer/unified-experience/finance-operations-debug.md @@ -1,15 +1,15 @@ --- -title: "Write, deploy, and debug X++ code" -description: "Learn how to write an X++ class, deploy it, and then debug it in the unified developer experience." +title: "Tutorial: Write, deploy, and debug X++ code" +description: "Try a tutorial on how to create a module, write an X++ class, deploy it, and then debug it using the unified developer experience." author: pvillads -ms.date: 08/21/2023 +ms.date: 06/06/2024 ms.topic: how-to ms.reviewer: phecke -ms.author: pvillads +ms.author: pathaku ms.subservice: developer --- -# Write, deploy, and debug X++ code +# Tutorial: Write, deploy, and debug X++ code The unified developer experience for finance and operation apps enables you to write code on your local development computer and run it inside a cloud service. There exists a separation of functionality between these two tiers (local and cloud). @@ -24,13 +24,11 @@ This article shows you how to: Let's begin by developing a runnable X++ class to use as an example. The class's only task is to log a message into the Infolog. The important thing here isn't what the runnable class does, rather it's how we compile, run, and debug it. If you want to learn about the X++ language, see the [programming reference](/dynamics365/fin-ops-core/dev-itpro/dev-ref/xpp-language-reference). - > [!IMPORTANT] > You can learn more by watching presentation and demos done for the Dynamics 365 FastTrack Tech Talk series > ->[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) - - +> [Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) + ## Prerequisites You should have access to a unified developer environment, the Visual Studio tools extensions installed and configured on your developer machine and connected to the same environment. It's important to keep the metadata changes on your developer machine deployed to the connected environment . @@ -61,7 +59,7 @@ We start by creating a model in Visual Studio. Create a project and X++ class in Visual Studio by following these steps. 1. Create a project in Visual Studio that contains the runnable class. The name of the class isn't important here. For this exercise, keep the default name that is FinanceOperations3. -1. Add a runnable class to the project in **Solution Explorer** by right-clicking the project and choosing **Add** > **New item**. +1. Add a runnable class to the project in **Solution Explorer** by right-clicking the project and choosing **Add** > **New item**. 1. Select a **Runnable Class** in the **Code** menu under **Dynamics 365 items**, and call it "MyRunnableClass". Visual Studio opens a window with the template for a runnable class providing a static `main` method that is called as the runnable class runs. 1. Add the following X++ code to the `main` method. Since we're only providing a token implementation here, add a call to log a string message in the Infolog: @@ -89,16 +87,16 @@ At this point you're accessing the endpoint in the cloud, so unless you are alre > [!IMPORTANT] > There are different ways to deploy your changes to the unified development environment. -> -> 1. Deploy the full model via the **Dynamics 365** > **Deploy** > **Deploy models ...** dialog. You can choose to synchronize the database if so desired. > -> 2. As part of a full build, deploy the full model. This deployment is initiated via the **Dynamics 365** > **Build models** dialog if the option to **Deploy to connected online environment** is turned on. The tool will synchronize database or not based on the **synchronize database** setting on the same **Options** tab. +> 1. Deploy the full model via the **Dynamics 365** > **Deploy** > **Deploy models ...** dialog. You can choose to synchronize the database if so desired. +> +> 2. As part of a full build, deploy the full model. This deployment is initiated via the **Dynamics 365** > **Build models** dialog if the option to **Deploy to connected online environment** is turned on. The tool will synchronize database or not based on the **synchronize database** setting on the same **Options** tab. > -> 3. As part of an incremental build from Solution Explorer, setting **Deploy changes to online environment** to true will only deploy changes since the last successful deployment or those made as part of this build. It will honor the project settings for **Synchronize database**. +> 3. As part of an incremental build from Solution Explorer, setting **Deploy changes to online environment** to true will only deploy changes since the last successful deployment or those made as part of this build. It will honor the project settings for **Synchronize database**. > -> 4. Right-click a project and choose to **Deploy model for project ...**. This will only deploy changes since last successful deployment but will not synchronize the database for the module. +> 4. Right-click a project and choose to **Deploy model for project ...**. This will only deploy changes since last successful deployment but will not synchronize the database for the module. > -> 5. Synchronize the database for all models without deploying anything new via **Dynamics 365** > **Synchronize database...**. +> 5. Synchronize the database for all models without deploying anything new via **Dynamics 365** > **Synchronize database...**. You can follow the progress of the deployment by navigating to the "FinOps Cloud Runtime" drop down in the Visual Studio output window. Once that deployment is complete, you can see log information by following the link displayed in the output window. @@ -151,8 +149,8 @@ We started with using Visual Studio to create a simple runnable class. After the ### See also -[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) -[Unit testing in the unified developer experience](finance-operations-testing.md) +[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) +[Unit testing in the unified developer experience](finance-operations-testing.md) [Create and manage environments in the Power Platform admin center](/power-platform/admin/create-environment) [Manage Dynamics 365 apps](../../admin/manage-apps.md) diff --git a/power-platform/developer/unified-experience/finance-operations-dev-overview.md b/power-platform/developer/unified-experience/finance-operations-dev-overview.md index 8d0c18623b..7901c9228b 100644 --- a/power-platform/developer/unified-experience/finance-operations-dev-overview.md +++ b/power-platform/developer/unified-experience/finance-operations-dev-overview.md @@ -2,7 +2,7 @@ title: "Unified developer experience for finance and operations apps" description: Learn about developing code for finance and operations apps using the new Power Platform unified developer experience. author: pvillads -ms.date: 08/22/2023 +ms.date: 06/21/2024 ms.topic: overview ms.reviewer: pehecke ms.author: pvillads @@ -11,33 +11,33 @@ ms.subservice: developer # Unified developer experience for finance and operations apps -The unified developer experience consolidates the disparate developer tools and environments across finance and operations apps and Power Platform to reduce friction and simplify working across these apps. Finance and operations apps provide a rich ecosystem for professional developers by using a metadata and code-based development environment for mission critical scenarios. Power Platform brings the ability to author solutions quickly and seamlessly using low-code development paradigms and leverages Microsoft Dataverse as the relational data store. Power Platform also adds the ability to build and deploy your solutions using a continuous integration and deployment (CI/CD) pipeline. +The unified developer experience consolidates the disparate developer tools and environments across finance and operations apps and Power Platform to reduce friction and simplify working across these apps. Finance and operations apps provide a rich ecosystem for professional developers by using a metadata and code-based development environment for mission critical scenarios. Power Platform brings the ability to author solutions quickly and seamlessly using low-code development paradigms and uses Microsoft Dataverse as the relational data store. Power Platform also adds the ability to build and deploy your solutions using a continuous integration and deployment (CI/CD) pipeline. ## Typical scenario -Consider a typical scenario where a developer would create a simple app for capturing orders in Microsoft Power Apps and persisting the gathered data in Dataverse. By means of the data synchronization engines mentioned below, the data would be available for finance and operations apps to do the heavy lifting of determining whether the requested items are available and pricing, etc. The results would be available near real-time in Power Apps. +Consider a typical scenario where a developer would create an app for capturing orders in Microsoft Power Apps and persisting the gathered data in Dataverse. With the data synchronization engines mentioned below, the data would be available for finance and operations apps to do the heavy lifting of determining whether the requested items are available and pricing and more. The results would be available near real-time in Power Apps. ## Finance and operations app development -Development for finance and operations apps is accomplished in Visual Studio using the Visual Studio extension. This development environment provides everything a professional developer would expect. The unified environment runs in the cloud, and because of that we have made several changes and improvements to the way a developer works with finance and operations apps. However, existing finance and operations app developers will find that the large majority of their workflows will not be different from what they are used to. The article [Write, deploy, and debug X++ code](finance-operations-debug.md) walks you through how to build X++ code, deploy it to the cloud, execute and debug it there. All other content that you are likely to find about finance and operations app development, like how to extend existing code, is likely to still hold true. +Development for finance and operations apps is accomplished in Visual Studio using the Visual Studio extension. This development environment provides everything a professional developer would expect. The unified environment runs in the cloud, and because of that we have made several changes and improvements to the way a developer works with finance and operations apps. However, existing finance and operations app developers find that most of their workflows aren't different from what they're used to. The article [Write, deploy, and debug X++ code](finance-operations-debug.md) walks you through how to build X++ code, deploy it to the cloud, execute and debug it there. All other content that you're likely to find about finance and operations app development, like how to extend existing code, is likely to still hold true. More information: [Install and configure development tools](finance-operations-install-config-tools.md) ## Power Platform -Power Platform is supported by a rich development ecosystem. There is a rich set of tools in Power Platform that you can leverage for development. In particular, the Dataverse relational database management system is utilized by the unified developer experience. Many unified solutions work by synchronizing data between tables in the finance and operations app database and tables (entities) in Dataverse. There are two technologies for that: dual-write, and virtual entities. +Power Platform is supported by a rich development ecosystem. There's a rich set of tools in Power Platform that you can use for development. In particular, the Dataverse relational database management system is utilized by the unified developer experience. Many unified solutions work by synchronizing data between tables in the finance and operations app database and tables (entities) in Dataverse. There are two technologies for that: dual-write and virtual entities. More information: [Microsoft Power Platform developer documentation](../index.yml) -### Dual Write +### Dual-write -Dual-write provides a tightly coupled near real-time and bi-directional integration between the finance and operations apps and Dataverse. Once an entity is enabled for dual-write, any create, update, or delete change in finance and operations apps results in writes to Dataverse and vice versa. For example, a change in the Customer entity in finance and operations apps is reflected in the Account entity in Dataverse and vice-versa. While all this happens with minimal setup, Power Platform does provide an advanced user interface for all your customization needs. +Dual-write provides a tightly coupled near real-time and bi-directional integration between the finance and operations apps and Dataverse. Once an entity is enabled for dual-write, any create, update, or delete change in finance and operations apps results in writes to Dataverse, and any such change in Dataverse results in writes to finance and operations apps. For example, a change in the Customer entity in finance and operations apps is reflected in the Account entity in Dataverse. Likewise, a change in the Account entity in Dataverse is reflected in the Customer entity in finance and operations apps. While all this happens with minimal setup, Power Platform does provide an advanced user interface for all your customization needs. -More information: [DualWrite](https://powerapps.microsoft.com/blog/announcing-dual-write-preview). +More information: [DualWrite](https://powerapps.microsoft.com/blog/announcing-dual-write-preview/). ### Virtual tables -Virtual tables, also known as virtual entities, enable the integration of data residing in external systems (including finance and operations). The virtual table capability seamlessly represents external data in Dataverse tables without replication of data and often without custom coding. +Virtual tables, also known as virtual entities, enable the integration of data residing in external systems (including finance and operations apps). The virtual table capability seamlessly represents external data in Dataverse tables without replication of data and often without custom coding. More information: [Virtual Tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve). @@ -53,7 +53,7 @@ Set up Visual Studio on your local development computer. [Install and configure development tools](finance-operations-install-config-tools.md) [Write, deploy, and debug X++ code](finance-operations-debug.md) [Frequently asked questions](finance-operations-faq.md) -[Tutorial: Provision a new environment with an ERP-based template](../../admin/unified-experience/tutorial-deploy-new-environment-with-ERP-template.md#tutorial-provision-a-new-environment-with-an-erp-based-template-preview) +[Tutorial: Provision a new environment with an ERP-based template](../../admin/unified-experience/tutorial-deploy-new-environment-with-erp-template.md) [Develop and customize home page](/dynamics365/fin-ops-core/dev-itpro/dev-tools/developer-home-page) (Dynamics 365 legacy information) [Unified admin experience for finance and operations apps](../../admin/unified-experience/finance-operations-apps-overview.md) diff --git a/power-platform/developer/unified-experience/finance-operations-faq.md b/power-platform/developer/unified-experience/finance-operations-faq.md index 4c322589d2..476491bb8d 100644 --- a/power-platform/developer/unified-experience/finance-operations-faq.md +++ b/power-platform/developer/unified-experience/finance-operations-faq.md @@ -2,7 +2,7 @@ title: "Frequently asked questions" description: FAQs for the Power Platform unified developer experience. author: pvillads -ms.date: 05/22/2024 +ms.date: 06/06/2024 ms.topic: faq ms.reviewer: pehecke ms.author: pvillads @@ -93,7 +93,7 @@ Error message: ### My Operations fails with error EnvironmentNotInReadyState -This result happens when the the unified developer environment isn't ready to service the request. Retry after a few minutes. You can check if the environment is in the ready state by opening the finance and operations environment link. +This result happens when the unified developer environment isn't ready to service the request. Retry after a few minutes. You can check if the environment is in the ready state by opening the finance and operations environment link. ### What is the earliest version of source environment I can copy from? @@ -125,10 +125,18 @@ Additionally, a **Full DB Sync** from the Dynamics 365 menu in **Extensions** is Locate ModelUtil.exe inside the bin folder and run it from the command line to see usage. Choose the `-convertToUnifiedPackage` option and provide the package zip and output location as parameters. +### How can I create a fully deployable package (Lifecycle Services legacy package) from Visual Studio? + +For UDE we have moved on to Power Platform Unified Package format but you can still create the fully deployable package from Azure DevOps pipelines in addition to the unified format. + ### Stopping debugging restarts the runtime Use **Detach All** to end debugging in place of **Stop Debugging**. +### Are you still improving developer experiences in UDE? + +Yes, we are focused on improving developer experiences across all scenarios encompassing F&O, Dataverse and all of Power Platform. These include login, deployment, troubleshooting, SSRS and richer, uniform and modern UX across the board. + ## Checking logs and history ### I applied a package, but it failed. How can I do further debugging to determine the failure? @@ -154,6 +162,7 @@ You can check the packages applied and other updates to your Finance and Operati ### My operation failed, and wasn't able to find sufficient information in the logs. What information do I provide to Microsoft Support? The correlation ID, client machine name, and timestamp are required for Microsoft to investigate. The correlation ID is in the Visual Studio output pane. + The logs are also written to Microsoft.PowerPlatformVSExtension*.log files in C:\Users\\AppData\Local\Microsoft\Dynamics365\Logs. Additionally, a log file named VisualStudioD365Extension*.log is generated at a path similar to C:\Users\AppData\Roaming\Microsoft Corporation\Microsoft® Visual Studio®\\VisualStudioD365Extension-*.log. @@ -165,8 +174,8 @@ Learn more about observability: [Monitoring and telemetry using Application Insi ### See also -[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk Dev](https://www.youtube.com/watch?v=OuEZ1rXkpYY) -[Unified developer experience for finance and operations apps](finance-operations-dev-overview.md) +[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk Dev](https://www.youtube.com/watch?v=OuEZ1rXkpYY) +[Unified developer experience for finance and operations apps](finance-operations-dev-overview.md) [Install and configure development tools](finance-operations-install-config-tools.md) [Write, deploy, and debug X++ code](finance-operations-debug.md) [Unit testing in the unified developer experience](finance-operations-testing.md) diff --git a/power-platform/developer/unified-experience/finance-operations-innerloop.md b/power-platform/developer/unified-experience/finance-operations-innerloop.md new file mode 100644 index 0000000000..09bc895989 --- /dev/null +++ b/power-platform/developer/unified-experience/finance-operations-innerloop.md @@ -0,0 +1,128 @@ +--- +title: "Workflow to write, deploy, debug, and troubleshoot X++ code across multiple environments" +description: "Learn how to work over time with multiple unified development environments, ISV modules, and troubleshooting as you go." +author: pathaku +ms.date: 06/11/2024 +ms.topic: how-to +ms.reviewer: phecke +ms.author: pathaku +ms.subservice: developer +--- + +# Workflow to write, deploy, debug, and troubleshoot X++ code across multiple environments + +This article describes a workflow to write, deploy, debug, and troubleshoot X++ code across multiple environments. + +> [!NOTE] +> You can learn more by watching the presentation and demos for the Dynamics 365 FastTrack Tech Talk series. +> [Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) + +Let's start by talking about a development machine with multiple unified developer environments. + +## Multiple unified development environments + +s +A developer machine can be used to connect to multiple unified development environments. However, an instance of Visual Studio can at any time be connected to only one environment and have only one metadata configuration active. You can switch the active configuration using the menu item **Extensions** > **Dynamics 365** > **Configure Metadata**. + +Switching the active metadata configuration doesn't change the environment you're connected to. You can change it from the Visual Studio menu item **Tools** > **Connect to Dataverse**. + +The same configuration may be valid for multiple environments with same finance and operation application and platform versions. It's still better to have a metadata configuration per environment. These configurations can have common values for custom and reference metadata folder, and more. The current configuration and the current connection together determine what gets deployed and to which environment. + +Different environments with different finance and operation application and platform versions could be used for different purposes. It is recommended that the finance and operation Visual studio extension version matches with the environment. + +The X++ compiler, label compiler, and other tools invoked by any version of the Visual Studio extension corresponds to the application version of the active configuration you have set as current. + +If there are no breaking changes among the various targeted application and platform versions using the oldest version for the finance and operation, the Visual Studio extension version would ensure that the built artifacts are compatible with higher runtime versions in the environments. + +## A unified developer environment and multiple developer machines + +Whether talking about the same or a different developer, if multiple development machines are used it becomes more likely, but not inevitable, to unintentionally corrupt the common unified development environment. This could happen when deploying a change that does not account for what is already deployed to the same environment. + +The situation described above could also arise from the same development machine, in case the custom metadata code loses consistency, for example by switching Git branches. + +The way to keep things consistent and prevent unintended changes to the unified development environments is to use version control, for example Azure DevOps with Git, to ensure a referenced record of what is deployed to any environment. + +> [!IMPORTANT] +> We cannot emphasize enough the important role of version control to ensure good code hygiene and to provide historical records, checkpoints, and synchronization points. + +## Deploy code and synchronize the database + +Let's look at your options when deploying code and synchronizing the database on a unified development environment. + +| Scenario | Deployment method | Notes | +|---|---|---| +|Deploy one or many modules that are already built | Use the **Dynamics 365** > **Deploy** > **Deploy models ...** dialog.|You can optionally synchronize the database for the modules.| +|Deploy one or many modules as part of a full build | Initiate via the **Dynamics 365** > **Build models** dialog after setting the option to **Deploy to connected online environment** .|You can optionally synchronize the database for the modules using the **synchronize database** setting on the same **Options** tab.| +|Deploy one or many modules as part of a build/rebuild of X++ projects from Solution Explorer | Initiate via build/rebuild of the project(s) or solution after setting the option to **Deploy changes to online environment** . This only deploys changes since the last successful deployment and is faster |You can optionally synchronize the database for the included changes| +|Deploy one module for a given X++ project from the Solution Explorer | Initiate via right-clicking the project and choosing **Deploy model for project ...**.| This will only deploy changes since last successful deployment but won't synchronize the database for the module.| +|No deploying any module but synchronize the database for all modules in the environment | Initiate via **Dynamics 365** > **Synchronize database...** dialog.|This is a long running operation since DBSync is run for all modules.| + +> [!NOTE] +> +> - Continuous incremental build and deployment could be much faster than full deployment for large modules. +> - For binary only modules received from ISVs or other third parties, do a full deployment and DB sync. +> - Do not change and try to deploy system modules. + +## Add modules received from ISVs or others + +You can receive X++ modules in many different ways. It could be shared with you as zip files or fully deployable packages, individually or a collection of modules, with code or binary only, including ISV licenses or not. + +In all these cases you would want to version them by checking them into some version control system. You would then want to update the active metadata configuration to refer to them. + +Proceed by adding a new reference in **Folders for reference metadata** by clicking the **Add** button and navigating to the common parent folder for all the reference modules. As an example, if you want to add Module01 and Module02, place them in a common folder (for example E:\ISVModules) and then refer the latter parent folder. + +## When to include a license for modules + +Licenses can be directly included and deployed by placing them in the __License (with _two_ underscores) folder in the model, at the same level as your bin folder. This license is verified and applied when you deploy the package. + +As an example, if you want to add a license file **licenseFile01** for Module01 present at E:\ISVModules\Module01, create a child folder E:\ISVModules\Module01\__License and place the file in it as E:\ISVModules\Module01\__License\licenseFile01. Additionally, a **Full DB Sync** from the Dynamics 365 menu in **Extensions** is required for the applied license to take effect. + +Learn more at [Independent software vendor (ISV) licensing](/dynamics365/fin-ops-core/dev-itpro/dev-tools/isv-licensing) + +## Convert a fully deployable package (Lifecycle Services legacy package) into the new format + +Let's describe how to convert a fully deployable package (Lifecycle Services legacy package) into the new format to be compatible for deployment to environments. + +Locate ModelUtil.exe inside the bin folder and run it from the command line to see usage. Next, choose the `-convertToUnifiedPackage` option and provide the package zip and output location as parameters. + +> [!NOTE] +> The conversion to a unified package may fail with message ending with - The file 'temp path\modelName\bin\fileName' already exists. This occurs if multiple versions of the model are identified in the original package. +> +> Solution: Ensure/recreate the original package making sure that only one version of each model is present in the package at location /AOSService/Packages/files/. + +## Troubleshoot deployment or DBSync failures + +The package deployment could fail in various stages including DB sync, for various reasons including developer bugs. A link to download operation logs is available in the Visual Studio output pane. It's downloaded if there were failures, or if you enable the setting in **Tools> Options> Power Platform Tools**. + +You can also download the logs from your Dataverse organization by following these steps. + +1. Sign in to the Dataverse organization +1. Find **Finance and Operation Package Manager App** on the main page +1. Select the app, and then from left pane, select **Operation History** +1. Open the respective record by selecting the **Operation Name** and download the operation logs (`operationlogs.zip` file) + +## Deployment and DBSync succeeded but need to investigate my changes + +If deployment and DB Sync are successful, you should execute your scenario and contrast expected and actual behavior for clues. Infolog is often very helpful in this case. + +If above issn't enough, you should attach the debugger to the running AOS process in the unified environment using the menu **Dynamics 365** > **Launch debugger**. Executing the scenario this time with a few breakpoints set will give you better insight. + +We recommend writing X++ unit tests for your code to ensure regressions are easily and quickly detected. You could also use Application Insights to monitor and diagnose the application executing in the unified developer environment. + +Learn more about observability: [Monitoring and telemetry using Application Insights](/dynamics365/fin-ops-core/dev-itpro/sysadmin/monitoring-and-telemetry-appinsights) + +## What information to provide Microsoft Support? + +The correlation ID, client machine name, and timestamp are required for Microsoft to investigate. The correlation ID is in the Visual Studio output pane. + +The logs are also written to Microsoft.PowerPlatformVSExtension*.log files in C:\Users\\AppData\Local\Microsoft\Dynamics365\Logs. Additionally, a log file named VisualStudioD365Extension*.log is generated at a path similar to C:\Users\AppData\Roaming\Microsoft Corporation\Microsoft® Visual Studio®\\VisualStudioD365Extension-*.log. + +### See also + +[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) +[Write, deploy, and debug X++ code](finance-operations-debug.md) +[Unit testing in the unified developer experience](finance-operations-testing.md) +[Create and manage environments in the Power Platform admin center](/power-platform/admin/create-environment) +[Manage Dynamics 365 apps](../../admin/manage-apps.md) + +[!INCLUDE [footer-banner](../../includes/footer-banner.md)] diff --git a/power-platform/developer/unified-experience/finance-operations-install-config-tools.md b/power-platform/developer/unified-experience/finance-operations-install-config-tools.md index 78d1277b03..94c73f986c 100644 --- a/power-platform/developer/unified-experience/finance-operations-install-config-tools.md +++ b/power-platform/developer/unified-experience/finance-operations-install-config-tools.md @@ -1,8 +1,8 @@ --- -title: "Install and configure development tools (preview)" +title: "Install and configure development tools" description: Set up required finance and operations app development tools on your local computer. author: pvillads -ms.date: 05/30/2024 +ms.date: 06/06/2024 ms.topic: how-to ms.reviewer: pehecke ms.author: pathaku @@ -15,12 +15,10 @@ contributors: This article describes how to install and configure required Visual Studio finance and operations tools into your local development environment. The instructions in each section should be followed in the order presented in this article. - > [!IMPORTANT] > You can learn more by watching presentation and demos done for the Dynamics 365 FastTrack Tech Talk series > ->[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) - +> [Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) ## Prerequisites @@ -46,7 +44,7 @@ After installing the Power Platform Tools extension for Visual Studio, follow th - **Download Dynamics 365 FinOps assets** always downloads. 1. Select the desired options in the dialog and select **Login**. - + If you need to use another account or a different online environment, don't choose to use the signed-in user. Enter the credentials for your developer user account with access to the online environment. 1. Select an available solution in the dialog, and then choose **Done**. @@ -55,7 +53,7 @@ After installing the Power Platform Tools extension for Visual Studio, follow th > [!NOTE] > If you have only one online development environment, the organization list dialog may not be shown as you would automatically connect to the environment. > :::image type="content" source="../media/unified-experience/UnoVSConnect.png" alt-text="Menu for connecting to unified environment from Visual Studio."::: - > + > > :::image type="content" source="../media/unified-experience/UnoLogin.png" alt-text="Login dialog when connecting to unified environment from Visual Studio with Show Advanced selected."::: > > If your account requires multi factor authentication, uncheck all checkboxes on login screen. @@ -65,7 +63,7 @@ After installing the Power Platform Tools extension for Visual Studio, follow th > :::image type="content" source="../media/unified-experience/UnoOption2.png" alt-text="Visual Studio> Tools> Options> Power Platform Tools to skip Discovery"::: > > :::image type="content" source="../media/unified-experience/UnoLogin2.png" alt-text="Login dialog when connecting to unified environment from Visual Studio."::: - > + > > :::image type="content" source="../media/unified-experience/UnoEnvironmentUri.png" alt-text="Dialog to obtain the Dataverse uri to the unified development environment."::: ## Download and install the finance and operations extension and metadata @@ -114,9 +112,10 @@ Unpack the `PackagesLocalDirectory.zip` file as `PackagesLocalDirectory`. We rec > This is only required when the Visual Studio output pane indicates it is. Using Windows File Explorer, from the folder `C:\Users\\AppData\Local\Microsoft\Dynamics365\`, open the `Microsoft.Dynamics.FinOps.ToolsVS2022.vsix` file to install the extension. + On first start of Visual Studio after updating/installing the Microsoft.Dynamics.FinOps.ToolsVS2022 VS extension, you will be prompted for elevated permissions for the extension to register the URLProtocoloHandler, setup build targets, to extract compiler files, etc. -### Configure the finance and operations extension +### Configure the finance and operations extension > [!NOTE] > This is not required when auto setup is enabled. @@ -126,7 +125,7 @@ To configure the extension, follow these instructions. 1. Start Visual Studio, and then select **Continue without code** from the dialog. 1. Navigate to **Extensions** > **Dynamics 365** > **Configure Metadata** for the first time. - + :::image type="content" source="../media/unified-experience/D365FinOpsConfigureMetadataMenu.png" alt-text="Configure Metadata menu"::: 1. On the configuration form, select **New** and then create a new configuration. Refer to the field descriptions provided in the [Configuration form field descriptions](#configuration-form-field-descriptions) table that follows this procedure. @@ -134,8 +133,8 @@ To configure the extension, follow these instructions. :::image type="content" source="../media/unified-experience/D365FinOpsConfigureMetadata.png" alt-text="Configure Metadata dialog"::: 1. Select **Save**. -2. You can similary edit a configuration. A common field to update is the folder for your own custom metadata. -3. You might also want to move your cross reference database from SQL server local db to SQL server and update the configuration +2. You can similarly edit a configuration. A common field to update is the folder for your own custom metadata. +3. You might also want to move your cross reference database from SQL server local db to SQL server and update the configuration 4. You can delete stale configurations. 5. Note that only one configuration can be current or active at any given time. diff --git a/power-platform/developer/unified-experience/finance-operations-pipeline-test.md b/power-platform/developer/unified-experience/finance-operations-pipeline-test.md index a5702425a0..9e235d9999 100644 --- a/power-platform/developer/unified-experience/finance-operations-pipeline-test.md +++ b/power-platform/developer/unified-experience/finance-operations-pipeline-test.md @@ -2,7 +2,7 @@ title: "Execute unit tests in Azure Pipelines" description: Learn how to set up a unit test for execution using Azure Pipelines. author: pvillads -ms.date: 05/10/2024 +ms.date: 06/07/2024 ms.topic: how-to ms.reviewer: pehecke ms.author: pvillads @@ -11,8 +11,6 @@ ms.subservice: developer # Execute unit tests in Azure Pipelines -[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] - An Azure Pipeline build task is available that lets users execute unit tests on connected cloud runtime environments using a continuous integration/continuous delivery (CI/CD) pipeline. The "Execute Unit Tests in Unified Environment" task is included in the [Dynamics 365 Finance and Operations Tools](https://marketplace.visualstudio.com/items?itemName=Dyn365FinOps.dynamics365-finops-tools) extension. More information: [Continuous integration and deployment](finance-operations-pipelines.md), [Build automation that uses Microsoft-hosted agents and Azure Pipelines](/dynamics365/fin-ops-core/dev-itpro/dev-tools/hosted-build-automation) @@ -41,6 +39,7 @@ The output logs of the task contains information of each test executed and its o ### Creating the unit test task > [!IMPORTANT] +> > - A new version (1.*) of the task has been released. See [Update: Version 1](#update-version-1) for more information. In this next image is an example unit test being defined. A description of each form field follows. @@ -61,7 +60,7 @@ In this next image is an example unit test being defined. A description of each A new version (1.*) of the **Execute Unit Tests in Unified Environments** task is available. This version replaces the **Service Connection** authentication field. Now you can use multiple authentication mechanisms, like username/password and appId/client Secret to execute the test requests. -You can use the existing **Power Platform Set Connection Variables** task to generate the connection string in the same pipeline before using the unit test execution task. [Learn more about the details for this task](../../alm/devops-build-tool-tasks.md#power-platform-set-connection-variables) and [about connection types](../../alm/devops-build-tools.md#connection-to-environments). You can retrieve the connection string and use it in subsequent tasks by creating a reference name in the **Output Variables** section for classic pipelines. +You can use the existing **Power Platform Set Connection Variables** task to generate the connection string in the same pipeline before using the unit test execution task. [Learn more about the details for this task](../../alm/devops-build-tool-tasks.md#power-platform-set-connection-variables) and [about connection types](../../alm/devops-build-tools.md#connection-to-environments). You can retrieve the connection string and use it in subsequent tasks by creating a reference name in the **Output Variables** section for classic pipelines. The following image shows how to use the task to generate an output variable named `op` that is referenced in the subsequent unit test execution task: @@ -85,6 +84,12 @@ The following screenshot shows the same reference name used in a unit test task: :::image type="content" source="..\media\unified-experience\devexp-unitTest-task-1.png" alt-text="Version 1 of Unit test task."::: +### Known Issues +The Execute Unit Tests in Unified Environment task is stuck/times out after message: “Starting submit of test request:” + +Solution: This could occur if the **Connection string** provided by the user is of type **Username/Password and has MFA enabled**. Only **Service Principal/Client Secret authentication or Username/Password without MFA authentication** are supported. + + ### See also diff --git a/power-platform/developer/unified-experience/finance-operations-pipelines.md b/power-platform/developer/unified-experience/finance-operations-pipelines.md index 899603c09c..06875dd560 100644 --- a/power-platform/developer/unified-experience/finance-operations-pipelines.md +++ b/power-platform/developer/unified-experience/finance-operations-pipelines.md @@ -2,7 +2,7 @@ title: "Continuous integration and deployment" description: Learn how to set up continuous integration and deployment using Azure Pipelines. author: pvillads -ms.date: 08/31/2023 +ms.date: 06/07/2024 ms.topic: how-to ms.reviewer: pehecke ms.author: pvillads @@ -11,8 +11,6 @@ ms.subservice: developer # Continuous integration and deployment -[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] - This article explains how to implement continuous integration and deployment (CI/CD) of Power Platform unified developer experience assets using Azure Pipelines. Specifically, how to: - Get the latest [Dynamics 365 Finance and Operations Tools](https://marketplace.visualstudio.com/items?itemName=Dyn365FinOps.dynamics365-finops-tools) and [Power Platform Build Tools](../../alm/devops-build-tools.md#get-microsoft-power-platform-build-tools) @@ -37,17 +35,18 @@ Optionally, you can choose to generate a separate Lifecycle Services format pack :::image type="content" source="../media/unified-experience/pipelines-create-deployable-package.png" alt-text="Image of Create Deployable Package in Azure DevOps."::: -1. If licensing is required, select the **Add Licenses to Deployable Packages** for your version 1 task and choose **Power Platform Unified Package** from the drop down menu. Provide the **Model Name** to include a license. Add a task for each model that the license is needed. Modify the path to the deployable package created in previous step. If the package folder created in the previous step is not provided as input to this step correctly you may see the error 'fnomoduledefinition.json file not found'. +1. If licensing is required, select the **Add Licenses to Deployable Packages** for your version 1 task and choose **Power Platform Unified Package** from the drop down menu. Provide the **Model Name** to include a license. Add a task for each model that the license is needed. Modify the path to the deployable package created in previous step. If the package folder created in the previous step is not provided as input to this step correctly you may see the error 'fnomoduledefinition.json file not found'. :::image type="content" source="../media/unified-experience/pipelines-add-licenses.png" alt-text="Image of Add Licenses to Deployable Package in Azure DevOps."::: -1. Once the pipeline is built, locate the published artifacts under **Related** in the **Summary** tab. +1. Once the pipeline is built, locate the published artifacts under **Related** in the **Summary** tab. :::image type="content" source="../media/unified-experience/pipelines-locate-artifacts.png" alt-text="Image of solution artifacts in Azure DevOps."::: - > [!NOTE] - > If you see the error - 'An item with the specified name \3c5d3d3b-4428-4901-9357-4559d510e2a8\ already exists.' please ensure that you do not have duplicate modules as only 1 version per module is accepted. + > If you see this error: + > 'An item with the specified name \3c5d3d3b-4428-4901-9357-4559d510e2a8\ already exists.' + > please ensure that you do not have duplicate modules as only 1 version per module is accepted. ## Link to your deploy pipeline diff --git a/power-platform/developer/unified-experience/finance-operations-product-db-access.md b/power-platform/developer/unified-experience/finance-operations-product-db-access.md index 7e77a5c3b9..675334289e 100644 --- a/power-platform/developer/unified-experience/finance-operations-product-db-access.md +++ b/power-platform/developer/unified-experience/finance-operations-product-db-access.md @@ -2,7 +2,7 @@ title: "Request credentials to access D365 product database" description: "Learn how to request credentials to access D365 product database just in time." author: pathaku -ms.date: 05/30/2024 +ms.date: 06/06/2024 ms.topic: how-to ms.reviewer: phecke ms.author: pathaku @@ -11,8 +11,9 @@ ms.subservice: developer # Request credentials to access D365 finance and operations product database -A developer at times benefits from read/write access to the product database. We enable you to request credentials just in time, right from within Visual Studio. -As explained in [Write, deploy, and debug X++ code](finance-operations-debug.md), the business data is hosted in the cloud. +A developer at times benefits from read/write access to the product database. We enable you to request credentials just in time, right from within Visual Studio. +As explained in [Write, deploy, and debug X++ code](finance-operations-debug.md), the business data is hosted in the cloud. + This feature applies only to unified development environments. The developer needs to have the system administrator (sysAdmin) in the environment. To request credentials for database access, follow these steps: @@ -23,7 +24,7 @@ To request credentials for database access, follow these steps: 1. Enter the reason for requesting access credentials to the database. 1. The credentials are allowed for use only from clients using allowed IP v4 addresses so connections attempts from machines other than in the specified IPv4 range are denied by the Azure SQL firewall. 1. The dialog is prepopulated by default with only the current developer machine's public IP v4 address. -1. You may need to update this IP V4 address range in case you want to use the credentials from other machines or your developer machine has ip address allocated to it very dynamically. +1. You may need to update this IP V4 address range in case you want to use the credentials from other machines or your developer machine has ip address allocated to it very dynamically. :::image type="content" source="../media/unified-experience/UDE_SQLJitWindowRequest.png" alt-text="Visual Studio> Tools> SQL Credentials for Dynamics 365 FinOps Request window"::: 1. The dialog indicates that the access request is being processed. :::image type="content" source="../media/unified-experience/UDE_SQLJitProgress.png" alt-text="Visual Studio> Tools> SQL Credentials for Dynamics 365 FinOps Progress"::: @@ -35,17 +36,16 @@ To request credentials for database access, follow these steps: 1. Multiple users can have an active credential each, in a given environment. 1. A user can have a credential each in multiple environments. - > [!IMPORTANT] > You can learn more by watching presentation and demos done for the Dynamics 365 FastTrack Tech Talk series > ->[Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) +> [Unified Development Experience for Finance and Operations | Dynamics 365 FastTrack Tech Talk](https://www.youtube.com/watch?v=OuEZ1rXkpYY) ### See also [Write, deploy, and debug X++ code](finance-operations-debug.md) -[Unit testing in the unified developer experience](finance-operations-testing.md) +[Unit testing in the unified developer experience](finance-operations-testing.md) [Create and manage environments in the Power Platform admin center](/power-platform/admin/create-environment) [Manage Dynamics 365 apps](../../admin/manage-apps.md) [Use SQL to query data in Dataverse](/power-apps/developer/data-platform/dataverse-sql-query) diff --git a/power-platform/developer/unified-experience/finance-operations-testing.md b/power-platform/developer/unified-experience/finance-operations-testing.md index 1a2b8377dc..7354fcab91 100644 --- a/power-platform/developer/unified-experience/finance-operations-testing.md +++ b/power-platform/developer/unified-experience/finance-operations-testing.md @@ -2,7 +2,7 @@ title: "Unit testing" description: Shows you how to create and run test cases. author: pvillads -ms.date: 08/28/2023 +ms.date: 06/06/2024 ms.topic: how-to ms.subservice: developer ms.reviewer: pehecke @@ -32,7 +32,7 @@ You can create new test cases to test the functionality in an application. 1. On the **File** menu, select **Open** > **Project/Solution**, and then select **FleetManagement** **solution** from the desktop folder. If the solution file isn't on your computer, the steps to create it are listed in [End-to-end scenario for the Fleet Management sample application](/dynamics365/fin-ops-core/dev-itpro/dev-tools/fleet-management-sample). 1. In **Solution Explorer**, right-click the **Fleet Management** solution, select **Add**, and then select **New Project**. 1. Choose **finance and operations** as the project type to create. -1. Name this new project *FleetManagementUnitTestSample*, specify the FleetManagement folder on the desktop (C:\Users\Public\Desktop\FleetManagement) as the location, and then select **OK**. +1. Name this new project *FleetManagementUnitTestSample*, specify the FleetManagement folder on the desktop (C:\Users\Public\Desktop\FleetManagement) as the location, and then select **OK**. 1. In **Solution Explorer**, right-click the new project, and then select **Properties**. 1. Set the **Model** property to **FleetManagementUnitTests**, and then select **OK**. 1. Now add a test class containing the tests against the fleet management code. Right-click the FleetManagementUnitTestSample project, select **Add**, and then select **New Item**. diff --git a/power-platform/developer/unified-experience/finance-operations-trace-parser.md b/power-platform/developer/unified-experience/finance-operations-trace-parser.md index 178561f0f1..5d1a6d5bab 100644 --- a/power-platform/developer/unified-experience/finance-operations-trace-parser.md +++ b/power-platform/developer/unified-experience/finance-operations-trace-parser.md @@ -2,7 +2,7 @@ title: Diagnose issues and analyze performance using a trace parser with the unified developer experience. description: Learn how you can use a trace parser to consume traces and analyze performance in your deployment from your unified developer experience. author: pvillads -ms.date: 05/29/2024 +ms.date: 06/06/2024 ms.topic: article ms.subservice: developer ms.reviewer: pehecke diff --git a/power-platform/developer/visual-studio-create-canvas-app.md b/power-platform/developer/visual-studio-create-canvas-app.md index a1811790d8..5d7bd156be 100644 --- a/power-platform/developer/visual-studio-create-canvas-app.md +++ b/power-platform/developer/visual-studio-create-canvas-app.md @@ -76,7 +76,7 @@ When Visual Studio runs a web app and a tunnel is active, the web browser opens 1. Change the button **Text** to *Load Data*. 1. Enter the following formula in the button's **OnSelect** property: - ```powerapps-dot + ```power-fx ClearCollect(weatherCollection, WeatherSample_Connector.GetWeatherForecast()) ``` diff --git a/power-platform/enterprise-templates/TOC.yml b/power-platform/enterprise-templates/TOC.yml index 0ca3fa0eb8..201a1ec349 100644 --- a/power-platform/enterprise-templates/TOC.yml +++ b/power-platform/enterprise-templates/TOC.yml @@ -85,6 +85,16 @@ href: hr/onboarding-buddy/manage.md - name: Use href: hr/onboarding-buddy/use.md + - name: Expense Reimbursement + items: + - name: Overview + href: hr/expense-reimbursement/overview.md + - name: Install and set up + href: hr/expense-reimbursement/install-and-set-up.md + - name: Manage + href: hr/expense-reimbursement/manage.md + - name: Use + href: hr/expense-reimbursement/use.md - name: Information Technology items: - name: Hardware Request and Management diff --git a/power-platform/enterprise-templates/finance/sap-procurement/administer/install.md b/power-platform/enterprise-templates/finance/sap-procurement/administer/install.md index 54a30c7d5e..21efb3fd32 100644 --- a/power-platform/enterprise-templates/finance/sap-procurement/administer/install.md +++ b/power-platform/enterprise-templates/finance/sap-procurement/administer/install.md @@ -27,7 +27,9 @@ This article provides links to the SAP Procurement solution files and gives the ## Download the solution files -Download **either** the *managed* or *unmanaged* SAP Base and SAP Procurement solution files to your computer: +You have the option to download either managed or unmanaged solution files. + +Whichever option you choose, be sure to download both **SAP Base** and **SAP Procurement** solution files. - Managed - [mpa_SAPBase_managed.zip](https://aka.ms/SAPBaseManagedSolution) diff --git a/power-platform/enterprise-templates/finance/sap-procurement/administer/set-up-environments-data-policies.md b/power-platform/enterprise-templates/finance/sap-procurement/administer/set-up-environments-data-policies.md index 249b7b9ea0..b9a89330b3 100644 --- a/power-platform/enterprise-templates/finance/sap-procurement/administer/set-up-environments-data-policies.md +++ b/power-platform/enterprise-templates/finance/sap-procurement/administer/set-up-environments-data-policies.md @@ -15,7 +15,7 @@ contributors: - Wrighttyler ms.reviewer: ellenwehrle ms.topic: how-to -ms.date: 08/18/2023 +ms.date: 06/13/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -61,7 +61,7 @@ Installing, configuring, testing, and running [solutions](/power-apps/maker/data More information: -- [Establish an environment strategy](/power-platform/guidance/adoption/environment-strategy) +- [Establish an environment strategy](/power-platform/guidance/white-papers/environment-strategy) - [Create an environment in the Power Platform admin center](/power-platform/admin/create-environment#create-an-environment-in-the-power-platform-admin-center) - [Manage Microsoft Dataverse settings](/power-platform/admin/admin-settings) - [Microsoft Dataverse developer documentation](/power-apps/developer/data-platform/) diff --git a/power-platform/enterprise-templates/finance/sap-procurement/use/purchase-order-management.md b/power-platform/enterprise-templates/finance/sap-procurement/use/purchase-order-management.md index 454ddbf2b1..f8044422d5 100644 --- a/power-platform/enterprise-templates/finance/sap-procurement/use/purchase-order-management.md +++ b/power-platform/enterprise-templates/finance/sap-procurement/use/purchase-order-management.md @@ -12,7 +12,7 @@ contributors: - Wrighttyler ms.reviewer: ellenwehrle ms.topic: conceptual -ms.date: 10/26/2023 +ms.date: 04/23/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -26,7 +26,7 @@ The SAP Purchase Order Management app is part of the SAP Procurement solution fo Watch the demo to see how you can manage your SAP PO data using the SAP Purchase Order Management app. -> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RW18zOb] +> [!VIDEO https://www.microsoft.com/videoplayer/embed/RW18zOb] ## View a purchase order @@ -165,7 +165,7 @@ Field mappings from purchase order screen to the function module. | Header | Order Number | | PURCHASEORDER | | | Header | Vendor | POHEADER | VENDOR | | | Header | Vendor Name | POHEADER | | Not Sent | -| Header | Purchasing Organization | POHEADER | PURCH_ORG | +| Header | Purchasing Organization | POHEADER | PURCH_ORG | | | Header | Purchasing Group | POHEADER | PUR_GROUP | | | Header | Currency | POHEADER | CURRENCY | | | Line | Item | POITEM | PO_ITEM | | diff --git a/power-platform/enterprise-templates/finance/sap-procurement/use/requisition-management.md b/power-platform/enterprise-templates/finance/sap-procurement/use/requisition-management.md index fdb97d272c..967552da6f 100644 --- a/power-platform/enterprise-templates/finance/sap-procurement/use/requisition-management.md +++ b/power-platform/enterprise-templates/finance/sap-procurement/use/requisition-management.md @@ -12,7 +12,7 @@ contributors: - Wrighttyler ms.reviewer: ellenwehrle ms.topic: conceptual -ms.date: 10/26/2023 +ms.date: 04/23/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -26,7 +26,7 @@ The SAP Requisition Management app is part of the SAP Procurement solution for M Watch the demo to see how you can manage your SAP requisition data using the SAP Requisition Management app. -> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RW18CAe] +> [!VIDEO https://www.microsoft.com/videoplayer/embed/RW18CAe] ## View requisition data diff --git a/power-platform/enterprise-templates/finance/sap-procurement/use/vendor-management.md b/power-platform/enterprise-templates/finance/sap-procurement/use/vendor-management.md index aa85db739f..700ff46dfc 100644 --- a/power-platform/enterprise-templates/finance/sap-procurement/use/vendor-management.md +++ b/power-platform/enterprise-templates/finance/sap-procurement/use/vendor-management.md @@ -12,7 +12,7 @@ contributors: - Wrighttyler ms.reviewer: ellenwehrle ms.topic: conceptual -ms.date: 03/27/2024 +ms.date: 04/23/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -26,7 +26,7 @@ The SAP Vendor Management app is part of the SAP Procurement solution for Micros Watch the demo to see how you can manage your SAP vendor data using the SAP Vendor Management app. -> [!VIDEO https://www.microsoft.com/en-us/videoplayer/embed/RW18F9g] +> [!VIDEO https://www.microsoft.com/videoplayer/embed/RW18F9g] ## View vendor information diff --git a/power-platform/enterprise-templates/hr/awards-and-recognition/install-and-set-up.md b/power-platform/enterprise-templates/hr/awards-and-recognition/install-and-set-up.md index 9a80b474e3..5e16b7a215 100644 --- a/power-platform/enterprise-templates/hr/awards-and-recognition/install-and-set-up.md +++ b/power-platform/enterprise-templates/hr/awards-and-recognition/install-and-set-up.md @@ -176,7 +176,7 @@ Set up security roles in your solutions so admins can manage access to and the e > [!IMPORTANT] > All users must be assigned the *Basic User* role in addition to any other roles assigned to them. -## Step 5: Set cloud flows to *on* +## Step 5: Turn on cloud flows Open the newly installed Awards and Recognition solution and verify that the cloud flow is set to the *on* status. If not, turn it on. diff --git a/power-platform/enterprise-templates/hr/awards-and-recognition/overview.md b/power-platform/enterprise-templates/hr/awards-and-recognition/overview.md index 22cd6a45ee..fea5ccf6e1 100644 --- a/power-platform/enterprise-templates/hr/awards-and-recognition/overview.md +++ b/power-platform/enterprise-templates/hr/awards-and-recognition/overview.md @@ -5,7 +5,7 @@ author: tshanep ms.author: shanep ms.reviewer: ellenwehrle ms.topic: overview -ms.date: 09/28/2023 +ms.date: 04/15/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -13,11 +13,11 @@ ms.subservice: solution-templates # Awards and Recognition template for Power Platform -The Awards and Recognition template enables organizations to easily facilitate an employee awards program. +The Awards and Recognition template makes it easy to set up and facilitate an employee awards program. -Employees use the app to nominate co-workers and teams and to track their own recognitions. +Employees use a canvas app to nominate coworkers and teams and to track their own recognitions. -Program admins have the ability to define nomination periods and the available awards (types of recognition) in those periods. Awards can be configured to be available to single individuals, multiple individuals, or predefined teams. At the close of a nomination period, a program admin can review all the nominations and approve or decline them. +Program admins manage the awards program in the admin model-driven app. They have the ability to define nomination periods and the available awards (types of recognition) in those periods. Awards can be configured to be available to single individuals, multiple individuals, or predefined teams. At the close of a nomination period, a program admin can review all the nominations and approve or decline them. :::image type="content" source="media/overview/ar-four-screens.png" alt-text="Screenshots of Awards and Recognition." lightbox="media/overview/ar-four-screens.png"::: @@ -25,32 +25,33 @@ The Awards and Recognition template is available in [Microsoft AppSource]( [!TIP] +> A free [Power Apps Developer Plan](https://powerapps.microsoft.com/developerplan/) is a great way to install the template for evaluation purposes. + +More license details are available in the [Microsoft Power Platform Licensing Guide.](https://go.microsoft.com/fwlink/?linkid=2085130) + +### Create environment and data policies + +It's important to have a cohesive environment and data policy and to ensure required resources in place. + +- **Administrators** + + Make sure that admins with the necessary privileges are available to assign licenses and create environments: + + - Microsoft Entra ID Global or tenant User Administrator to assign Power Apps or Power BI licenses + - Power Platform Administrator to create environments + + [Learn more about Microsoft Power Platform administration.](/power-platform/admin/) + +- **Environments** + + Follow [application lifecycle management (ALM)](/power-platform/alm/) best practices in [creating and managing environments.](/power-platform/admin/create-environment) + + - Make sure that a Power Platform environment is set up with a Dataverse database. + - Make sure that environment maker security role privileges, at a minimum, are assigned to the user who installs the solutions in that environment. + + [Learn more about Power Platform environments.](/power-platform/admin/environments-overview) + +- **Data loss prevention policies** + + Make sure that the environment has access to the connectors used by the Expense Reimbursement template: + + - [Microsoft Dataverse connector](/connectors/commondataserviceforapps/) + - [Office 365 Outlook connector](/connectors/office365/) + + [Learn more about data loss prevention policies.](/power-platform/admin/wp-data-loss-prevention) + +## Step 2: Create connections + +Cloud flows need specific connection references to work correctly. Connection references are included in the solution, but connectors often need to be set up manually. You need to set up three new connections for the Expense Reimbursement app. + +It's best to create the connections before you import the solution. If you create the connections during import, you have to jump back and forth between browser windows. + +1. Sign in to [Power Apps.](https://make.preview.powerapps.com/) +1. Go to **Connections** and select **+ New Connection** to create new connections with each of these connectors: + + - [Microsoft Dataverse connector](/connectors/commondataserviceforapps/) + - [Office 365 Outlook connector](/connectors/office365/) + - [Teams](/connectors/teams/) + + [Learn how to manage connections in canvas apps.](/power-apps/maker/canvas-apps/add-manage-connections) + +## Step 3: Create approvals database + +The Expense Reimbursement solution leverages Power Automate Approvals to approve or reject requests. + +By default, Power Platform environments aren't set up with the required database for approvals. The database is created the first time a flow with the [Approvals connector](/connectors/approvals/) is run in that environment by an administrator. + +Take these steps to create the database for approvals: + +1. Go to the [Power Automate maker portal](https://make.preview.powerautomate.com/environments/) and select your targeted deployment environment. +1. Select **+ Create** on left pane. +1. Select **Instant cloud flow** underneath the *Create from blank* section. +1. Choose **Manually trigger a flow** and then select **Create**. +1. Select **+ New step**. +1. Search on *Approvals* and choose **Create an approval**. +1. Enter the following properties on the *Create an approval* step: + - **Approval type** – *Approve/Reject – First to respond* + - **Title** – *Test* + - **Assigned to** – *select your email address* +1. Select **Save**. +1. Select **Test Manually** and then **Test** again. +1. Select **Continue** and then **Run flow**, followed by **Done**. +1. Delete the *flow* you just created, as it is no longer needed. + +[Learn how to get started with Power Automate approvals.](/power-automate/get-started-approvals) + +> [!NOTE] +> +> It can take a few minutes for the database provisioning to complete, and you'll notice this delay the first time you run this flow. Once you complete this first-time flow run, subsequent approval flows will be faster. + +## Step 4: Install solution files + +You have two options for installing the Expense Reimbursement template: + +- [Select **Get it now** on the template's AppSource page](#install-from-appsource) and an installation window opens automatically in the Power Platform admin center. +- [Download a managed or unmanaged version of the solution files and manually import them into your environment.](#download-and-manually-install-solution-files) + +> [!TIP] +> +> Go to the [Templates-for-Power-Platform](https://aka.ms/PowerPlatformTemplateSupport) GitHub project site to log your questions or issues and get support for the Expense Reimbursement template. + +### Install from AppSource + +AppSource is a Microsoft digital storefront. Take these steps to go through the AppSource install process: + +1. Go to the [Expense Reimbursement template in AppSource]() and select **Get it now**. + +1. In the **Install Expense Reimbursement** window in the [Power Platform admin center,](https://admin.powerplatform.microsoft.com/) select the developer environment that you prepared in the [review prerequisites step.](#step-1-review-prerequisites) + +1. Agree to the *Terms and Privacy* statements when prompted. + +1. Select **Install**. Two [solutions](/power-platform/alm/solution-concepts-alm) are installed in your environment: + + - **Employee Experience Base** + - **Expense Reimbursement**. + + Go to the [Expense Reimbursement overview article](./overview.md) to learn more about the two solutions. + +### Download and manually install solution files + +1. Download solution files. + + - Managed: + - [mpa_EmployeeExperienceBase_managed.zip](https://aka.ms/EEBaseManagedSolution) + - [mpa_ExpenseReimbursement_managed.zip](https://aka.ms/mpa_ExpenseReimbursement_managed.zip) + - Unmanaged: + - [mpa_EmployeeExperienceBase_unmanaged.zip]() + - [mpa_ExpenseReimbursement.zip](https://aka.ms/ExpenseReimbursementUnManagedSolution) + +1. Sign in to [Power Apps](https://make.preview.powerapps.com/) and select the environment you prepared in the [review prerequisites step](#step-1-review-prerequisites). + +1. In the left pane, select **Solutions**. + +1. Select **Import solution**, and then find and select the `mpa_EmployeeExperienceBase` file you downloaded. + +1. Select **Next**, and then select **Import**. + +1. After you receive the message that the import was successful, repeat steps 4 and 5 to import the `mpa_ExpenseReimbursement` file you downloaded. + +1. Select **Next** and **Next** again. + +1. For each of the connections listed, select the connection that was created in the import steps. + +1. Select **Next**. + +1. Skip the environment variable setup for now. The required URL values only become available after the apps are imported into the environment. + +1. Select **Import** to start importing the **Expense Reimbursement** solution. + +## Step 5: Assign Security Roles + +The Expense Reimbursement solution contains two security roles. + +- **Administrator**: Assign this role to users who need access to the expense reimbursement data in the model-driven administration app. Admins can: + + - View expense reimbursement data + - Process expense reimbursements + - Create new refund categories and programs + - Delete expense reimbursement data + +- **User**: Assign this role to all users who will view and submit expenses through the Expense Reimbursement canvas app. + +All licensed users, whether or not they're members of a security group, must have a security role assigned. If users don't have a security role, they get a "data access denied" error when they try to run the app. Users can't access environments until they're assigned at least one security role for that environment. + +Assign security roles in the Power Platform admin center. + +1. Sign in to the [Power Platform admin center.](https://admin.powerplatform.microsoft.com/) + +1. In the left side panel, select **Environments**. + +1. Select the environment where the solution is installed. + +1. Select **Users** > **See all**. + +1. Select user(s), select **Manage security roles**, and then select the appropriate roles for each user. + +1. Select **Save**. + +Want to learn more about setting up and managing users? Start here: + +- [Learn how to manage application users in the Power Platform admin center.](/power-platform/admin/manage-application-users) +- [Learn how to control user access to environments with security groups and licenses.](/power-platform/admin/control-user-access) + +## Step 6: Turn on cloud flows + +Verify that the cloud flows are turned on in the newly installed Expense Reimbursement solution. Turn on any flows that are not already set to *on*. + +1. In [Power Apps,](https://make.preview.powerapps.com/) in the left side panel, select **Solutions**. + +1. Select the **Expense Reimbursement** solution. + +1. In the left side panel, select **Cloud flows**. + +1. Select *each of the four flows* and make sure it's turned on. + +## Step 7: Share the apps + +Share the Expense Reimbursement app with the users in your organization. + +> [!TIP] +> +> Share the app with the Expense Reimbursement program managers first so that they can configure the app to meet your organization's needs. After that configuration is complete, share the app to the wider organization. + +1. Go to [Power Apps](https://make.powerapps.com/) and select the environment that contains the solution. + +1. In the left side panel, select **Solutions**. + +1. Select **Expense Reimbursement**. + +1. In the left side panel, select **Apps**. + +1. Select the **Expense Reimbursement canvas app** and select **More actions** (**…**) > **Share**. + +1. Search for and select the security group or individuals who need access to the app. You can also verify user security roles here. + +1. Add an optional email message. + +1. Select **Share**. + + More information: [Learn how to share a canvas app with your organization.](/power-apps/maker/canvas-apps/share-app) + +> [!NOTE] +> If the Expense Reimbursement app isn't shared with you and you can't access it directly in Power Apps, contact your administrator. + +## Step 8: Enable Copilot (optional) + +Copilot for model-driven apps in Power Apps is a next-generation AI assistant for app users to get insights about the data in their apps through conversation in natural language. As an expense reimbursement program administrator or reviewer, leverage Copilot to help you get insights on the expense reimbursement data while taking action. Follow these steps to turn Copilot on within your environment: + +1. [Go to Power Platform admin center](https://admin.powerplatform.microsoft.com/home). +1. Select **Environments** on the left pane and then select the environment where the solution was installed. +1. Ensure the environment *Release Channel* is set to **Monthly** by following the [Changing release channels for model-driven apps guidance](/power-apps/maker/model-driven-apps/channel-change). +1. Select the **Settings**. +1. Expand the *Product* section and select **Features**. +1. Underneath the *Copilot* section, change the *Allow users to analyze data using an AI-powered chat experience in canvas and model-driven apps* to **On**. + +[Learn how to use Copilot chat in model-driven apps](/power-apps/user/use-copilot-model-driven-apps) + +## Step 9: Turn on auditing (optional) + +Auditing isn't required, but we recommend turning it on so that it's easy to see who creates and updates records in the future. + +1. Go to the [Power Platform admin center](https://gcc.admin.powerplatform.microsoft.us/home) and select the environment where the solution is installed. + +1. Select **Settings**, and then select **Start Auditing**. + +### Next step + +[Learn how to manage the Expense Reimbursement app](manage.md). + +### See also + +[Get started using the Expense Reimbursement app](use.md) diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/manage.md b/power-platform/enterprise-templates/hr/expense-reimbursement/manage.md new file mode 100644 index 0000000000..76614ed71b --- /dev/null +++ b/power-platform/enterprise-templates/hr/expense-reimbursement/manage.md @@ -0,0 +1,115 @@ +--- +title: Get started managing the Expense Reimbursement program +description: Learn how to manage expense reimbursements in the Expense Reimbursement Admin model-driven app for Microsoft Power Platform. +author: tverhasselt +contributors: + - microsoft-george + - nghiemdoan-msft +ms.author: thoverh +ms.reviewer: ellenwehrle +ms.topic: how-to +ms.date: 06/13/2024 +ms.custom: bap-template +ms.service: power-platform +ms.subservice: solution-templates +--- + +# Get started managing the Expense Reimbursement program + +As a program administrator, you can use the Expense Reimbursement Admin app to manage your organization's Expense Reimbursement program. You can: + +- Create custom refund programs +- Create custom categories and subcategories +- Set expense and reimbursement request limits +- Support more languages +- View error logs +- Use Microsoft Teams to approve requests + +## Create custom refund programs + +Create as many refund programs as you need for your organization's Expense Reimbursement program. Users select the applicable refund program from a dropdown on the _New Request_ screen. + +:::image type="content" source="media/manage/exre-admin-programs.png" alt-text="Screenshot showing Expense Reimbursement program administration screen."::: + +Take these steps to create types of refund programs: + +1. Start the Expense Reimbursement Admin model-driven app. +1. Under _Administration_, select **Refund Programs**. +1. Select **+New**. +1. Fill out these fields for the new refund program: + + - Refund Program name + - Approvers (admins who review and approve reimbursement requests) + - Description +1. Select **Save**. +1. Repeat the process until all the refund programs you want are set up. + +> [!NOTE] +> +> For the _Approvers_ field, you can also specify a team of approvers. Go to [Microsoft Dataverse teams management](/power-platform/admin/manage-teams) for more details on managing teams in your organization. + +## Create custom categories and subcategories + +Create as many categories and subcategories you need within each refund program you set up for your organization's Expense Reimbursement program. Users select the applicable categories and subcategories from dropdowns on the _New Request_ screen. + +### Create categories + +Take these steps to create categories for each refund program you set up: + +1. Go to the Expense Reimbursement Admin model-driven app. +1. Under _Administration_, select **Categories**. +1. Select **+New**. +1. Fill out the _Category Name_. +1. Select **Save**. + +### Create subcategories + +Take these steps to create subcategories that fit into refund program categories: + +1. Go to the Expense Reimbursement Admin model-driven app. +1. Under _Administration_, select **Subcategories**. +1. Select **+New**. +1. Fill out _Subcategory Name_. +1. Select **Save**. + +## Set expense and reimbursement limits + +Set expense and reimbursement request limits in App Settings. Take these steps: + +1. Go to the Expense Reimbursement Admin model-driven app. +1. Under _System_, select **App Settings**. +1. Select **+New**. +1. Fill out the settings name and enter the expense and reimbursement amount limits. +1. Select **Save**. + +## Support more languages + +You can localize all strings in the Expense Reimbursement app to support the diverse set of languages that may be spoken at your organization. The app contains default strings for all text, but checks to see if there's a localized version in the Employee Experience Base Localization table that's installed alongside the Expense Reimbursement solution. The Employee Experience Base solution and the Expense Reimbursement solution are accessed together from AppSource. + +To localize app strings, users must have the **Employee Experience Template Admin** security role assigned to them by a Power Platform admin. Once assigned, a user can take these steps: + +1. Go to the **Employee Experience Template Administrator app**. +1. Select **Localizations** on the left pane. +1. Select **+New**. +1. Fill out the form: + + - **English Value**. The text (value) in the app that you replace + - **Language**. The language you are translating into + - **Localized Value**. The translated string you set up + - **String Type**. The type of string you're replacing or filter you can apply. This field is optional + +1. Select **Save & Close**. + +## View error logs + +You can view errors in the Expense Reimbursement Administrator model-driven app. + +Take these steps to view errors: + +1. Go to the Expense Reimbursement Admin model-driven app. +1. Under _Administration_, select **Errors**. +1. Select an item in the _Name_ column to view the error details. + +### Next step + +[Get started using the Expense Reimbursement app](use.md) diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-dashboard.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-dashboard.png new file mode 100644 index 0000000000..8f85331a46 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-dashboard.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-programs.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-programs.png new file mode 100644 index 0000000000..07dee146a4 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-admin-programs.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-mda-finished.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-mda-finished.png new file mode 100644 index 0000000000..9b983be64f Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/manage/exre-mda-finished.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-dashboard.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-dashboard.png new file mode 100644 index 0000000000..8f85331a46 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-dashboard.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-view.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-view.png new file mode 100644 index 0000000000..a101189107 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-admin-view.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-attach.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-attach.png new file mode 100644 index 0000000000..06907af4cc Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-attach.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-finalize-details.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-finalize-details.png new file mode 100644 index 0000000000..b6a2038cf5 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-finalize-details.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-new-request.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-new-request.png new file mode 100644 index 0000000000..4b8e849328 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-new-request.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-submit-request.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-submit-request.png new file mode 100644 index 0000000000..68a444a853 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-submit-request.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-underreview-ed.png b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-underreview-ed.png new file mode 100644 index 0000000000..f0eb5f1142 Binary files /dev/null and b/power-platform/enterprise-templates/hr/expense-reimbursement/media/use/exre-underreview-ed.png differ diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/overview.md b/power-platform/enterprise-templates/hr/expense-reimbursement/overview.md new file mode 100644 index 0000000000..79852415d1 --- /dev/null +++ b/power-platform/enterprise-templates/hr/expense-reimbursement/overview.md @@ -0,0 +1,94 @@ +--- +title: Expense Reimbursement template for Power Platform +description: The Expense Reimbursement template for Microsoft Power Platform enables employees to submit expenses for reimbursement. +author: tverhasselt +contributors: + - microsoft-george + - nghiemdoan-msft +ms.author: thoverh +ms.reviewer: ellenwehrle +ms.topic: overview +ms.date: 06/13/2024 +ms.custom: bap-template +ms.service: power-platform +ms.subservice: solution-templates +--- + +# Expense Reimbursement template for Power Platform + +The Expense Reimbursement template makes it easy to set up and facilitate an automated expense reimbursement program within your organization. + +The Expense Reimbursement program enables: + +- Employees in your organization to submit expense reimbursement requests with receipt documentation in the canvas app. The canvas app can be accessed from a desktop or mobile device. +- Your organization to streamline and automate the request processes in the model-driven admin app. + +You can further extend the capabilities of the Expense Reimbursement template by customizing the apps to meet your organization's unique processing needs. + +## Watch the demo + +Watch the demo to see how an employee uses the Expense Reimbursement canvas app. + +> [!VIDEO https://www.microsoft.com/videoplayer/embed/RW1kAs0] + +## Expense Reimbursement package + +The Expense Reimbursement template is available in [Microsoft AppSource](). The template package consists of two solutions: + +- **Employee Experience Base** contains common foundational components that all human resource (HR) solutions use. For now, only components that are needed for localization capabilities are included. Common strings can be localized once in the base solution and shared so that all dependent solutions get the benefit. +- **Expense Reimbursement** contains all the components necessary to enable users to submit requests for expense reimbursements and manage the requests. + +### Employee Experience Base + +The **Employee Experience Base** solution contains components that manage app language preferences. + +- **Employee Experience Localization Admin** is the model-driven app that allows admins to view and edit localized string values. +- **Employee Experience Localization** is the table that stores the string replacements for every localized version of the app. +- **ISO Employee Experience Language Code** is the *one choice* that stores the abbreviations for the available language codes. +- Two security roles: + - **Employee Experience Localization Reader** provides *read* access to the table. + - **Employee Experience Localizer** provides *create*, *read*, *update*, and *delete* access to the table. + +### Expense Reimbursement + +The Expense Reimbursement solution contains components that manage the user experience. + +- Two apps: + - **Expense Reimbursement** is the canvas app that allows users to view and submit expense reimbursements. + - **Expense Reimbursement Administrator** is the model-driven app that allows admins to view and manage all expense reimbursement data. +- Six tables: + - **Expense Reimbursement** + - **Attachment** + - **Refund Program** + - **Category** + - **Expense Reimbursement Process** + - **Team** +- Two security roles: + - **Expense Reimbursement - program admin** provides access to the model-driven admin app. + - **Expense Reimbursement - user** provides access to the canvas app. +- Three choices: + - **Payment Status** stores the available payment status of the expense reimbursement request (Not Started, Completed). + - **Request Status** stores the available status for expense reimbursement request (Under Review, Approved, Denied). + - **Stage Category** stores the available stage category in the business process flow. +- **New Request for Refund Notification** (Power Automate flow) handles: + - all notifications for the requestor when an expense reimbursement has been submitted. + - all notifications for the approver to enable quick review and processing of the expense reimbursement requests. + - processing of all responses from approvers. +- Two Dashboards: + - **Expense Reimbursement Interactive Dashboard** is available to admins in the model-driven app. + - **Expense Reimbursement Report** is a Power BI embedded dashboard available to admins in the model-driven app. +- Two Processes: + - **Expense Reimbursement Process** is a business-process flow enabled for all expense reimbursement records. + - **Set Active Stage** is a workflow to set the business-process flow's active-stage field to current-stage field on Expense Reimbursement entity. +- Three connection references: + - **Expense Reimbursement - Outlook** + - **Expense Reimbursement - Dataverse** + - **Expense Reimbursement - Approvals** + +### Next step + +[Install and set up the Expense Reimbursement template](install-and-set-up.md) + +### See also + +[Manage the Expense Reimbursement app](manage.md) diff --git a/power-platform/enterprise-templates/hr/expense-reimbursement/use.md b/power-platform/enterprise-templates/hr/expense-reimbursement/use.md new file mode 100644 index 0000000000..8078f0a56a --- /dev/null +++ b/power-platform/enterprise-templates/hr/expense-reimbursement/use.md @@ -0,0 +1,100 @@ +--- +title: Get started using the Expense Reimbursement apps +description: Learn how to use the Reimbursement Request app and the Expense Reimbursement Admin app on Microsoft Power Platform. +author: microsoft-george +ms.author: georgenewton +contributors: + - tverhasselt + - nghiemdoan-msft +ms.reviewer: ellenwehrle +ms.topic: how-to +ms.date: 06/13/2024 +ms.custom: bap-template +ms.service: power-platform +ms.subservice: solution-templates +--- + +# Use the Expense Reimbursement apps + +Two apps are part of the Expense Reimbursement solution: + +- Reimbursement Request canvas app for employees +- Expense Reimbursement Admin model-driven app for program managers or admins + +Once the install and setup steps are complete, the apps are ready to share and use. + +## Use the Reimbursement Request app + +As an employee, you can submit and view your expense reimbursement requests to your organization in the Reimbursement Request +canvas app. + +Take these steps to submit an expense reimbursement request: + +1. Sign in to the Expense Reimbursement canvas app. +1. On the _My requests_ screen, select **New request**. +1. On the _New request_ screen, complete these fields: + 1. Request Name + 1. Program + 1. Category + 1. Subcategory + 1. Currency + +:::image type="content" source="media/use/exre-new-request.png" alt-text="Screenshot of the New request screen in the Reimbursement Request app."::: + +### Add image of expense receipt + +Expense requests require documentation of the expense. Take these steps to add an image of the expense receipt and update any file information. + +1. On the _My requests_ screen, select **Add expense**. +1. On the first _Add expense_ screen, select how you will share an image of your receipt. These are your options: + 1. **Capture** enables you to open up your device's camera to allow you to take a picture of the receipt. + 1. **Scan** obtains the receipt details from an image you select on your device using the app's built-in scanner. + 1. **Attach** opens your device's file system so you can browse for the image of your expense. +1. On the second _Add expense_ screen, attach a file or capture a picture, depending on your selection on the first _Add expense_ screen. +:::image type="content" source="media/use/exre-attach.png" alt-text="Screenshot showing selection of Badges."::: +1. On the third _Add expense_ screen, add any necessary information. These are the fields: + 1. Attachment file name + 1. Expense date + 1. Merchant name + 1. Amount + 1. Description +1. Select **Done** to complete the _Add expense_ step. +1. Select **Submit**. This triggers the _New Request for Refund Notification_ flow that sends an email to the approver and to you stating that the expense reimbursement request has been submitted and is ready for review. + +### View Expense Reimbursement requests + +Once you have submitted an expense request, you can view the status of the request in the Reimbursement Request canvas app. + +On the _My requests_ screen, select the _number_ of the reimbursement request you want to view. This takes you to the _View request_ screen. + +:::image type="content" source="media/use/exre-underreview-ed.png" alt-text="Screenshot of the Reimbursement Request app's View request screen. It shows the request number, request name, program name, category, subcategory, currency, created-on date and expense details."::: + +## Use the Expense Reimbursement Administrator app + +As an expense reimbursement program manager, you can access the Expense Reimbursement Administrator model-driven app to review and process requests. + +### Process expense requests + +In the Expense Reimbursement Administrator app, take these steps to view expense reimbursement request details and process the requests: + +1. Select **Requests** on the left pane to view a list of all reimbursement requests. +1. Select a _request number link_ to view more details about a specific request. On this page many links, such as the request's receipt, are available to select and review. + + :::image type="content" source="media/use/exre-admin-view.png" alt-text="Screenshot of the Reimbursement Request Administrator app's request number detail screen. It shows the request number and expense details to a program manager."::: + +1. Select **Review** to mark the approval status and make a comment about the status of the expense reimbursement request. +1. Select **Payment** to record the payment status of the expense reimbursement request. +1. Select **Complete** to record the date the expense reimbursement request process is complete. +1. Select **Save** or **Save & Close** after you make updates. + +### View the dashboard + +The Expense Reimbursement Administrator model-driven app provides a dashboard viewing experience to help you easily manage the expense reimbursement program. + +:::image type="content" source="media/use/exre-admin-dashboard.png" alt-text="Screenshot of the Reimbursement Request Administrator app's dashboard screen. It shows many different details to the program manager."::: + +You can view reimbursement requests by date and status. You can also see the dollar amounts by programs and program categories to help you track expenses. + +### See also + +[Manage the Expense Reimbursement app](manage.md) diff --git a/power-platform/enterprise-templates/hr/onboarding-buddy/manage.md b/power-platform/enterprise-templates/hr/onboarding-buddy/manage.md index 9a0a6e9c9c..122130afcc 100644 --- a/power-platform/enterprise-templates/hr/onboarding-buddy/manage.md +++ b/power-platform/enterprise-templates/hr/onboarding-buddy/manage.md @@ -5,7 +5,7 @@ author: tshanep ms.author: shanep ms.reviewer: ellenwehrle ms.topic: how-to -ms.date: 02/21/2024 +ms.date: 04/26/2024 ms.custom: - bap-template - ai-gen-docs-bap @@ -17,10 +17,10 @@ ms.subservice: solution-templates # Get started managing the Onboarding Buddy program -As a program administrator, you can use the Onboarding Buddy Admin app to manage your organization's Onboarding Buddy program, including: +As a program administrator, you can use the Onboarding Buddy Admin app to manage your organization's Onboarding Buddy program. You can: - Manually add a new employee -- Update the configuration +- Update configurations - Localize the strings to support more languages ## Manually add an Onboarder @@ -37,11 +37,11 @@ As a program administrator, you can use the Onboarding Buddy Admin app to manage 1. In the Onboarding Buddy Admin app, in the left side panel, select **Configurations**. -1. Select the record. (There should only ever be one.) +1. Select the record. (There should only ever be one.) 1. Select **Edit**. -:::image type="content" source="media/manage/ob-manage-configure.png" alt-text="Screenshot of the Onboarding Buddy Admin app, with Configurations and the Edit button highlighted."::: +:::image type="content" source="media/manage/ob-manage-configure.png" alt-text="Screenshot of the Onboarding Buddy Admin app, with Configurations and Edit buttons highlighted."::: 1. Change what you need to, and then select **Save & Close**. diff --git a/power-platform/enterprise-templates/hr/onboarding-buddy/overview.md b/power-platform/enterprise-templates/hr/onboarding-buddy/overview.md index 677a3c4f84..81f471fd96 100644 --- a/power-platform/enterprise-templates/hr/onboarding-buddy/overview.md +++ b/power-platform/enterprise-templates/hr/onboarding-buddy/overview.md @@ -43,19 +43,19 @@ The Onboarding Buddy template is available in [Microsoft AppSource]( > Power Apps use rights included with Microsoft 365 and Office 365 licenses will not suffice to install the template. - > [!TIP] > A free Developer Plan is a great way to install the template for evaluation purposes. More information: [Power Apps Developer Plan](https://powerapps.microsoft.com/developerplan/) @@ -85,21 +84,21 @@ The installation requires you to set up four new connections for the Appointment To create the connections in advance, take these steps: -1. Go to [Power Apps](https://make.preview.powerapps.com/) +1. Sign in to [Power Apps](https://make.preview.powerapps.com/) 1. Go to **Connections** and select **+ New Connection** to create new connections with each of these Microsoft connectors: - [Dataverse](/connectors/commondataserviceforapps/) - [Office 365 Outlook](/connectors/office365/) - [Teams](/connectors/teams/) - More information: [Manage connections in canvas apps](/power-apps/maker/canvas-apps/add-manage-connections) + [Learn how to manage connections in canvas apps](/power-apps/maker/canvas-apps/add-manage-connections). ## Step 3: Install solution files -There are two solution installation options available for you to consider: +You have two options for installing the Appointment Booking solution: -- You can select the *Get it now* button on the template's AppSource offer page and it automatically takes you to an *install window* in the Power Platform admin center. -- You can download either a *managed* or an *unmanaged* version of the solution files and manually import them into your environment according to your organization's requirements. +- [Select **Get it now** on the template's AppSource page](#install-from-appsource) and an installation window opens automatically in the Power Platform admin center. +- [Download a managed or unmanaged version of the solution files and manually import them into your environment](#download-and-manually-install-solution-files). > [!TIP] > @@ -107,24 +106,20 @@ There are two solution installation options available for you to consider: ### Install from AppSource -You can access and install the Appointment Booking template from AppSource, a Microsoft digital storefront. Take these steps to go through the AppSource install process: +AppSource is a Microsoft digital storefront. Take these steps to go through the AppSource install process: -1. Go to the [Appointment Booking template]() in AppSource and select **Get it now**. This takes you to the *Install Appointment Booking Template* window in the [Power Platform admin center](https://admin.powerplatform.microsoft.com/). -1. Select the developer environment that you prepared for the template. -1. Agree to the *Terms and Privacy* statements by checking the boxes. -1. Select **Install**. You're taken to a screen where you can view the installation status. Once the installation is complete, the status shows as *Installed*. +1. Go to the [Appointment Booking template]() in AppSource and select **Get it now**. +1. In the *Install Appointment Booking Template* window in the [Power Platform admin center](https://admin.powerplatform.microsoft.com/), select the developer environment that you prepared in the [review prerequisites step](#step-1-review-prerequisites). +1. Agree to the *Terms and Privacy Statements* when prompted. +1. Select **Install**. -> [!IMPORTANT] -> Two solutions are always installed in your environment: -> -> - **IT Base**. Contains components that enable localization capabilities. By sharing the components across solutions, common strings can be localized once in the base solution and all dependent solutions get the benefit. -> - **Appointment Booking**. Contains all the necessary components to enable the implementation of the Appointment Booking program within an organization. +[Learn more about AppSource](https://appsource.microsoft.com/en-US/) -### Download and manually install solution files +Two solutions are installed in your environment, **IT Base** and **Appointment Booking**. [Learn more about the Appointment Booking template solutions](./overview.md). -You also have the option to download *managed* or *unmanaged* solution files to manually install into your prepared environment according to your organization's requirements: +### Download and manually install solution files -1. Download the following managed or unmanaged solution files: +1. Download the following Managed *or* Unmanaged solution files: - Managed - [mpa_ITBase_managed.zip](https://aka.ms/ITBaseManagedSolution) @@ -133,20 +128,18 @@ You also have the option to download *managed* or *unmanaged* solution files to - [mpa_ITBase_unmanaged.zip](https://aka.ms/ITBaseUnManagedSolution) - [mpa_AppointmentBooking_unmanaged.zip](https://aka.ms/AppointmentBookingUnManagedSolution) -1. Go to [Power Apps](https://make.preview.powerapps.com/) and select the environment you prepared for the solution. -1. Select **Solutions** on the left pane. -1. Select **Import solution**. -1. Browse for and select either the **managed** or **unmanaged version** of the *mpa_ITBase* file downloaded in previous step. -1. Select **Next**. -1. Select **Import** to start the import process of the *IT Base* solution. Once the import is complete, you're notified with a *Success* message. -1. Browse for and select either the **managed** or **unmanaged** version of the *mpa_Appointment Booking* file downloaded in previous step. +1. Sign in to [Power Apps](https://make.preview.powerapps.com/) and select the environment you prepared in the [review prerequisites step](#step-1-review-prerequisites). +1. In the left pane, select **Solutions**. +1. Select **Import solution**,and then find and select the **managed** or **unmanaged version** of the `mpa_ITBase` file downloaded. +1. Select **Next**, and then select **Import**. +1. After you receive a message that the import was successful, repeat steps 4 and 5 to import the `mpa_AppointmentBooking` file you downloaded. 1. Select **Next** and **Next** again. -1. For each of the connections listed, select the *existing connection that was created in the previous step*. +1. For each of the connections listed, select the connection that was created in the import steps. 1. Select **Next**. -1. Skip the environment variable setup for now because the required URL values only become available after the apps are imported into the environment. -1. Select **Import** to start the import process of the *Appointment Booking* solution. Once the import is complete, you're notified with a *Success* message. +1. Skip the the environment variable setup for now. The required URL values only become available after the apps are imported into the environment. +1. Select **Import** to start importing the *Appointment Booking* solution. The import process takes a few minutes and once it's complete you're notified with a *Success* message. -More information: [Solution concepts](/power-platform/alm/solution-concepts-alm) +[Learn more about solutions](/power-platform/alm/solution-concepts-alm) ## Step 4: Create shared calendar @@ -172,7 +165,7 @@ More information: [Create, view, or delete a calendar group]( [!TIP] > A free Developer Plan combined with a free Power BI in Microsoft Fabric free account is a great way to install the template for evaluation purposes. > > More information: [Power Apps Developer Plan](https://powerapps.microsoft.com/developerplan/) +More information: [Microsoft Power Platform Licensing Guide](https://go.microsoft.com/fwlink/?linkid=2085130) + ### Set up environments and data policies -It's important to have a cohesive environment and data policy strategy for enterprise templates. To successfully install and manage the Hardware Request and Management template, confirm these resources and practices are in place. +It's important to have a cohesive environment and data policy and to ensure required resources in place. + +- **Administrators** -- **Administrators** - Be sure admins with the necessary privileges are available to coordinate to assign licensing and create environments. + Make sure that admins with the necessary privileges are available to assign licenses and create environments: - Microsoft Entra ID Global or tenant User Administrator to assign Power Apps or Power BI licensing - Power Platform Administrator to create environments - More information: [Microsoft Power Platform admin](/power-platform/admin/) + [Learn more about Microsoft Power Platform administration](/power-platform/admin/). -- **Environments** - Follow [application lifecycle management (ALM)](/power-platform/alm/) best practices in [creating and managing environments](/power-platform/admin/create-environment). Create and prepare a Power Platform developer environment specifically for the Hardware Request and Management solution files. Also consider: +- **Environments** - - The Power Platform environment is set up with a Dataverse database - - Environment Maker security role privileges, at a minimum, are assigned to the user who installs the solutions in that environment + - Follow [application lifecycle management (ALM)](/power-platform/alm/) best practices in [creating and managing environments](/power-platform/admin/create-environment). + - Make sure that a Power Platform environment is set up with a Dataverse database. + - Make sure that environment maker security role privileges, at a minimum, are assigned to the user who installs the solutions in that environment. - More information: [Environments overview](/power-platform/admin/environments-overview) + [Learn more about Power Platform environments](/power-platform/admin/environments-overview). -- **Data loss prevention policies** - Ensure the environment has access to connectors used by the template: +- **Data loss prevention policies** - - [Microsoft Dataverse](/connectors/commondataserviceforapps/) - - [Office 365 Outlook](/connectors/office365/) - - [Office 365 Users](/connectors/office365users/) - - [Approvals](/connectors/approvals/) - - [Microsoft Teams](/connectors/teams/) - - [Cards for Power Apps](/connectors/cardsforpowerapps/) +Make sure that the environment has access to connectors used by the template: + +- [Microsoft Dataverse](/connectors/commondataserviceforapps/) +- [Office 365 Outlook](/connectors/office365/) +- [Office 365 Users](/connectors/office365users/) +- [Approvals](/connectors/approvals/) +- [Microsoft Teams](/connectors/teams/) +- [Cards for Power Apps](/connectors/cardsforpowerapps/) - More information: [Data loss prevention policies](/power-platform/admin/wp-data-loss-prevention) +More information: [Data loss prevention policies](/power-platform/admin/wp-data-loss-prevention) ## Step 2: Create connections -Cloud flows need specific connection references to work correctly. Connection references are included in the solution, but connectors often need to be manually set up. +Cloud flows need specific connection references to work correctly. Connection references are included in the solution, but connectors often need to be set up manually. You need to set up six new connections for the Hardware Request and Management app -The installation requires several connections. It's best to create connections before importing the template to make the import smoother. If you create the connections during import, you have to jump back and forth between browser windows. Existing connections can also be used. +It's best to create the connections before you import the solution. If you create the connections during import, you have to jump back and forth between browser windows. It is okay to use existing connections. To create connections in advance, take these steps: -1. Go to [Power Apps](https://make.preview.powerapps.com/) -1. Go to **Connections** and select **+ New Connection** for the following connections: +1. Sign in to [Power Apps](https://make.preview.powerapps.com). +1. Go to **Connections** and select **+ New Connection** to create new connections with each of these connectors: - [Dataverse](/connectors/commondataserviceforapps/) - [Office 365 Outlook](/connectors/office365/) @@ -106,15 +111,20 @@ To create connections in advance, take these steps: After you create all your connections, your list should look like this example: :::image type="content" source="media/install/hrm-install-connect.png" alt-text="Screenshot of list of connectors created for your app."::: -More information: [Manage connections in canvas apps](/power-apps/maker/canvas-apps/add-manage-connections) -## Step 3: Install Approvals solution +[Learn how to manage connections in canvas apps](/power-apps/maker/canvas-apps/add-manage-connections). + +## Step 3: Create approvals database + +The Expense Reimbursement solution leverages Power Automate Approvals to approve or reject requests. -The Hardware Request and Management template leverages Power Automate Approvals to approve or reject the request. By default, Power Platform environments are not setup with the required Approvals database that gets created the first time a flow with the Approvals connector is run in that environment by an administrator. Perform these steps to create the Approvals database: +By default, Power Platform environments aren't set up with the required database for approvals. The database is created the first time a flow with the [Approvals connector](/connectors/approvals/) is run in that environment by an administrator. + +Take these steps to create the database for approvals: 1. Go to the [Power Automate maker portal](https://make.preview.powerautomate.com/environments/) and select your targeted deployment environment. 1. Select **+ Create** on left pane. -1. Select **Instant cloud flow** underneath the *Start from blank* section. +1. Select **Instant cloud flow** underneath the *Create from blank* section. 1. Choose **Manually trigger a flow** and then select **Create**. 1. Select **+ New step**. 1. Search on *Approvals* and choose **Create an approval**. @@ -125,20 +135,20 @@ The Hardware Request and Management template leverages Power Automate Approvals 1. Select **Save**. 1. Select **Test Manually** and then **Test** again. 1. Select **Continue** and then **Run flow**, followed by **Done**. -1. *Delete* the flow you just created, as it is no longer needed. +1. Delete the *flow* you just created, as it is no longer needed. > [!NOTE] > -> It can take a few minutes for the database provisioning to complete, and you'll notice this delay the first time you run this flow. Once this first-time flow run is complete, subsequent approval flows will be faster. +> It can take a few minutes for the database provisioning to complete, and you'll notice this delay the first time you run this flow. Once you complete this first-time flow run, subsequent approval flows will be faster. -More information: [Get started with Power Automate approvals](/power-automate/get-started-approvals) +[Learn how to get started with Power Automate approvals](/power-automate/get-started-approvals) ## Step 4: Install solution files -There are two solution installation options available for you to consider: +You have two options for installing the Hardware Request and Management solution: -- You can select the *Get it now* button on the template's AppSource offer page and it automatically takes you to an *install window* in the Power Platform admin center. -- You can download either a *managed* or an *unmanaged* version of the solution files and manually import them into your environment according to your organization's requirements. +- [Select **Get it now** on the template's AppSource page](#install-from-appsource) and an installation window opens automatically in the Power Platform admin center. +- [Download a managed or unmanaged version of the solution files and manually import them into your environment](#download-and-manually-install-solution-files). > [!TIP] > @@ -146,25 +156,23 @@ There are two solution installation options available for you to consider: ### Install from AppSource -You can easily access and install the Hardware Request and Management template from AppSource, a Microsoft digital storefront. Take these steps to go through the AppSource install process: +AppSource is a Microsoft digital storefront. Take these steps to go through the AppSource install process: -1. Go to the [Hardware Request and Management template on AppSource](https://aka.ms/AccessHardwareRequestandManagementTemplate) and select **Get it now**. This takes you to the *Install Hardware Request and Management Template* window in the [Power Platform admin center](https://admin.powerplatform.microsoft.com/). -:::image type="content" source="media/install/hrm-install-env.png" alt-text="Screenshot of the modal dialog window where you select the environment you set up for the template."::: -1. Select the developer *environment* that you prepared for the template. -1. Agree to the *Terms and Privacy Statements* by checking the boxes. -1. Select **Install** and view the installation status. After the installation is complete, the status shows as *Installed*. +1. Go to the [Hardware Request and Management template on AppSource](https://aka.ms/AccessHardwareRequestandManagementTemplate) and select **Get it now**. +1. In the **Install Hardware Request and Management** window in the [Power Platform admin center](https://admin.powerplatform.microsoft.com/), select the developer environment that you prepared in the [review prerequisites step](#step-1-review-prerequisites). +1. Agree to the *Terms and Privacy Statements* when prompted. +1. Select **Install**. -More information: [AppSource](https://appsource.microsoft.com/en-US/) +[Learn more about AppSource](https://appsource.microsoft.com/en-US/) -> [!IMPORTANT] -> Two solutions are always installed in your environment: -> -> - **IT Base** contains common foundational components that all information technology (IT) solutions use. This includes components that enable localization capabilities. By sharing this across solutions, common strings can be localized once in the base solution and all dependent solutions get the benefit. -> - **Hardware Request and Management** contains all the components needed to enable the implementation of the Hardware Request and Management program within an organization. +Two solutions are installed in your environment: -### Download and manually install solution files +- **IT Base** +- **Hardware Request and Management** -You also have the option to download *managed* or *unmanaged* solution files and manually install into your prepared environment according to your organization's requirements: +Go to the [Hardware Request and Management overview article](./overview.md) to learn more about the two solutions. + +### Download and manually install solution files 1. Download the following Managed *or* Unmanaged solution files: @@ -175,21 +183,18 @@ You also have the option to download *managed* or *unmanaged* solution files and - [mpa_ITBase.zip](https://aka.ms/ITBaseUnManagedSolution) - [mpa_HardwareRequestAndManagement.zip](https://aka.ms/HardwareRequestAndManagementUnManagedSolution) -1. Go to [Power Apps](https://make.preview.powerapps.com/) and select the *environment* you prepared for the solution. -1. Select **Solutions** on the left pane. -1. Select **Import solution**. -1. Browse for and select either the **managed** or **unmanaged version** of the *mpa_ITBase* file downloaded in previous step. -1. Select **Next**. -1. Select **Import**. This starts the import process of the *IT Base* solution -1. Wait for the *IT Base* solution to finish importing. The import process takes a few minutes and once it's complete you're notified with a *Success* message. -1. Browse for and select either the **managed** or **unmanaged** version of the *mpa_HardwareRequestAndManagement* file downloaded in previous step. +1. Sign in to [Power Apps](https://make.preview.powerapps.com/) and select the environment you prepared in the [review prerequisites step](#step-1-review-prerequisites). +1. In the left pane, select **Solutions**. +1. Select **Import solution**, and then find and select the **managed** or **unmanaged version** of the `mpa_ITBase` file downloaded. +1. Select **Next**, and then select **Import**. +1. After you receive a message that the import was successful, repeat steps 4 and 5 to import the `mpa_HardwareRequestAndManagement` file you downloaded. 1. Select **Next** and **Next** again. -1. For each of the connections listed, select the *existing connection that was created in the previous step*. +1. For each of the connections listed, select the connection that was created in the import steps. 1. Select **Next**. -1. Ignore entering values for the environment variables as that will be completed in an additional step later. Since the apps have not been imported into the environment yet, we are unable to capture what their URL values are at the moment. -1. Select **Import** which will start the import process of the *Hardware Request and Management* solution. Wait for the *Hardware Request and Management* solution to finish importing. The import process takes a few minutes and once it's complete you're notified with a *Success* message. +1. Skip the the environment variable setup for now. The required URL values only become available after the apps are imported into the environment. +1. Select **Import** to start importing the *Hardware Request and Management* solution. The import process takes a few minutes and once it's complete you're notified with a *Success* message. -More information: [Solution concepts](/power-platform/alm/solution-concepts-alm) +[Learn more about solutions](/power-platform/alm/solution-concepts-alm). ## Step 5: Update environment variables and connection references @@ -206,7 +211,8 @@ To update environment variables, take these steps: > [!NOTE] > - > If you manually installed an *unmanaged version of Hardware Request and Management solution file* from GitHub, there is no need to create a new solution to add the environment variable and connection references to. Simply edit these components directly in the existing unmanaged solution file. + > If you manually installed an unmanaged version of the Hardware Request and Management solution file from GitHub, there is no need to add the environment variable and connection references to a new solution. Simply edit these components directly in the existing unmanaged solution file. + 1. Select **Solutions** on the left pane. 1. Select **+ New solution** and populate the properties. 1. Select **Add existing** > **More** > **Environment variable**. @@ -215,7 +221,7 @@ To update environment variables, take these steps: > [!NOTE] > - > If you manually imported either the managed or unmanaged version of the Hardware Request and Management solution file from GitHub, there is no need to add and update Connection References as those were set during the original import process. + > If you manually imported either the managed or unmanaged version of the Hardware Request and Management solution file from GitHub, there is no need to add and update connection references as those were set during the original import process. > > Only Add and update connection references if you installed from AppSource. Skip to step 13 in this section. @@ -234,9 +240,10 @@ To update environment variables, take these steps: 1. Repeat steps 12-15 of this section for the Hardware Request App URL environment variable. :::image type="content" source="media/install/hrm-install-variables.png" alt-text="Screenshot of how to set up environment variables for your app."::: -More information: [Use environment variables in solutions](/power-apps/maker/data-platform/environmentvariables) -## Step 6: Share and set cloud flows to on +[Learn how to use environment variables in solutions](/power-apps/maker/data-platform/environmentvariables) + +## Step 6: Share and turn on cloud flows Some of the cloud flows may be off by default because the environment variables set in Step 5 are not populated yet. Additionally, it is important for some flows to run under a user's context when invoking actions like starting a Teams group chat, generating an approval or sending an email notification. @@ -266,7 +273,7 @@ Perform these steps to ensure certain flows run under the user's context: - Notify Review Complete - Set Assets As Delivered With Refresh Date -More information: [Share a cloud flow](/power-automate/create-team-flows#share-a-cloud-flow-with-run-only-permissions) +[Learn how to share a cloud flow](/power-automate/create-team-flows#share-a-cloud-flow-with-run-only-permissions) ### Turn on cloud flows @@ -316,7 +323,7 @@ Access to both the Hardware Request and the Hardware Management apps can be cont Take the following steps to share the Hardware Request app with users: -1. Go to [Power Apps](https://make.preview.powerapps.com/) and select the environment you installed the solution in. +1. Sign in to [Power Apps](https://make.preview.powerapps.com/) and select the environment you installed the solution in. 1. Select **Solutions** on the left pane and select the **Hardware Request and Management** solution from the list. 1. Select **Apps**. 1. Go to the *Hardware Request app* row and then the **three dots**. diff --git a/power-platform/enterprise-templates/it/hardware-request-and-management/use.md b/power-platform/enterprise-templates/it/hardware-request-and-management/use.md index 0ff53a0108..bdc7545d6a 100644 --- a/power-platform/enterprise-templates/it/hardware-request-and-management/use.md +++ b/power-platform/enterprise-templates/it/hardware-request-and-management/use.md @@ -1,13 +1,13 @@ --- -title: Use the Hardware Request and Management template for Power Platform -description: Learn how to use the Hardware Request and Management template for Microsoft Power Platform. +title: Use the Hardware Request and Hardware Management apps +description: Learn how to use the Hardware Request and Hardware Management apps to streamline the asset request and approval process. author: microsoft-george ms.author: georgenewton contributors: - tverhasselt ms.reviewer: ellenwehrle ms.topic: how-to -ms.date: 11/06/2023 +ms.date: 05/30/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -15,133 +15,163 @@ ms.subservice: solution-templates # Use the Hardware Request and Hardware Management apps -Once configuration and setup steps are completed the apps are ready to use. +Once configuration and setup steps are complete, the apps are ready to share and use. ## Use the Hardware Request app -The Hardware Request app is very streamlined, to eliminate any specialized user training for the request process. The app has minimal flexibility to minimize confusion. The goal is to let the app guide the user through creating and submitting their request to initiate the workflow for the approval in the management app. The following is a brief overview of the supported functions. +The Hardware Request app is straight forward and easy to use so no specialized user training is necessary for the request process. The app guides you through creating and submitting a request to initiate the workflow for the approval in the management app. This article provides a brief overview of the supported functions in the Hardware Request app. :::image type="content" source="media/use/hrm-use-home.png" alt-text="Screenshot of the Hardware Request app home page."::: ### Create a new request for hardware -The Hardware Request app simplifies how you shop and submit requests for new hardware when the need arises. Here are the steps to get started: +The Hardware Request app simplifies how you shop and submit requests for new hardware. Take these steps to get started: -1. One the home page, select **Create new request** -1. The *Select From Available Devices* page is shown with a separate tile for each *product type* +1. On the home page, select **Create new request** to go to the *Select From Available Devices* page. Here, you see a separate tile for each *product type*. :::image type="content" source="media/use/hrm-use-select-devicetype.png" alt-text="Screenshot of the Hardware Request app device type selection page."::: 1. From the device selection page, either: - 1. Select a tile to go to the products within a specific product type - 1. Filter by product description in the *Quick find* field. This reduces the number of tiles and the product count within each before selecting a device type + 1. Select a tile to go to the products within a specific product type. + 1. Filter by product description in the *Quick find*. field. This reduces the number of tiles and the product count within each before selecting a device type. 1. From the Product category view, you can add filters for brand or subtype, or search on the product description. -1. Key in quantity for the desired product or click the plus (+) button for the desired quantity. When ready, click "Add to cart". -1. Repeat as necessary to fill the cart with all items to be requested -1. Once all products and quantity have been added to cart, click on the shopping cart icon to check out. +1. For each product request, be sure to indicate the quantity. You can key in quantity or select **plus (+)**. +1. Select **Add to cart**. +1. Repeat the steps as necessary to fill the cart with all necessary items. +1. Select the **shopping cart** to check out. +1. On the check-out page, you can add the following information: -### View requests for hardware + - *Request title* - give your request a name -Once a request has been submitted, its progress to completion can be tracked through the same app. Here are the steps to get started: + - *Business group* - select your business group -1. On the home page, select **View my requests** -1. The *My requests* page shows a table with all of your requests. The table fields are: - 1. Request title - 1. Approver - 1. Approval status - 1. Stage - 1. Submitted on (date) - 1. Completed on (date) -1. Select the **eye* to view more details about a specific request + - *Requested on behalf of* - if you are requesting for another individual, select their name from the dropdown -### View devices + - *Additional details* - provide any details that may be helpful -You can view devices that are assigned to you, as well. Take these steps to get started: +1. Review each hardware request and quantity to ensure accuracy. You have the option to select **Remove** if necessary. -1. On the home page, select **View my devices** -1. The *My Assets* page shows a table with all of your assigned devices. The fields are: - 1. Device name - 1. Asset number - 1. Manufacturer - 1. Delivered on (date) - 1. Refresh eligible (date) +1. Select **Submit request**. A *Request submitted* page appears when complete. -## Use the Hardware Management app - -The most-likely hardware management scenarios are shared with overviews of how the Hardware Management app can accommodate them. +### View requests for hardware -Within each scenario there are options available to the user. The hardware management app is flexible to handle a variety of scenarios. The goal is always for the system data to reflect how requests, assets and budget exist in the real world. +Once you submit a request in the Hardware Request app, you can view its progress. Take these steps: -### Review and approve a request that requires a purchase +1. On the home page, select **View my requests**. +1. View your requests. The *My requests* page shows a table with all of your requests. The table fields are: + - Request title + - Approver + - Approval status + - Stage + - Submitted on (date) + - Completed on (date) +1. Select the **eye** to view more details about a specific request. -The workflow for the request process begins with the important decision to approve or reject. To make this decision, the hardware manager is provided with as much relevant information as possible. Because this decision is prior to purchasing, the hardware manager can take action from the Hardware Management app, Microsoft Teams, or Microsoft Outlook. We will cover all three options: +### View devices -#### Use the Hardware Management app for requests that require a purchase +You can also view devices that are assigned to you. Take these steps: -Follow these steps to get started reviewing and approving a request that requires a purchase directly in the Hardware Management app. +1. On the home page, select **View my devices**. +1. View your devices. The *My Assets* page shows a table with all of your assigned devices. The fields are: -1. In *Requests* > Requests view list of "Open Requests" (Note: the default sort is by "Submitted On" date (descending) with the newest requests on top). -1. Select a request for review and click on the Request Name hyperlink for the row + - Device name + - Asset number + - Manufacturer + - Delivered on (date) + - Refresh eligible (date) - :::image type="content" source="media/use/hrm-use-management-po.png" alt-text="Screenshot of managing a request that requires a PO in the Hardware Management app ."::: +## Use the Hardware Management app -1. The Hardware Request *General* tab provides an overview of the request. The information helps the hardware manager make a decision to approve or reject the request. The overview includes these sections: +Hardware requests are managed by a team in the Hardware Management app. This section covers the most-likely hardware management scenarios you may encounter as a hardware manager. - 1. Details – Name, Business Group, Submitted by, Requires purchasing indicator, Amount, Submitted on date/time, Completed on date, Requested for, and Request number - 1. Approval – Status, Comments, Approved by, Approved on - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Purchase Orders - 1. Assets +The Hardware Management app is designed to be flexible so it can handle a variety of scenarios for you. The goal is always for the system data to reflect how requests, assets, and budget exist in the real world. -1. The *Header* section contains the status tracker which: +### Review and approve a request that requires a purchase - 1. allows the administrator to quickly identify where in the process the request is - 1. has executable functions for each step in the process +The workflow for the request process begins with the important decision to approve or reject. To make this decision, the hardware manager is provided with as much relevant information as possible. Because this decision is made prior to purchasing, you or other hardware managers can take action from the Hardware Management app, Microsoft Teams, or Microsoft Outlook. -1. Approve in the Management app +#### Use the Hardware Management app for requests that require a purchase - 1. Within the status tracker, click on the "Review" step - 1. Update the Approval Status from "Pending" to "Approved" - 1. In this case we, purchasing is required. For "Require Purchasing?" keep the default *Yes* - 1. Select **Run Flow** to *Notify Review Complete*. This notifies the requesting user of the approval action - 1. Select **Next Stage** to advance to the *Purchase* step. +Take these steps to review and approve a request that requires a purchase directly in the Hardware Management app. + +1. Select **Requests** on the left pane in the Hardware Management app. +1. Select an **Open Requests** to view a list of open requests (Note: the default sort is by *Submitted On* date (descending) with the newest requests on top). +1. Select the **Request Name hyperlink** of the request you want to review. It takes you to the Hardware Request *General* tab. + + :::image type="content" source="media/use/hrm-use-management-po.png" alt-text="Screenshot of managing a request that requires a PO in the Hardware Management app."::: + + The Hardware Request *General* tab provides an overview of the request. The information on the overview page helps you make a decision to approve or reject the request. The overview includes these sections: + + - Details + - Name + - Business Group + - Submitted by + - Requires purchasing indicator + - Amount + - Submitted on date/time + - Completed on date + - Requested for + - Request number + - Approval + - Status + - Comments + - Approved by + - Approved on + - Additional details – input as free text from request + - Items + - product description + - quantity + - price + - Purchase Orders + - Assets + - Header – contains the status tracker that allows the administrator to quickly identify where in the process the request is and has executable functions for each step in the process + +1. Select on the **Review** step in the status tracker. +1. Update the approval status from *Pending* to **Approved**. +1. Keep the default set to **Yes** for *Require Purchasing?* since this is a purchasing scenario. +1. Select **Run Flow** to *Notify Review Complete*. This notifies the requesting user of the approval action. +1. Select **Next Stage** to advance to the *Purchase* step. #### Use Teams for requests that require a purchase -It can be set up so that hardware managers have a workflow item for *Approval* set up for them in Teams. The workflow arrives when a hardware request is submitted along with a notification in *Activity*. Follow these steps to get started with this approval process scenario: +It can be set up so that you have a workflow item for *Approvals* set up for them in Teams. The workflow arrives when a hardware request is submitted along with a notification in *Activity*. Take these steps to start the approval process scenario: -1. Select **Approvals** on the left-side panel +1. Select **Approvals** on the left pane in the Hardware Management app. 1. Choose the request to review and a card will open with the relevant details for the request: - 1. Status – "Requested" in this case (eventually "Approved" or "Rejected") - 1. Name - 1. Submitted By - 1. Amount - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Attachments – documents relevant to review - 1. Status flow – shows timing of action from requestor to approver - 1. Comments – allows approver to explain decision - -1. Select **Approve** to advance to the *Purchase* step + - Status – *Requested* in this case (eventually the status will be *Approved* or *Rejected*) + - Name + - Submitted By + - Amount + - Additional details – input as free text from request + - Items – list includes product description, quantity, and price + - Attachments – documents relevant to review + - Status flow – shows timing of action from requestor to approver + - Comments – allows you, as the approver, to use free text to explain the decision + +1. Select **Approve** to advance to the *Purchase* step. + +Learn more about [approvals in Microsoft Teams](/power-automate/teams/native-approvals-in-teams). #### Use Outlook for requests that require a purchase -It can be set up so that emails go to a hardware manager's *Outlook Inbox* when a request is submitted. Follow these steps to get started with this approval process scenario: +It can be set up so that emails go to your or another hardware manager's *Outlook Inbox* when a request is submitted. Take these steps to start this approval process scenario: -1. When an hardware request email arrives, simply open the email to review the relevant details for the request: +1. When a hardware request email arrives, simply open the email to review the relevant details for the request: - 1. Status – "Requested" in this case (eventually "Approved" or "Rejected") - 1. Name - 1. Submitted By - 1. Amount - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Attachments – documents relevant to review - 1. Status flow – shows timing of action from requestor to approver - 1. Comments – allows approver to explain decision + - Status – *Requested* in this case (eventually *Approved* or *Rejected*) + - Name + - Submitted By + - Amount + - Additional details – input as free text from request + - Items + - description + - quantity + - price + - Attachments – documents relevant to review + - Status flow – shows timing of action from requestor to approver + - Comments – allows approver to explain decision -1. Select **Approve** to advance to the *Purchase* step +1. Select **Approve** to advance to the *Purchase* step. > [!NOTE] > @@ -149,113 +179,158 @@ It can be set up so that emails go to a hardware manager's *Outlook Inbox* when ### Review and approve a request that doesn't require a purchase -Requests that do not require the purchasing step (assets already in inventory) must be handled slightly differently. Because there are fewer steps, the process is simpler: +Requests that don't require the purchasing step (assets already in inventory) must be handled slightly differently. Because there are fewer steps, the process is simpler: #### Use the Hardware Management app for a request that doesn't require a purchase -1. Go to **Requests** > Requests view list of **Open Requests** (Note: the default sort is by *Submitted On* date (descending) with the newest requests on top). -1. Select a request for review and then select the **Request Name** hyperlink for the row -1. The Hardware Request *General* tab provides an overview of the request. The information helps the administrator make a decision to approve or reject the request. The overview includes sections: - 1. Details – Name, Business Group, Submitted by, Requires purchasing indicator (update from *Yes* to *No*; you'll notice the *Status Tracker* will change, with the steps for *Purchase* and *Receive* disappearing), Amount, Submitted on date/time, Completed on date, Requested for, and Request number - 1. Approval – Status, Comments, Approved by, Approved on - 1. Additional details – free text inputted from request - 1. Items – list includes product description, quantity and price - 1. Purchase Orders - 1. Assets -1. The Header section contains the status tracker which: - 1. allows the administrator to quickly identify where in the process the request is - 1. has executable functions for each step in the process -1. Approve in the Hardware Management app - 1. Within the status tracker, select **Review** - 1. Update the Approval Status from *Pending* to *Approved* - 1. In this case, purchasing is not required. For *Require Purchasing?* change the default from *Yes* to *No* - 1. Select **Run Flow** to *Notify Review Complete*, which will notify the user making the request of the approval action - 1. Select **Next Stage** to advance to the *Deliver* step +Take these steps to go through a scenario where you use the Hardware Management app to process a request that does not require a purchase: + +1. Select **Requests** on the left pane in the Hardware Management app. + +1. Select **Open Requests** to view a list of open requests(Note: the default sort is by *Submitted On* date (descending) with the newest requests on top). + +1. Select the **Request Name hyperlink** of the request you want to review. It takes you to the Hardware Request *General* tab that provides an overview of the request. The information helps you make the decision whether to approve or reject the request. The overview page includes these sections: + + - Details + - Name + - Business Group + - Submitted by + - Requires purchasing indicator + - Amount + - Submitted on date/time + - Completed on date + - Requested for + - Request number + - Approval + - Status + - Comments + - Approved by + - Approved on + - Additional details – shows free text input related to request + - Items + - description + - quantity + - price + - Purchase Orders + - Assets + - Header – contains the status tracker that helps you quickly identify the request process stages and contains executable function for each step in the process. + +1. Select **Review** in the status tracker. + +1. Update the Approval Status field from *Pending* to **Approved**. + +1. For *Require Purchasing?*, change the default from *Yes* to **No** since a purchase is not required in this scenario. + +1. Select **Run Flow** for *Notify Review Complete*. This action notifies the requestor of the approval action. + +1. Select **Next Stage** to advance to the *Deliver* step. > [!NOTE] > > Changing a request *Require Purchasing?* from default *Yes* to *No* cannot be done in Teams or Outlook. The Hardware Management app must be used for this function. -### Review and approve a request with items with mixed inventory +### Review and approve a mixed inventory request When the request includes both items for purchasing and items on hand, a hybrid approach is required. -It's best to view the request as *Requires purchasing? Yes* with individual items being assigned as *existing assets*. The process resumes from step 5 in the *Use Hardware Management app for a request that doesn't require a purchase*. Take these steps: +It's best to view the request as *Requires purchasing? Yes* with individual items being assigned as *existing assets*. Take these steps to review and approve a mixed inventory request in the Hardware Management app: -1. Approve in the Hardware Management app - 1. Add an approval comment to indicate to Purchaser which items will be assigned from existing asset inventory (for example, *USB-C Charger should not be purchased; assign from inventory*) - 1. Assuming there is availability, go to the *Assets* block, select the **ellipsis (…)** and then select **Add Existing Asset** - 1. Input the name of the asset in *Look for records* and search - 1. Once selected, select the **Add** button; the asset is then assigned to the Request +1. Add an approval comment to indicate to Purchaser which items will be assigned from existing asset inventory (for example, *USB-C Charger should not be purchased; assign from inventory*). +1. Go to the *Assets* block, select the **ellipsis (…)**, and then select **Add Existing Asset**. +1. Input the name of the asset in *Look for records* and search. +1. Select the asset and then select **Add**. This action assigns the asset to the request. ### Reject a request -When after review, the decision may be made that a request should not be continued. The request may be a duplicate, entered by mistake, or exceed budget. In this case, the hardware manager must reject the request. This will ensure that no purchasing or further action is taken. The rejection can be done in Teams, Outlook or the Hardware Management app directly. +After review, the decision may be made that a request should not be continued. The request may be a duplicate, be a mistake, or exceed budget. In this case, you must reject the request. This ensures that no purchasing or further action is taken. You can reject a request in Teams, Outlook, or the Hardware Management app directly. #### Use the Hardware Management app to reject a request -1. In Requests > Requests view list of "Open Requests" (Note: the default sort is by "Submitted On" date (descending) with the newest requests on top). -1. Select a request for review and click on the Request Name hyperlink for the row -1. The Hardware Request "General" tab provides an overview of the request. The information helps the administrator make a decision to approve or reject the request. The overview includes sections: - 1. Details – Name, Business Group, Submitted by, Requires purchasing indicator, Amount, Submitted on date/time, Completed on date, Requested for, and Request number - 1. Approval – Status, Comments, Approved by, Approved on - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Purchase Orders - 1. Assets -1. The Header section contains the status tracker which: - 1. allows the administrator to quickly identify where in the process the request is - 1. has executable functions for each step in the process -1. Reject - 1. Within the status tracker, click on the "Review" step - 1. Update the Approval Status from "Pending" to "Rejected" - 1. Select **Run Flow** to *Notify Review Complete*, which will notify the user making the request of the approval action +Take these steps to reject a request directly in the Hardware Management app: + +1. Select **Requests** on the left pane in the Hardware Management app. + +1. Select **Open Request** to view a list of requests (Note: the default sort is by "Submitted On" date (descending) with the newest requests on top). + +1. Select the **Request name hyperlink** of the request you want to review. It takes you to the Hardware Request *General* tab that provides an overview of the request. The information helps you make the decision whether to approve or reject the request. The overview page includes these sections: + + - Details + - Name + - Business Group + - Submitted by + - Requires purchasing indicator + - Amount + - Submitted on date/time + - Completed on date + - Requested for + - Request number + - Approval + - Status + - Comments + - Approved by + - Approved on + - Additional details – shows free text input related to request + - Items + - description + - quantity + - price + - Purchase Orders + - Assets + - Header - contains the status tracker that helps you quickly identify the request process stages and contains executable function for each step in the process + +1. Select the **Review** step in the status tracker. + +1. Update the Approval Status field from *Pending* to **Rejected**. + +1. Select **Run Flow** to *Notify Review Complete*. This action notifies the user making the request of the approval action. #### Use Teams to reject a request Hardware managers have a workflow item for *Approval* in Teams that arrives when a request is submitted, along with a notification in *Activity*. To get started with the process of rejecting a hardware request through Teams, take these steps: -1. Select **Approvals** in the left-side panel +1. Select **Approvals** in the left pane of Teams. 1. Select the request to review; a card will open with the relevant details for the request: - 1. Status – "Requested" in this case (eventually "Approved" or "Rejected") - 1. Name - 1. Submitted By - 1. Amount - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Attachments – documents relevant to review - 1. Status flow – shows timing of action from requestor to approver - 1. Comments – allows approver to explain decision -1. Select **Reject** + + - Status – shows *Requested* in this case (eventually *Approved* or *Rejected*) + - Name + - Submitted By + - Amount + - Additional details – shows free text input related to request + - Items – lists the products with description, quantity, and price + - Attachments – shows relevant documents to review + - Status flow – shows timing of action from requestor to approver + - Comments – allows approver to explain decision + +1. Select **Reject**. #### Use Outlook to reject a request -Hardware managers receive an email in their *Outlook Inbox* that arrives when a request is submitted and ready for a review. To get started with the process of rejecting a hardware request through Outlook, take these steps: +Hardware managers receive an email in their *Outlook Inbox* that arrives when a request is submitted and ready for a review. To reject a hardware request through Outlook, take these steps: 1. Open the request to review email. The email has the relevant details for the request: - 1. Status – "Requested" in this case (eventually "Approved" or "Rejected") - 1. Name - 1. Submitted By - 1. Amount - 1. Additional details – input as free text from request - 1. Items – list includes product description, quantity and price - 1. Attachments – documents relevant to review - 1. Status flow – shows timing of action from requestor to approver - 1. Comments – allows approver to explain decision -1. Select **Reject** + - Status – *Requested* in this case (eventually *Approved* or *Rejected*) + - Name + - Submitted By + - Amount + - Additional details – shows free text input related to request + - Items – lists the product description, quantity, and price + - Attachments – shows documents relevant to review + - Status flow – shows timing of action from requestor to approver + - Comments – allows approver to explain decision +1. Select **Reject**. ### Purchase -Once the Request is approved, it is ready for purchasing. Any items that require purchasing should be added to a *Purchase Order* in your company's purchasing system. To make the Hardware Management app reflect the reality of that purchase order, update the request with the purchase order information as follows: +Once the Request is approved, it's ready for purchasing. Any items that require purchasing are added to a *Purchase Order* in your company's purchasing system. To make the Hardware Management app reflect the reality of that purchase order, update the request with the purchase order information. Take these steps: -1. Select the **ellipsis (…)** on the *Purchase Orders* tile in the request and select **+ Add New Purchase Order** -1. Input the following fields and select **Save** when you are done +1. Select the **ellipsis (…)** on the *Purchase Orders* tile in the request and select **+ Add New Purchase Order**. +1. Input the fields and select **Save**. Required fields for a purchase: - Name (Note: Purchase Order name may align with the Request) - - Business Group (financially responsible for the purchase) - - Budget (where the funds are to be allocated from) + - Business Group – shows group that is financially responsible for the purchase + - Budget – shows where the funds are to be allocated from Optional fields for a purchase: @@ -264,86 +339,88 @@ Once the Request is approved, it is ready for purchasing. Any items that require - Hardware Request - Currency -1. Once the purchase order is entered, the notification flow should be run to communicate the completion of the stage. From the overview, select **Purchase** within the workflow and then select **Run Flow** for *Notify purchase complete*. In the window that pops up, select **Run Flow** again -1. Advance the workflow by selecting **Purchase** in the workflow and then select **Next Stage** +1. Once the purchase order is entered, run the notification flow to communicate the completion of the stage. From the overview, select **Purchase** within the workflow and then select **Run Flow** for *Notify purchase complete*. In the window that appears, select **Run Flow** again. +1. Advance the workflow by selecting **Purchase** in the workflow and then select **Next Stage**. ## Receive -Once the shipment of the ordered products are received, you are ready for your next actions. To make the Hardware Management app reflect the reality of the received goods, update the request as follows: +Once the shipment of the ordered products are received, you are ready to create assets, communicate receipt, and advance the workflow in the Hardware Management app. Take these steps to update the request: -1. Create assets for the received goods +1. Select **Requests** on the left pane of the Hardware Management app. +1. Create assets for the received goods. 1. Select **Receive** within the workflow 1. Select **Run Flow** for *Create assets* - 1. In the window that pops up, select **Run Flow** again -1. Communicate the receipt event to the requestor + 1. In the window, select **Run Flow** again +1. Communicate the receipt event to the requestor. 1. Select **Receive** within the workflow 1. Select **Run Flow** for *Notify received complete* - 1. In the window that pops up, select **Run Flow** again -1. Advance the workflow + 1. In the window, select **Run Flow** again +1. Advance the workflow. 1. Select **Receive** in the workflow 1. Select **Next Stage** 1. Select **Receive** in the workflow 1. Select **Run Flow** for *Notify received complete* - 1. In the window that pops up, select **Run Flow** again + 1. In the window, select **Run Flow** again ### Deliver -Now that the assets are on hand, they need to be delivered to the person who they were ordered for. Once the requestor is in possession of the assets, update the request as follows: +Now that the assets are on hand, it's time to deliver them. Once the requestor is in possession of the assets, take these steps to update the request: -1. Create assets for each delivered item +1. Select **Requests** on the left pane of the Hardware Management app. +1. Create assets for each delivered item. 1. Select **Delivery** within the workflow 1. Select **Run Flow** for *Set assets as delivered* 1. In the window that pops up, select **Run Flow** again -1. Communicate the delivery event to the requestor +1. Communicate the delivery event to the requestor. 1. Select **Delivery** within the workflow 1. Select **Run Flow** for *Notify delivery complete* 1. In the window that pops up, enter *Delivered On* date 1. Select **Run Flow** again -1. Advance the workflow +1. Advance the workflow. 1. Select **Deliver** in the workflow and select **Next Stage** ### Complete Update the request to reflect that the process is complete. Take these steps: +1. Select **Requests** on the left pane of the Hardware Management app. 1. Communicate the completion to the requestor. 1. Select **Complete** within the workflow 1. Select **Run Flow** for *Notify request complete* 1. In the window that pops up, select **Run Flow** again -1. Complete the workflow +1. Complete the workflow. 1. Select **Complete** in the workflow 1. Enter a *Completed on* date and then select **Finish** ### Reassign a request -It may be necessary to reassign a request to a different approver than the one selected by default upon submission through the request app. The action can be completed either from the Hardware Management app or Teams. +It may be necessary to reassign a request to a different approver than the one selected by default upon submission through the request app. You can complete the action either from the Hardware Management app or Teams. #### Use the Hardware Management app to reassign a request -Take these steps to reassign a request to a different approver in the Hardware Management app: +Take these steps to reassign a request to a different approver: -1. Select **Assign** +1. Select **Requests** on the left pane of the Hardware Management app. +1. Select **Assign** to bring up the *Assign Hardware Request* window. > [!NOTE] > > Depending on the size of the window, you may need to select the **ellipsis (…)** to see *Assign*. -1. The window for *Assign Hardware Request* will appear -1. For *Assign to*, select **User or Team** -1. For *User or team*, you can view all or filter to see *only users* or *only teams* -1. Once a selection is made for the reassignment, select **Assign** +1. For *Assign to*, select **User** or **Team**. For user or team, you can view all or filter to see *only users* or *only teams*. +1. Once a selection is made for the reassignment, select **Assign**. #### Use Teams to reassign a request Take these steps to reassign a request to a different approver in Teams: -1. In the card, select **Reassign** -1. Start typing the name in *Reassign to* (suggestions are made based on the input) -1. Once a name is selected, select **Confirm** to complete the reassignment +1. In the card, select **Reassign**. +1. Start typing the name in *Reassign to* (suggestions are made based on the input). +1. Once a name is selected, select **Confirm** to complete the reassignment. ### Notify Hardware is eligible for refresh -Every Asset is assigned a *Refresh Eligible On* date, which is calculated based on the: +Every Asset is assigned a *Refresh Eligible On* date. The date is calculated based on the: - *Refresh Term* (Months) in the refresh policy for the product - *Delivered On* date of the asset @@ -352,15 +429,15 @@ A flow for *Notify Asset Refresh Eligible* is executed periodically. For active ### Mass import for bulk purchase -Create assets purchased in bulk. Use Excel online integration for this. Bulk import these assets and associate the import to a purchase order for budget roll-up reasons without necessarily a request. +To create assets purchased in bulk, use the Excel online integration. Bulk import these assets and associate the import to a purchase order for budget roll-up reasons without a request. ### Get insights on requests and hardware assets -The app is built with a handful of reports driven by Power BI that allow an administrator to monitor Request Activities and Budgets and Assets to enable efficient operations. Select **Dashboards** and then **Reports** on the left-side pane to get started. +The app is built with a handful of reports driven by Power BI that allow you to monitor Request Activities, Budgets, and Assets to enable efficient operations. Select **Dashboards** and then **Reports** on the left pane to get started. #### Hardware Request Dashboard -The Hardware Request Dashboard gives a graphical view of request activity. Select the period from the dropdown (Today, Yesterday, This Week, Last Week…) for the desired *Submitted on* date filter. The charts will update with views for: +The Hardware Request Dashboard gives a graphical view of request activity. Select the period from the dropdown (Today, Yesterday, This Week, Last Week…) for the desired *Submitted on* date filter. The charts updates with views for: - By Status - By Stage diff --git a/power-platform/enterprise-templates/media/overview/exre-logo.png b/power-platform/enterprise-templates/media/overview/exre-logo.png new file mode 100644 index 0000000000..d0c4e687b0 Binary files /dev/null and b/power-platform/enterprise-templates/media/overview/exre-logo.png differ diff --git a/power-platform/enterprise-templates/overview.md b/power-platform/enterprise-templates/overview.md index 7de8f57773..0d522c8428 100644 --- a/power-platform/enterprise-templates/overview.md +++ b/power-platform/enterprise-templates/overview.md @@ -8,7 +8,7 @@ contributors: - EllenWehrle ms.reviewer: ellenwehrle ms.topic: overview -ms.date: 03/27/2024 +ms.date: 06/13/2024 ms.custom: bap-template ms.service: power-platform ms.subservice: solution-templates @@ -59,6 +59,15 @@ Be sure to check back often for new templates that become available. ![Appointment Booking](media/overview/ab-as-icon.png "Appointment Booking")
**Appointment Booking template**
Organize the appointment booking process
[Documentation](https://aka.ms/LearnAppointmentBookingTemplate)
[AppSource](https://aka.ms/AccessAppointmentBookingTemplate)
:::column-end::: :::row-end::: +:::row::: + :::column span=""::: + ![Expense Reimbursement](media/overview/exre-logo.png "Expense Reimbursement")
**Expense Reimbursement template**
Improve the expense reimbursement process
[Documentation](https://aka.ms/LearnExpenseReimbursementTemplate)
[AppSource](https://aka.ms/AccessExpenseReimbursementTemplate) + :::column-end::: + :::column span=""::: + :::column-end::: + :::column span=""::: + :::column-end::: +:::row-end::: ## Benefits of using enterprise templates @@ -94,6 +103,7 @@ Learn how to install and set up Enterprise templates for Power Platform. More in - [Install and set up the Onboarding Buddy template](hr/onboarding-buddy/install-and-set-up.md) - [Install and set up the Hardware Request and Management template](it/hardware-request-and-management/install-and-set-up.md) - [Install and set up the Appointment Booking template](it/appointment-booking/install-and-set-up.md) +- [Install and set up the Expense Reimbursement template](hr/expense-reimbursement/install-and-set-up.md) ## Support diff --git a/power-platform/faqs-copilot-data-security-privacy.md b/power-platform/faqs-copilot-data-security-privacy.md index 4258d503b4..ef1049a563 100644 --- a/power-platform/faqs-copilot-data-security-privacy.md +++ b/power-platform/faqs-copilot-data-security-privacy.md @@ -2,7 +2,7 @@ title: "FAQ for Copilot data security and privacy for Dynamics 365 and Power Platform " description: "This FAQ discusses Copilot data security and privacy in Power Platform and how Copilot responsibly uses AI capabilities." author: sericks007 -ms.date: 06/04/2024 +ms.date: 06/24/2024 ms.custom: - responsible-ai-faqs ms.topic: article @@ -11,6 +11,7 @@ ms.reviewer: tapanm ms.collection: - bap-ai-copilot ms.contributors: +- ywanjari - deepabansal - traliil - mikebc diff --git a/power-platform/guidance/TOC.yml b/power-platform/guidance/TOC.yml index 6bb59b2988..668ee71464 100644 --- a/power-platform/guidance/TOC.yml +++ b/power-platform/guidance/TOC.yml @@ -44,7 +44,7 @@ - name: Plan and manage licenses and capacity href: adoption/capacity-and-licenses.md - name: Establish an environment strategy - href: adoption/environment-strategy.md + href: white-papers/environment-strategy.md - name: Manage Dataverse for Teams environments href: adoption/teams-environment-strategy.md - name: Manage the default environment @@ -387,6 +387,18 @@ href: creator-kit/dialog.md - name: Panel (experimental) href: creator-kit/panel.md + - name: Charts + items: + - name: DonutChart (preview) + href: creator-kit/donutchart.md + - name: GaugeChart (preview) + href: creator-kit/gaugechart.md + - name: HorizontalBar + items: + - name: HorizontalBarChart (preview) + href: creator-kit/horizontalbarchart.md + - name: HorizontalBarChart - Stacked (preview) + href: creator-kit/stackedbarchart.md - name: Utilities items: - name: Elevation diff --git a/power-platform/guidance/adoption/admin-best-practices.md b/power-platform/guidance/adoption/admin-best-practices.md index cb4141a091..23d6480c14 100644 --- a/power-platform/guidance/adoption/admin-best-practices.md +++ b/power-platform/guidance/adoption/admin-best-practices.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 09/09/2020 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks @@ -26,7 +26,7 @@ In this section, we'll explore some best practices to follow when establishing a > * [Designate the Microsoft Power Platform admin role](pp-admin.md) > * [Manage users](../../admin/create-users.md) > * [Plan and manage license and capacity](../../admin/capacity-add-on.md) -> * [Establish an environment strategy](environment-strategy.md) +> * [Establish an environment strategy](../white-papers/environment-strategy.md) > * [Manage Microsoft Dataverse for Teams environments](teams-environment-strategy.md) :::column-end::: :::column span=""::: diff --git a/power-platform/guidance/adoption/capacity-and-licenses.md b/power-platform/guidance/adoption/capacity-and-licenses.md index 9f98336cfd..b9d8dd9579 100644 --- a/power-platform/guidance/adoption/capacity-and-licenses.md +++ b/power-platform/guidance/adoption/capacity-and-licenses.md @@ -1,5 +1,5 @@ --- -title: "Plan and manage license and capacity allocations - Microsoft Power Platform (contains video) | MicrosoftDocs" +title: "Plan and manage license and capacity allocations - Microsoft Power Platform | MicrosoftDocs" description: "Find answers to questions around how to plan licensing and capacity for your organization's or team's applications or processes." author: manuelap-msft diff --git a/power-platform/guidance/adoption/dlp-strategy.md b/power-platform/guidance/adoption/dlp-strategy.md index 6ee9b9465a..08c779b031 100644 --- a/power-platform/guidance/adoption/dlp-strategy.md +++ b/power-platform/guidance/adoption/dlp-strategy.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 09/09/2020 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks @@ -16,13 +16,13 @@ search.audienceType: Data loss prevention (DLP) policies act as guardrails to help prevent users from unintentionally exposing organizational data and to protect information security in the tenant. DLP policies enforce rules for which connectors are enabled for each environment, and which connectors can be used together. Connectors are classified as either **business data only**, **no business data allowed**, or **blocked**. A connector in the business data only group can only be used with other connectors from that group in the same app or flow. More information: [Administer Microsoft Power Platform: Data Loss Prevention Policies](../../admin/wp-data-loss-prevention.md) -Establishing your DLP policies will go hand in hand with your [environment strategy](environment-strategy.md). +Establishing your DLP policies goes hand in hand with your [environment strategy](../white-papers/environment-strategy.md). ## Quick facts - [Data loss prevention (DLP)](../../admin/wp-data-loss-prevention.md) policies act as guardrails to help prevent users from unintentionally exposing data. - DLP policies can be scoped at the environment level and tenant level, offering flexibility to craft policies that are sensible and don't block high productivity. -- Environment DLP policies cannot override tenant-wide DLP policies. +- Environment DLP policies can't override tenant-wide DLP policies. - If multiple policies are configured for one environment, the most restrictive policy applies to the combination of connectors. - By default, no DLP policies are implemented in the tenant. - Policies can’t be applied at the user level, only at the environment or tenant level. @@ -34,8 +34,8 @@ Establishing your DLP policies will go hand in hand with your [environment strat Business and non-business classifications draw boundaries around what connectors can be used together in a given app or flow. Connectors can be classified across the following groups using DLP policies: -- **Business**: A given Power App or Power Automate resource can use one or more connectors from a business group. If a Power App or Power Automate resource uses a business connector, it cannot use any non-business connector. -- **Non-business**: A given Power App or Power Automate resource can use one or more connectors from a non-business group. If a Power App or Power Automate resource uses a non-business connector, it cannot use any business connector. +- **Business**: A given Power App or Power Automate resource can use one or more connectors from a business group. If a Power App or Power Automate resource uses a business connector, it can't use any non-business connector. +- **Non-business**: A given Power App or Power Automate resource can use one or more connectors from a non-business group. If a Power App or Power Automate resource uses a non-business connector, it can't use any business connector. - **Blocked**: No Power App or Power Automate resource can use a connector from a blocked group. All Microsoft-owned premium connectors and third-party connectors (standard and premium) can be blocked. All Microsoft-owned standard connectors and Common Data Service connectors can't be blocked. The names "business" and "non-business" don't have any special meaning—they're simply labels. The grouping of the connectors themselves is of significance, not the name of the group they're placed in. @@ -44,25 +44,25 @@ More information: [Administer Microsoft Power Platform: Connector classification ## Strategies for creating DLP policies -As an administrator taking over an environment or starting to support use of Power Apps and Power Automate, DLP policies should be one of the first things you set up. This ensures a base set of policies is in place, and you can then focus on handling exceptions and creating targeted DLP policies that implement these exceptions once approved. +As an administrator taking over an environment or starting to support use of Power Apps and Power Automate, DLP policies should be one of the first things you set up. Once a base set of policies is in place, you can then focus on handling exceptions and creating targeted DLP policies that implement these exceptions once approved. We recommend the following starting point for DLP policies for **shared user and team productivity environments**: -- Create a policy spanning all environments except selected ones (for example, your production environments), keep the available connectors in this policy limited to Office 365 and other standard microservices, and block access to everything else. This policy will apply to the default environment, and to training environments you have for running internal training events. Additionally, this policy will also apply to any new environments that will be created. -- Create appropriate and more permissive DLP policies for your [shared user and team productivity environments](environment-strategy.md#tiered-approach-to-team-and-user-productivity-environments). These policies could allow makers to use connectors like Azure services in addition to the Office 365 services. The connectors available in these environments will depend on your organization, and where your organization stores business data. +- Create a policy spanning all environments except selected ones (for example, your production environments), keep the available connectors in this policy limited to Office 365 and other standard microservices, and block access to everything else. This policy applies to the default environment, and to training environments you have for running internal training events. Additionally, this policy also applies to any new environments that are created. +- Create appropriate and more permissive DLP policies for your [shared user and team productivity environments](../white-papers/environment-strategy.md). These policies could allow makers to use connectors like Azure services in addition to the Office 365 services. The connectors available in these environments depend on your organization, and where your organization stores business data. We recommend the following starting point for DLP policies for **production (business unit and project) environments**: - Exclude those environments from shared user and team productivity policies. - Work with the business unit and project to establish which connectors and connector combinations they'll use and create a tenant policy to include the selected environments only. -- Environment admins of those environments can use environment policies to categorize custom connectors as business-data only, if required. +- Environment admins of those environments can use environment policies to categorize custom connectors as business-data only, if necessary. -Additional to the above, we also recommend: +We also recommend: -- Creating a minimal number of policies per environment. There is no strict hierarchy between tenant and environment policies, and at design and runtime, all policies that are applicable to the environment in which the app or flow resides are evaluated together to decide whether the resource is in compliance or violation of DLP policies. [Multiple DLP policies](../../admin/dlp-combined-effect-multiple-policies.md) applied to one environment will fragment your connector space in complicated ways, and might make it difficult to understand issues your makers are facing. +- Creating a minimal number of policies per environment. There's no strict hierarchy between tenant and environment policies, and at design and runtime, all policies that are applicable to the environment in which the app or flow resides are evaluated together to decide whether the resource is in compliance or violation of DLP policies. [Multiple DLP policies](../../admin/dlp-combined-effect-multiple-policies.md) applied to one environment will fragment your connector space in complicated ways, and might make it difficult to understand issues your makers are facing. - Centrally managing DLP Policies using tenant level policies, and using environment policies only to categorize custom connectors or in exception cases. -With this in place, plan how to handle exceptions. You can: +With a base strategy in place, plan how to handle exceptions. You can: - Deny the request. - Add the connector to the default DLP policy. @@ -70,25 +70,25 @@ With this in place, plan how to handle exceptions. You can: ## Example: Contoso's DLP strategy -Let’s look at how Contoso Corporation, our sample organization for this guidance, set up their DLP policies. The setup of their DLP policies ties in closely with their [environment strategy](environment-strategy.md). +Let’s look at how Contoso Corporation, our sample organization for this guidance, set up their DLP policies. The setup of their DLP policies ties in closely with their [environment strategy](../white-papers/environment-strategy.md). Contoso admins want to support user and team productivity scenarios and business applications, in addition to Center of Excellence (CoE) activity management. -The environment and DLP strategy Contoso admins have applied here consists of: +The environment and DLP strategy Contoso admins applied here consists of: -1. A tenant-wide restrictive DLP policy that applies to all environments in the tenant except some specific environments that they have excluded from the policy scope. Admins intend to keep the available connectors in this policy limited to Office 365 and other standard micro-services by blocking access to everything else. This policy will also apply to the default environment. +1. A tenant-wide restrictive DLP policy that applies to all environments in the tenant except some specific environments that they excluded from the policy scope. Admins intend to keep the available connectors in this policy limited to Office 365 and other standard micro-services by blocking access to everything else. This policy also applies to the default environment. -1. Contoso admins have created another shared environment for users to create apps for user and team productivity use cases. This environment has an associated tenant-level DLP policy that isn't as risk-averse as a default policy and allows makers to use connectors like Azure services in addition to the Office 365 services. Because this is a non-default environment, admins can actively control the environment maker list for it. This is a tiered approach to shared user and team productivity environment and associated DLP settings. +1. Contoso admins created another shared environment for users to create apps for user and team productivity use cases. This environment has an associated tenant-level DLP policy that isn't as risk-averse as a default policy and allows makers to use connectors like Azure services in addition to the Office 365 services. Because this environment is a non-default environment, admins can actively control the environment maker list for it. This is a tiered approach to shared user and team productivity environment and associated DLP settings. -1. In addition, for the business units to create line-of-business applications, they have created development, test, and production environments for their tax and audit subsidiaries across various countries/regions. The environment maker access to these environments is carefully managed, and appropriate first- and third-party connectors are made available using tenant-level DLP policies in consultation with the business unit stakeholders. +1. In addition, for the business units to create line-of-business applications, they created development, test, and production environments for their tax and audit subsidiaries across various countries/regions. The environment maker access to these environments is carefully managed, and appropriate first- and third-party connectors are made available using tenant-level DLP policies in consultation with the business unit stakeholders. 1. Similarly, dev/test/production environments are created for Central IT's use to develop and roll out relevant or right applications. These business application scenarios typically have a well-defined set of connectors that need to be made available for makers, testers, and users in these environments. Access to these connectors is managed using a dedicated tenant-level policy. -1. Contoso also has a special purpose environment dedicated to their Center of Excellence activities. In Contoso, the DLP policy for the special purpose environment will remain high touch given the experimental nature of the theory teams book. In this case, tenant admins have delegated DLP management for this environment directly to a trusted environment admin of the CoE team and excluded it from a school of all tenant-level policies. This environment is managed only by the environment-level DLP policy, which is an exception rather than the rule at Contoso. +1. Contoso also has a special purpose environment dedicated to their Center of Excellence activities. In Contoso, the DLP policy for the special purpose environment remains high touch given the experimental nature of the theory teams book. In this case, tenant admins delegated DLP management for this environment directly to a trusted environment admin of the CoE team and excluded it from a school of all tenant-level policies. This environment is managed only by the environment-level DLP policy, which is an exception rather than the rule at Contoso. -As expected, any new environments that are created in Contoso will map to the original all-environments policy. +As expected, any new environments that are created in Contoso map to the original all-environments policy. -This setup of tenant-centric DLP policies doesn't prevent environment admins from coming up with their own environment-level DLP policies, if they want to introduce additional restrictions or to classify custom connectors. +This setup of tenant-centric DLP policies doesn't prevent environment admins from coming up with their own environment-level DLP policies, if they want to introduce more restrictions or to classify custom connectors. ![How Contoso set up their DLP policy.](media/dlp-strategy_.png "How Contoso set up their DLP policy") @@ -105,7 +105,6 @@ Set up a [SharePoint site or a wiki](wiki-community.md) that clearly communicate - Tenant-level and key environment-level (for example, default environment, trial environment) DLP policies enforced in the organization, inclusive of lists of connectors classified as business, non-business, and blocked. - Your admin group’s email ID so that makers can make contact for exception scenarios. For example, admins can help makers get back into compliance editing an existing DLP policy, moving the solution to a different environment, creating a new environment and a new DLP policy, and moving the maker and resource to this new environment. -Also clearly communicate your organization's [environment strategy to makers](environment-strategy.md#clearly-communicate-your-organizations-environment-strategy-to-makers). - +Also clearly communicate your organization's [environment strategy to makers](/power-platform/guidance/white-papers/environment-strategy#communicate-your-environment-strategy-to-your-organization). [!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/guidance/adoption/environment-strategy.md b/power-platform/guidance/adoption/environment-strategy.md deleted file mode 100644 index 39042138e3..0000000000 --- a/power-platform/guidance/adoption/environment-strategy.md +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: "Establishing an environment strategy - Microsoft Power Platform | MicrosoftDocs" -description: Develop an environment strategy to securely manage resources in Power Platform environments while allowing productive development. -author: manuelap-msft -ms.topic: conceptual -ms.date: 8/15/2023 -ms.subservice: guidance -ms.author: mapichle -ms.reviewer: sericks -contributors: - - ProfessorKendrick -search.audienceType: - - admin ---- -# Establishing an environment strategy - -Power Platform environments are containers that administrators can use to manage apps, flows, connections, and other assets, along with permissions to allow organization members to use the resources. This article walks you through important details about environments in Microsoft Power Platform and discusses recommended ways to benefit from proactively managing them. More information: [Microsoft Power Platform environments overview](../../admin/environments-overview.md) - -Developing an environment strategy means configuring environments and other layers of data security in a way that supports productive development in your organization, while securing and organizing resources. A strategy to manage environment provisioning and access, and controlling resources within them, is important to: - -- Secure data and access. -- Understand how to use the default environment correctly. -- Manage the correct number of environments to avoid sprawl and conserve capacity. -- Facilitate application lifecycle management (ALM). -- Organize resources in logical partitions. -- Support operations (and helpdesk) in identifying apps that are in production by having them in dedicated environments. -- Ensure data is being stored and transmitted in acceptable geographic regions (for performance and compliance reasons). -- Ensure isolation of applications being developed. - -## Understand environments - -Before we get started, let’s look at some environment and security key facts: - -- Environments are tied to a [geographic location](../../admin/regions-overview.md) that is configured at the time the environment is created. -- Environments can be used to target different audiences or for different purposes such as dev, test, and production. -- [Data loss prevention (DLP) policies](../../admin/wp-data-loss-prevention.md) can be applied to individual environments or the tenant. -- Every tenant has a [default environment](../../admin/environments-overview.md#default-environment). -- [Non-default environments](../../admin/environments-overview.md#power-platform-environment-types) can be created by licensed Power Apps, Power Automate, and Dynamics 365 users. Creation can be restricted to only global and service admins via a tenant setting. -- Non-default environments offer more control around [permissions](../../admin/environments-overview.md#power-platform-environment-roles). -- An environment can have one or zero [Microsoft Dataverse instances](../../admin/create-database.md). -- Environments include [predefined security roles](../../admin/database-security.md) that reflect common user tasks with access levels defined to match the security best-practice goal of providing access to the minimum amount of business data required to use the app. -- [Default environment routing](../../admin/default-environment-routing.md) is a premium, governance feature. This feature allows Power Platform admins to automatically direct new makers into their own, personal developer environments when they visit make.powerapps.com for the first time. - -### Types of environments - -Before you get started developing an environment strategy, ensure you understand the different [types of environments](../../admin/environments-overview.md#power-platform-environment-types). - -## Developing a strategy - -Here is a **starting point** to consider for your environment strategy. - -- **Assign your admins the [Microsoft Power Platform service admin](../../admin/use-service-admin-role-manage-tenant.md#power-platform-administrator) or Dynamics 365 service admin role.**
These roles provide administrative access to Power Apps canvas apps, flows, model-driven apps, environments, custom connectors, connections, gateways, Power Apps portals, AI Builder models, and all Dataverse instances. This role should be assigned to admins who don't need global tenant admin access and are dedicated to managing Microsoft Power Platform. - -- **Restrict the creation of net-new production environments to admins.**
[Limiting environment creation](../../admin/control-environment-creation.md) is beneficial to maintain control in general: both to prevent unaccounted capacity consumption and to reduce the number of environments to manage. If users have to request environments from central IT, it’s easier to see what people are working on if admins are the gatekeeper. - -- **Treat the [default environment](../../admin/environments-overview.md#default-environment) as a user and team productivity environment for your business groups.**
Renaming the environment through the admin center is recommended to make the purpose of that environment self-explanatory. Clearly communicate that Default is used for user and team productivity scenarios, but not business-important or mission-critical apps. This environment can't be disabled or deleted because it hosts integration with products like SharePoint and Project. We recommend a [tiered approach to user and team productivity environments](#tiered-approach-to-team-and-user-productivity-environments). - -- **Establish a process for requesting access to or creation of environments.**
With environment creation locked down and default reserved for first-party integration apps, make it clear to your organization that a proper development project should be started by requesting a new dedicated environment where there is clear communication of intent and support between developers and admins. The next section has more detail about automated environment creation, which is just one way to implement an easy formal request process. - -- **Dev/test/production environments for specific business groups or applications.**
Having staged environments ensures that changes during development don't break the users in production and data isn't corrupted. When resources are limited, focus this pattern for mission-critical and important apps, or on business units that have the greatest need for their own dedicated space. - -- **Individual-use environments for proof of concepts and training workshops.**
To host workshops, hackathons, and internal training events—like App in a Day or Flow in a Day—create a new, separate environment for the event to keep everyone organized. Ask the users to save the resources they need in a short term after the event and clean up the environment, or reset it for other events. Use Trial environments that do not consume capacity for these types of activities. - -- **Establish Tenant and Environment level Data Loss Prevention (DLP) policies**
Data Loss Prevention (DLP) policies act as guardrails to help prevent users from unintentionally exposing organizational data and to protect information security in the tenant. An essential part of the Power Platform Admin role will be to [establish and maintain tenant and environment level DLP policies](dlp-strategy.md). - -### Tiered approach to team and user productivity environments - -To support integrations, reduce the number of environments needed, and accelerate onboarding, we recommend creating several shared environments that can be used by individuals and teams. - -#### Default environment - -Everyone in your tenant has permissions to create apps and flows here. There currently is no way to block the Environment Maker role assignment in this environment. This is also the environment that is used for first-party integrations, like creating an app from a SharePoint list. Learn more: [The default environment](../../admin/environments-overview.md#default-environment) - -To reduce risk to data, the types of connectors used in your apps and flows should be limited to a less permissive data loss prevention (DLP) policy. This policy should cover common individual and small team productivity use cases, like working with SharePoint data, sending emails, and having an approval workflow. - -#### Power user environment - -While the default environment covers many use cases, some power users will have more advanced needs for their apps and flows, like integrating with Microsoft Teams, Microsoft Entra ID, or Azure DevOps. - -For this purpose, we recommend creating a power user environment. This shared environment should use more permissive DLP policies and admins should control the maker list to this environment. - -Some considerations for the power user environment: - -- Review the available connectors in this environment to make sure it’s the right fit for your users. -- Document the purpose and available connectors in this environment clearly—for example, on a [SharePoint site or wiki](wiki-community.md). -- Create an automated process for makers to request access to the power user environment—for example, using Microsoft Forms, a SharePoint site, or an app. If required, this process could include approval by the line manager or IT. - -### Custom environments - -While the shared environments cover many use cases for applications, teams and projects might benefit from having a custom environment to support their business unit-specific use cases or application lifecycle management scenarios. - -Some considerations for custom environments: - -- Work with the project teams or business units to establish if they require dedicated development, test, and production environments or if a dedicated development environment and shared test and production environments are more suitable to their use case. -- Consider **dedicated** environments for critical projects and workloads. Developers have Environment Maker access in the development environment, but only user access in the test and production environments. End users only have end user access to the production solution so no one can modify the production applications. -- Consider **sharing** test and production environments between important but medium complex apps. Individual projects and business units have their own development environment to protect data, but solutions are deployed to shared test and production environments. Developers are end users in the test environment, and end users only have basic user access to solutions and data in the production environment. -- Work with the business unit to establish which connectors are required and create an exception policy. -- Work with the business unit to establish who will be a maker in this environment, and who will be the environment administrator. -- Each environment consumes 1 GB of data capacity, so manage custom environments wisely. - -In addition to the above recommendations, establishing your environment strategy will also shape and direct your **[DLP strategy](dlp-strategy.md)**. - -- Everyone is a maker. Communicate with everyone that **Default** isn't for development of critical apps. -- Only one user has access. **Developer** environments are completely locked for any other user except the user who subscribed to the community plan. Applications can be moved out of the environment if needed. -- Approved users have access. **Shared** environments for user and team productivity scenarios, with an approved maker list. -- **Dedicated** environments for critical projects and workloads. Developers have environment maker access in the development environment, but only user access in the test and production environments. End users only have end user access to the production solution so no one can modify the production applications. -- **Shared** test and production environments for important but medium complex apps. Individual projects and business units have their own development environment to protect data, but solutions are deployed to shared test and production environments. Developers are end users in the test environment, and end users only have basic user access to solutions and data in the production environment. - -### Additional recommendations to manage environments - -Based on successful experience with customer engagements, here is a list of additional recommendations that can help make managing environments easier. - -- **Use a service account to deploy production solutions**: Create a service account that central IT manages to deploy to test and production environments. This is beneficial for many reasons: - - - Allows all members of IT to manage admin resources (such as test and production environments). - - Only the service account has admin permissions in the environment. - - All other users have end user permissions and cannot create new resources—this is important because if users are given access to a data connection, they can create any new interface to interact with the data that wasn’t intended by the developer. - - IT is aware of production-grade applications that are in deployment since they’re involved in the implementation. - - Service accounts will need Microsoft Power Platform or Dynamics 365 service admin permission in PIM. Assign additional licenses as needed depending on what connectors need to be used in the request process (for example, if Dataverse and Outlook are used, assign premium Power Apps and Office Enterprise). - - When displaying the details for an application, it will show the service account as the creator and not the maker. This will help end users know who to contact in case of application issues. - - Consider if the risks of having a service account are important to you. Some organizations aren't comfortable having a service account because, for example, a shared resource with admin privileges cannot be tracked to a single person. This is valid, but can be mitigated with steps such as enforcing location-based conditional access, tracking the audit logs to an IP, or more extensive methods like maintaining a secure access workstation that requires user identification during use and restricting the service account access to that device. -- **Reduce the number of shared development environments** - - Have separate environments for separate project development, especially when dealing with secure data. Environments are containers for resources such as connections to data, and in development environments there might be multiple people with environment maker access. If makers have access to a shared data connection and can create apps and flows, there is a risk that someone will create a new interface to read, update, and delete data they might have been given access to. This is especially important to keep in mind for the default environment—you should always have important data connections, custom connectors, and other assets that need security in isolated environments to protect them. -- **Share resources with Microsoft Entra security groups** - - Security groups can be used to manage access to Power Apps, flows, Dataverse security roles, and other Office 365 services such as SharePoint Online. This removes the admin’s burden to update access to individual end users for each component (especially if multiple are involved)—the app owners can modify that at the security group level without IT (unless IT restricts access to security group management). -- **Automate environment creation** - - The admin connectors (Microsoft Power Platform for Admins) make it possible to create an approval flow where users request environments when IT has restricted environment creation to admins. Central IT can review a request and approve or reject the creation of the environment, without being responsible for manually going to the admin center and creating the environment for the user, just for validating the request details, business justification, DLP requirements, and whether enough capacity is available. -- **Create temporary development environments** - - As mentioned, it’s recommended to separate development environments as much as possible, and specifically avoid simultaneous app development for critical solutions in the default environment. If environments are created for development purposes, put a deadline on how long the environment should be available to the developers and have a process in place to back up and remove them. -- **Less is better** - - Although it’s important to make sure resources are reasonably partitioned between projects and business units using environments, it’s still important to find a good balance between security and feasibility. Managing shared test and production environments is a good way to facilitate a larger number of *important* solutions while preserving capacity and following best practices. This maintains restricted permissions because test and production have restricted environment permissions, and therefore the end users can’t modify the applications. -- **Provision environments with Dataverse instances in the appropriate region** - - In companies where employees work in multiple countries/regions, there might be some compliance considerations in terms of where data is stored and sent between countries/regions. If the environment has a Dataverse instance, the data is physically being stored in the region. Review the list of supported environment regions. - -### Factors that influence provisioning - -Some factors influence when to provision which types of environments: - -- **Defined tiers of application support** - - The level of complexity, how critical the app is, and users impacted by the application (for example, monthly active users/total users in an org) are all important measures of how to provision environments to support all the scenarios. - - Different types of applications should be separated in different environments based on how critical each is. - - |   |   | - |:---:|---| - | ![Critical apps.](media/env-l1.png "Critical apps") | Mission-critical scenarios and/or high-complexity and/or org-wide usage. Support owned by IT. Robust ALM process (dev/test/prod). Longer development cycle, often greater than 3 months to minimum viable product. - | ![Important apps.](media/env-l2.png "Important apps") | Important but not critical and/or medium complexity and/or scoped to business unit. Support owned by app owner or business unit, blessed by IT. ALM-using environments are advised but might not be necessary. Development typically less than three months to Minimum Viable Product. - | ![Productivity apps.](media/env-l3.png "Productivity apps") | Productivity app that doesn't need high level of governance. Support by app developer. Typically, application lifecycle management isn't necessary. Less than two weeks to minimum viable product. - -- **Capacity** - - Each environment (besides trial and developer environments) will consume 1 GB to initially provision. This might be a constraint for provisioning environments if your organization doesn't pay for premium Power Apps or Dynamics 365 licenses, and it’s also a shared capacity across the tenant needs to be allocated to those who need it. - - Conserve capacity by: - - - Managing shared test and production environments. Unlike shared development environments, permissions in test and production environments should be limited to end-user access for testing. - - Automate cleanup of temporary development environments and encourage use of trial environments for testing or proof-of-concept work. - -- **Admin involvement** - - It’s not always possible to have central IT involved in every development project happening throughout the tenant, especially if the IT team is smaller or there’s a larger enterprise to manage. - - Reduce the burden on the admin by: - - - Automating environment creation so the tenant admin only needs to approve the request. - - Automating development environment cleanup with temporary environments. - -## Clearly communicate your organization’s environment strategy to makers - -Set up a [SharePoint site or a wiki](wiki-community.md) that clearly communicates: - -- The purpose of your default environment. -- The purpose of shared team and user productivity environments, in addition to other shared environments makers might have access to (for example, training environments) and the process of how to request access to those environments. -- The purpose of trial environments and how to request them. -- The purpose of developer environments and how to create them -- The process of requesting custom environments for specific business unit or project purposes. -- The responsibilities of a maker: - - Keep the tenant clean. Delete your environments, apps, and flows if they are no longer needed. Use test environments if experimenting. - - Share wisely. Watch out for oversharing of your environments, apps, flows, and shared connections. - - Protect organization data. Avoid moving data from highly confidential or confidential data sources to non-protected or external storage. - -Also clearly communicate your organization’s [DLP policies to makers](dlp-strategy.md#clearly-communicate-your-organizations-dlp-policies-to-makers). - -[!INCLUDE[footer-include](../../includes/footer-banner.md)] \ No newline at end of file diff --git a/power-platform/guidance/adoption/manage-default-environment.md b/power-platform/guidance/adoption/manage-default-environment.md index 3c83fadb40..e00ca42949 100644 --- a/power-platform/guidance/adoption/manage-default-environment.md +++ b/power-platform/guidance/adoption/manage-default-environment.md @@ -5,7 +5,7 @@ author: rranjit83 ms.author: rranjit ms.reviewer: sericks ms.topic: how-to -ms.date: 02/28/2024 +ms.date: 06/13/2024 ms.custom: bap-template ms.subservice: guidance contributors: @@ -44,7 +44,7 @@ While the default environment is intended for personal productivity, makers migh Use the Power BI dashboard in the CoE Starter Kit to [identify widely shared apps and flows](/power-platform/guidance/coe/power-bi-govern#identify-widely-shared-apps). -When 10 or more employees are using a personal productivity app or flow, the Power Platform CoE can also help you to evaluate whether it should be moved to its own or a shared environment. The following table describes the parameters to consider. [Learn more about establishing an environment strategy](/power-platform/guidance/adoption/environment-strategy). +When 10 or more employees are using a personal productivity app or flow, the Power Platform CoE can also help you to evaluate whether it should be moved to its own or a shared environment. The following table describes the parameters to consider. [Learn more about establishing an environment strategy](/power-platform/guidance/white-papers/environment-strategy). diff --git a/power-platform/guidance/adoption/maturity-model-details.md b/power-platform/guidance/adoption/maturity-model-details.md index 4abea230ac..fe62aa7f9b 100644 --- a/power-platform/guidance/adoption/maturity-model-details.md +++ b/power-platform/guidance/adoption/maturity-model-details.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.subservice: guidance ms.topic: conceptual -ms.date: 10/31/2021 +ms.date: 06/13/2024 ms.author: mapichle ms.reviewer: sericks search.audienceType: @@ -46,18 +46,18 @@ The following sections present detailed characteristics and capabilities of an o | Level | State of Admin and Governance | |----------|-----------| | 100: Initial |
  • Environments are creatable by all
  • No data loss prevention policies (DLP)
| -| 200: Repeatable |
  • [Power Platform service admin](../../admin/overview-role-powerapps-admin.md) role assigned to specific administrators
  • Default environment covered by [DLP controls](../../admin/wp-data-loss-prevention.md)
  • Tenant Isolation configured
  • [CoE Starter Kit - Core Module](../coe/core-components.md) adopted to gain tenant-wide insights of existing usage
| -| 300: Defined |
  • [Defined environment, DLP, and request management strategies](environment-strategy.md)
  • [Monitoring of app usage](resource-usage.md) and adoption
  • [Monitoring of new connectors](new-connectors.md), to update DLP policies
  • [License, capacity, and consumption monitoring](capacity-and-licenses.md) informs decision making
  • [Tiered approach to productivity environments](environment-strategy.md) based on maker maturity
  • Custom environments are used for specific use cases and ALM scenarios
| +| 200: Repeatable |
  • [Power Platform service admin](../../admin/overview-role-powerapps-admin.md) role assigned to specific administrators
  • Default environment covered by [DLP controls](../../admin/wp-data-loss-prevention.md)
  • Tenant Isolation is configured
  • [CoE Starter Kit - Core Module](../coe/core-components.md) adopted to gain tenant-wide insights of existing usage
| +| 300: Defined |
  • [Defined environment, DLP, and request management strategies](../white-papers/environment-strategy.md)
  • [Monitoring of app usage](resource-usage.md) and adoption
  • [Monitoring of new connectors](new-connectors.md), to update DLP policies
  • [License, capacity, and consumption monitoring](capacity-and-licenses.md) informs decision making
  • [Tiered approach to productivity environments](../white-papers/environment-strategy.md) based on maker maturity
  • Custom environments are used for specific use cases and Application Lifecycle Management (ALM) scenarios
| | 400: Capable |
  • Overshared, unused, and orphaned resources are identified and appropriate actions are taken
  • Reactive governance to automatically gather business and compliance information
  • [CoE Starter Kit - Governance Module](../coe/governance-components.md) adopted to gain compliance insights and archive resources
  • Telemetry helps identify business-critical apps
  • Power Platform Operations team looks after tenant hygiene
  • Maker responsibilities are clearly defined and understood and automatically communicated
| -| 500: Efficient |
  • Further automation takes place through chatbots embedded in Teams – through clear risk profiles, tasks are auto-approved or routed through multi-step approval processes (for example, line manager, information security department, environment or tenant admin)
  • Practices that worked in their organization are shared externally at Microsoft or community events
| +| 500: Efficient |
  • Further automation takes place through chatbots embedded in Teams – through clear risk profiles, tasks are auto-approved or routed through multi-step approval processes (for example, line manager, information security department, environment, or tenant admin)
  • Practices that worked in their organization are shared externally at Microsoft or community events
| ## Support | Level | State of Support | |----------|-----------| -| 100: Initial |
  • Makers support their own apps
  • No or limited rules on how processes should be supported by IT and business stakeholders
| +| 100: Initial |
  • Makers support their own apps
  • No or limited rules on how processes are supported by IT and business stakeholders
| | 200: Repeatable |
  • Community support
  • Some degree of commitment and governance measures to manage solution lifecycle stages
| -| 300: Defined |
  • Support strategy involves Helpdesk
  • Defined risk profile dictates the level of support a solution will receive (for example, IT supported, IT blessed, maker supported)
| +| 300: Defined |
  • Support strategy involves Helpdesk
  • Defined risk profile dictates the level of support a solution receives (for example, IT supported, IT blessed, maker supported)
| | 400: Capable |
  • Dedicated support team
  • Continuous improvement plans in line with business strategy
  • Clearly understood roles and responsibilities
| | 500: Efficient |
  • Automation of support activities (for example, change ownership, bot for FAQ)
  • Responsibilities and ownership to build and operate solutions are fully understood
| @@ -66,7 +66,7 @@ The following sections present detailed characteristics and capabilities of an o | Level | State of Nurture and Citizen Makers | |----------|-----------| | 100: Initial |
  • Some staff may have attended App in a Day events (Partner or Microsoft delivered)
  • Team-based initiatives for nurturing makers
| -| 200: Repeatable |
  • [On-boarding strategy](onboard-makers.md) for new makers
  • Some staff have participated in a [hackathon](hackathons.md)
  • Makers become ambassadors across their departments and evangelize the capabilities
| +| 200: Repeatable |
  • [On-boarding strategy](onboard-makers.md) for new makers
  • Some staff participated in a [hackathon](hackathons.md)
  • Makers become ambassadors across their departments and evangelize the capabilities
| | 300: Defined |
  • Makers provide insights into business pain points
  • [Training and upskilling](training-strategy.md) strategy for makers
  • Internal [champions](champions.md) community
  • [CoE Starter Kit - Nurture Module](../coe/nurture-components.md) adopted
| | 400: Capable |
  • Regular events for champions
  • Regular hackathons
  • Maker assessments and certificates
  • Sharing and celebrating [success stories](show-and-tell.md)
  • Show & Tell sessions
  • Adoption campaign
| | 500: Efficient |
  • Large internal community with proven value
  • Career path for makers
  • Community of mentors
  • Common development strategy and goals for citizen and pro developers
| @@ -98,7 +98,7 @@ The following sections present detailed characteristics and capabilities of an o Successful Power Platform adoption involves making effective processes, support, tools, and data available to makers and users. -A common misconception is that adoption relates primarily to usage or the number of users. There's no question that usage statistics are an important factor. However, usage is not the only factor. Adoption is not just about using the technology regularly; it's about using it *effectively*. Effectiveness is much harder to define and measure. +A common misconception is that adoption relates primarily to usage or the number of users. There's no question that usage statistics are an important factor. However, usage isn't the only factor. Adoption isn't just about using the technology regularly; it's about using it *effectively*. Effectiveness is harder to define and measure. Whenever possible, adoption efforts should be aligned across low-code platforms, and other Power Platform products, such as Power BI. @@ -114,17 +114,17 @@ The intended audience of the adoption maturity model is interested in one or mor - Understanding and overcoming adoption-related challenges faced when scaling Power Platform. - Increasing their organization's return on investment (ROI) in Power Platform. -Primarily, this series of articles will be helpful to those who work in an organization with one or more of the following characteristics: +Primarily, this series of articles are helpful to those who work in an organization with one or more of the following characteristics: - Power Platform is deployed with some successes. -- Power Platform has pockets of viral adoption, but is not purposefully governed across the entire organization. +- Power Platform has pockets of viral adoption, but isn't purposefully governed across the entire organization. - Power Platform is deployed with some meaningful scale, but there remains a need to determine: - What is effective and what should be maintained? - What should be improved? - How future deployments could be more strategic. - Expanded adoption of Power Platform is under consideration or is planned. -Secondarily, this series of articles will be helpful for: +Secondarily, this series of articles are helpful for: - Organizations that are in the early stages of a Power Platform adoption. - Organizations that have had success with adoption and now want to evaluate their current maturity level. @@ -137,7 +137,7 @@ For information about Power BI adoption, see the [Power BI adoption roadmap](/po ## Next steps -In the articles in this series, learn about the Power Platform adoption maturity levels. The maturity levels are referenced throughout the entire series of articles. Also, see the conclusion article for additional adoption-related resources. +In the articles in this series, learn about the Power Platform adoption maturity levels. The maturity levels are referenced throughout the entire series of articles. Also, see the conclusion article for more adoption-related resources. Other helpful resources include: diff --git a/power-platform/guidance/adoption/maturity-model-goals.md b/power-platform/guidance/adoption/maturity-model-goals.md index 9a383f428b..cf03c1ff99 100644 --- a/power-platform/guidance/adoption/maturity-model-goals.md +++ b/power-platform/guidance/adoption/maturity-model-goals.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.subservice: guidance ms.topic: conceptual -ms.date: 10/31/2021 +ms.date: 06/13/2024 ms.author: mapichle ms.reviewer: sericks search.audienceType: @@ -70,11 +70,11 @@ The [Center of Excellence (CoE) Starter Kit](../coe/starter-kit.md) is deployed :::row::: :::column span=""::: ![Develop an environment strategy](media/adoption-7.png "Develop an environment strategy") - Develop an [environment strategy](environment-strategy.md) and configure layers of security in a way that supports productive development in your organization, while securing and organizing resources. + Develop an [environment strategy](../white-papers/environment-strategy.md) and configure layers of security in a way that supports productive development in your organization, while securing and organizing resources. :::column-end::: :::column span=""::: ![Establish tiers of application support](media/adoption-8.png "Establish tiers of application support") - Define [tiers of application support](environment-strategy.md#factors-that-influence-provisioning) – taking into account the level of complexity, how critical the app is, and users impacted by the application. + Define [tiers of application support](/power-platform/guidance/white-papers/environment-strategy#new-environments) – taking into account the level of complexity, how critical the app is, and users impacted by the application. :::column-end::: :::column span=""::: ![Share your success stories](media/adoption-9.png "Share your success stories") diff --git a/power-platform/guidance/adoption/resource-usage.md b/power-platform/guidance/adoption/resource-usage.md index 841e86cb49..fb070906f0 100644 --- a/power-platform/guidance/adoption/resource-usage.md +++ b/power-platform/guidance/adoption/resource-usage.md @@ -34,7 +34,7 @@ Out-of-the-box tooling around monitoring, alerts, and actions falls into the fol - [Power Automate Management](/connectors/flowmanagement/) is specifically designed to help with administrative management and monitoring. - [Power Automate for Admins](/connectors/microsoftflowforadmins/) allows you to perform typical admin actions, such as disabling or deleting a flow. - [Power Apps for Admins](/connectors/powerappsforadmins/) to set permissions on Power Apps or set permissions to a certain connector being used by this app. - - [Power Apps for Makers](/connectors/powerappsforappmakers/), which can be used by the makers themselves, although some actions overlay administrational tasks, such as settings permissions to a Power Apps app as mentioned previously. + - [Power Apps for Makers](/connectors/powerappsforappmakers/), which can be used by the makers themselves, although some actions overlay administrative tasks, such as settings permissions to a Power Apps app as mentioned previously. - [Power Platform for Admins](/connectors/powerplatformforadmins) to perform tasks against platform components, such as creating an environment or provisioning a Microsoft Dataverse database or creating a data loss prevention (DLP) policy for a specific environment. The [Center of Excellence Starter Kit](../coe/starter-kit.md) offers a template implementation using the management and admin connectors and comes with a Power BI dashboard that can be used to gain tenant-wide insights. diff --git a/power-platform/guidance/adoption/training-strategy.md b/power-platform/guidance/adoption/training-strategy.md index 949d3fffd7..11dd68ba63 100644 --- a/power-platform/guidance/adoption/training-strategy.md +++ b/power-platform/guidance/adoption/training-strategy.md @@ -35,7 +35,7 @@ Look for people with skills and strengths in the following roles: - **Citizen developers**: Continue to bring their day-to-day experience to how their job is done; when provided the right tools and training, can create apps to drive value. -- **Pro developers**: Will design advanced interfaces using [Power Apps componenet framework](/powerapps/developer/component-framework/overview) in addition to building complex relationships or integrations with other applications, when the out-of-the-box limits have been reached, and the app needs to be extended. +- **Pro developers**: Will design advanced interfaces using [Power Apps component framework](/powerapps/developer/component-framework/overview) in addition to building complex relationships or integrations with other applications, when the out-of-the-box limits have been reached, and the app needs to be extended. - **Trainers**: Are necessary to train others on how to use the apps that are built and made available across the organization, in addition to providing training on how to build apps. diff --git a/power-platform/guidance/adoption/wiki-community.md b/power-platform/guidance/adoption/wiki-community.md index cca2466743..7b1b633ec4 100644 --- a/power-platform/guidance/adoption/wiki-community.md +++ b/power-platform/guidance/adoption/wiki-community.md @@ -5,14 +5,14 @@ author: manuelap-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 04/10/2023 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks search.audienceType: - admin --- -# Create an internal Microsoft Power Platform hub +# Create an internal Microsoft Power Platform hub At the heart of growth is a community, a place for people to collaborate, share ideas, and discover new ways to apply technology to achieve more. A community is a safe place to ask questions to share tacit knowledge and expand skill sets. Organizations that have succeeded at creating a growing community of makers provide tools such as Yammer or Microsoft Teams groups, regular events and speaking opportunities, and foster an environment of ongoing learning. @@ -28,7 +28,7 @@ Here are a few tips on what the wiki should include: - **Community**: Share how to engage with the internal community, how to become a champion, how to find a mentor, and what the benefits of the community are. -- **[Environment strategy](environment-strategy.md)**: Share what environments are available and how to request access to existing environments or request new environments; additionally, ensure makers know the boundaries of an environments licensing, security, and connectors. +- **[Environment strategy](../white-papers/environment-strategy.md)**: Share what environments are available and how to request access to existing environments or request new environments; additionally, ensure makers know the boundaries of an environments licensing, security, and connectors. - **[Data loss prevention (DLP) policy strategy](dlp-strategy.md)**: Share which connectors are available in which environments and how to request more connectors or a new environment for a specific project. diff --git a/power-platform/guidance/alm-accelerator/setup-admin-tasks.md b/power-platform/guidance/alm-accelerator/setup-admin-tasks.md index 48d3fd9a76..a14634226a 100644 --- a/power-platform/guidance/alm-accelerator/setup-admin-tasks.md +++ b/power-platform/guidance/alm-accelerator/setup-admin-tasks.md @@ -2,7 +2,7 @@ title: Configure the ALM Accelerator using the admin app description: Learn how to configure the ALM Accelerator for Power Platform using the built-in administration app. ms.topic: conceptual -ms.date: 04/10/2023 +ms.date: 06/13/2024 ms.subservice: guidance author: jenschristianschroder ms.author: jeschro @@ -33,7 +33,7 @@ Before you install the ALM Accelerator for Power Platform, make sure you've met We recommend you install the ALM Accelerator in the same environment as other CoE Starter Kit solutions. Learn more about how to determine the best strategy for your organization: - - [Establishing an environment strategy for Microsoft Power Platform](../adoption/environment-strategy.md) + - [Establishing an environment strategy for Microsoft Power Platform](../white-papers/environment-strategy.md) - [Environment strategy for ALM](../../alm/environment-strategy-alm.md) - The ALM Accelerator uses Azure DevOps for source control and deployments. If you don't have an Azure DevOps organization, sign up for free for up to five users on the [Azure DevOps site](https://azure.microsoft.com/services/DevOps/). diff --git a/power-platform/guidance/alm-accelerator/setup-components-manually.md b/power-platform/guidance/alm-accelerator/setup-components-manually.md index e46a48d784..e8592d033d 100644 --- a/power-platform/guidance/alm-accelerator/setup-components-manually.md +++ b/power-platform/guidance/alm-accelerator/setup-components-manually.md @@ -2,7 +2,7 @@ title: Configure the ALM accelerator manually description: Learn how to set up the components of the ALM Accelerator for Power Platform manually if you choose not to use the accompanying administration app to configure them. ms.topic: conceptual -ms.date: 04/10/2023 +ms.date: 06/13/2024 ms.subservice: guidance author: jenschristianschroder ms.author: jeschro @@ -32,7 +32,7 @@ Before you install the ALM Accelerator for Power Platform, make sure you've met We recommend you install the ALM Accelerator in the same environment as other CoE Starter Kit solutions. Learn more about how to determine the best strategy for your organization: - - [Establishing an environment strategy for Microsoft Power Platform](../adoption/environment-strategy.md) + - [Establishing an environment strategy for Microsoft Power Platform](../white-papers/environment-strategy.md) - [Environment strategy for ALM](../../alm/environment-strategy-alm.md) - The ALM Accelerator uses Azure DevOps for source control and deployments. If you don't have an Azure DevOps organization, sign up for free for up to five users on the [Azure DevOps site](https://azure.microsoft.com/services/DevOps/). diff --git a/power-platform/guidance/architecture/real-world-examples/azure-function-canvas.md b/power-platform/guidance/architecture/real-world-examples/azure-function-canvas.md index cb41922f98..cce13a7ec9 100644 --- a/power-platform/guidance/architecture/real-world-examples/azure-function-canvas.md +++ b/power-platform/guidance/architecture/real-world-examples/azure-function-canvas.md @@ -15,7 +15,7 @@ ms.reviewer: sericks Microsoft Power Platform enables you to extend the functionality of your app by using Azure Functions. When dealing with complex algorithms or with many data sources, Azure Functions becomes an ideal choice to help keep your formulas within Power Apps simple while moving more complex functionality server-side. Function apps require professional developers who are familiar with the Azure Stack, but are easy to maintain and scale due to their serverless nature. :::image type="complex" source="./media/azurefunctionarch.png" alt-text="Diagram of using Azure Functions with Power Apps."::: - Diagram showing a Power Apps custom connector between an app and a function app, which contains serverless code to host REST APIs. The function app connects to Azure Table Storage, to persist data in the app. An Microsoft Entra app secures the custom connector and, through permissions to access the API, an Active AD app secures the function app. + Diagram showing a Power Apps custom connector between an app and a function app, which contains serverless code to host REST APIs. The function app connects to Azure Table Storage, to persist data in the app. A Microsoft Entra app secures the custom connector and, through permissions to access the API, an Active AD app secures the function app. :::image-end::: Function apps driven by RESTful HTTP requests can also be exported for additional functionality. Behind the scenes, you can create a custom connector by using the OpenAPI definition automatically generated within the Azure portal, which you can then export so that it can be consumed in Power Apps or Power Automate. diff --git a/power-platform/guidance/architecture/real-world-examples/bpf-dataverse-powerautomate.md b/power-platform/guidance/architecture/real-world-examples/bpf-dataverse-powerautomate.md index 59fac22b11..b988faad12 100644 --- a/power-platform/guidance/architecture/real-world-examples/bpf-dataverse-powerautomate.md +++ b/power-platform/guidance/architecture/real-world-examples/bpf-dataverse-powerautomate.md @@ -29,7 +29,7 @@ For experiences that require a custom user experience, Microsoft Dataverse offer To render a business process flow within a canvas app, you can make use of a "codeless" custom connector that implements some key Dataverse APIs related to business process flow functionality. A codeless custom connector is a connector in which we only need to use the OpenAPI specification that lines up with the underlying Dataverse API service, without building the service itself. -:::image type="complex" source="./media/BPF_3.png" alt-text="Example of a Employee onboarding Business Process Flow integrated in a Power Apps Canvas app."::: +:::image type="complex" source="./media/BPF_3.png" alt-text="Example of an Employee onboarding Business Process Flow integrated in a Power Apps Canvas app."::: The landing screen of the employee onboarding app shows a list of employees as well as the current status of the corresponding business process. In the detail view screen, you can see a timeline representing all the stages of the process with the completed stages highlighted. The detail view also shows required and optional fields of the current stage as well as a button to advance to the next stage once the form is filed. :::image-end::: diff --git a/power-platform/guidance/coe/after-setup-tenant-hygiene.md b/power-platform/guidance/coe/after-setup-tenant-hygiene.md index afb8edb95d..7ecb9c0fa5 100644 --- a/power-platform/guidance/coe/after-setup-tenant-hygiene.md +++ b/power-platform/guidance/coe/after-setup-tenant-hygiene.md @@ -3,7 +3,7 @@ title: "Establishing tenant hygiene with the CoE Starter Kit | Microsoft Docs" description: "The CoE Starter Kit contains many useful components to help you establish tenant hygiene." author: stjeffer ms.topic: conceptual -ms.date: 02/08/2023 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: stjeffer ms.reviewer: sericks @@ -29,8 +29,8 @@ The CoE Starter Kit's governance component includes **Developer Compliance Cente Learn more: -- [Defining an environment strategy](/power-platform/guidance/adoption/environment-strategy) -- [Communicating Power Platform governance](/power-platform/guidance/adoption/environment-strategy#clearly-communicate-your-organizations-environment-strategy-to-makers) +- [Defining an environment strategy](/power-platform/guidance/white-papers/environment-strategy) +- [Communicating Power Platform governance](/power-platform/guidance/white-papers/environment-strategy#communicate-your-environment-strategy-to-your-organization) - [CoE Starter Kit - Developer Compliance Center](/power-platform/guidance/coe/governance-components#developer-compliance-center) - [CoE Starter Kit - Power BI dashboard](/power-platform/guidance/coe/power-bi-monitor#environments) - [CoE Starter Kit - Compliance and adoption dashboard](/power-platform/guidance/coe/power-bi-compliance) diff --git a/power-platform/guidance/coe/power-bi-nurture.md b/power-platform/guidance/coe/power-bi-nurture.md index e9818ccae5..b62133d9be 100644 --- a/power-platform/guidance/coe/power-bi-nurture.md +++ b/power-platform/guidance/coe/power-bi-nurture.md @@ -43,7 +43,7 @@ The **Power Apps Adoption** page shows you further insights into how Power Apps ### Desktop flows usage -The **Desktop flows usage** page provides an overview of UI-based robotic process automateion (RPA) flow runs in your environment: +The **Desktop flows usage** page provides an overview of UI-based robotic process automation (RPA) flow runs in your environment: - Number of runs per date and desktop flow type - Total number of runs diff --git a/power-platform/guidance/coe/setup-archive-components.md b/power-platform/guidance/coe/setup-archive-components.md index 8a00359881..7484bbcddd 100644 --- a/power-platform/guidance/coe/setup-archive-components.md +++ b/power-platform/guidance/coe/setup-archive-components.md @@ -4,7 +4,7 @@ description: "Learn how to set up the inactivity notifications components of the author: manuelap-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 02/08/2023 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks @@ -58,7 +58,7 @@ You'll [update these environment variables](faq.md#update-environment-variables) ### Exempt environments from the inactivity notifications process -You might want to exempt some environments from the inactivity notification process—for example, dedicated environments that are already well-managed. More information: [Establishing an environment strategy](../adoption/environment-strategy.md) +You might want to exempt some environments from the inactivity notification process—for example, dedicated environments that are already well-managed. More information: [Establishing an environment strategy](../white-papers/environment-strategy.md) You can exempt environments from the inactivity notification process by using the Power Platform Admin View app. @@ -103,7 +103,7 @@ Environment variables are used to store application and flow configuration data | Name | Description | Default value | |------|---------------|------| | Individual Admin | This is separate from the Admin Email environment variable because you can't use a distribution list for approvals. This environment variable holds the individual or shared account who will be charged with approving the removal of unused orphaned objects. | None | -| Auto Delete on Archive | Determines whether apps andd flows are deleted when they're approved for deletion in the following flow: Admin \|Inactivity notifications v2 (Check Approval) and Admin \|Inactivity notifications v2 (Clean Up and Delete). The value must be Yes or No. | Yes | +| Auto Delete on Archive | Determines whether apps and flows are deleted when they're approved for deletion in the following flow: Admin \|Inactivity notifications v2 (Check Approval) and Admin \|Inactivity notifications v2 (Clean Up and Delete). The value must be Yes or No. | Yes | | Cleanup Old Objects App URL | (Optional) A link to the Cleanup Old Objects canvas app included in this solution. To make cleanup easier, any communication about old objects that are no longer considered to be useful will include this link. More information: [Get an app URL from a production environment](faq.md#get-a-power-apps-url-from-a-production-environment) | None | | Flow Approvals URL | (Optional) A link to the Power Automate approval page for your CoE environment. To make cleanup easier, any communication about old objects that are no longer considered to be useful will include this link. To get the URL, go to make.powerautomate.com for your CoE environment > **Action Items** > **Approvals**. The URL will end in **approvals/received**.| None | | ProductionEnvironment | Set to **No** if you've installed the solution for development or test purposes. This will send approvals to the admin email instead of the maker. | Yes | diff --git a/power-platform/guidance/coe/setup-governance-components.md b/power-platform/guidance/coe/setup-governance-components.md index 0efb63f06b..d838784d9f 100644 --- a/power-platform/guidance/coe/setup-governance-components.md +++ b/power-platform/guidance/coe/setup-governance-components.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.component: pa-admin ms.topic: conceptual -ms.date: 09/05/2023 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks @@ -50,7 +50,7 @@ This step will be completed after you import the solution. Environment variables ### Exempt environments from the compliance process -You may want to exempt certain environments from the compliance process - for example, dedicated environments that are already well managed or the environment you've installed the CoE Starter Kit in. Learn more: [Establishing an environment strategy](/power-platform/guidance/adoption/environment-strategy) +You may want to exempt certain environments from the compliance process - for example, dedicated environments that are already well managed or the environment you've installed the CoE Starter Kit in. Learn more: [Establishing an environment strategy](/power-platform/guidance/white-papers/environment-strategy) You can exempt environments from the compliance process using the Power Platform Admin View app. diff --git a/power-platform/guidance/coe/setup-quarantine-components.md b/power-platform/guidance/coe/setup-quarantine-components.md index d07df69c73..e7cc07061a 100644 --- a/power-platform/guidance/coe/setup-quarantine-components.md +++ b/power-platform/guidance/coe/setup-quarantine-components.md @@ -5,7 +5,7 @@ author: manuelap-msft ms.service: power-platform ms.component: pa-admin ms.topic: conceptual -ms.date: 02/08/2023 +ms.date: 06/13/2024 ms.subservice: guidance ms.author: mapichle ms.reviewer: sericks @@ -46,7 +46,7 @@ You'll [update these environment variables](faq.md#update-environment-variables) ### Add or exempt environments from the app quarantine process -You might want to exempt some environments from the app quarantine process—for example, dedicated environments that are already well-managed. More information: [Establishing an environment strategy](/power-platform/guidance/adoption/environment-strategy) +You might want to exempt some environments from the app quarantine process—for example, dedicated environments that are already well-managed. More information: [Establishing an environment strategy](/power-platform/guidance/white-papers/environment-strategy) You can exempt environments from the app quarantine process by using the Power Platform Admin View app. diff --git a/power-platform/guidance/coe/starter-kit-explained.md b/power-platform/guidance/coe/starter-kit-explained.md index ab171709e7..51a1bd72aa 100644 --- a/power-platform/guidance/coe/starter-kit-explained.md +++ b/power-platform/guidance/coe/starter-kit-explained.md @@ -50,7 +50,7 @@ Admin tasks are defined in a model-driven app and insights provided in a Power B Set up your own SharePoint Hub or Teams site to share success stories, upcoming events, rules of engagement and guidelines with your maker community. -The Power Platform communication site is a SharePoint Online template, designed to provide a starting point of content and page templates as your're setting up your internal Power Platform wiki and community site. +The Power Platform communication site is a SharePoint Online template, designed to provide a starting point of content and page templates as you're setting up your internal Power Platform wiki and community site. More information: [Get starter with the Power Platform communication site template](../adoption/wiki-community.md#get-started-with-the-power-platform-communication-site-template) diff --git a/power-platform/guidance/creator-kit/breadcrumb.md b/power-platform/guidance/creator-kit/breadcrumb.md index 457c684381..537751cdb3 100644 --- a/power-platform/guidance/creator-kit/breadcrumb.md +++ b/power-platform/guidance/creator-kit/breadcrumb.md @@ -51,7 +51,7 @@ Each item uses the following schema to visualize data in the component. Example Power Fx formula: - ```powerapps-dot + ```power-fx Table( { ItemKey: "1", @@ -92,7 +92,7 @@ Replace the `false` values with appropriate expressions in the Power Fx language Because this control is used for navigation, a logical action is to use [navigation functions](/power-apps/maker/canvas-apps/functions/function-navigate) (ideally to a relevant screen with the related data loaded). - ```powerapps-dot + ```power-fx Switch( Self.Selected.ItemKey, /* Action for ItemKey 1 */ "1", false, @@ -110,7 +110,7 @@ When a new dialog is shown, and the default focus should be on the control, an e To make calls to the input event, you can set a context variable that is bound to the Input Event property to a string that starts with `SetFocus` and followed by a random element to ensure that the app detects it as a change. Example Power Fx formula: -```powerapps-dot +```power-fx UpdateContext({ ctxResizableTextareaEvent:"SetFocus" & Text(Rand()) })); ``` diff --git a/power-platform/guidance/creator-kit/commandbar.md b/power-platform/guidance/creator-kit/commandbar.md index 8f9807e556..6c39e64484 100644 --- a/power-platform/guidance/creator-kit/commandbar.md +++ b/power-platform/guidance/creator-kit/commandbar.md @@ -69,7 +69,7 @@ Each item uses the following schema to visualize data in the component. Example Power Fx formula for basic `Items`: - ```powerapps-dot + ```power-fx Table( { ItemKey: "new", @@ -118,7 +118,7 @@ Use the [**Switch()**](/power-apps/maker/canvas-apps/functions/function-if) form Replace the `false` values with appropriate expressions in the Power Fx language. - ```powerapps-dot + ```power-fx Switch( Self.Selected.ItemKey, /* Action for ItemKey 'new' (e.g., Patch function) */ "new", false, @@ -146,7 +146,7 @@ When a new dialog is shown, and the default focus should be on the control, an e To make calls to the input event, you can set a context variable that is bound to the Input Event property to a string that starts with `SetFocus` and followed by a random element to ensure that the app detects it as a change. Example Power Fx formula: -```powerapps-dot +```power-fx UpdateContext({ ctxResizableTextareaEvent:"SetFocus" & Text(Rand()) })); ``` diff --git a/power-platform/guidance/creator-kit/components.md b/power-platform/guidance/creator-kit/components.md index 9e87503efe..db185947b9 100644 --- a/power-platform/guidance/creator-kit/components.md +++ b/power-platform/guidance/creator-kit/components.md @@ -4,7 +4,7 @@ description: "Learn about the manifest of the Creator Kit components and assets. author: denise-msft ms.component: pa-maker ms.topic: conceptual -ms.date: 02/01/2023 +ms.date: 06/10/2024 ms.subservice: guidance ms.author: demora ms.reviewer: tapanm @@ -34,10 +34,14 @@ Release status key: | **`ContextMenu`**
[aka.ms/ck/contextmenu](contextmenu.md) | User Interface | Provides a wrapper around the [Fluent UI `ContextMenu`](https://developer.microsoft.com/fluentui#/controls/web/contextualmenu) control bound to a button for use in canvas apps and custom pages. | Yes | Yes | Yes| No | Shipped | | **`CommandBar`**
[aka.ms/ck/commandbar](commandbar.md) | User Interface | Provides a wrapper around the [Fluent UI `CommandBar`](https://developer.microsoft.com/fluentui#/controls/web/commandbar) control. | Yes | Yes | Yes| No | Shipped | | **`DetailsList`**
[aka.ms/ck/detailslist](detailslist.md) | User Interface | Allows the use of the [Fluent UI `DetailsList` component](https://developer.microsoft.com/fluentui#/controls/web/detailslist). | Yes | Yes | Yes| No | Shipped | +| **`DonutChart`**
[aka.ms/ck/donutchart](donutchart.md) | User Interface | Allows the use of the [Fluent UI `DonutChart` component](https://developer.microsoft.com/fluentui#/controls/web/donutchart). | Yes | Yes | Yes| No | Preview | | **`Dialog`**
[aka.ms/ck/dialog](dialog.md) | User Interface | Mimics the style and behavior of the [Fluent UI `Dialog` component](https://developer.microsoft.com/fluentui#/controls/web/dialog). | Yes | Yes | Yes| No | Experimental | | **`Elevation`**
[aka.ms/ck/elevation](elevation.md) | User Interface | Provides Fluent UI elevation support with mouse hover events. | Yes | Yes | Yes | No | Shipped | | **`ExpandMenu`**
[aka.ms/ck/expandmenu](expandmenu.md) | User Interface | Provides an expandable menu interface (also known as hamburger menu). | No | Yes | Yes | No | Experimental | | **`Facepile`**
[aka.ms/ck/facepile](facepile.md) | User Interface | Provides a wrapper around the [Fluent UI `Facepile`](https://developer.microsoft.com/fluentui#/controls/web/facepile) control. | Yes | Yes | Yes| No | Shipped | +| **`GaugeChart`**
[aka.ms/ck/gaugechart](gaugechart.md) | User Interface | Provides a wrapper around the [Fluent UI `GaugeChart`](https://developer.microsoft.com/fluentui#/controls/web/gaugechart) control. | Yes | Yes | Yes| No | Preview | +| **`HorizontalBarChart`**
[aka.ms/ck/horizontalbarchart](horizontalbarchart.md) | User Interface | Provides a wrapper around the [Fluent UI `HorizontalBarChart`](https://developer.microsoft.com/fluentui#/controls/web/horizontalbarchart) control. | Yes | Yes | Yes| No | Preview | +| **`HorizontalBarChart-Stacked`**
[aka.ms/ck/stackedbarchart](stackedbarchart.md) | User Interface | Provides a wrapper around the [Fluent UI `HorizontalBarChart-Stacked`](https://developer.microsoft.com/en-us/fluentui#/controls/web/horizontalbarchart/stackedbarchart) control. | Yes | Yes | Yes| No | Preview | | **`Icon`**
[aka.ms/ck/icon](icon.md) | User Interface | Fluent UI [font icon](https://developer.microsoft.com/fluentui#/controls/web/icon), icon button, and action button with custom styling. | Yes | Yes | Yes| No | Shipped | | **`KeyboardShortcuts`**
[aka.ms/ck/keyboardshortcuts](keyboardshortcuts.md) | Utility | Registers keypress event handlers to allow keyboard shortcuts to be used inside canvas apps. | No | Yes | No | No | Shipped | | **`Nav`**
[aka.ms/ck/nav](nav.md) | User Interface | Provides a wrapper around the [Fluent UI `Nav` component](https://developer.microsoft.com/fluentui#/controls/web/nav) control bound to a button for use in canvas apps and custom pages. | Yes | Yes | Yes| No | Shipped | diff --git a/power-platform/guidance/creator-kit/contextmenu.md b/power-platform/guidance/creator-kit/contextmenu.md index 640f360d88..e4406ad3b3 100644 --- a/power-platform/guidance/creator-kit/contextmenu.md +++ b/power-platform/guidance/creator-kit/contextmenu.md @@ -64,7 +64,7 @@ This code component provides a wrapper around the [Fluent UI ContextualMenu](htt Example Power Fx formula for `Items`: - ```powerapps-dot + ```power-fx Table( { ItemKey: "File", @@ -115,7 +115,7 @@ Use the [**Switch()**](/power-apps/maker/canvas-apps/functions/function-if) form Replace the `false` values with appropriate expressions in the Power Fx language. - ```powerapps-dot + ```power-fx Switch( Self.Selected.ItemKey, /* Action for ItemKey 1 */ "File", false, diff --git a/power-platform/guidance/creator-kit/creator-kit-explained.md b/power-platform/guidance/creator-kit/creator-kit-explained.md index d46f5a3654..110a9284dd 100644 --- a/power-platform/guidance/creator-kit/creator-kit-explained.md +++ b/power-platform/guidance/creator-kit/creator-kit-explained.md @@ -4,7 +4,7 @@ description: "The Creator Kit is shipped as a single, self-contained solution. L author: denise-msft ms.component: pa-maker ms.topic: conceptual -ms.date: 05/16/2022 +ms.date: 06/10/2024 ms.subservice: guidance ms.author: demora ms.reviewer: tapanm @@ -13,11 +13,12 @@ search.audienceType: contributors: - tapanm-msft - slaouist + - DanaMartens --- # Use the Creator Kit -Before you use the components included with the Creator Kit, use the reference app to learn component behavior and implementation patterns. With the reference app, you'll also learn how to add components to an app. +Before you use the components included with the Creator Kit, use the reference app to learn component behavior and implementation patterns. With the reference app, you learn how to add components to an app. The Creator Kit includes the following assets, distributed in three solutions: @@ -83,7 +84,7 @@ Make a copy of this page to create a new custom page for a [converged app](/powe :::image type="content" source="media/custom-page-studio.png" alt-text="Custom page template."::: -Follow the preceding steps to [make a copy of the canvas template app](#canvas-app-template), except this time you'll select the **Save As** option in the upper-right corner: +Follow the preceding steps to [make a copy of the canvas template app](#canvas-app-template), except this time you select the **Save As** option in the upper-right corner: 1. In the upper-right corner, expand the menu next to the **Save** icon, and then select **Save as**. @@ -130,6 +131,29 @@ Apps that use kit components can't be built outside of a solution, and they must For more information and general guidance, go to [solution import troubleshooting tips](/troubleshoot/dynamics-365/sales/troubleshoot-solution-import-errors-in-dynamics-365). +## Frequently asked questions (FAQ) + +**Should large organizations encourage citizen makers to use the Creator Kit? What kind of overhead does that come with from an O&M perspective?** + +The Creator Kit isn't an officially supported Microsoft product, meaning customers can't raise a Microsoft support ticket for issues. Instead, they must file [issues on the GitHub repository](https://github.com/microsoft/powercat-creator-kit/issues) and work with the team directly. If there's triage or debug information that they aren't comfortable sharing on GitHub, the team can arrange to handle sensitive conversations privately by [submitting a request form](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR4lL86nyt-9Io8ocQ1vGVaBUMDZBWE42RUdLWUNPVERZWU4yNjZVTERKQy4u). + +We recommend first evaluating whether modern controls meet your application's requirements, as these controls are the most up-to-date and fully supported by Microsoft. If modern controls don't suffice, then validate the legacy components to determine their suitability. Creator Kit controls should only be considered when no other options meet your needs. Additionally, it's important to pay attention to the release status of the components being used, ensuring they're stable and supported for your development pipeline. + +**What is the most effective or efficient way to roll out these updates to multiple production environments?** + +There are several strategies to consider depending on the organization's priorities: + +- *Most secure:* If security is a top priority (for example, initial validation before deployment to production environments), the organization's Center of Excellence (CoE) can host an isolated test environment to validate updates. Automation can then be used to deploy solutions to the desired production environments. For more information, see [Power catalog](/power-apps/maker/data-platform/catalog-overview) and [Microsoft Power Platform CLI](/power-platform/developer/cli/introduction?tabs=windows) for more details. +- *Lowest maintenance:* If security validation isn't necessary, environments can be individually configured to receive continuous updates automatically by enabling the Power CAT - MSFT publisher for the environment in the Power Platform admin center. + +**As the overlap between the new Modern controls and the Creator Kit increases over time, will some Creator Kit components be deprecated? If so, what will that process entail?** + +Yes, a subset of Creator Kit components are reimplemented as modern controls and are considered successors of the Creator Kit components. The team will deprecate the Creator Kit component predecessors in the AppSource offering once the successor meets parity for the needs of the majority. Deprecation timelines will be announced through regular channels such as GitHub updates, Office Hours, and discussion forums. For more information on the recommended migration process, see the [migration process documentation](https://github.com/microsoft/powercat-creator-kit/discussions/473). + +**What are the best practices for development pipelines (dev > UAT > prod) involving the Creator Kit?** + +Install the managed `CreatorKitCore` solution in all environments where apps using Creator Kit components are deployed. Ensure this solution is installed before the solution with the app. For more information on the basic installation and how to incorporate it into the development pipeline, see the [install instructions](setup.md). + > [!div class="nextstepaction"] > [Next step: View the components reference](components.md) diff --git a/power-platform/guidance/creator-kit/detailslist.md b/power-platform/guidance/creator-kit/detailslist.md index aca84db7f5..99d9b27903 100644 --- a/power-platform/guidance/creator-kit/detailslist.md +++ b/power-platform/guidance/creator-kit/detailslist.md @@ -129,7 +129,7 @@ Example: Mapping to the Dataverse [Accounts](/power-apps/developer/data-platform/reference/entities/account) system table, with the following formula: -```powerapps-dot +```power-fx Table( { ColName: "name", @@ -170,7 +170,7 @@ The `ColShowAsSubTextOf` column property defines a column as being shown below t If you had a collection defined as: -```powerapps-dot +```power-fx ClearCollect(colAccounts, {id:"1",name:"Contoso",city:"Redmond",country:"U.S.",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",expand:false}, {id:"2",name:"Litware, Inc",city:"Dallas",country:"U.S.",description:"Donec vel pellentesque turpis.",expand:false}); @@ -178,7 +178,7 @@ ClearCollect(colAccounts, You could define the columns to be: -```powerapps-dot +```power-fx Table( { ColName: "name", @@ -230,7 +230,7 @@ If the 'Sub Text' rows requires to have an expand/collapse icon, an additional c Assuming that a `RecordKey` property is set to the `index` column, the `OnChange` event could then contain the following to expand/collapse the rows: -```powerapps-dot +```power-fx If(Self.EventName="CellAction" && Self.EventColumn="expand", With(LookUp(colExpand,index=Self.EventRowKey) As Row, Patch(colExpand,Row,{expand:!Row.expand}) @@ -253,7 +253,7 @@ Using a cell type of `tag` or `indicatortag` you can create inline colored tags The colors can vary by row, and so the column metadata dataset simply provides the name of the columns that holds the colors for the tags. Consider the dataset: -```powerapps-dot +```power-fx ClearCollect( colAccounts, { @@ -275,7 +275,7 @@ ClearCollect( You could then add the column metadata to add two columns, one displayed as a tag and the other as a tagindicator - each using the TagColor and TagBorderColor columns to determine the colors: -```powerapps-dot +```power-fx { ColName: "country", ColDisplayName: "Country", @@ -311,7 +311,7 @@ If the image is of type `clickableimage` the `OnChange` event will fire when the for example, Consider the row data: -```powerapps-dot +```power-fx { id: "1", name: "Contoso", @@ -334,7 +334,7 @@ for example, Consider the row data: and the column metadata: -```powerapps-dot +```power-fx { ColName: "externalimage", ColDisplayName: "Image", @@ -360,7 +360,7 @@ This would give the result: For the `clickableimage` column, `OnChange` event can then handle when a user selects (mouse or keyboard) and icon (assuming that it isn't disabled) using: -```powerapps-dot +```power-fx If(Self.EventName="CellAction", Notify("CellAction " & Self.EventColumn & " " & Self.EventRowKey) ) @@ -374,7 +374,7 @@ Columns can be rendered as links, that will raise the OnChange event when the li The column metadata for a link is configured as follows: -```powerapps-dot +```power-fx { ColName: "name", ColDisplayName: "Account Name", @@ -393,7 +393,7 @@ The `OnChange` event is again fired when the link is clicked, with the `EventCol If a column value can has multiple values by setting it to a Table/Collection. This will then render the values as multiple cell values. for example: -```powerapps-dot +```power-fx { id: "1", name: "Contoso", @@ -403,7 +403,7 @@ If a column value can has multiple values by setting it to a Table/Collection. T The column metadata then could be: -```powerapps-dot +```power-fx { ColName: "tags", ColDisplayName: "Tags", @@ -441,7 +441,7 @@ Manual Sorting is supported outside of the component to allow for custom connect 3. Inside the `OnChange` event of the Table, add the code: - ```powerapps-dot + ```power-fx If(Self.EventName="Sort", UpdateContext({ ctxSortCol:Self.SortEventColumn, @@ -454,7 +454,7 @@ Manual Sorting is supported outside of the component to allow for custom connect 5. Set the property `Sort Direction` to be: - ```powerapps-dot + ```power-fx If(ctxSortAsc, 'PowerCAT.FluentDetailsList.CurrentSortDirection'.Ascending, 'PowerCAT.FluentDetailsList.CurrentSortDirection'.Descending) @@ -462,7 +462,7 @@ Manual Sorting is supported outside of the component to allow for custom connect 6. Set the input items collection to sort using the context variables set above: - ```powerapps-dot + ```power-fx SortByColumns(colData,ctxSortCol,If(ctxSortAsc,SortOrder.Ascending,SortOrder.Descending)) ``` @@ -494,7 +494,7 @@ The paging buttons can then be defined as follows: The number of records label can be set to an expression similar to: -```powerapps-dot +```power-fx grid.TotalRecords & " record(s) " & Text(CountRows(grid.SelectedItems)+0) & " selected" ``` @@ -531,7 +531,7 @@ When a user invokes the row action, either by double clicking or pressing enter If the `RaiseOnRowSelectionChangeEvent` property is enabled, when the selected rows are changed, the `OnChange` event is raised with the `EventName` set to `OnRowSelectionChange`. If the app needs to respond to a single row select rather than a row double-click, the `OnChange` can detect this using code similar to: -```powerapps-dot +```power-fx If( Self.EventName = "OnRowSelectionChange", If(!IsBlank(Self.EventRowKey), @@ -546,7 +546,7 @@ To clear the selected records, you must set the `InputEvent` property to a strin for example -```powerapps-dot +```power-fx UpdateContext({ctxTableEvent:"ClearSelection"&Text(Rand())}) ``` @@ -569,7 +569,7 @@ Add and modify the following formula in the component's `OnChange` property to c - Trigger events when a user changes the selected row: Enable the property **Raise OnRowSelectionChange event** in the component. - Configure link behavior: Add columns with the **ColCellType** value set to **link**. -```powerapps-dot +```power-fx /* Runs when selected row changes and control property 'Raise OnRowSelection event' is true */ If( Self.EventName = "OnRowSelectionChange", Notify( "Row Select " & Self.EventRowKey ) diff --git a/power-platform/guidance/creator-kit/dialog.md b/power-platform/guidance/creator-kit/dialog.md index de4940df2f..e54bc43bcc 100644 --- a/power-platform/guidance/creator-kit/dialog.md +++ b/power-platform/guidance/creator-kit/dialog.md @@ -54,7 +54,7 @@ This canvas component mimics the style and behavior of the [Fluent UI Dialog con | `Label` | The label displayed on the button. | | `ButtonType` | Enumeration that determines the styling of the button. Choose between `Standard` and `Primary`.| -```powerapps-dot +```power-fx Table( { Label: "Cancel", @@ -89,19 +89,19 @@ Make the `Dialog` control itself (or the surface it's located within) visible wh The following shows the Power Fx formula to open the dialog in an action formula on another component somewhere in the app (for example, the `OnSelect` property of a button): -```powerapps-dot +```power-fx UpdateContext({ showHideDialog: true }) ``` The following is the Power Fx formula to close the dialog in the `OnCloseSelect` property of the dialog: -```powerapps-dot +```power-fx UpdateContext({ showHideDialog: false }) ``` Assign the variable to the `Visible` property of the dialog: -```powerapps-dot +```power-fx showHideDialog ``` @@ -109,7 +109,7 @@ showHideDialog In the `OnButtonSelect` property of the dialog, provide actions in an `If()` or `Switch()` condition based on the `Self.SelectedButton.Label` text value to define the action. Depending on the action, it might make sense to also close the dialog after the action is completed. -```powerapps-dot +```power-fx If( Self.SelectedButton.Label = "Send", Notify("Email Sent") ); diff --git a/power-platform/guidance/creator-kit/donutchart.md b/power-platform/guidance/creator-kit/donutchart.md new file mode 100644 index 0000000000..3ed122985c --- /dev/null +++ b/power-platform/guidance/creator-kit/donutchart.md @@ -0,0 +1,92 @@ +--- +title: DonutChart control reference (preview) | Creator Kit +description: Learn about the details and properties of the Donut chart control in the Creator Kit. +author: denise-msft +ms.component: pa-maker +ms.topic: conceptual +ms.date: 06/10/2024 +ms.subservice: guidance +ms.author: demora +ms.reviewer: tapanm +search.audienceType: + - maker +contributors: + - tapanm-msft + - mehdis-msft + - Ramakrishnan24689 +--- + +# :::no-loc text="DonutChart"::: control (preview) + +[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] + +Donut charts are used to show proportion, which expresses a partial value in comparison to a total value. These types of charts are best to show percentage of individual parts in comparison to a whole, where the change over time isn't important to visualize. They're circular statistical graphics divided into slices to illustrate numerical proportion. + +:::image type="content" source="media/donutchart.svg" alt-text="DonutChart control."::: + +This code component provides a wrapper around the [Fluent UI DonutChart](https://developer.microsoft.com/en-us/fluentui#/controls/web/donutchart) control for use in canvas & custom pages. + +> [!IMPORTANT] +> +> - This is a preview feature. +> - [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)] + +> [!NOTE] +> Full documentation and source code found in the [GitHub code components repository](https://github.com/microsoft/powercat-code-components/tree/main/DonutChart). + +## Properties + +The control accepts the following properties: + + - **Title** - This value denotes title of the chart. + - **HideLabel** - This option controls whether to show or hide labels on the chart. + - **HideTooltip** - This option controls whether to show or hide tooltips on the chart. + - **ShowLabelsInPercentage** - This option controls whether to show labels in percentage. + - **InnerRadius** - Set the value for inner radius of the donut chart. + - **ValueInsideDonut** - This property denotes the value to be shown inside the donut chart. + - **CustomColors** - This property is used to show custom colors on the chart if provided + +- **Items** - The action items to render + - **ItemTitle** - The Display Name of the particular chart data(Item). + - **ItemKey** - The key to use to identify the Item. The keys must be unique. + - **ItemValue** - Set the value of the particular chart data(Item). + - **ItemColor** - Set the color name or HEX value to be displayed for the particular chart data(Item). + +> [!NOTE] +> Item color only applies if the `CustomColors` property is turned on. + +### Accessibility + +- **AccessibilityLabel** - Screen reader aria-label + +## Usage + +Map data values to the corresponding chart properties in the `Items` property of the control, as demonstrated in the below formula. The chart automatically adjusts the visual to match the relative values. + +Enable the `CustomColors` property to define consistent colors. + +```powerapps-dot +Table( + { + ItemLegend: "First", + ItemValue: 60, + ItemColor:"#00A892" + }, + { + ItemLegend: "Second", + ItemValue: 10, + ItemColor:"#9A44FC" + }, + { + ItemLegend: "Third", + ItemValue: 30, + ItemColor:"#3483FA" + } +) +``` + +## Limitations + +This canvas component can only be used in canvas apps and custom pages. + +[!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/guidance/creator-kit/expandmenu.md b/power-platform/guidance/creator-kit/expandmenu.md index 8706d50078..15739ea09c 100644 --- a/power-platform/guidance/creator-kit/expandmenu.md +++ b/power-platform/guidance/creator-kit/expandmenu.md @@ -54,7 +54,7 @@ This canvas component mimics the style and *limited* behavior of the [Fluent UI Example `Items` property: -```powerapps-dot +```power-fx Table( { Icon: "PowerApps", @@ -99,7 +99,7 @@ Table( Set the `Width` property to the following expression. The width values can be adjusted based on the resolution of the app. -```powerapps-dot +```power-fx If( Self.IsExpanded, 200, 46 ) ``` diff --git a/power-platform/guidance/creator-kit/facepile.md b/power-platform/guidance/creator-kit/facepile.md index be40c286a6..88543f7d9b 100644 --- a/power-platform/guidance/creator-kit/facepile.md +++ b/power-platform/guidance/creator-kit/facepile.md @@ -71,7 +71,7 @@ A list of users can come from any data source, but the image must be provided to Generate a collection called `UserPersonas` using [Office 365 Users connector](/connectors/office365users/), by referring to the below sample code, then pass the collection into the `Items` property of the control. -```powerapps-dot +```power-fx ClearCollect( UserPersonas, AddColumns( @@ -131,7 +131,7 @@ Supports [SetFocus](setfocus.md) as an `InputEvent`. Use the [**Switch()**](/power-apps/maker/canvas-apps/functions/function-if) formula in the component's `OnSelect` property to configure specific actions for each item by referring to the control's selected `ItemPersonaKey` as the switch value. Example Power Fx formula in `OnSelect` property of `Facepile`: - ```powerapps-dot + ```power-fx Switch( Self.EventName, /* Define action when persona clicked */ "PersonaEvent", diff --git a/power-platform/guidance/creator-kit/gaugechart.md b/power-platform/guidance/creator-kit/gaugechart.md new file mode 100644 index 0000000000..9ae1a84d2b --- /dev/null +++ b/power-platform/guidance/creator-kit/gaugechart.md @@ -0,0 +1,110 @@ +--- +title: Gauge chart control reference (preview) | Creator Kit +description: Learn about the details and properties of the Gauge chart control in the Creator Kit. +author: denise-msft +ms.component: pa-maker +ms.topic: conceptual +ms.date: 06/10/2024 +ms.subservice: guidance +ms.author: demora +ms.reviewer: tapanm +search.audienceType: + - maker +contributors: + - tapanm-msft + - mehdis-msft + - Ramakrishnan24689 +--- + +# :::no-loc text="GaugeChart"::: control (preview) + +[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] + +There are two types of gauge charts: Speedometer and rating meter. + +:::image type="content" source="media/gaugechart.svg" alt-text="GaugeChart control."::: + +The speedometer measures a numerical value against a whole, like storage capacity. The needle is an optional component. The color of the segment representing the value being measured can be customized to suit certain scenarios or to align with branding colors. + +The rating meter shows status of the current value within a few predefined ranges or segments. The needle is a required component here. + +This code component provides a wrapper around the [Fluent UI GaugeChart](https://developer.microsoft.com/en-us/fluentui#/controls/web/gaugechart) control for use in canvas & custom pages. + +> [!IMPORTANT] +> +> - This is a preview feature. +> - [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)] +> [!NOTE] +> +> For the full documentation and source code, see [GitHub code components repository](https://github.com/microsoft/powercat-code-components/tree/main/GaugeChart). | + +## Properties + +The control accepts the following properties: + +- **Title** - This value denotes title of the chart. +- **Sublabel** - This value denotes sub label of the chart. +- **ChartValue** - This value denotes the value to be displayed on the gauge. +- **MinValue** - This value denotes the minimum value of the gauge. +- **MaxValue** - This value denotes the maximum value of the gauge. +- **HideMinMax** - This value denotes whether to hide the min and max values on the gauge. +- **HideLegend** - This value denotes whether to hide the legend on the gauge. +- **ChartValueFormat** - This value denotes to show chart value in `Percentage` or `Fraction`. +- **CustomColors** - Set this value to true to allow custom colors on the chart if provided. + +- **Items** - The action items to render: + - **ItemLegend** - The display name of the particular chart data (Item). + - **ItemSize** - The size of the particular chart data (Item). + - **ItemColor** - Set the color name or HEX value to be displayed for the particular chart data (Item). + +> [!NOTE] +> Item color only applies if the `CustomColors` property is turned on. + +### Accessibility + +- **AccessibilityLabel** - Screen reader aria-label. + +## Usage + +### Speedometer + +Only one row is needed for `Items`. Use the `ChartValue` to indicate the target position. + +```powerapps-dot +Table( + { + ItemSize: 15, + ItemColor: "#3483FA" + } +) +``` + +### Rating meter + +Provide the ranges as the `Items` property. The sum of all `ItemSize` values must add up to 100% of the difference between the `MinValue` and `MaxValue`. Use the `ChartValue` to indicate the current position. + +```powerapps-dot +Table( + { + ItemLegend: "Critical", + ItemSize: 11, + ItemColor: "#C50F1F" + }, + { + ItemLegend: "Warning", + ItemSize: 25, + ItemColor: "#F2610C" + }, + { + ItemLegend: "No risk", + ItemSize: 30, + ItemColor: "#107C10" + } +) +``` + +## Limitations + +This canvas component can only be used in canvas apps and custom pages. + +[!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/guidance/creator-kit/header.md b/power-platform/guidance/creator-kit/header.md index e1e8a3c85b..f8311bddf9 100644 --- a/power-platform/guidance/creator-kit/header.md +++ b/power-platform/guidance/creator-kit/header.md @@ -75,7 +75,7 @@ This canvas component mimics the style and behavior of the default Power Apps he If you want to only display the header, you can hide the default navigation bar that is rendered by Power Apps player by sharing the app link with the query parameter `hideNavBar`: -```powerapps-dot +```power-fx https://apps.powerapps.com/play/APPID?source=iframe&hidenavbar=true ``` diff --git a/power-platform/guidance/creator-kit/horizontalbarchart.md b/power-platform/guidance/creator-kit/horizontalbarchart.md new file mode 100644 index 0000000000..d8d05e7e34 --- /dev/null +++ b/power-platform/guidance/creator-kit/horizontalbarchart.md @@ -0,0 +1,117 @@ +--- +title: HorizontalBarChart control reference (preview) | Creator Kit +description: Learn about the details and properties of the HorizontalBarChart control in the Creator Kit. +author: denise-msft +ms.component: pa-maker +ms.topic: conceptual +ms.date: 06/10/2024 +ms.subservice: guidance +ms.author: demora +ms.reviewer: tapanm +search.audienceType: + - maker +contributors: + - tapanm-msft + - mehdis-msft + - Ramakrishnan24689 +--- + +# :::no-loc text="HorizontalBarChart"::: control (preview) + +[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] + +A horizontal bar chart is a chart that presents categorical data with rectangular bars with lengths proportional to the values they represent. This type of chart is useful when the intention is to show comparisons among various categories and the labels for those categories are long. + +:::image type="content" source="media/horizontalbarchart.svg" alt-text="HorizontalBarChart control."::: + +This code component provides a wrapper around the [Fluent UI HorizontalBarChart](https://developer.microsoft.com/en-us/fluentui#/controls/web/horizontalbarchart) control for use in canvas & custom pages. + +> [!IMPORTANT] +> +> - This is a preview feature. +> - [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)] + +> [!NOTE] +> Full documentation and source code found in the [GitHub code components repository](https://github.com/microsoft/powercat-code-components/tree/main/HorizontalBarChart). + +## Properties + +The control accepts the following properties: + +- **Title** - This value denotes title of the chart. +- **HideLabels** - Set this option to true to hide labels on the chart. +- **BarHeight** - This value denotes height of the bar presented in the chart. +- **HideTooltip** - Set this option to true to hide tooltips on the chart. +- **CustomColors** - Set this option to true to allow custom colors on chart if provided. +- **Variant** - This option allows the chart to be shown in `Absolute scale` or `Part to whole`. +- **ChartDataMode** - This option provides to show the value of each bar in `Fraction` or `Percentage`. +- **Items** - The action items to render: + - **ItemTitle** - The Display Name of the particular chart data (Item). + - **ItemLegend** - The legend associated with the particular chart data (Item). + - **ItemValue** - Set the value of the particular chart data (Item). + - **ItemTotalValue** - The total value to be used for the particular chart data (Item). + - **ItemXPopover** - The X-axis popover text for the particular chart data (Item). + - **ItemYPopover** - The Y-axis popover text for the particular chart data (Item). + - **ItemColor** - Set the color name or HEX value to be displayed for the particular chart data (Item). + +> [!NOTE] +> - Item color only applies if the `CustomColors` property is turned on. +> - Hide labels work when the type of chart is 'Absolute Scale'. +> - Hide tooltips works fine when the app is played (not in studio), but may not render while in studio. + +### Accessibility + +- **AccessibilityLabel** - Screen reader aria-label. + +## Usage + +Map data values to the corresponding chart properties in the `Items` property of the control, as demonstrated in the following formula. + +Enable the `CustomColors` property to define consistent colors. + +```powerapps-dot +Table( + { + ItemTitle: "First", + ItemLegend: "First", + ItemValue: 40, + ItemTotalValue: 100, + ItemXPopOver: "10/2/2024", + ItemYPopOver: "10%", + ItemColor: "#00A892" + }, + { + ItemTitle: "Second", + ItemLegend: "Second", + ItemValue: 20, + ItemTotalValue: 100, + ItemXPopOver: "20/4/2024", + ItemYPopOver: "20%", + ItemColor: "#9A44FC" + }, + { + ItemTitle: "Third", + ItemLegend: "Third", + ItemValue: 120, + ItemTotalValue: 100, + ItemXPopOver: "10/6/2024", + ItemYPopOver: "30%", + ItemColor: "#3483FA" + }, + { + ItemTitle: "Fourth", + ItemLegend: "Fourth", + ItemValue: 90, + ItemTotalValue: 100, + ItemXPopOver: "20/4/2024", + ItemYPopOver: "40%", + ItemColor: "#EBA800" + } +) +``` + +## Limitations + +This canvas component can only be used in canvas apps and custom pages. + +[!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/guidance/creator-kit/keyboardshortcuts.md b/power-platform/guidance/creator-kit/keyboardshortcuts.md index a1ce6a425e..fa6fc29b1f 100644 --- a/power-platform/guidance/creator-kit/keyboardshortcuts.md +++ b/power-platform/guidance/creator-kit/keyboardshortcuts.md @@ -51,7 +51,7 @@ When a key combination is used, the `OnChange` event is raised. The `OnKey` prop You might have an `OnChange` event similar to: -```powerapps-dot +```power-fx If( Self.OnKey = "alt + a", SetFocus(txtTextbox1) ); diff --git a/power-platform/guidance/creator-kit/media/donutchart.svg b/power-platform/guidance/creator-kit/media/donutchart.svg new file mode 100644 index 0000000000..2a609dfb93 --- /dev/null +++ b/power-platform/guidance/creator-kit/media/donutchart.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-platform/guidance/creator-kit/media/gaugechart.svg b/power-platform/guidance/creator-kit/media/gaugechart.svg new file mode 100644 index 0000000000..8c8ab18cc8 --- /dev/null +++ b/power-platform/guidance/creator-kit/media/gaugechart.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-platform/guidance/creator-kit/media/horizontalbarchart.svg b/power-platform/guidance/creator-kit/media/horizontalbarchart.svg new file mode 100644 index 0000000000..5ddadff415 --- /dev/null +++ b/power-platform/guidance/creator-kit/media/horizontalbarchart.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-platform/guidance/creator-kit/media/stackedchart.svg b/power-platform/guidance/creator-kit/media/stackedchart.svg new file mode 100644 index 0000000000..fe6b0917e7 --- /dev/null +++ b/power-platform/guidance/creator-kit/media/stackedchart.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/power-platform/guidance/creator-kit/nav.md b/power-platform/guidance/creator-kit/nav.md index 11d60ed376..a93c83c456 100644 --- a/power-platform/guidance/creator-kit/nav.md +++ b/power-platform/guidance/creator-kit/nav.md @@ -61,7 +61,7 @@ Each item uses the following schema to visualize data in the component. Example: - ```powerapps-dot + ```power-fx Table( { ItemKey: "1", @@ -115,7 +115,7 @@ Use the [**Switch()**](/power-apps/maker/canvas-apps/functions/function-if) form Replace the `false` values with appropriate expressions in the Power Fx language. - ```powerapps-dot + ```power-fx Switch( Self.Selected.ItemKey, /* Action for ItemKey 1 */ @@ -146,7 +146,7 @@ To make calls to the input event, you can set a context variable that is bound t E.g. -```powerapps-dot +```power-fx UpdateContext({ctxResizableTextareaEvent:"SetFocus" & Text(Rand())})); ``` diff --git a/power-platform/guidance/creator-kit/overview.md b/power-platform/guidance/creator-kit/overview.md index 35b1bec480..867d1eb296 100644 --- a/power-platform/guidance/creator-kit/overview.md +++ b/power-platform/guidance/creator-kit/overview.md @@ -4,7 +4,7 @@ description: Overview of the Creator Kit author: denise-msft ms.component: pa-maker ms.topic: conceptual -ms.date: 11/02/2022 +ms.date: 06/10/2024 ms.subservice: guidance ms.author: demora ms.reviewer: tapanm @@ -13,6 +13,7 @@ search.audienceType: contributors: - tapanm-msft - slaouist + - DanaMartens --- # Creator kit @@ -21,23 +22,27 @@ The Creator Kit helps create Power Apps experiences on the web and mobile platfo All controls and components included in the kit use the [Fluent UI](https://developer.microsoft.com/fluentui#/) framework to help you easily create consistent, beautiful, and effective user experiences for custom business applications. +Elevate your development workflow and create modern, seamless user experiences effortlessly with the Creator Kit. + > [!NOTE] > Before you download and install the Creator Kit, ensure that you [enable code components](/power-apps/developer/component-framework/component-framework-for-canvas-apps#enable-the-power-apps-component-framework-feature) in your environment first. +> [!CAUTION] +> Do not install the latest version of the Creator Kit (May 2024) in apps using a dialog, panel, or expandMenu. For more information, go to [Important Warning: Platform Regression affecting upgrade to latest Creator Kit Version](#important-warning-platform-regression-affecting-upgrade-to-latest-creator-kit-version). + > [!div class="nextstepaction"] > [Download the Creator Kit](https://aka.ms/creatorkitdownload) - :::image type="content" source="media/creatorkitview.png" alt-text="Examples of the Fluent UI components in the Creator Kit." border="false"::: -### Quick links +## Quick links | Resource | Short Url | Description | | -------- | --------- | ----------- | | **AppSource Offering** | [aka.ms/creatorkit/appsource](https://aka.ms/creatorkit/appsource) | Offering page for the Creator Kit on AppSource (see [instructions](./setup.md) to learn more). | | **Canvas reference solution** | [aka.ms/creatorkit/referencecanvas](https://aka.ms/creatorkitreferencecanvas) | Direct download link for the Canvas reference solution. | | **Model Driven App (Custom page) reference solution** | [aka.ms/creatorkit/referenceMDA](https://aka.ms/creatorkitreferencemda) | Direct download link for the Model Driven App/Custom Pages reference solution | -| **Latest release notes** | [aka.ms/creatorkitlatestrelease](https://aka.ms/creatorkitlatestrelease) | Release notes for the latest version of the Creator Kit | +| **Latest release notes** | [aka.ms/creatorkitlatestrelease](https://aka.ms/creatorkitlatestrelease) | Release notes for the latest version of the Creator Kit | | **GitHub Repository** | [aka.ms/creatorkitrepo](https://github.com/microsoft/powercat-creator-kit) | GitHub repository that hosts source code for packaged components (CreatorKitCore) and reference solution assets. | | **Code Component Repository** | [aka.ms/creatorkit/coderepo](https://aka.ms/creatorkit/coderepo) | The code component source code and more detailed component-level documentation. | | **Creator Kit Documentation** (this page) | [aka.ms/ck](https://aka.ms/ck) or [aka.ms/creatorkit](https://aka.ms/creatorkit) | aka.ms link to this page. Use this to quickly access the documentation and reference during development. | @@ -65,6 +70,23 @@ If you face issues with: If you are not sure if you're experiencing an issue with the Creator Kit or the platform, [report the issue on the GitHub](https://aka.ms/Creator-Kit-Issues) first and our team will triage the issue. +## Updates + +### Important Warning: Platform Regression affecting upgrade to latest Creator Kit Version + +We have identified an issue related to a platform regression that was introduced and affecting previous versions of the Creator Kit that affects canvas library components containing Power Fx formulas, specifically the Dialog, Panel, and ExpandMenu components. A fix for this issue was pushed in the latest version of the Creator Kit that was released May 2024, however due to current platform limitations the upgrade results in data loss of the Power Fx formulas for Event type properties of the components (e.g., OnButtonSelect). A platform update will finish rolling out by 24 June 2024. + +**Impact:** +Power Fx formulas within these components may be lost when upgrading to the latest Creator Kit version (May 2024). + +**Action required:** +**DO NOT INSTALL** the latest version of the Creator Kit (May 2024) if you are using the aforementioned canvas library components with Power Fx formulas. Installing this version may cause functionality issues within your applications. + +**Next steps:** +Wait for fix. We are actively working on resolving this issue. A fix will be included in the upcoming Power Apps client version 2406.2, available in all public regions by Monday, 24 June 2024. + +We apologize for any inconvenience this may cause and appreciate your understanding and patience as we address this issue. If you have any questions or need further assistance, please raise an issue in our [Github repository](https://github.com/microsoft/powercat-creator-kit/issues). + ## More resources - Learn how to use [Power Apps](/power-apps), [canvas apps](/power-apps/maker/canvas-apps/dev-enterprise-intro), and [custom pages](/power-apps/maker/model-driven-apps/model-app-page-overview). diff --git a/power-platform/guidance/creator-kit/panel.md b/power-platform/guidance/creator-kit/panel.md index a58de116dd..663aec7aa0 100644 --- a/power-platform/guidance/creator-kit/panel.md +++ b/power-platform/guidance/creator-kit/panel.md @@ -54,7 +54,7 @@ This canvas component mimics the style and behavior of the [Fluent UI Panel cont | `Label` | The label displayed on the button | | `ButtonType` | Enumeration that determines the styling of the button. Choose between `Standard` and `Primary` | -```powerapps-dot +```power-fx Table( { Label: "Cancel", @@ -90,7 +90,7 @@ The `Panel`'s visibility can be toggled with a Boolean (true/false) type variabl 1. Use the following Power Fx formula to display the dialog (e.g., the `OnSelect` property of a button control): - ```powerapps-dot + ```power-fx UpdateContext({ showHideDialog: true }) ``` @@ -105,7 +105,7 @@ The `Panel`'s visibility can be toggled with a Boolean (true/false) type variabl In the `OnButtonSelect` property of the panel, provide actions in an `If()` or `Switch()` condition based on the `Self.SelectedButton.Label` text value to define the action. Depending on the action, it is common to hide the `Panel` after the action is completed. -```powerapps-dot +```power-fx Switch( Self.SelectedButton.Label, "Ok", Notify("The Ok button was pressed."); ); diff --git a/power-platform/guidance/creator-kit/peoplepicker.md b/power-platform/guidance/creator-kit/peoplepicker.md index e5f7777936..77250cb5c2 100644 --- a/power-platform/guidance/creator-kit/peoplepicker.md +++ b/power-platform/guidance/creator-kit/peoplepicker.md @@ -87,7 +87,7 @@ This code component provides a wrapper around the [Fluent UI PeoplePicker](https 1. Assign the below Power Fx formula to the **On Search** property of the control to create a collection called `UserCollection`. - ```powerapps-dot + ```power-fx ClearCollect( UserCollection, AddColumns( @@ -136,7 +136,7 @@ This code component provides a wrapper around the [Fluent UI PeoplePicker](https At this point the control is functioning and selected members can be obtained from the `SelectedPeople` property. -```powerapps-dot +```power-fx PeoplePicker1.SelectedPeople ``` @@ -147,11 +147,11 @@ PeoplePicker1.SelectedPeople Add Users or specific users(using below code) from table to the items collection(under `Suggestions_Items` property) of `PeoplePicker`. -**`AAD Users` table** - ```powerapps-dot + ```power-fx Search('AAD Users', Self.SearchText,"displayname" ,"mail") ``` -**`Users` table** - ```powerapps-dot + ```power-fx Search('Users', Self.SearchText,"fullname","internalemailaddress") ``` @@ -165,7 +165,7 @@ PeoplePicker1.SelectedPeople At this point, the people picker should be working and the selected members can be obtained from SelectedPeople Property. -```powerapps-dot +```power-fx PeoplePicker1.SelectedPeople ``` diff --git a/power-platform/guidance/creator-kit/picker.md b/power-platform/guidance/creator-kit/picker.md index 02fe319b96..58fb4b1f9c 100644 --- a/power-platform/guidance/creator-kit/picker.md +++ b/power-platform/guidance/creator-kit/picker.md @@ -50,7 +50,7 @@ The Tag Picker has the following input datasets, which are described in detail i The `Suggestions` dataset should be filtered by using the `SearchTerm` output property, for example: -```powerapps-dot +```power-fx Search(colSuggestions,TagPicker.SearchTerm,"name") ``` @@ -63,7 +63,7 @@ Search(colSuggestions,TagPicker.SearchTerm,"name") | `Items` | A collection (table) of tags. The app is responsible for adding or removing tags in response to the component's raising Add or Remove events (described in the following [OnChange event section](#onchange-event)). | | `Suggestions_Items` | A collection (table) of suggestions. | | `TagMaxWidth` | The maximum width of the tags when rendering. Overflow text will be truncated with ellipsis's and a hover tooltip shows the full text. | -| `AllowFreeText` | When typing a value, do not not automatically select the first suggestion so that a free text entry can be provided rather than selecting from a pre-defined list. | +| `AllowFreeText` | When typing a value, do not automatically select the first suggestion so that a free text entry can be provided rather than selecting from a pre-defined list. | | `SearchTermToShortMessage` | The message to display when the Search Term is less than the `MinimumSearchTermLength`. | `HintText` | The message to display inside the Picker when no search term is provided. | | `NoSuggestionsFoundMessage` | The message to display when the Suggestions collection contains no results. | @@ -88,7 +88,7 @@ Search(colSuggestions,TagPicker.SearchTerm,"name") | `Theme` | Accepts a JSON string that is generated using [Fluent UI Theme Designer (windows.net)](https://fabricweb.z5.web.core.windows.net/pr-deploy-site/refs/heads/master/theming-designer/). Leaving this blank will use the default theme defined by Power Apps. See [theming](theme.md) for guidance on how to configure. | | `FontSize` | the font size of the tags shown inside the Picker. | | `BorderRadius` | the border radius of the tags shown inside the Picker. | -| `ItemHeight` | the height of the tags (pixesl) shown inside the Picker. | +| `ItemHeight` | the height of the tags (pixels) shown inside the Picker. | | `AccessibilityLabel` | Screen reader aria-label | ### Event properties @@ -118,7 +118,7 @@ The `TagPicker`component raises an `OnChange` event when tags are added or remov The event should contain an expression similar to: -```powerapps-dot +```power-fx If( TagPicker.TagEvent = "Add" && CountRows(Filter(colTags,name=TagPicker.TagsDisplayName)) = 0, Collect( colTags, { name:TagPicker.TagsDisplayName }) ); diff --git a/power-platform/guidance/creator-kit/pivot.md b/power-platform/guidance/creator-kit/pivot.md index 783ed6f517..9cf0fab9f2 100644 --- a/power-platform/guidance/creator-kit/pivot.md +++ b/power-platform/guidance/creator-kit/pivot.md @@ -56,7 +56,7 @@ Each item uses the following schema to visualize data in the component. Example: - ```powerapps-dot + ```power-fx Table( { ItemKey: "tabFile", @@ -101,7 +101,7 @@ Coordinate tab pages by associating the `Visible` property of dependent componen `Visible` property of a dependent control that's displayed when the **tabFile** itemKey is selected: - ```powerapps-dot + ```power-fx Pivot1.Selected.ItemKey = "tabFile" ``` diff --git a/power-platform/guidance/creator-kit/progressindicator.md b/power-platform/guidance/creator-kit/progressindicator.md index 1c016bc2f2..404e18744a 100644 --- a/power-platform/guidance/creator-kit/progressindicator.md +++ b/power-platform/guidance/creator-kit/progressindicator.md @@ -56,7 +56,7 @@ This code component provides a wrapper around the [Fluent UI ProgressIndicator]( Make the `ProgressIndicator` control itself (or the surface it's located within) visible when a process begins, then update a variable with the value as segments of the process are completed. Hide it when the process is complete. Use a variable to control the visibility of the control, and update the values between the major code blocks of the process that need to be indicated. -```powerapps-dot +```power-fx UpdateContext({ var_showProgress: true , var_progressValue: 0 }); /* Some code ... */ diff --git a/power-platform/guidance/creator-kit/searchbox.md b/power-platform/guidance/creator-kit/searchbox.md index 436b69c6c7..bc630cf569 100644 --- a/power-platform/guidance/creator-kit/searchbox.md +++ b/power-platform/guidance/creator-kit/searchbox.md @@ -59,7 +59,7 @@ Add this control to your app where a search interface is needed, usually coupled Create a search experience by using the [Search() or Filter()](/power-apps/maker/canvas-apps/functions/function-filter-lookup) expressions that use the value of the `SearchText` property in the `SearchBox`. -```powerapps-dot +```power-fx Search( Accounts, SearchBox.SearchText, "name" ) ``` diff --git a/power-platform/guidance/creator-kit/setfocus.md b/power-platform/guidance/creator-kit/setfocus.md index 3b4192d447..04c69227d7 100644 --- a/power-platform/guidance/creator-kit/setfocus.md +++ b/power-platform/guidance/creator-kit/setfocus.md @@ -23,7 +23,7 @@ To make calls to the input event, you can set a context variable that is bound t Example Power Fx formula that triggers the focus behavior: -```powerapps-dot +```power-fx UpdateContext({ ctxComponentEvent: "SetFocus" & Text(Rand()) }); ``` diff --git a/power-platform/guidance/creator-kit/shimmer.md b/power-platform/guidance/creator-kit/shimmer.md index 2fab86effa..6bff90b18f 100644 --- a/power-platform/guidance/creator-kit/shimmer.md +++ b/power-platform/guidance/creator-kit/shimmer.md @@ -35,7 +35,7 @@ This code component provides a wrapper around the [Fluent UI Shimmer](https://de | -------- | ----------- | | `Items` | The action items to render | | `Rows` | The action items to render | -| `SpacebetweenShimmer` | Space or Gap between each Shimmer incase of muliple rows. | +| `SpacebetweenShimmer` | Space or Gap between each Shimmer incase of multiple rows. | ### Items properties diff --git a/power-platform/guidance/creator-kit/spinbutton.md b/power-platform/guidance/creator-kit/spinbutton.md index c9c866ac1e..1a62c3f43c 100644 --- a/power-platform/guidance/creator-kit/spinbutton.md +++ b/power-platform/guidance/creator-kit/spinbutton.md @@ -47,7 +47,7 @@ This code component provides a wrapper around the [Fluent UI SpinButton](https:/ | `Max` | Min value of the control. If not provided, the control has no minimum value. | | `Step` | Difference between two adjacent values of the control. This value is used to calculate the precision of the input if no precision is given. The precision calculated this way will always be >= 0. | | `Value` | Current value of the control. | -| `DefaultValue` | Intial value of the control when first rendered. | +| `DefaultValue` | Initial value of the control when first rendered. | | `Suffix` | Suffix to define any unit (e.g. cm, kg, ml) | ## Additional properties @@ -64,7 +64,7 @@ This code component provides a wrapper around the [Fluent UI SpinButton](https:/ ## Example -### Connecting SpinButton to a Edit Form data card +### Connecting SpinButton to an Edit Form data card 1. Unlock the data card 1. Hide the default control for the field diff --git a/power-platform/guidance/creator-kit/spinner.md b/power-platform/guidance/creator-kit/spinner.md index a56829c507..b2e2ef1e30 100644 --- a/power-platform/guidance/creator-kit/spinner.md +++ b/power-platform/guidance/creator-kit/spinner.md @@ -57,7 +57,7 @@ Make the spinner control visible when a process begins, then hide it when the pr Use a variable to control the visibility of the spinner, and update the values before and after the code block of the process. -```powerapps-dot +```power-fx UpdateContext({ var_showLoader: true }); /* Some code ... */ diff --git a/power-platform/guidance/creator-kit/stackedbarchart.md b/power-platform/guidance/creator-kit/stackedbarchart.md new file mode 100644 index 0000000000..6488531c0f --- /dev/null +++ b/power-platform/guidance/creator-kit/stackedbarchart.md @@ -0,0 +1,103 @@ +--- +title: HorizontalBarChart - Stacked control reference (preview) | Creator Kit +description: Learn about the details and properties of the HorizontalBarChart - Stacked control in the Creator Kit. +author: denise-msft +ms.component: pa-maker +ms.topic: conceptual +ms.date: 06/10/2024 +ms.subservice: guidance +ms.author: demora +ms.reviewer: tapanm +search.audienceType: + - maker +contributors: + - tapanm-msft + - mehdis-msft + - Ramakrishnan24689 +--- + +# :::no-loc text="HorizontalBarChart - Stacked"::: control (preview) + +[!INCLUDE [cc-beta-prerelease-disclaimer](../../includes/cc-beta-prerelease-disclaimer.md)] + +Horizontal stacked bar chart displays multiple series of data as stacked bars, with each bar representing a category. The bars are stacked alongside each other, with the length of each bar representing the value of the category of the series. + +:::image type="content" source="media/stackedchart.svg" alt-text="HorizontalBarChart - Stacked control."::: + +This code component provides a wrapper around the [Fluent UI HorizontalBarChart - Stacked](https://developer.microsoft.com/en-us/fluentui#/controls/web/horizontalbarchart/stackedbarchart) control for use in canvas & custom pages. + +> [!IMPORTANT] +> +> - This is a preview feature. +> - [!INCLUDE [cc-preview-features-definition](../../includes/cc-preview-features-definition.md)] + +> [!NOTE] +> For the full documentation and source code, see [GitHub code components repository](https://github.com/microsoft/powercat-code-components/tree/main/StackedBarChart). + +## Properties + +The control accepts the following properties: + +- **HideLegend** - This value denotes whether to show or hide legends on the chart. +- **BarHeight** - This value denotes height of the bar presented in the chart. +- **HideTooltip** - This option controls whether to show or hide tooltips on the chart. +- **CustomColors** - This option is used to show custom colors on the chart if provided + +- **Items** - The action items to render + - **ItemTitle** - The Display Name of the particular chart data(Item). + - **ItemKey** - The key to use to identify the Item. The keys must be unique. + - **ItemValue** - Set the value of the particular chart data(Item). + - **ItemColor** - Set the color name or HEX value to be displayed for the particular chart data(Item). + - **ItemCallout** - Set the value to be displayed on a popover/tooltip. + +> [!NOTE] +> Item color only applies if the `CustomColors` property is turned on. + +### Accessibility + +- **AccessibilityLabel** - Screen reader aria-label + +## Usage + +Map data values to the corresponding chart properties in the `Items` property of the control, as demonstrated in the below formula. The chart automatically adjusts the visual to match the relative values. + +Enable the `CustomColors` property to define consistent colors. + +```powerapps-dot +Table( + { + ItemKey: "1", + ItemTitle: "First", + ItemCallout:"First item callout title", + ItemValue: 40, + ItemColor: "#00A892" + }, + { + ItemKey: "2", + ItemTitle: "Second", + ItemCallout:"Second item callout title", + ItemValue: 20, + ItemColor: "#9A44FC" + }, + { + ItemKey: "3", + ItemTitle: "Third", + ItemCallout:"Third item callout title", + ItemValue: 120, + ItemColor: "#3483FA" + }, + { + ItemKey: "4", + ItemTitle: "Fourth", + ItemCallout:"Fourth item callout title", + ItemValue: 90, + ItemColor: "#EBA800" + } +) +``` + +## Limitations + +This canvas component can only be used in canvas apps and custom pages. + +[!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/guidance/creator-kit/subwaynav.md b/power-platform/guidance/creator-kit/subwaynav.md index abf1e8e80d..06f9bc5748 100644 --- a/power-platform/guidance/creator-kit/subwaynav.md +++ b/power-platform/guidance/creator-kit/subwaynav.md @@ -74,7 +74,7 @@ Each object in the `Items` input table must use the following properties to rend Example of input collection value for Items property: -```powerapps-dot +```power-fx Table( { ItemKey:"1", ItemLabel:"Step 1", ItemState:"Current" }, { ItemKey:"2", ItemLabel:"Step 2", ItemState:"Completed" }, @@ -89,7 +89,7 @@ To get the selected step by the user, use the `OnSelect` or `OnChange` property Example code: -```powerapps-dot +```power-fx Notify( Concatenate(Self.Selected.ItemLabel, " selected and its status is ", Self.Selected.ItemState )); ``` @@ -97,7 +97,7 @@ Notify( Concatenate(Self.Selected.ItemLabel, " selected and its status is ", Sel Below is a sample item collection example that defines how substeps needs to be linked with main/parent step using ParentItemKey. -```powerapps-dot +```power-fx Table( { ItemKey:"1", ItemLabel:"Step 1", ItemState:"Current" }, { ItemKey:"2", ItemLabel:"Step 2 have sub-steps", ItemState:"WizardComplete" }, @@ -118,13 +118,13 @@ State of each item (step) changes as we select or move to different step happens Example code (referenced from the `SubwayNav` control): -```powerapps-dot +```power-fx Self.Steps ``` Example code (referencing the steps from another control): -```powerapps-dot +```power-fx SubwayNav1.Steps ``` diff --git a/power-platform/guidance/creator-kit/taglist.md b/power-platform/guidance/creator-kit/taglist.md index 39dc5a5192..a2ca20164d 100644 --- a/power-platform/guidance/creator-kit/taglist.md +++ b/power-platform/guidance/creator-kit/taglist.md @@ -52,7 +52,7 @@ Each item uses the following schema to visualize data in the component. Example: - ```powerapps-dot + ```power-fx Table( { ItemDisplayName: "Power Apps", diff --git a/power-platform/guidance/creator-kit/theme.md b/power-platform/guidance/creator-kit/theme.md index 110e309664..615a82891e 100644 --- a/power-platform/guidance/creator-kit/theme.md +++ b/power-platform/guidance/creator-kit/theme.md @@ -44,7 +44,7 @@ The below Power Fx formula shows an example of how to set a global variable usin - Place this Power Fx formula to run on the app's `OnStart` property. - Replace the value between the `/* THEME OBJECT */` comments with your own theme object from the designer. -```powerapps-dot +```power-fx Set( AppTheme, /* START THEME OBJECT */ @@ -95,7 +95,7 @@ A theme can be passed to the `Theme` property of each component. Any of the core components in canvas apps or custom pages can reference elements from the `AppTheme` object (cannot be Json formatted). These controls must reference the desired `palette` properties and be cast as a Color data type using the `ColorValue()` formula. Example `Button`.`Fill` Power Fx formula referencing the primary color of the theme: -```powerapps-dot +```power-fx ColorValue(AppTheme.palette.themePrimary) ``` diff --git a/power-platform/guidance/white-papers/environment-strategy.md b/power-platform/guidance/white-papers/environment-strategy.md index e3c60e2365..cffb8a968a 100755 --- a/power-platform/guidance/white-papers/environment-strategy.md +++ b/power-platform/guidance/white-papers/environment-strategy.md @@ -4,7 +4,7 @@ description: Learn how to best use the latest features of the platform to implem author: robstand ms.component: pa-admin ms.topic: overview -ms.date: 06/04/2024 +ms.date: 06/13/2024 ms.author: rstand ms.reviewer: sericks ms.custom: bap-template @@ -53,7 +53,7 @@ You should establish your environment strategy using the recommended environment [Environments](/power-platform/admin/environments-overview) are a building block for Power Platform administration, governance, and security. A complete feature overview is out of the scope of this paper; however, this section highlights the features that support implementation of an environment strategy at enterprise scale. -- [**Types of environments**](#types-of-environments) describes the different uses of environments as part of your strategy. +- [**Types of environments**](#types-of-environments) describes the different uses of environments as part of your strategy. - [**Managed Environments**](#managed-environments) provides a set of premium capabilities that make environments easier to manage at scale. @@ -345,11 +345,10 @@ Environments enable you to create multiple security boundaries within your tenan Most security settings that affect environments are configured for each environment individually. However, you can make some changes at the tenant level to help support your environment strategy. -First, consider [turning off the Share with Everyone feature](../adoption/secure-default-environment.md#limit-sharing-with-everyone) in Power Platform. Only admins would be able to share an asset with everyone. - -Next, consider [securing integration with Exchange](../adoption/secure-default-environment.md#secure-integration-with-exchange). - -Finally, [apply cross-tenant isolation](../../admin/cross-tenant-restrictions.md) to help minimize the risk of data exfiltration between tenants. +- Consider [turning off the Share with Everyone feature](../adoption/secure-default-environment.md#limit-sharing-with-everyone) in Power Platform. Only admins would be able to share an asset with everyone. +- Consider [securing integration with Exchange](../adoption/secure-default-environment.md#secure-integration-with-exchange). +- [Apply cross-tenant isolation](../../admin/cross-tenant-restrictions.md) to help minimize the risk of data exfiltration between tenants. +- Restrict the creation of net-new production environments to admins. [Limiting environment creation](../../admin/control-environment-creation.md) is beneficial to maintain control in general: both to prevent unaccounted capacity consumption and to reduce the number of environments to manage. If users have to request environments from central IT, it’s easier to see what people are working on if admins are the gatekeeper. ### Secure the default environment @@ -383,6 +382,8 @@ Incorporate the security levels you identify into your group strategy, and where Data policies are another important part of an overall governance effort to control the services used by low-code resources in an environment. Environment groups don't have a rule to apply a DLP policy to an environment. However, you can align your DLP strategy with your environment groups. For example, you could create a DLP policy with the same or a similar name as an environment group and apply it to environments in that group. +[Learn more about how to establish a DLP strategy](/power-platform/guidance/adoption/dlp-strategy). + :::image type="content" source="media/environment-strategy/image15.png" alt-text="Diagram illustrating the relationship between environment groups and similarly named data loss prevention policies that apply to them"::: *Figure: In this example, environments in the Personal Dev group follow a DLP policy that blocks all non-Microsoft connectors.* @@ -499,6 +500,15 @@ When you evaluate the production environment for an app, keep the following cons - **Will users have difficulty having to use multiple environments for different apps?** This can affect everything from finding an app on their mobile device to self-service reporting that has to pull data from multiple environments. +### Capacity + +Each environment (besides trial and developer environments) consumes 1 GB to initially provision. Capacity is shared across the tenant so it needs to be allocated to those who need it. + +Conserve capacity by: + +- Managing shared test and production environments. Unlike shared development environments, permissions in test and production environments should be limited to user access for testing. +- Automate cleanup of temporary development environments and encourage use of trial environments for testing or proof-of-concept work. + ### Environment groups Environment groups are flexible and allow you to accommodate various use cases unique to your organizations. Here are a few ways you could consider grouping environments as part of your environment strategy: @@ -561,6 +571,10 @@ The following table lists example use cases and migration actions. Ultimately, y | Assets with multiple makers that have been used recently and are shared | Move to a shared developer environment and run from a shared production environment. | | Assets that haven't been used recently | Notify the owner and move to quarantine if no response. | +### Assets in Dataverse for Teams environments + +[Microsoft Dataverse for Teams](/power-platform/admin/about-teams-environment) empowers users to build custom apps, bots, and flows in Microsoft Teams by using Power Apps, Microsoft Copilot Studio, and Power Automate. When a team owner adds this capability to their team, a Microsoft Power Platform environment with a Dataverse for Teams database is created and linked to their team. [Learn how to establish governance policies to manage Microsoft Dataverse for Teams environments.](/power-platform/guidance/adoption/teams-environment-strategy). + ### Environment strategy internally at Microsoft Microsoft considers itself "Customer Zero" as it internally adopts Power Platform to drive automation and efficiency among its employees. The following numbers give you an idea of the scale of use across Microsoft internal tenant. diff --git a/power-platform/guidance/white-papers/managed-environment-activation.md b/power-platform/guidance/white-papers/managed-environment-activation.md index 4fddc93f40..7ed81d494d 100644 --- a/power-platform/guidance/white-papers/managed-environment-activation.md +++ b/power-platform/guidance/white-papers/managed-environment-activation.md @@ -326,7 +326,7 @@ It's important to understand what happens if your organization stops using Manag |:---:|:---:|:---:| | Maker welcome | Indirect: They stop seeing the welcome message when they enter the environment. | Indirect: They can't define customized welcome messages in environments. | | Limit sharing | Direct: They can share their apps with any security groups and users. | Indirect: They can't control how apps in the environment are being shared. | -| Usage unsights| None | Direct: They, and any other recipients, stop receiving the weekly email digest. | +| Usage insights| None | Direct: They, and any other recipients, stop receiving the weekly email digest. | | Data policies | None | Indirect: DLPs are enforced, but admins can't apply multiple DLPs to the environment. | | Pipelines in Power Platform | Direct: They can't use the pipelines to deploy their solutions. | None | | Solution checker enforcement | Indirect: They can import any solution without a check for errors, security, and noncompliant assets. | None | diff --git a/power-platform/guidance/white-papers/migrating-from-default-environment.md b/power-platform/guidance/white-papers/migrating-from-default-environment.md index 3f7e377c67..688b48fea7 100644 --- a/power-platform/guidance/white-papers/migrating-from-default-environment.md +++ b/power-platform/guidance/white-papers/migrating-from-default-environment.md @@ -172,7 +172,7 @@ As part of the migration and clean-up effort, make sure the process is smooth to Things to keep in mind include: - Change in URL of the app. Users of the app need to update any bookmarks to an app in the default environment. -- If there's a URL-based HTTP trigger flow, that must be updated in dependent flows to ensure it still acts as a webhook. +- If there's an URL-based HTTP trigger flow, that must be updated in dependent flows to ensure it still acts as a webhook. - Provide detailed steps to establish connections once the move is complete for both makers and app users. Users shouldn't be worried about creating a connection when they launch the app for the first time from the new environment. A good start for setting up communications requires a self-serve model to scale and be more real-time for users than just leaving it for a single user’s email or a distribution list. If you plan to establish a SharePoint site, there's a template available that you can use to create an internal, Microsoft Power Platform hub. The hub becomes the common place to learn about strategy and guidance so makers get to make right decisions for what they intend to build and where they should go for it. diff --git a/power-platform/important-changes-coming.md b/power-platform/important-changes-coming.md index a66463cc9b..ddf1593c2b 100644 --- a/power-platform/important-changes-coming.md +++ b/power-platform/important-changes-coming.md @@ -1,7 +1,7 @@ --- title: "Important changes (deprecations) coming in Power Platform" description: Important changes (deprecations) coming in Power Platform -ms.date: 06/03/2024 +ms.date: 06/07/2024 ms.topic: conceptual ms.subservice: admin searchScope: @@ -22,6 +22,9 @@ For deprecation information of other products, see [Other deprecation articles]( > [!IMPORTANT] > "Deprecated" means we intend to remove the feature or capability from a future release. The feature or capability will continue to work and is fully supported until it is officially removed. This deprecation notification can span a few months or years. After removal, the feature or capability will no longer work. This notice is to allow you sufficient time to plan and update your code before the feature or capability is removed. +## Schema for DLP activity logging +The schema DLP activity logging is deprecated and won't be available starting in July 2024. You can use the new schema available at [Activity category: Data policy events](admin/admin-activity-logging.md#activity-category-data-policy-events). + ## Schema for Lockbox audit events The schema for Lockbox audit events is deprecated and won't be available starting in July 2024. You can audit Customer Lockbox events using the new schema available at [Activity category: Lockbox operations](admin/admin-activity-logging.md#activity-category-lockbox-operations). @@ -452,7 +455,7 @@ The Windows Player for canvas apps will no longer be able to be used. You must replace usage of the Dynamics 365 connector with the Microsoft Dataverse connector. -- **Microsoft Dataverse**: This is the newest connector and the main connector avilable for Dataverse usage. All new features, performance work, and enhancements will be available on this connector. A +- **Microsoft Dataverse**: This is the newest connector and the main connector available for Dataverse usage. All new features, performance work, and enhancements will be available on this connector. A **Mapping of common actions** diff --git a/power-platform/includes/cc-feature-requires-office-365.md b/power-platform/includes/cc-feature-requires-office-365.md index 203981f8ab..2ba2910be2 100644 --- a/power-platform/includes/cc-feature-requires-office-365.md +++ b/power-platform/includes/cc-feature-requires-office-365.md @@ -1 +1 @@ -This feature requires that you have an Microsoft 365 subscription or a subscription to an online service such as SharePoint Online or Exchange Online. For more information, see [What is Microsoft 365 and how does it relate to Dynamics 365 (online)?](/dynamics365/customer-engagement/admin/what-office-365-how-does-relate) \ No newline at end of file +This feature requires that you have a Microsoft 365 subscription or a subscription to an online service such as SharePoint Online or Exchange Online. For more information, see [What is Microsoft 365 and how does it relate to Dynamics 365 (online)?](/dynamics365/customer-engagement/admin/what-office-365-how-does-relate) \ No newline at end of file diff --git a/power-platform/power-fx/TOC.yml b/power-platform/power-fx/TOC.yml index af51a50c36..b3136fdc86 100644 --- a/power-platform/power-fx/TOC.yml +++ b/power-platform/power-fx/TOC.yml @@ -32,6 +32,8 @@ href: formula-reference-canvas-apps.md - name: Dataverse formula reference href: formula-reference-dataverse.md + - name: Power Pages formula reference + href: formula-reference-power-pages.md - name: Cards formula reference href: formula-reference-cards.md - name: Desktop flows formula reference diff --git a/power-platform/power-fx/data-types.md b/power-platform/power-fx/data-types.md index 8202b70a86..9fa73cf4ab 100644 --- a/power-platform/power-fx/data-types.md +++ b/power-platform/power-fx/data-types.md @@ -67,7 +67,7 @@ All four of these data types are based on a [Unicode](https://en.wikipedia.org/w Embedded text strings in a formula are enclosed in double quotation marks. Use two double quotes together to represent a single double quote in the text string. For example, using the following formula in the **OnSelect** property of a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control: -```powerapps-dot +```power-fx Notify( "Jane said ""Hello, World!""" ) ``` @@ -85,7 +85,7 @@ Prefix the text string with a dollar sign **$** and enclose the formula to be em For example, consider this formula with global variables **Apples** set to 3 and **Bananas** set to 4: -```powerapps-dot +```power-fx $"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total." ``` @@ -93,7 +93,7 @@ This formula returns the text string **We have 3 apples, 4 bananas, yielding 7 f Embedded formulas can include any functions or operators. All that is requires is that the result of the formula can be coerced to a text string. For example, this formula will insert **NickName** if it's supplied, or the **FirstName** if not, in a greeting: -```powerapps-dot +```power-fx $"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" ) ``` @@ -101,13 +101,13 @@ If **NickName** is set to "Joe", then this formula produces the text string **We String interpolation can include standard text strings in the embedded formula. For example, if neither **NickName** nor **FirstName** were supplied, we could still provide **"Friend"** as a substitute: -```powerapps-dot +```power-fx $"Welcome {Coalesce( NickName, FirstName, "Friend" )}!" ``` String interpolations can even be nested. Consider this example where **First**, **Middle**, and **Last** names are combined into a greeting. Even if one or two of these values are _blank_, the correct number of spaces will be between the name parts. If none of the parts are provided, the inner string interpolation will collapse to an empty string, and be replaced by the [**Coalesce**](reference/function-isblank-isempty.md) function by "Friend". -```powerapps-dot +```power-fx $"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!" ``` @@ -122,7 +122,7 @@ $"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!" Embedded text strings can contain newlines. For example, consider setting the **Text** property of a [**Label**](/power-apps/maker/canvas-apps/controls/control-text-box) control to the following: -```powerapps-dot +```power-fx "Line 1 Line 2 Line 3" @@ -134,7 +134,7 @@ The above formula results in three lines shown in the label control: Newlines are also supported with string interpolation, as shown below: -```powerapps-dot +```power-fx $"Line {1} Line {1+1} Line {1+1+1}" @@ -164,7 +164,7 @@ Canvas apps reference each image or other media file, whether it's in the cloud For example, the **Image** property of an image control accepts not only app resources but also links to images on the web, such as "https://northwindtraders.com/logo.jpg". The property also accepts inline images that use the [data URI scheme](https://en.wikipedia.org/wiki/Data_URI_scheme), as in this example: -```powerapps-dot +```power-fx "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC" ``` @@ -243,14 +243,14 @@ In summary: For example, consider the following calculation using `pac power-fx repl` after installing the [Power Platform CLI](../developer/cli/introduction.md). Since both numbers are **Decimal**, the calculation is done in **Decimal**, and the result retains full precision: -```powerapps-dot +```power-fx >> 1.0000000000000000000000000001 * 2 2.0000000000000000000000000002 ``` If instead, the second operand was changed to **Float** then the entire calculation would be done in **Float** and the tiny fractional part would be lost: -```powerapps-dot +```power-fx >> 1.0000000000000000000000000001 * Float(2) 2 ``` @@ -314,7 +314,7 @@ Canvas apps use the included time-zone information in **Datetimeoffset** fields Canvas apps read and write values of the [**Time**](/sql/t-sql/data-types/time-transact-sql) data type in SQL Server as text strings in the [ISO 8601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations). For example, you must parse this string format and use the [**Time**](reference/function-date-time.md) function to convert the text string **"PT2H1M39S"** to a **Time** value: -```powerapps-dot +```power-fx With( Match( "PT2H1M39S", "PT(?:(?\d+)H)?(?:(?\d+)M)?(?:(?\d+)S)?" ), Time( Value( hours ), Value( minutes ), Value( seconds ) ) diff --git a/power-platform/power-fx/error-handling.md b/power-platform/power-fx/error-handling.md index 5eb86ec54f..85944cc016 100644 --- a/power-platform/power-fx/error-handling.md +++ b/power-platform/power-fx/error-handling.md @@ -38,7 +38,7 @@ Let's start with a simple example. 1. Insert a **Label** control. 1. Set the **Text** property of the **Label** control to the formula -```powerapps-dot +```power-fx 1/Value( TextInput1.Text ) ``` ![Error banner displayed with "the value cannot be converted to a number" for the text input control containing "Text input"](media/error-handling/intro-error-default.png) @@ -47,21 +47,21 @@ We have an error because the default text of a **TextInput** control is `"Text i Obviously, we don't want an error to greet the user each time they start this app. Likely `"Text input"` isn't the right default for the text input box anyway. To remedy this, let's change the **Default** property of the **TextInput** control to: -```powerapps-dot +```power-fx Blank() ``` ![Error banner displayed with "division by zero"](media/error-handling/intro-error-blank.png) Hmm, now we have a different error. Mathematical operations with *blank*, such as division, will coerce the blank value to a zero. And that is now causing a division by zero error. To remedy this, we need to decide what the appropriate behavior is for this situation in this app. The answer may be to show *blank* when the text input is *blank*. We can accomplish this by wrapping our formula with the **IfError** function: -```powerapps-dot +```power-fx IfError( 1/Value( TextInput1.Text ), Blank() ) ``` ![No error banner displayed, an error due to a blank value has been replaced with a blank](media/error-handling/intro-error-iferror-all.png) Now the error is replaced with a valid value and the error banner has gone away. But, we may have overshot, the **IfError** we used covers *all* errors, including typing in a bad value such as `"hello"`. We can address this by tuning our **IfError** to handle the division by zero case only with and rethrowing all other errors: -```powerapps-dot +```power-fx IfError( 1/Value( TextInput1.Text ), If( FirstError.Kind = ErrorKind.Div0, Blank(), Error( FirstError ) ) ) ``` @@ -84,13 +84,13 @@ And if we type in something illegal, like `hello`, then we'll receive an error b This is a simple introductory example. Error handling can be done many different ways, depending on the needs of the app: 1. Instead of an error banner, we could have shown **"#Error"** in the label control with the formula. To keep the types of the replacements compatible with the first argument to **IfError** we need to explicitly convert the numerical result to a text string with the **Text** function. - ```powerapps-dot + ```power-fx IfError( Text( 1/Value( TextInput1.Text ) ), If( FirstError.Kind = ErrorKind.Div0, Blank(), "#Error" ) ``` ![no error banner and instead #Error is shown as the result](media/error-handling/intro-error-inlinestring.png) 2. Instead of wrapping this specific instance with **IfError** we could have written a centralized **App.OnError** handler. We can't replace the string shown with "#Error" as the error has already happened and **App.OnError** is only provided to control reporting. - ```powerapps-dot + ```power-fx If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ) ) ``` @@ -166,7 +166,7 @@ If an error is encountered during one of the iterations of **ForAll**, the rest For example, the following formula will result in **ForAll** returning two errors (for the division by zero for `Value` of 0, twice) and `Collection` will have three records (for when `Value` isn't 0): `[1, 2, 3]`. -```powerapps-dot +```power-fx Clear( Collection ); ForAll( [1,0,2,0,3], If( 1/Value > 0, Collect( Collection, Value ) ) ); ``` @@ -210,7 +210,7 @@ The functions that modify data in data sources, such as **[Patch](reference/func - After the operation, the **Errors** function will also return the errors for previous operations. This can be useful for displaying the error message on a form screen without needing to capture the error in a state variable. For example, this formula will check for an error from **Collect** and display a custom error message: -```powerapps-dot +```power-fx IfError( Collect( Names, { Name: "duplicate" } ), Notify( $"OOPS: { FirstError.Message }", NotificationType.Warning ) ) ``` diff --git a/power-platform/power-fx/expression-grammar.md b/power-platform/power-fx/expression-grammar.md index 1ec29a5eb9..a679b167ca 100644 --- a/power-platform/power-fx/expression-grammar.md +++ b/power-platform/power-fx/expression-grammar.md @@ -143,7 +143,7 @@ Comments aren't processed within text-literal strings. The following example includes two delimited comments: -```powerapps-dot +```power-fx /* Hello, world */ "Hello, world" /* This is an example of a text literal */ @@ -151,7 +151,7 @@ The following example includes two delimited comments: The following examples include three single-line comments: -```powerapps-dot +```power-fx // Hello, world // "Hello, world" // This is an example of a text literal @@ -202,7 +202,7 @@ A *number literal* is used to write a numeric value and produce a number value. A *text literal* is used to write a sequence of Unicode characters and produce a text value. Text literals are enclosed in double quotation marks. To include double quotation marks in the text value, repeat the double quotation marks, as shown in the following example: -```powerapps-dot +```power-fx "The ""quoted"" text" // The "quoted" text ``` diff --git a/power-platform/power-fx/formula-reference-canvas-apps.md b/power-platform/power-fx/formula-reference-canvas-apps.md index 2f7b3b138a..a7427c0b50 100644 --- a/power-platform/power-fx/formula-reference-canvas-apps.md +++ b/power-platform/power-fx/formula-reference-canvas-apps.md @@ -177,7 +177,7 @@ Other elements include: **[Enable](reference/function-enable-disable.md)** – Enables a signal, such as **[Location](reference/signals.md)** for reading the GPS. -**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in a HTML context. +**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in an HTML context. **[EncodeUrl](reference/function-encode-decode.md)** – Encodes special characters using URL encoding. diff --git a/power-platform/power-fx/formula-reference-overview.md b/power-platform/power-fx/formula-reference-overview.md index ca51a2fd1d..e2ea9b9f8d 100644 --- a/power-platform/power-fx/formula-reference-overview.md +++ b/power-platform/power-fx/formula-reference-overview.md @@ -27,10 +27,11 @@ The Power Fx formulas are available for the following Power Platform components: | Power Platform component | Sub areas| | - | - | | Power Apps | Canvas apps, model-driven apps, cards | -| Canvas apps | Canvas apps | +| Canvas apps | Not applicable | | Power Automate | Desktop flows | | Dataverse | Formula columns, low-code plug-ins | -| Cards for Power Apps | Cards | +| Power Pages | Not applicable | +| Cards for Power Apps | Not applicable | | Power Platform CLI | Not applicable | diff --git a/power-platform/power-fx/formula-reference-pac-cli.md b/power-platform/power-fx/formula-reference-pac-cli.md index e5cc138c56..c54906664e 100644 --- a/power-platform/power-fx/formula-reference-pac-cli.md +++ b/power-platform/power-fx/formula-reference-pac-cli.md @@ -113,7 +113,7 @@ Use these commands to interact with data in Dataverse using a command line or sc **[EDate](reference/function-edate-eomonth.md)** – Adds or subtracts months to a date, without changing the day of the month. -**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in a HTML context. +**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in an HTML context. **[EncodeUrl](reference/function-encode-decode.md)** – Encodes special characters using URL encoding. diff --git a/power-platform/power-fx/formula-reference-power-pages.md b/power-platform/power-fx/formula-reference-power-pages.md new file mode 100644 index 0000000000..250b603b1e --- /dev/null +++ b/power-platform/power-fx/formula-reference-power-pages.md @@ -0,0 +1,333 @@ +--- +title: Formula reference - Power Pages +description: Reference information for all functions in Power Pages. +author: gregli-msft +ms.topic: reference +ms.custom: canvas +ms.reviewer: mkaur-msft +ms.date: 6/06/2024 +ms.subservice: power-fx +ms.author: gregli +search.audienceType: + - maker +contributors: + - mduelae + - gregli-msft + - gregli +--- + +# Formula reference - Power Pages + +In this article, learn about all the functions available in Power Pages. + + +## A + +**[Abs](reference/function-numericals.md)** – Absolute value of a number. + +**[Acos](reference/function-trig.md)** – Returns the arccosine of a number, in radians. + +**[Acot](reference/function-trig.md)** – Returns the arccotangent of a number, in radians. + +**[And](reference/function-logicals.md)** – Boolean logic AND. Returns **true** if all arguments are **true**. You can also use the [**&&** operator](reference/operators.md). + +**[Asin](reference/function-trig.md)** – Returns the arcsine of a number, in radians. + +**[Assert](reference/function-assert.md)** – Evaluates to true or false in a test. + +**[As](reference/operators.md#thisitem-thisrecord-and-as-operators)** – Names the current record in gallery, form, and record scope functions such as **ForAll**, **With**, and **Sum**. + +**[AsType](reference/function-astype-istype.md)** – Treats a record reference as a specific table type. + +**[Atan](reference/function-trig.md)** – Returns the arctangent of a number, in radians. + +**[Atan2](reference/function-trig.md)** – Returns the arctangent based on an (_x_,_y_) coordinate, in radians. + +**[Average](reference/function-aggregates.md)** – Calculates the average of a table expression or a set of arguments. + +## B + +**[Boolean](reference/function-boolean.md)** – Converts a text string, number, or untyped value to a Boolean value. + +## C + +**[Calendar](reference/function-clock-calendar.md)** – Retrieves information about the calendar for the current locale. + +**[Char](reference/function-char.md)** – Translates a character code into a string. + +**[Choices](reference/function-choices.md)** – Returns a table of the possible values for a lookup column. + +**[Clock](reference/function-clock-calendar.md)** – Retrieves information about the clock for the current locale. + +**[Coalesce](reference/function-isblank-isempty.md)** – Replaces _blank_ values while leaving non-_blank_ values unchanged. + +**[Concat](reference/function-concatenate.md)** – Concatenates strings in a data source. + +**[Concatenate](reference/function-concatenate.md)** – Concatenates strings. + +**[Count](reference/function-table-counts.md)** – Counts table records that contain numbers. + +**[Cos](reference/function-trig.md)** – Returns the cosine of an angle specified in radians. + +**[Cot](reference/function-trig.md)** – Returns the cotangent of an angle specified in radians. + +**[CountA](reference/function-table-counts.md)** – Counts table records that aren't [empty](reference/function-isblank-isempty.md). + +**[CountIf](reference/function-table-counts.md)** – Counts table records that satisfy a condition. + +**[CountRows](reference/function-table-counts.md)** – Counts table records. + +## D + +**[Date](reference/function-date-time.md)** – Returns a date/time value, based on **Year**, **Month**, and **Day** values. + +**[DateAdd](reference/function-dateadd-datediff.md)** – Adds days, months, quarters, or years to a date/time value. + +**[DateDiff](reference/function-dateadd-datediff.md)** – Subtracts two date values, and shows the result in days, months, quarters, or years. + +**[DateTime](reference/function-date-time.md)** – Returns a date/time value, based on both date and time components. + +**[DateTimeValue](reference/function-datevalue-timevalue.md)** – Converts a date and time string to a date/time value. + +**[DateValue](reference/function-datevalue-timevalue.md)** – Converts a date-only string to a date/time value. + +**[Day](reference/function-datetime-parts.md)** – Retrieves the day portion of a date/time value. + +**[Dec2Hex](reference/function-hexdec.md)** – Convert a number to a hexadecimal text string. + +**[Degrees](reference/function-trig.md)** – Converts radians to degrees. + +**[Distinct](reference/function-distinct.md)** – Summarizes records of a table, removing duplicates. + +## E + +**[EDate](reference/function-edate-eomonth.md)** – Adds or subtracts months to a date, without changing the day of the month. + +**[EncodeUrl](reference/function-encode-decode.md)** – Encodes special characters using URL encoding. + +**[EndsWith](reference/function-startswith.md)** – Checks whether a text string ends with another text string. + +**[EOMonth](reference/function-edate-eomonth.md)** – Adds or subtracts months to a date, returning the last day of that month. + +**[exactin](reference/operators.md#in-and-exactin-operators)** – Checks if a text string is contained within another text string or table, case dependent. Also used to check if a record is in a table. + +**[Exp](reference/function-numericals.md)** – Returns _e_ raised to a power. + +## F + +**[Filter](reference/function-filter-lookup.md)** – Returns a filtered table based on one or more criteria. + +**[Find](reference/function-find.md)** – Checks whether one string appears within another and returns the location. + +**[First](reference/function-first-last.md)** – Returns the first record of a table. + +**[FirstN](reference/function-first-last.md)** – Returns the first set of records (N records) of a table. + +**[ForAll](reference/function-forall.md)** – Calculates values and performs actions for all records of a table. + +## G + +**[GroupBy](reference/function-groupby.md)** – Returns a table with records grouped together. + +## H + +**[HashTags](reference/function-hashtags.md)** – Extracts the hashtags (#strings) from a string. + +**[Hex2Dec](reference/function-hexdec.md)** – Convert a hexadecimal text string to a number. + +**[Hour](reference/function-datetime-parts.md)** – Returns the hour portion of a date/time value. + + +## I + +**[If](reference/function-if.md)** – Returns one value if a condition is true and another value if not. + +**[IfError](reference/function-iferror.md)** – Detects errors and provides an alternative value or takes action. + +**[in](reference/operators.md#in-and-exactin-operators)** – Checks if a text string is contained within another text string or table, case independent. Also used to check if a record is in a table. + +**[Index](reference/function-first-last.md)** – Returns a record from a table based on ordered position. + +**[Int](reference/function-round.md)** – Rounds down to the nearest integer. + +**[IsBlank](reference/function-isblank-isempty.md)** – Checks for a [blank](reference/function-isblank-isempty.md) value. + +**[IsBlankOrError](reference/function-iferror.md)** – Checks for a [blank](reference/function-isblank-isempty.md) value or error. + +**[IsEmpty](reference/function-isblank-isempty.md)** – Checks for an empty table. + +**[IsError](reference/function-iferror.md)** – Checks for an error. + +**[IsMatch](reference/function-ismatch.md)** – Checks a string against a pattern. Regular expressions can be used. + +**[IsNumeric](reference/function-isnumeric.md)** – Checks for a numeric value. + +**[ISOWeekNum](reference/function-weeknum.md)** – Returns the ISO week number of a date/time value. + +**[IsToday](reference/function-now-today-istoday.md)** – Checks whether a date/time value is sometime today in the user's time zone. + +**[IsType](reference/function-astype-istype.md)** – Checks whether a record reference refers to a specific table type. + +**[IsUTCToday](reference/function-now-today-istoday.md)** – Checks whether a date/time value is sometime today in Coordinated Universal Time (UTC). + +## J + +**[JSON](reference/function-json.md)** – Generates a JSON text string for a table, a record, or a value. + +## L + +**[Language](reference/function-language.md)** – Returns the language tag of the current user. + +**[Last](reference/function-first-last.md)** – Returns the last record of a table. + +**[LastN](reference/function-first-last.md)** – Returns the last set of records (N records) of a table. + +**[Left](reference/function-left-mid-right.md)** – Returns the left-most portion of a string. + +**[Len](reference/function-len.md)** – Returns the length of a string. + +**[Ln](reference/function-numericals.md)** – Returns the natural log. + +**[Log](reference/function-numericals.md)** – Returns the logarithm in any base of a number. + +**[LookUp](reference/function-filter-lookup.md)** – Looks up a single record in a table based on one or more criteria. + +**[Lower](reference/function-lower-upper-proper.md)** – Converts letters in a string of text to all lowercase. + +## M + +**[Match](reference/function-ismatch.md)** – Extracts a substring based on a pattern. Regular expressions can be used. + +**[MatchAll](reference/function-ismatch.md)** – Extracts multiple substrings based on a pattern. Regular expressions can be used. + +**[Max](reference/function-aggregates.md)** – Maximum value of a table expression or a set of arguments. + +**[Mid](reference/function-left-mid-right.md)** – Returns the middle portion of a string. + +**[Min](reference/function-aggregates.md)** – Minimum value of a table expression or a set of arguments. + +**[Minute](reference/function-datetime-parts.md)** – Retrieves the minute portion of a date/time value. + +**[Mod](reference/function-mod.md)** – Returns the remainder after a dividend is divided by a divisor. + +**[Month](reference/function-datetime-parts.md)** – Retrieves the month portion of a date/time value. + +## N + +**[Not](reference/function-logicals.md)** – Boolean logic NOT. Returns **true** if its argument is **false**, and returns **false** if its argument is **true**. You can also use the [**!** operator](reference/operators.md). + +**[Now](reference/function-now-today-istoday.md)** – Returns the current date/time value in the user's time zone. + +## O + +**[Or](reference/function-logicals.md)** – Boolean logic OR. Returns **true** if any of its arguments are **true**. You can also use the [**||** operator](reference/operators.md). + +## P + +**[ParseJSON](reference/function-parsejson.md)** – Converts JSON document represented as text to an [Untyped object](untyped-object.md) value. + +**[Pi](reference/function-trig.md)** – Returns the number π. + +**[PlainText](reference/function-encode-decode.md)** – Removes HTML and XML tags from a string. + +**[Power](reference/function-numericals.md)** – Returns a number raised to a power. You can also use the [**^** operator](reference/operators.md). + +**[Proper](reference/function-lower-upper-proper.md)** – Converts the first letter of each word in a string to uppercase, and converts the rest to lowercase. + +## R + +**[Radians](reference/function-trig.md)** – Converts degrees to radians. + +**[Rand](reference/function-rand.md)** – Returns a pseudo-random number between 0 and 1. + +**[RandBetween](reference/function-rand.md)** – Returns a pseudo-random number between two numbers. + +**[Replace](reference/function-replace-substitute.md)** – Replaces part of a string with another string, by starting position of the string. + +**[RGBA](reference/function-colors.md)** – Returns a color value for a set of red, green, blue, and alpha components. + +**[Right](reference/function-left-mid-right.md)** – Returns the right-most portion of a string. + +**[Round](reference/function-round.md)** – Rounds to the closest number. + +**[RoundDown](reference/function-round.md)** – Rounds down to the largest previous number. + +**[RoundUp](reference/function-round.md)** – Rounds up to the smallest next number. + +## S + + +**[Search](reference/function-filter-lookup.md)** – Finds records in a table that contain a string in one of their columns. + +**[Second](reference/function-datetime-parts.md)** – Retrieves the second portion of a date/time value. + +**[Sin](reference/function-trig.md)** – Returns the sine of an angle specified in radians. + +**[Sort](reference/function-sort.md)** – Returns a sorted table based on a formula. + +**[SortByColumns](reference/function-sort.md)** – Returns a sorted table based on one or more columns. + +**[Split](reference/function-split.md)** – Splits a text string into a table of substrings. + +**[Sqrt](reference/function-numericals.md)** – Returns the square root of a number. + +**[StartsWith](reference/function-startswith.md)** – Checks if a text string begins with another text string. + +**[StdevP](reference/function-aggregates.md)** – Returns the standard deviation of its arguments. + +**[Substitute](reference/function-replace-substitute.md)** – Replaces part of a string with another string, by matching strings. + +**[Sum](reference/function-aggregates.md)** – Calculates the sum of a table expression or a set of arguments. + +**[Switch](reference/function-if.md)** – Matches with a set of values and then evaluates a corresponding formula. + +## T + +**[Tan](reference/function-trig.md)** – Returns the tangent of an angle specified in radians. + +**[Text](reference/function-text.md)** – Converts any value and formats a number or date/time value to a string of text. + +**[ThisRecord](reference/operators.md#thisitem-thisrecord-and-as-operators)** – Returns the record for the current item in a record scope function, such as **ForAll**, **With**, and **Sum**. + +**[Time](reference/function-date-time.md)** – Returns a date/time value, based on **Hour**, **Minute**, and **Second** values. + +**[TimeValue](reference/function-datevalue-timevalue.md)** – Converts a time-only string to a date/time value. + +**[TimeZoneOffset](reference/function-dateadd-datediff.md)** – Returns the difference between UTC and the user's local time in minutes. + +**[Today](reference/function-now-today-istoday.md)** – Returns the current date-only value. + +**[Trim](reference/function-trim.md)** – Removes extra spaces from the ends and interior of a string of text. + +**[TrimEnds](reference/function-trim.md)** – Removes extra spaces from the ends of a string of text only. + +**[Trunc](reference/function-round.md)** – Truncates the number to only the integer portion by removing any decimal portion. + +## U + +**[Upper](reference/function-lower-upper-proper.md)** – Converts letters in a string of text to all uppercase. + +**[User](reference/function-user.md)** – Returns information about the current user. + +**[UTCNow](reference/function-now-today-istoday.md)** – Returns the current date/time value in Coordinated Universal Time (UTC). + +**[UTCToday](reference/function-now-today-istoday.md)** – Returns the current date-only value in Coordinated Universal Time (UTC). + +## V + +**[Value](reference/function-value.md)** – Converts a string to a number. + +**[VarP](reference/function-aggregates.md)** – Returns the variance of its arguments. + + +## W + +**[Weekday](reference/function-datetime-parts.md)** – Retrieves the weekday portion of a date/time value. + +**[WeekNum](reference/function-weeknum.md)** – Returns the week number of a date/time value. + +**[With](reference/function-with.md)** – Calculates values and performs actions for a single record, including inline records of named values. + +## Y + +**[Year](reference/function-datetime-parts.md)** – Retrieves the year portion of a date/time value. diff --git a/power-platform/power-fx/formula-reference.md b/power-platform/power-fx/formula-reference.md index d2750b72b3..920e7d3476 100644 --- a/power-platform/power-fx/formula-reference.md +++ b/power-platform/power-fx/formula-reference.md @@ -177,7 +177,7 @@ Other elements include: **[Enable](reference/function-enable-disable.md)** – Enables a signal, such as **[Location](reference/signals.md)** for reading the GPS. -**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in a HTML context. +**[EncodeHTML](reference/function-encode-decode.md)** – Encodes characters that need to be escaped to be used in an HTML context. **[EncodeUrl](reference/function-encode-decode.md)** – Encodes special characters using URL encoding. diff --git a/power-platform/power-fx/global.md b/power-platform/power-fx/global.md index bd707527a5..b28e1944f6 100644 --- a/power-platform/power-fx/global.md +++ b/power-platform/power-fx/global.md @@ -102,7 +102,7 @@ Among other things, you can use **Language** to display translated text for your And then use a formula such as the following to pull translated strings from the table: -```powerapps-dot +```power-fx LookUp( Table1, TextID = "Hello" && (LanguageTag = Left( Language(), 2 ) || IsBlank( LanguageTag ))).LocalizedText ``` diff --git a/power-platform/power-fx/imperative.md b/power-platform/power-fx/imperative.md index 0a1b1973ac..f48c4f2a05 100644 --- a/power-platform/power-fx/imperative.md +++ b/power-platform/power-fx/imperative.md @@ -21,7 +21,7 @@ contributors: Most formulas in Microsoft Power Fx calculate a value. Like an Excel spreadsheet, recalculation happens automatically as values change. For example, you might want to show the value in a **Label** control in red if the value is less than zero or in black otherwise. So you can set the **Color** property of that control to this formula: -```powerapps-dot +```power-fx If( Value(TextBox1.Text) >= 0, Color.Black, Color.Red ) ``` @@ -40,7 +40,7 @@ Because these functions change the state of the app, they can't be automatically ### More than one action Use semicolons to create a list of actions to perform. For example, you might want to update a context variable and then return to the previous screen: -```powerapps-dot +```power-fx UpdateContext( { x: 1 } ); Back() ``` diff --git a/power-platform/power-fx/operators.md b/power-platform/power-fx/operators.md index ba639e2781..530d663eaf 100644 --- a/power-platform/power-fx/operators.md +++ b/power-platform/power-fx/operators.md @@ -85,7 +85,7 @@ A few controls and functions apply formulas to individual records of a table. T For example, in the following **Gallery** control, the **Items** property is set to the **Employees** data source (such as the **Employees** entity included with the [Northwind Traders sample](/powerapps/maker/canvas-apps/northwind-orders-canvas-overview)): -```powerapps-dot +```power-fx Employees ``` @@ -94,7 +94,7 @@ Employees The first item in the gallery is a template that is replicated for each employee. In the template, the formula for the picture uses **ThisItem** to refer to the current item: -```powerapps-dot +```power-fx ThisItem.Picture ``` @@ -103,7 +103,7 @@ ThisItem.Picture Likewise, the formula for the name also uses **ThisItem**: -```powerapps-dot +```power-fx ThisItem.'First Name' & " " & ThisItem.'Last Name' ``` @@ -114,7 +114,7 @@ ThisItem.'First Name' & " " & ThisItem.'Last Name' **ThisRecord** is used in functions that have a [record scope](/powerapps/maker/canvas-apps/working-with-tables). For example, we can use the **Filter** function with our gallery's **Items** property to only show first names that being with *M*: -```powerapps-dot +```power-fx Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) ) ``` @@ -123,7 +123,7 @@ Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) ) **ThisRecord** is optional and implied by using the fields directly, for example, in this case, we could have written: -```powerapps-dot +```power-fx Filter( Employees, StartsWith( 'First Name', "M" ) ) ``` @@ -131,7 +131,7 @@ Although optional, using **ThisRecord** can make formulas easier to understand a Use **ThisRecord** to reference the whole record with **Patch**, **Collect**, and other record scope functions. For example, the following formula sets the status for all inactive employees to active: -```powerapps-dot +```power-fx With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) }, ForAll( InactiveEmployees, Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) ) @@ -143,7 +143,7 @@ Use the **As** operator to name a record in a gallery or record scope function, For example, you can modify the **Items** property of our gallery to use **As** to identify that we are working with an Employee: -```powerapps-dot +```power-fx Employees As Employee ``` @@ -152,13 +152,13 @@ Employees As Employee The formulas for the picture and name are adjusted to use this name for the current record: -```powerapps-dot +```power-fx Employee.Picture ``` > [!div class="mx-imgBorder"] > ![Picture of an employee using the Employee name set with the As operator.](media/operators/as-gallery-as-picture.png) -```powerapps-dot +```power-fx Employee.'First Name' & " " & Employee.'Last Name' ``` > [!div class="mx-imgBorder"] @@ -166,7 +166,7 @@ Employee.'First Name' & " " & Employee.'Last Name' **As** can also be used with record scope functions to replace the default name **ThisRecord**. We can apply this to our previous example to clarify the record we are working with: -```powerapps-dot +```power-fx With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) }, ForAll( InactiveEmployees As Employee, Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) ) @@ -176,7 +176,7 @@ When nesting galleries and record scope functions, **ThisItem** and **ThisRecord For example, this formula produces a chessboard pattern as a text string by nesting two **ForAll** functions: -```powerapps-dot +```power-fx Concat( ForAll( Sequence(8) As Rank, Concat( @@ -204,7 +204,7 @@ Let's unpack what is happening here: A similar example is possible with nested **Gallery** controls instead of **ForAll** functions. Let's start with the vertical gallery for the **Rank**. This gallery control will have an **Items** formula of: -```powerapps-dot +```power-fx Sequence(8) as Rank ``` @@ -213,7 +213,7 @@ Sequence(8) as Rank Within this gallery, we'll place a horizontal gallery for the **File**, that will be replicated for each **Rank**, with an **Items** property of: -```powerapps-dot +```power-fx Sequence(8) as File ``` @@ -222,7 +222,7 @@ Sequence(8) as File And finally, within this gallery, we'll add a **Label** control that will be replicated for each **File** and each **Rank**. We'll size it to fill the entire space and use the **Fill** property to provide the color with this formula: -```powerapps-dot +```power-fx If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige ) ``` @@ -296,7 +296,7 @@ Behind the scenes, a mapping is maintained between the display names seen in for > Logical names are not translated when moving an app between environments. For Dataverse system entity and field names, this should not be a problem as logical names are consistent across environments. But any custom fields, such as **cra3a_customfield** in this example above, may have a different environment prefix (**cra3a** in this case). Display names are preferred as they can be matched against display names in the new environment. ## Name disambiguation -Since display names are not unique, the same display name may appear more than once in the same entity. When this happens, the logical name will be added to the end of the display name in parenthesis for one of more of the conflicting names. Building on the example above, if there was a second field with the same display name of **Custom Field** with a logical name of **cra3a_customfieldalt** then the suggestions would show: +Since display names are not unique, the same display name may appear more than once in the same entity. When this happens, the logical name will be added to the end of the display name in parentheses for one of more of the conflicting names. Building on the example above, if there was a second field with the same display name of **Custom Field** with a logical name of **cra3a_customfieldalt** then the suggestions would show: > [!div class="mx-imgBorder"] > ![Studio formula bar showing the use of the logical name cr5e3_customfieldalt to disambiguate the two versions of "Custom Field."](media/operators/customfield_suggest_alt.png) diff --git a/power-platform/power-fx/reference/function-aggregates.md b/power-platform/power-fx/reference/function-aggregates.md index e5e5397d42..2b6cf7120b 100644 --- a/power-platform/power-fx/reference/function-aggregates.md +++ b/power-platform/power-fx/reference/function-aggregates.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Average, Max, Min, StdevP, Sum, and VarP functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Aggregate functions that summarize a set of numbers. diff --git a/power-platform/power-fx/reference/function-ai.md b/power-platform/power-fx/reference/function-ai.md index 9c70bfbe7c..3aaa5181dc 100644 --- a/power-platform/power-fx/reference/function-ai.md +++ b/power-platform/power-fx/reference/function-ai.md @@ -59,12 +59,12 @@ Here's an example: 1. From the Data pane, select **Add data** and then add the **Environment** data source. 1. From the Insert pane, add a **Button** control. 1. In the formula bar, select the **OnSelect** property and enter the following formula: - ```powerapps-dot + ```power-fx Set( Summary, Environment.AISummarize( {Text: "2, 4, 6, 8, 10, 12, 14, 16"} ).SummarizedText ) ``` 1. From the Insert pane, add a **Text** control. 1. In the formula bar, select the **Text** property and enter the following formula: - ```powerapps-dot + ```power-fx Summary ``` 1. The text box displays an AI generated summary similar to: @@ -108,7 +108,7 @@ Here's an example: To setup the following examples: 1. In the Tree view, select the **App** object and add the following to the **Formulas** property: - ```powerapps-dot + ```power-fx Subject = "Washington is a state that offers a variety of food experiences for locals and visitors alike. Whether you are looking for fresh seafood, farm-to-table produce, ethnic specialties, or gourmet treats, you will find something to satisfy your taste buds in Washington. Washington is famous for its seafood, @@ -117,18 +117,18 @@ To setup the following examples: ``` 1. Create a **Button** control. 1. Create a **Text** control and set its **Text** property to: - ```powerapps-dot + ```power-fx Result ``` ### AIClassify 1. In Canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AIClassify( {Text:Subject, Categories: ["Housing", "Food"]} ).Classification ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AIClassify( Subject, ["Housing", "Food"] ) ) ``` 1. Press the button. The **Text** control displays the result: @@ -139,11 +139,11 @@ To setup the following examples: ### AIExtract 1. In canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AIExtract( {Text:Subject, Entity: "State"} ).ExtractedText ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AIExtract( Subject, "State" ) ) ``` 1. Press the button. The **Text** control displays the result. @@ -151,11 +151,11 @@ To setup the following examples: ### AIReply 1. In canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AIReply( {Text:Subject} ).PreparedResponse ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AIReply( Subject ) ) ``` 1. Press the button. The **Text** control displays a result similar to: @@ -172,11 +172,11 @@ To setup the following examples: ### AISummarize 1. In canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AISummarize( {Text:Subject} ).SummarizedText ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AISummarize( Subject ) ) ``` 1. Press the button. The **Text** control displays a result similar to: @@ -191,11 +191,11 @@ To setup the following examples: ### AISentiment 1. In canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AISentiment( {Text:Subject} ).AnalyzedSentiment ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AISentiment( Subject ) ) ``` 1. Press the button. The **Text** control displays the result: @@ -206,11 +206,11 @@ To setup the following examples: ### AITranslate 1. In canvas apps, set the **OnSelect** property of the **Button** control to: - ```powerapps-dot + ```power-fx Set( Result, Environment.AITranslate( {Text:Subject, Language: "fr"} ).TranslatedText ) ``` For all other products, use this formula: - ```powerapps-dot + ```power-fx Set( Result, AITranslate( Subject, "fr" ) ) ``` 1. Press the button. The **Text** control displays a result similar to: diff --git a/power-platform/power-fx/reference/function-assert.md b/power-platform/power-fx/reference/function-assert.md index db2de29ef4..6df606d338 100644 --- a/power-platform/power-fx/reference/function-assert.md +++ b/power-platform/power-fx/reference/function-assert.md @@ -6,7 +6,7 @@ author: mduelae ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: jorisde search.audienceType: @@ -19,7 +19,7 @@ contributors: # Assert function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages An assertion is a condition or an expression that evaluates to true or false in a test. If the expression returns false, the test case will fail. Assertions are used to validate the expected result of a test or test step, against the actual result and to fail the test if the condition is false. Assertions can be used to validate the state of controls in your app such as label values, list box selections and other control properties. diff --git a/power-platform/power-fx/reference/function-astype-istype.md b/power-platform/power-fx/reference/function-astype-istype.md index 8b106d5b1c..719b0ff80d 100644 --- a/power-platform/power-fx/reference/function-astype-istype.md +++ b/power-platform/power-fx/reference/function-astype-istype.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # AsType and IsType functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Checks a record reference for a specific table type (**IsType**) and treats the reference as a specific type (**AsType**). @@ -48,7 +48,7 @@ The **AsType** function treats a record reference as a specific table type, some Use these functions together to first test the table type of a record and then treat it as a record of that type so that the fields are available: -```powerapps-dot +```power-fx If( IsType( First( Accounts ).Owner, Users ), AsType( First( Accounts ).Owner, Users ).'Full Name', AsType( First( Accounts ).Owner, Teams ).'Team Name' @@ -57,19 +57,19 @@ If( IsType( First( Accounts ).Owner, Users ), You need these functions only if you're accessing the fields of a record reference. For example, you can use record references in the [**Filter**](function-filter-lookup.md) function without **IsType** or **AsType**: -```powerapps-dot +```power-fx Filter( Accounts, Owner = First( Users ) ) ``` Similarly, you can use record references with the [**Patch**](function-patch.md) function: -```powerapps-dot +```power-fx Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } ) ``` If used in a record context, such as within a [**Gallery**](/power-apps/maker/canvas-apps/controls/control-gallery) or [**Edit form**](/power-apps/maker/canvas-apps/controls/control-form-detail) control, you might need to use the [global disambiguation operator](operators.md#disambiguation-operator) to reference the table type. For example, this formula would be effective for a gallery that's displaying a list of contacts where **Company Name** is a **Customer** lookup: -```powerapps-dot +```power-fx If( IsType( ThisItem.'Company Name', Accounts ), AsType( ThisItem.'Company Name', Accounts ).'Account Name', AsType( ThisItem.'Company Name', Contacts ).'Full Name' @@ -128,7 +128,7 @@ If the record reference is _blank_, **IsType** returns FALSE, and **AsType** ret 1. Set the **Text** property of **Subtitle1** to this formula: - ```powerapps-dot + ```power-fx If( IsBlank( ThisItem.'Company Name' ), "--", IsType( ThisItem.'Company Name', Accounts ), "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name', diff --git a/power-platform/power-fx/reference/function-boolean.md b/power-platform/power-fx/reference/function-boolean.md index 73809384d9..de67e14345 100644 --- a/power-platform/power-fx/reference/function-boolean.md +++ b/power-platform/power-fx/reference/function-boolean.md @@ -5,7 +5,7 @@ author: gregli ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: jorisde contributors: @@ -15,7 +15,7 @@ contributors: --- # Boolean function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts a text string, number, or untyped value to a Boolean value. diff --git a/power-platform/power-fx/reference/function-clock-calendar.md b/power-platform/power-fx/reference/function-clock-calendar.md index d99d002336..f2b6f3df45 100644 --- a/power-platform/power-fx/reference/function-clock-calendar.md +++ b/power-platform/power-fx/reference/function-clock-calendar.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Calendar and Clock functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Retrieves calendar and clock information about the current locale. diff --git a/power-platform/power-fx/reference/function-colors.md b/power-platform/power-fx/reference/function-colors.md index 120c58987d..121294f4ae 100644 --- a/power-platform/power-fx/reference/function-colors.md +++ b/power-platform/power-fx/reference/function-colors.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Color enumeration and ColorFade, ColorValue, and RGBA functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Use built-in color values, define custom colors, and use the alpha channel. diff --git a/power-platform/power-fx/reference/function-columnnames-column.md b/power-platform/power-fx/reference/function-columnnames-column.md index 34dfb218f9..a2cd354580 100644 --- a/power-platform/power-fx/reference/function-columnnames-column.md +++ b/power-platform/power-fx/reference/function-columnnames-column.md @@ -45,17 +45,17 @@ Given the following JSON string in a variable named `JsonString` ``` 1. The following formula returns a single-column table with a `Value` column containing the following values: "name", "population": - ```powerapps-dot + ```power-fx ColumnNames( ParseJSON( JsonString ) ) ``` 2. The following formula returns the number `737000`: - ```powerapps-dot + ```power-fx Value( Column( ParseJSON( JsonString ), "population" ) ) ``` 2.1. Notice that this is similar to the `.` operator for [untyped records](../untyped-object.md#record-types), but the column name doesn't have to be known beforehand. 3. The following formula returns the text value `"name: Seattle, population: 737000"`: - ```powerapps-dot + ```power-fx With( { untyped: ParseJSON( JsonString ) }, Concat( @@ -71,11 +71,11 @@ Given the following JSON string in a variable named `JsonString` ``` 1. Attempting to access nonexisting fields returns **Blank()**. The following formula returns `true`: - ```powerapps-dot + ```power-fx IsBlank( Column( ParseJSON( JsonString ), "does not exist" ) ) ``` 2. JSON `null` values are considered **Blank()**. The following formula returns `true`: - ```powerapps-dot + ```power-fx IsBlank( Column( ParseJSON( JsonString ), "empty" ) ) ``` diff --git a/power-platform/power-fx/reference/function-concatenate.md b/power-platform/power-fx/reference/function-concatenate.md index 1c298a951b..5c263b9e72 100644 --- a/power-platform/power-fx/reference/function-concatenate.md +++ b/power-platform/power-fx/reference/function-concatenate.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Concat and Concatenate functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Concatenates individual strings of text and strings in [tables](/power-apps/maker/canvas-apps/working-with-tables). @@ -55,7 +55,7 @@ The examples in this section use these global variables: To create these global variables in an app, insert a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control, and set its **OnSelect** property to this formula: -```powerapps-dot +```power-fx Set( FirstName, "Jane" ); Set( LastName, "Doe" ); Set( Products, Table( diff --git a/power-platform/power-fx/reference/function-concurrent.md b/power-platform/power-fx/reference/function-concurrent.md index 7ac0371de5..3eede07d36 100644 --- a/power-platform/power-fx/reference/function-concurrent.md +++ b/power-platform/power-fx/reference/function-concurrent.md @@ -58,7 +58,7 @@ You can use **Concurrent** only in [behavior formulas](/power-apps/maker/canvas- 2. Add a **[Button](/power-apps/maker/canvas-apps/controls/control-button)** control, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); @@ -81,7 +81,7 @@ You can use **Concurrent** only in [behavior formulas](/power-apps/maker/canvas- 7. Add a second **[Button](/power-apps/maker/canvas-apps/controls/control-button)** control, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), @@ -114,7 +114,7 @@ You can use **Concurrent** only in [behavior formulas](/power-apps/maker/canvas- 3. Add a **Button** control, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Set( StartTime, Value( Now() ) ); Concurrent( Set( FRTrans, MicrosoftTranslator.Translate( TextInput1.Text, "fr" ) ); diff --git a/power-platform/power-fx/reference/function-confirm.md b/power-platform/power-fx/reference/function-confirm.md index 5b73a0d0d6..f3f6190478 100644 --- a/power-platform/power-fx/reference/function-confirm.md +++ b/power-platform/power-fx/reference/function-confirm.md @@ -53,19 +53,19 @@ Use the [**Notify**](function-showerror.md) function to display a message banner ## Examples -```powerapps-dot +```power-fx If( Confirm( "Are you sure?" ), Remove( ThisItem ) ) ``` Simple confirmation dialog, asking the user to confirm deletion of a record before it's removed. Unless the user presses the "OK" button, the record won't be deleted. -```powerapps-dot +```power-fx If( Confirm( "Are you sure?", {Title: "Delete Confirmation"} ), Remove( ThisItem ) ) ``` Same dialog as the last example, but adds Title text. -```powerapps-dot +```power-fx Set( FavColor, If( Confirm( "What is your favorite color?", { ConfirmButton: "Red", CancelButton: "Green" } @@ -78,7 +78,7 @@ Set( FavColor, Asks the user for their favorite color, capturing the result into a global variable. The result that will be placed in **FavColor** will be the text string "Red" or "Green". As the *confirm* choice, "Red" is the default. This only works on platforms that support **ConfirmButton** and **CancelButton** options. -```powerapps-dot +```power-fx Confirm( "There was a problem, please review your order." ) ``` diff --git a/power-platform/power-fx/reference/function-copy.md b/power-platform/power-fx/reference/function-copy.md index ff19b114f0..8b242701de 100644 --- a/power-platform/power-fx/reference/function-copy.md +++ b/power-platform/power-fx/reference/function-copy.md @@ -22,7 +22,7 @@ Copies text to the clipboard on the device where the app is running. The **Copy** function takes any text value and copies it to the clipboard. Regardless of the contents of the text, the clipboard will contain plain text without any special mime type. The function is considered a side-effects function and as a result it can only be used in behavior properties. > [!NOTE] -> The **Copy()** function is limited to the access given to clipboard by the host of the app. As a result, embedded apps scenarios such as Power Apps in SharePoint, embedded apps in Power BI, Teams, etc. don't support **Copy()**. Other embedded scenarios might not support the fuction either. Makers should use **[IfError()](./function-iferror.md)** to ensure the action to copy to clipboard was effective and if not, to properly alert the user that the copy failed. +> The **Copy()** function is limited to the access given to clipboard by the host of the app. As a result, embedded apps scenarios such as Power Apps in SharePoint, embedded apps in Power BI, Teams, etc. don't support **Copy()**. Other embedded scenarios might not support the function either. Makers should use **[IfError()](./function-iferror.md)** to ensure the action to copy to clipboard was effective and if not, to properly alert the user that the copy failed. ## Syntax @@ -45,7 +45,7 @@ When the button is selected, the text from the text input control will be copied The **Copy** function accepts text, which can be itself an expression that manipulates text from your app in some way. For example, an app may have an employee record that contain the employee's first name, last name, and title. A formula could put this information on the clipboard as one piece of text. The following example uses string interpolation to combine the data into one string: -```powerapps-dot +```power-fx Copy( $"{employeeRecord.Name} {employeeRecord.LastName} ({employeeRecord.Title})" ) ``` diff --git a/power-platform/power-fx/reference/function-datasourceinfo.md b/power-platform/power-fx/reference/function-datasourceinfo.md index 520f7cfc5f..acc04bb349 100644 --- a/power-platform/power-fx/reference/function-datasourceinfo.md +++ b/power-platform/power-fx/reference/function-datasourceinfo.md @@ -76,7 +76,7 @@ You can also use **DataSourceInfo** to obtain information about a data source as - _ColumnName_ – Optional. The column name for which to retrieve column-level information. For information at the data-source level, the _ColumnName_ argument can't be used. > [!NOTE] -> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. Afer this version, all apps were automatically updated to the new syntax described in this article. +> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. After this version, all apps were automatically updated to the new syntax described in this article. ## Examples diff --git a/power-platform/power-fx/reference/function-date-time.md b/power-platform/power-fx/reference/function-date-time.md index ca27d81308..b9f1bfd96e 100644 --- a/power-platform/power-fx/reference/function-date-time.md +++ b/power-platform/power-fx/reference/function-date-time.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Date, DateTime, and Time functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts date and time components to a date/time value. @@ -75,7 +75,7 @@ If a user typed this formula would return `3/17/1979`: -```powerapps-dot +```power-fx Date( Value(HireYear.Text), Value(HireMonth.Text), Value(HireDay.Text) ) ``` @@ -88,7 +88,7 @@ If a user typed this formula would return `02:50:24 P`: -```powerapps-dot +```power-fx Text( Time(Value(BirthHour.Text), Value(BirthMinute.Text), Value(BirthSecond.Text)), "hh:mm:ss A/P" @@ -108,7 +108,7 @@ If a user typed this formula would return `10/28/23 01:14:05.231 PM`: -```powerapps-dot +```power-fx Text( DateTime(Value(EclipseYear.Text), Value(EclipseMonth.Text), Value(EclipseDate.Text), Value(EclipseHour.Text), Value(EclipseMinute.Text), diff --git a/power-platform/power-fx/reference/function-dateadd-datediff.md b/power-platform/power-fx/reference/function-dateadd-datediff.md index 2418d919c2..02bd1aa97d 100644 --- a/power-platform/power-fx/reference/function-dateadd-datediff.md +++ b/power-platform/power-fx/reference/function-dateadd-datediff.md @@ -5,7 +5,9 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 + +ms.date: 6/10/2024 + ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +20,12 @@ contributors: # DateAdd, DateDiff, and TimeZoneOffset functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +| Function | Applies to | +| - | - | +| **DateAdd** | :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI | +| **DateDiff** | :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI | +| **TimeZoneOffset** | :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI | + Adds to or finds the difference in date/time values and converts between local time and UTC. diff --git a/power-platform/power-fx/reference/function-datetime-parts.md b/power-platform/power-fx/reference/function-datetime-parts.md index 8330727562..4e287f2f1a 100644 --- a/power-platform/power-fx/reference/function-datetime-parts.md +++ b/power-platform/power-fx/reference/function-datetime-parts.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Day, Month, Year, Hour, Minute, Second, and Weekday functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns individual components of a Date/Time value. @@ -37,7 +37,7 @@ The **Minute** function returns the minute component of a Date/Time value, rangi The **Second** function returns the second component of a Date/Time value, ranging from 0 to 59. -The **Weekday** function returns the weekday of a Date/Time value. By default, the result ranges from 1 (Sunday) to 7 (Saturday). You can specify a different range with an Microsoft Excel Weekday function code or a StartOfWeek enumeration value: +The **Weekday** function returns the weekday of a Date/Time value. By default, the result ranges from 1 (Sunday) to 7 (Saturday). You can specify a different range with a Microsoft Excel Weekday function code or a StartOfWeek enumeration value: | Excel code | StartOfWeek enumeration | Description | | ------------- | -------------------------- | ------------------------------------------------- | diff --git a/power-platform/power-fx/reference/function-datevalue-timevalue.md b/power-platform/power-fx/reference/function-datevalue-timevalue.md index 468282b8ad..011816d580 100644 --- a/power-platform/power-fx/reference/function-datevalue-timevalue.md +++ b/power-platform/power-fx/reference/function-datevalue-timevalue.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # DateValue, TimeValue, and DateTimeValue functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts date, time, or both in a _string_ to a _date/time_ value. @@ -77,7 +77,7 @@ If you type **10/11/2014** into a text-input control named **Startdate**, and th - Convert a date from a string in the user's locale and show the result as a long date. - ```powerapps-dot + ```power-fx Text( DateValue( Startdate.Text ), DateTimeFormat.LongDate ) ``` @@ -88,7 +88,7 @@ If you type **10/11/2014** into a text-input control named **Startdate**, and th - Convert date from a string in the French locale and show the result as a long date. In this example, the months and day of the month are interpreted differently from English. - ```powerapps-dot + ```power-fx Text( DateValue( Startdate.Text, "fr" ), DateTimeFormat.LongDate ) ``` @@ -98,7 +98,7 @@ If you typed **October 20, 2014** instead: - Convert a date from a string in the user's locale and calculate the difference between two days, in days - ```powerapps-dot + ```power-fx DateDiff( DateValue( Startdate.Text ), Today() ) ``` @@ -110,7 +110,7 @@ If you typed **10/11/2014 1:50:24.765 PM** into a text-input control named **Sta - Convert both a date and time string in the current locale. - ```powerapps-dot + ```power-fx Text( DateTimeValue( Start.Text ), DateTimeFormat.LongDateTime ) ``` @@ -121,7 +121,7 @@ If you typed **10/11/2014 1:50:24.765 PM** into a text-input control named **Sta - Convert both a date and time string in the French locale. Month and day of the month are interpreted differently. - ```powerapps-dot + ```power-fx Text( DateTimeValue( Start.Text, "fr"), DateTimeFormat.LongDateTime ) ``` @@ -129,7 +129,7 @@ If you typed **10/11/2014 1:50:24.765 PM** into a text-input control named **Sta - Convert both a date and time string in the user's locale, and display the result with a fractional second. - ```powerapps-dot + ```power-fx Text( DateTimeValue( Start.Text ), "dddd, mmmm dd, yyyy hh:mm:ss.fff AM/PM" ) ``` @@ -141,7 +141,7 @@ If you typed **10/11/2014 1:50:24.765 PM** into a text-input control named **Sta Name a text-input control **FinishedAt**, and set the [Text](/power-apps/maker/canvas-apps/controls/properties-core) property of a label to this formula: -```powerapps-dot +```power-fx If( TimeValue( FinishedAt.Text ) < TimeValue( "5:00:00.000 PM" ), "You made it!", "Too late!" diff --git a/power-platform/power-fx/reference/function-distinct.md b/power-platform/power-fx/reference/function-distinct.md index 5df7903235..dfdb7c1c1a 100644 --- a/power-platform/power-fx/reference/function-distinct.md +++ b/power-platform/power-fx/reference/function-distinct.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Distinct function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Summarizes [records](/power-apps/maker/canvas-apps/working-with-tables#records) of a [table](/power-apps/maker/canvas-apps/working-with-tables), removing duplicates. @@ -42,7 +42,7 @@ The **Distinct** function evaluates a formula across each record of a table and 1. Insert a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control, and set its **OnSelect** property to this formula. - ```powerapps-dot + ```power-fx ClearCollect( CityPopulations, { City: "London", Country: "United Kingdom", Population: 8615000 }, { City: "Berlin", Country: "Germany", Population: 3562000 }, @@ -62,7 +62,7 @@ The **Distinct** function evaluates a formula across each record of a table and 1. Insert a [**Data table**](/power-apps/maker/canvas-apps/controls/control-data-table) control, and set its **Items** property to this formula: - ```powerapps-dot + ```power-fx Distinct( CityPopulations, Country ) ``` @@ -78,7 +78,7 @@ The **Distinct** function evaluates a formula across each record of a table and 1. Insert a [**Label**](/power-apps/maker/canvas-apps/controls/control-text-box) control, and set its **Text** property to the formula: - ```powerapps-dot + ```power-fx First( Sort( Distinct( CityPopulations, Country ), Value ) ).Value ``` diff --git a/power-platform/power-fx/reference/function-download.md b/power-platform/power-fx/reference/function-download.md index bc8859b30d..2513da67a8 100644 --- a/power-platform/power-fx/reference/function-download.md +++ b/power-platform/power-fx/reference/function-download.md @@ -53,7 +53,7 @@ Only on Windows, **Download** returns the location where the file was stored loc The following formula will download the user's guide for the Surface Book, a PDF file: -```powerapps-dot +```power-fx Download( "https://go.microsoft.com/fwlink/?linkid=827480" ) ``` diff --git a/power-platform/power-fx/reference/function-edate-eomonth.md b/power-platform/power-fx/reference/function-edate-eomonth.md index 5bab934551..fa1618ca47 100644 --- a/power-platform/power-fx/reference/function-edate-eomonth.md +++ b/power-platform/power-fx/reference/function-edate-eomonth.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # EDate and EOMonth functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Adds or subtracts months to a Date/Time value, with optional adjustment to the day of the month. diff --git a/power-platform/power-fx/reference/function-encode-decode.md b/power-platform/power-fx/reference/function-encode-decode.md index 0ee8adc91a..5eced2bdd4 100644 --- a/power-platform/power-fx/reference/function-encode-decode.md +++ b/power-platform/power-fx/reference/function-encode-decode.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -20,7 +20,7 @@ contributors: # EncodeHTML, EncodeUrl, and PlainText functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Encodes and decodes strings. diff --git a/power-platform/power-fx/reference/function-filter-lookup.md b/power-platform/power-fx/reference/function-filter-lookup.md index eb1105db1e..ec60955678 100644 --- a/power-platform/power-fx/reference/function-filter-lookup.md +++ b/power-platform/power-fx/reference/function-filter-lookup.md @@ -1,11 +1,11 @@ --- -title: Filter, Search, and LookUp functions (contains video) +title: Filter, Search, and LookUp functions description: Reference information including syntax and examples for the Filter, Search, and LookUp functions. author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 4/11/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # Filter, Search, and LookUp functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Finds one or more [records](/power-apps/maker/canvas-apps/working-with-tables#records) in a [table](/power-apps/maker/canvas-apps/working-with-tables). @@ -62,7 +62,7 @@ The **Search** function finds records in a table that contain a string in one of - _Column(s)_ - Required. The names of columns within _Table_ to search. If _SearchString_ is found within the data of any of these columns as a partial match, the full record will be returned. > [!NOTE] -> In Power Apps prior to version 3.24042, column names for the **Search** function were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. Afer this version, all apps were automatically updated to the new syntax described in this article. +> In Power Apps prior to version 3.24042, column names for the **Search** function were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. After this version, all apps were automatically updated to the new syntax described in this article. **LookUp**(Table*, *Formula* [, *ReductionFormula\* ] ) diff --git a/power-platform/power-fx/reference/function-find.md b/power-platform/power-fx/reference/function-find.md index 451090e980..d3fc335c2d 100644 --- a/power-platform/power-fx/reference/function-find.md +++ b/power-platform/power-fx/reference/function-find.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Find function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Finds a string of text, if it exists, within another string. @@ -42,7 +42,7 @@ The **Find** function looks for a string within another string and is case sensi | Formula | Description | Result | | ------------------------------------------------ | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | | **Find("World", "Hello World")** | Returns the starting position of **"World"**. | 7 | -| **Find("World", "Hello World, Hello World", 10)** | Returns the starting position of the first occurence of **"World"** after the 10th character. | 20 | +| **Find("World", "Hello World, Hello World", 10)** | Returns the starting position of the first occurrence of **"World"** after the 10th character. | 20 | | **Find("Mars", "Hello World")** | Returns blank since the FindString is not in the WithinString | Blank() | diff --git a/power-platform/power-fx/reference/function-first-last.md b/power-platform/power-fx/reference/function-first-last.md index 8137424d28..d92d8774e8 100644 --- a/power-platform/power-fx/reference/function-first-last.md +++ b/power-platform/power-fx/reference/function-first-last.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # First, FirstN, Index, Last, and LastN functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns the first, last, or a specific [record](/power-apps/maker/canvas-apps/working-with-tables#records), or a set of first or last records, from a table. @@ -66,7 +66,7 @@ For the following examples, we'll use the **IceCream** [data source](/power-apps This table can be placed in a collection with this formula (put in the OnStart formula for a Button control and press the button): -```powerapps-dot +```power-fx Collect( IceCream, Table( { Flavor: "Chocolate", Quantity: 100 }, { Flavor: "Vanilla", Quantity: 200 }, { Flavor: "Strawberry", Quantity: 300 }, @@ -80,8 +80,8 @@ Collect( IceCream, Table( { Flavor: "Chocolate", Quantity: 100 }, | **Last( IceCream )** | Returns the last record of **IceCream**. | { Flavor: "Pistachio", Quantity: 200 } | | **Index( IceCream, 3 )** | Returns the third record of **IceCream**. | { Flavor: "Strawberry", Quantity: 300 } | | **FirstN( IceCream, 2 )** | Returns a table containing the first two records of **IceCream**. | ![Table containing the records for Chocolate and Vanilla](media/function-first-last/icecream-first2.png) | -| **LastN( IceCream, 2 )** | Returns a table containt the last two records of **IceCream**. | ![Table containing the records for Mint Chocolate and Pistachio](media/function-first-last/icecream-last2.png) | -| **Index( IceCream, 4 ).Quantity** | Returns the fourth record of the table, and extracts the Quanity column. | 60 | +| **LastN( IceCream, 2 )** | Returns a table containing the last two records of **IceCream**. | ![Table containing the records for Mint Chocolate and Pistachio](media/function-first-last/icecream-last2.png) | +| **Index( IceCream, 4 ).Quantity** | Returns the fourth record of the table, and extracts the Quantity column. | 60 | | **Index( IceCream, 10 )** | Returns an error since the record requested is beyond the bounds of the table. | _Error_ | [!INCLUDE[footer-include](../../includes/footer-banner.md)] diff --git a/power-platform/power-fx/reference/function-forall.md b/power-platform/power-fx/reference/function-forall.md index 1d82f29819..34eaf3d46c 100644 --- a/power-platform/power-fx/reference/function-forall.md +++ b/power-platform/power-fx/reference/function-forall.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # ForAll function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Calculates values and performs actions for all the [records](/power-apps/maker/canvas-apps/working-with-tables#records) in a [table](/power-apps/maker/canvas-apps/working-with-tables). @@ -118,7 +118,7 @@ The following examples use the **Products** [data source](/power-apps/maker/canv To create this data source as a collection, set the **OnSelect** property of a **Button** control to this formula, open Preview mode, and then select the button: -```powerapps-dot +```power-fx ClearCollect( Products, Table( { Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 }, @@ -139,7 +139,7 @@ We can perform this task in a couple of different ways, all of which produce the Don't make that copy! We can use the following formula anywhere we need: -```powerapps-dot +```power-fx // Table shaping on demand, no need for a copy of the result ShowColumns( AddColumns( @@ -161,7 +161,7 @@ And because we didn't make a copy, there is no additional copy of the informatio Another approach is to use the **ForAll** function to replace the table-shaping functions: -```powerapps-dot +```power-fx ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', { @@ -182,7 +182,7 @@ In some situations, a copy of data may be required. You may need to move informa We use the same table shaping as the previous two examples, but we capture the result into a collection: -```powerapps-dot +```power-fx ClearCollect( NewOrder, ShowColumns( AddColumns( @@ -195,7 +195,7 @@ ClearCollect( NewOrder, ) ``` -```powerapps-dot +```power-fx ClearCollect( NewOrder, ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', @@ -214,7 +214,7 @@ ClearCollect( NewOrder, Finally, we can perform the **Collect** directly within the **ForAll**: -```powerapps-dot +```power-fx Clear( NewOrder ); ForAll( Products, If( 'Quantity Requested' > 'Quantity Available', diff --git a/power-platform/power-fx/reference/function-groupby.md b/power-platform/power-fx/reference/function-groupby.md index 0b859ef8e6..af58088d90 100644 --- a/power-platform/power-fx/reference/function-groupby.md +++ b/power-platform/power-fx/reference/function-groupby.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 4/11/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # GroupBy and Ungroup functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Groups and ungroups [records](/power-apps/maker/canvas-apps/working-with-tables#records) of a [table](/power-apps/maker/canvas-apps/working-with-tables). @@ -46,7 +46,7 @@ You can also aggregate results based on a grouping: A table is a value in Power Apps, just like a string or a number. You can specify a table as an argument for a function, and a function can return a table. **GroupBy** and **Ungroup** don't modify a table; instead they take a table as an argument and return a different table. See [working with tables](/power-apps/maker/canvas-apps/working-with-tables) for more details. > [!NOTE] -> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. Afer this version, all apps were automatically updated to the new syntax described in this article. +> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. After this version, all apps were automatically updated to the new syntax described in this article. ## Syntax @@ -68,7 +68,7 @@ A table is a value in Power Apps, just like a string or a number. You can specif 1. Add a button, and set its **[Text](/power-apps/maker/canvas-apps/controls/properties-core)** property so that the button shows **Original**. 2. Set the **[OnSelect](/power-apps/maker/canvas-apps/controls/properties-core)** property of the **Original** button to this formula: -```powerapps-dot +```power-fx ClearCollect( CityPopulations, { City: "London", Country: "United Kingdom", Population: 8615000}, { City: "Berlin", Country: "Germany", Population: 3562000}, diff --git a/power-platform/power-fx/reference/function-guid.md b/power-platform/power-fx/reference/function-guid.md index 431ff86457..eadcffd615 100644 --- a/power-platform/power-fx/reference/function-guid.md +++ b/power-platform/power-fx/reference/function-guid.md @@ -68,25 +68,25 @@ When used in a [behavior formula](/power-apps/maker/canvas-apps/working-with-for To return a GUID value based on the hexadecimal string representation: -```powerapps-dot +```power-fx GUID( "0f8fad5b-d9cb-469f-a165-70867728950e" ) ``` You can also provide the GUID string without hyphens. This formula returns the same GUID value: -```powerapps-dot +```power-fx GUID( "0f8fad5bd9cb469fa16570867728950e" ) ``` Used in context, to set the **Status** field of a new database record to a well-established value: -```powerapps-dot +```power-fx Patch( Products, Default( Products ), { Status: GUID( "F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4" ) } ) ``` You probably don't want to show GUIDs to your users, but GUIDs can help you debug your app. To show the value of the **Status** field in the record that you created in the previous example, set the **Text** property of a **Label** control to this formula: -```powerapps-dot +```power-fx First( Products ).Status ``` @@ -96,7 +96,7 @@ The **Label** control will show **f9168c5e-ceb2-4faa-b6bf-329bf39fa1e4**. 1. Set the **[OnSelect](/power-apps/maker/canvas-apps/controls/properties-core)** property of a **[Button](/power-apps/maker/canvas-apps/controls/control-button)** control to this formula: - ```powerapps-dot + ```power-fx ClearCollect( NewGUIDs, ForAll( Sequence(5), GUID() ) ) ``` @@ -116,7 +116,7 @@ The **Label** control will show **f9168c5e-ceb2-4faa-b6bf-329bf39fa1e4**. To generate a single GUID instead of a table, use this formula: -```powerapps-dot +```power-fx Set( NewGUID, GUID() ) ``` diff --git a/power-platform/power-fx/reference/function-hashtags.md b/power-platform/power-fx/reference/function-hashtags.md index ab3cee5a1d..9180a09d3c 100644 --- a/power-platform/power-fx/reference/function-hashtags.md +++ b/power-platform/power-fx/reference/function-hashtags.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # HashTags function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Extracts the hashtags (#strings) from a string of text. diff --git a/power-platform/power-fx/reference/function-hexdec.md b/power-platform/power-fx/reference/function-hexdec.md index fc3ed661d3..2d5a39c742 100644 --- a/power-platform/power-fx/reference/function-hexdec.md +++ b/power-platform/power-fx/reference/function-hexdec.md @@ -6,7 +6,7 @@ ms.subservice: power-fx ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.author: gregli search.audienceType: - maker @@ -15,7 +15,7 @@ search.app: --- # Dec2Hex and Hex2Dec functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse low-code plug-ins :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse low-code plug-ins :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Convert between hexadecimal text strings and numbers. diff --git a/power-platform/power-fx/reference/function-if.md b/power-platform/power-fx/reference/function-if.md index 95117c0ddc..b21d62d05a 100644 --- a/power-platform/power-fx/reference/function-if.md +++ b/power-platform/power-fx/reference/function-if.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # If and Switch functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Determines whether any condition in a set is true (**If**) or the result of a formula matches any value in a set (**Switch**) and then returns a result or executes an action. diff --git a/power-platform/power-fx/reference/function-iferror.md b/power-platform/power-fx/reference/function-iferror.md index 95f3458c73..2012c44b0e 100644 --- a/power-platform/power-fx/reference/function-iferror.md +++ b/power-platform/power-fx/reference/function-iferror.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # Error, IfError, IsError, IsBlankOrError functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Detects errors and provides an alternative value or takes action. Create a custom error or pass through an error. @@ -32,7 +32,7 @@ The **IfError** function tests values until it finds an error. If the function d Use **IfError** to replace an error with a valid value so that downstream calculations can continue. For example, use this function if user input might result in a division by zero: -```powerapps-dot +```power-fx IfError( 1/x, 0 ) ``` @@ -42,7 +42,7 @@ This formula returns `0` if the value of `x` is zero, as `1/x` will produce an e When [chaining](operators.md) formulas together in [behavior formulas](/power-apps/maker/canvas-apps/working-with-formulas-in-depth), such as: -```powerapps-dot +```power-fx Patch( DS1, ... ); Patch( DS2, ... ) ``` @@ -51,7 +51,7 @@ The second [**Patch**](function-patch.md) function to `DS2` will be attempted ev Use **IfError** to do an action and only continue processing if the action was successful. Applying **IfError** to this example: -```powerapps-dot +```power-fx IfError( Patch( DS1, ... ), Notify( "problem in the first action" ), Patch( DS2, ... ), Notify( "problem in the second action" ) @@ -64,7 +64,7 @@ If supplied, the optional _DefaultResult_ argument is returned if no errors are Building on the last example, the return value from **IfError** can be checked to determine if there were any problems: -```powerapps-dot +```power-fx IfError( Patch( DS1, ... ), Notify( "problem in the first action" ); false, Patch( DS2, ... ), Notify( "problem in the second action" ); false, @@ -83,7 +83,7 @@ In the last example, **Patch** will return a record that isn't compatible with t In the simple example described earlier: -```powerapps-dot +```power-fx IfError( 1/x, 0 ) ``` @@ -93,13 +93,13 @@ Excel will display **#DIV/0!** when a division by zero occurs. Consider **IfError** with the following instead: -```powerapps-dot +```power-fx IfError( 1/x, "#DIV/0!" ) ``` The above formula won't work. The text string `"#DIV/0!"` will be coerced to the type of the first argument to **IfError**, which is a number. The result of **IfError** will be yet another error since the text string can't be coerced. As a fix, convert the first argument to a text string so that **IfError** always returns a text string: -```powerapps-dot +```power-fx IfError( Text( 1/x ), "#DIV/0!" ) ``` @@ -117,17 +117,17 @@ Error records include: | **Message** | Text string | Message about the error, suitable to be displayed to the end user. | | **Source** | Text string | Location in where the error originated, used for reporting. For example, for a formula bound to a control property, this will be in the form _ControlName.PropertyName_. | | **Observed** | Text string | Location in where the error is surfaced to the user, used for reporting. For example, for a formula bound to a control property, this will be in the form _ControlName.PropertyName_. | -| **Details** | Record | Details about the error. At present, details are provided only for network errors. This record includes **HttpStatusCode** whcih contains the HTTP status code and **HttpResponse** which contains the body of the response from the connector or service. | +| **Details** | Record | Details about the error. At present, details are provided only for network errors. This record includes **HttpStatusCode** which contains the HTTP status code and **HttpResponse** which contains the body of the response from the connector or service. | For example, consider the following formula as a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control's **OnSelect** property: -```powerapps-dot +```power-fx Set( a, 1/0 ) ``` And this formula on the **OnSelect** property of a second [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control: -```powerapps-dot +```power-fx IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) ) ``` @@ -213,14 +213,14 @@ A _blank_ record or empty table passed to **Error** results in no error. In this example, dates are validated relative to one another, resulting in an error if there is a problem. -```powerapps-dot +```power-fx If( StartDate > EndDate, Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) ) ``` -In this example, some errors are allowed to pass through while others are supressed and replaced with a value. In the first case, **b** will be in an error state because the **Value** function has an invalid argument. Because this is unexpcted by the formula writer, it is passed through so the user will see it. In the second case, with the same formula, **b** will have the value 0, resulting in a division by zero. In this case, the formula writer may know that this is acceptable for this logic, suppress the error (no banner is shown), and return -1 instead. +In this example, some errors are allowed to pass through while others are suppressed and replaced with a value. In the first case, **b** will be in an error state because the **Value** function has an invalid argument. Because this is unexpected by the formula writer, it is passed through so the user will see it. In the second case, with the same formula, **b** will have the value 0, resulting in a division by zero. In this case, the formula writer may know that this is acceptable for this logic, suppress the error (no banner is shown), and return -1 instead. -```powerapps-dot +```power-fx With( {a: 1, b: Value("a")}, IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) ) // returns an error with Kind = ErrorKind.InvalidArgument @@ -232,7 +232,7 @@ With( {a: 1, b: 0} ) The **AllErrors** table can be filtered like any other table. Used with the **Error** function, expected errors can be removed and the remaining errors retained and reported. For example, if we knew that division by zero was not going to be a problem in a particular context, those errors could be filtered out, leaving all other errors intact with the following formula: -```powerapps-dot +```power-fx Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) ) ``` @@ -244,7 +244,7 @@ Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) ) 1. Set the formula for **Label1**'s **Text** property to: - ```powerapps-dot + ```power-fx IfError( Value( TextInput1.Text ), -1 ) ``` diff --git a/power-platform/power-fx/reference/function-isblank-isempty.md b/power-platform/power-fx/reference/function-isblank-isempty.md index 2c7b2f1e6f..bde2f9fa19 100644 --- a/power-platform/power-fx/reference/function-isblank-isempty.md +++ b/power-platform/power-fx/reference/function-isblank-isempty.md @@ -7,7 +7,7 @@ ms.topic: reference ms.custom: canvas ms.reviewer: mkaur ms.component: canvas -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -20,7 +20,8 @@ contributors: # Blank, Coalesce, IsBlank, and IsEmpty functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages + :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Tests whether a value is blank or a [table](/power-apps/maker/canvas-apps/working-with-tables) contains no [records](/power-apps/maker/canvas-apps/working-with-tables#records), and provides a way to create _blank_ values. @@ -97,7 +98,7 @@ The return value for **IsEmpty** is a Boolean **true** or **false**. 1. Create an app from scratch, and add a **Button** control. 2. Set the button's **[OnSelect](/power-apps/maker/canvas-apps/controls/properties-core)** property to this formula: - ```powerapps-dot + ```power-fx ClearCollect( Cities, { Name: "Seattle", Weather: "Rainy" } ) ``` @@ -111,7 +112,7 @@ The return value for **IsEmpty** is a Boolean **true** or **false**. 5. Click or tap the back arrow to return to the default workspace. 6. Add a **Label** control, and set its **Text** property to this formula: - ```powerapps-dot + ```power-fx IsBlank( First( Cities ).Weather ) ``` @@ -119,7 +120,7 @@ The return value for **IsEmpty** is a Boolean **true** or **false**. 7. Add a second button, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Patch( Cities, First( Cities ), { Weather: Blank() } ) ``` @@ -145,7 +146,7 @@ The return value for **IsEmpty** is a Boolean **true** or **false**. 1. Create an app from scratch, add a text-input control, and name it **FirstName**. 2. Add a label, and set its **[Text](/power-apps/maker/canvas-apps/controls/properties-core)** property to this formula: - ```powerapps-dot + ```power-fx If( IsBlank( FirstName.Text ), "First Name is a required field." ) ``` diff --git a/power-platform/power-fx/reference/function-ismatch.md b/power-platform/power-fx/reference/function-ismatch.md index 3a36a63cd7..406b8af34f 100644 --- a/power-platform/power-fx/reference/function-ismatch.md +++ b/power-platform/power-fx/reference/function-ismatch.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # IsMatch, Match, and MatchAll functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Tests for a match or extracts portions of a text string based on a pattern. @@ -206,7 +206,7 @@ The user types **Hello world** into **TextInput1**. Let's drill into that last example. If you wanted to convert this string to a date/time value using the **[Time](function-date-time.md)** function, you must pass in the named sub-matches individually. To do this, you can use the **[With](function-with.md)** function operating on the record that **Match** returns: -```powerapps-dot +```power-fx With( Match( "PT2H1M39S", "PT(?:(?\d+)H)?(?:(?\d+)M)?(?:(?\d+)S)?" ), Time( Value( hours ), Value( minutes ), Value( seconds ) ) @@ -215,7 +215,7 @@ With( For these examples, add a [Button](/power-apps/maker/canvas-apps/controls/control-button) control, set its **OnSelect** property to this formula, and then select the button: -```powerapps-dot +```power-fx Set( pangram, "The quick brown fox jumps over the lazy dog." ) ``` diff --git a/power-platform/power-fx/reference/function-isnumeric.md b/power-platform/power-fx/reference/function-isnumeric.md index 89b9a356cb..127d1bca5a 100644 --- a/power-platform/power-fx/reference/function-isnumeric.md +++ b/power-platform/power-fx/reference/function-isnumeric.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # IsNumeric function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Tests whether a value is numeric. diff --git a/power-platform/power-fx/reference/function-json.md b/power-platform/power-fx/reference/function-json.md index f6e606f104..8b3f790027 100644 --- a/power-platform/power-fx/reference/function-json.md +++ b/power-platform/power-fx/reference/function-json.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/28/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # JSON function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Generates a JSON text string for a table, a record, or a value. @@ -76,7 +76,7 @@ If a column has both a display name and a logical name, the result contains the 1. Insert a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control, and set its **OnSelect** property to this formula. - ```powerapps-dot + ```power-fx ClearCollect( CityPopulations, { City: "London", Country: "United Kingdom", Population: 8615000 }, { City: "Berlin", Country: "Germany", Population: 3562000 }, @@ -102,7 +102,7 @@ If a column has both a display name and a logical name, the result contains the 1. Insert another button, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Set( CitiesByCountryJSON, JSON( CitiesByCountry ) ) ``` @@ -112,7 +112,7 @@ If a column has both a display name and a logical name, the result contains the 1. Insert a [**Label**](/power-apps/maker/canvas-apps/controls/control-text-box) control, and set its **Text** property to this variable. - ```powerapps-dot + ```power-fx CitiesByCountryJSON ``` @@ -144,7 +144,7 @@ If a column has both a display name and a logical name, the result contains the 1. Change the second button's formula to make the output more readable. - ```powerapps-dot + ```power-fx Set( CitiesByCountryJSON, JSON(CitiesByCountry, JSONFormat.IndentFour )) ``` @@ -204,7 +204,7 @@ If a column has both a display name and a logical name, the result contains the 1. Add a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control, and set its **OnSelect** property to this formula. - ```powerapps-dot + ```power-fx Set( ImageJSON, JSON( SampleImage, JSONFormat.IncludeBinaryData ) ) ``` @@ -212,7 +212,7 @@ If a column has both a display name and a logical name, the result contains the 1. Add a label, and set its **Text** property to this variable. - ```powerapps-dot + ```power-fx ImageJSON ``` @@ -227,13 +227,13 @@ If a column has both a display name and a logical name, the result contains the ### Value tables This formula: -```powerapps-dot +```power-fx JSON( [1,2,3] ) ``` produces the text string **[{"Value":1},{"Value":2},{"Value":3}]**. The same formula with the JSONFormat.FlattenValueTables option: -```powerapps-dot +```power-fx JSON( [1,2,3], JSONFormat.FlattenValueTables ) ``` produces the text string **[1,2,3]**. diff --git a/power-platform/power-fx/reference/function-language.md b/power-platform/power-fx/reference/function-language.md index 88385a7a84..3a5907876a 100644 --- a/power-platform/power-fx/reference/function-language.md +++ b/power-platform/power-fx/reference/function-language.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Language function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns the language tag of the current user. diff --git a/power-platform/power-fx/reference/function-left-mid-right.md b/power-platform/power-fx/reference/function-left-mid-right.md index a63f8b3152..57117bde61 100644 --- a/power-platform/power-fx/reference/function-left-mid-right.md +++ b/power-platform/power-fx/reference/function-left-mid-right.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Left, Mid, and Right functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Extracts the left, middle, or right portion of a string of text. diff --git a/power-platform/power-fx/reference/function-len.md b/power-platform/power-fx/reference/function-len.md index d45df96543..9267c95825 100644 --- a/power-platform/power-fx/reference/function-len.md +++ b/power-platform/power-fx/reference/function-len.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Len function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns the length of a string of text. diff --git a/power-platform/power-fx/reference/function-logicals.md b/power-platform/power-fx/reference/function-logicals.md index c379a895a3..2cf026e563 100644 --- a/power-platform/power-fx/reference/function-logicals.md +++ b/power-platform/power-fx/reference/function-logicals.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # And, Or, and Not functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Boolean logic functions, commonly used to manipulate the results of comparisons and tests. @@ -61,7 +61,7 @@ The examples in this section use these global variables: To create these global variables in an app, insert a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control, and set its **OnSelect** property to this formula: -```powerapps-dot +```power-fx Set( a, false ); Set( b, true ); Set( x, 10 ); Set( y, 100 ); Set( s, "Hello World" ) ``` diff --git a/power-platform/power-fx/reference/function-lower-upper-proper.md b/power-platform/power-fx/reference/function-lower-upper-proper.md index 6955964895..d9a001827a 100644 --- a/power-platform/power-fx/reference/function-lower-upper-proper.md +++ b/power-platform/power-fx/reference/function-lower-upper-proper.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Lower, Upper, and Proper functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts letters in a string of text to all lowercase, all uppercase, or proper case. diff --git a/power-platform/power-fx/reference/function-mod.md b/power-platform/power-fx/reference/function-mod.md index 208e4ed6de..9ac2eb0530 100644 --- a/power-platform/power-fx/reference/function-mod.md +++ b/power-platform/power-fx/reference/function-mod.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Mod function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns the remainder of a division. diff --git a/power-platform/power-fx/reference/function-navigate.md b/power-platform/power-fx/reference/function-navigate.md index ca6bbfbeb8..7fbf760401 100644 --- a/power-platform/power-fx/reference/function-navigate.md +++ b/power-platform/power-fx/reference/function-navigate.md @@ -105,7 +105,7 @@ When the **Back** function runs, the inverse transition is used by default. For 1. On **Screen2**, add a button, and set its **[OnSelect](/power-apps/maker/canvas-apps/controls/properties-core)** property to this formula: - ```powerapps-dot + ```power-fx Navigate( Screen1, ScreenTransition.Cover ) ``` @@ -115,7 +115,7 @@ When the **Back** function runs, the inverse transition is used by default. For 1. On **Screen1**, add a button, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Back() ``` diff --git a/power-platform/power-fx/reference/function-now-today-istoday.md b/power-platform/power-fx/reference/function-now-today-istoday.md index 8411db5e15..7984b590f9 100644 --- a/power-platform/power-fx/reference/function-now-today-istoday.md +++ b/power-platform/power-fx/reference/function-now-today-istoday.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: angieandrews -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Now, Today, IsToday, UTCNow, UTCToday, IsUTCToday functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns the current date and time, and tests whether a date/time value is today. diff --git a/power-platform/power-fx/reference/function-numericals.md b/power-platform/power-fx/reference/function-numericals.md index 7aacb9e200..9ed5d58538 100644 --- a/power-platform/power-fx/reference/function-numericals.md +++ b/power-platform/power-fx/reference/function-numericals.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Abs, Exp, Ln, Power, Log, and Sqrt functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Calculates absolute values, logarithms, square roots, and the results of raising _e_ or any number to specified powers. diff --git a/power-platform/power-fx/reference/function-param.md b/power-platform/power-fx/reference/function-param.md index 733a39f1a0..579226e8b7 100644 --- a/power-platform/power-fx/reference/function-param.md +++ b/power-platform/power-fx/reference/function-param.md @@ -26,7 +26,7 @@ Launches a webpage or a canvas app and provides access to launch parameters. Launches a webpage or a canvas app. The function supports: -- **Address** (required), the URL of the webpage or App URI (app id prefixed with `/providers/Microsoft.PowerApps/apps/`) of the canvas app. +- **Address** (required), the URL of the webpage of the canvas app. - **Parameters** (optional), named values to pass to the webpage or canvas app. In a canvas app, parameters can be read with the [**Param**](#param) function. - **Target** (optional), the browser tab in which to launch the webpage or canvas app. @@ -40,7 +40,7 @@ Launches a webpage or a canvas app. The function supports: Webpages are launched via a URL address. For example: -```powerapps-dot +```power-fx Launch( "https://bing.com" ) ``` @@ -53,16 +53,16 @@ You can launch canvas apps with **Web link** or **App URI** (app id prefixed wit ![App details option.](media/function-param/portal-details.png "App details option") -1. Copy **Web link** or **App ID**. +1. Copy **Web link**. ![App details with web link and app id.](media/function-param/portal-links.png "App details with web link and app id") -The **Web link** can be used in any web page and will launch the canvas app. It can also be used with the **Launch** function. +The **Web link** can be used in any web page and will launch the canvas app. It can also be used with the **Launch** function. For example: -The **App ID** can be used with the **Launch** function, but must be prefixed with `/providers/Microsoft.PowerApps/apps/`. For example: -```powerapps-dot -Launch( "/providers/Microsoft.PowerApps/apps/f342faaf-5f82-4ace-a64b-7c1b01499231" ) +```power-fx +Launch( "https://apps.powerapps.com/e/{environment id}/a/{app id}?tenantId={tenantId}" ) + ``` Native apps on a device can't be launched directly. There may be indirect options available on some platforms, such as a native app installing a custom URL scheme or registering with the web browser to offer an option for specific web sites. @@ -73,13 +73,13 @@ Native apps on a device can't be launched directly. There may be indirect option - An argument list of name value pairs. For example: - ```powerapps-dot + ```power-fx Launch( "https://bing.com/search", "q", "Power Apps", "count", 1 ) ``` - A record of field values. For example: - ```powerapps-dot + ```power-fx Launch( "https://bing.com/search", { q: "Power Apps", count: 1 } ) ``` @@ -210,7 +210,7 @@ The following keywords are reserved (regardless of case) for internal use, and s Update the app ID, screen name, and record number as appropriate. -```powerapps-dot +```power-fx Launch( "/providers/Microsoft.PowerApps/apps/YOUR-APP-ID", { Navigate: "Second Screen", Record: 34 } ) diff --git a/power-platform/power-fx/reference/function-parsejson.md b/power-platform/power-fx/reference/function-parsejson.md index 670c0acb69..5cf0d5ec2e 100644 --- a/power-platform/power-fx/reference/function-parsejson.md +++ b/power-platform/power-fx/reference/function-parsejson.md @@ -6,7 +6,7 @@ author: gregli ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: jorisde search.audienceType: @@ -17,7 +17,7 @@ contributors: --- # ParseJSON function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Interprets a JSON string and returns an [untyped object](../untyped-object.md). @@ -58,11 +58,11 @@ Given the following JSON string in a variable named `JsonString` ``` 1. The following formula returns the text `text value`: - ```powerapps-dot + ```power-fx Text( ParseJSON( JsonString ).parent.child ) ``` 2. The following formula returns the number `567`: - ```powerapps-dot + ```power-fx Value( ParseJSON( JsonString ).number ) ``` @@ -73,7 +73,7 @@ Given the following JSON string in a variable named `JsonString` ``` 1. The following formula returns the text `text value`: - ```powerapps-dot + ```power-fx Text( ParseJSON( JsonString ).'0'.'child-field' ) ``` @@ -84,11 +84,11 @@ Given the following JSON string in a variable named `JsonString` ``` 1. Attempting to access non-existing fields returns **Blank()**. The following formula returns `true`: - ```powerapps-dot + ```power-fx IsBlank( Text( ParseJSON( JsonString ).parent.child ) ) ``` 2. JSON `null` values are considered **Blank()**. The following formula returns `true`: - ```powerapps-dot + ```power-fx IsBlank( Text( ParseJSON( JsonString ).empty ) ) ``` @@ -99,11 +99,11 @@ Given the following JSON string in a variable named `JsonString` ``` 1. Accessing the second number in the array field's single-column table of **untyped object** and converting to a number using **Value()** returns `2`: - ```powerapps-dot + ```power-fx Value( Index( ParseJSON( JsonString ).array, 2 ) ) ``` 2. Converting the single-column table of **untyped object** in the array field, to a single column table of numbers `{ Value: 1 }, { Value: 2 }, { Value: 3 }`: - ```powerapps-dot + ```power-fx ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) ) ``` @@ -118,7 +118,7 @@ Given the following JSON string in a variable named `JsonString` 1. Converting to a typed table of records directly with **ForAll()** can be done by using `ThisRecord.[fieldname]` to access **untyped object** fields and convert them to known types: - ```powerapps-dot + ```power-fx ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) }) ``` @@ -133,7 +133,7 @@ Given the following JSON string in a variable named `JsonString` **Table()** returns a single-column table of **untyped objects** with a single-column Value for number in the array... - ```powerapps-dot + ```power-fx Set(untypedTable, Table( ParseJSON( JsonString ).array ); Value( Index(untypedTable, 1).Value.Value ) @@ -149,7 +149,7 @@ Given the following JSON string in a variable named `JsonString` **Table()** returns a single-column table of **untyped objects** that represents each json object in the array. - ```powerapps-dot + ```power-fx Set(untypedTable, Table( ParseJSON( JsonString ).array ); Text( Index(untypedTable, 1).Value.name ) diff --git a/power-platform/power-fx/reference/function-patch.md b/power-platform/power-fx/reference/function-patch.md index 9492e740d7..405d623f4f 100644 --- a/power-platform/power-fx/reference/function-patch.md +++ b/power-platform/power-fx/reference/function-patch.md @@ -1,5 +1,5 @@ --- -title: Patch function (contains video) +title: Patch function description: Reference information including syntax and examples for the Patch function. author: gregli-msft @@ -60,7 +60,7 @@ The return value of **Patch** is the record that you modified or created. If you For example, you use `Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name"));` and then `MyAccount.'Primary Contact'.'Full Name'`. You can't yield a full name in this case. Instead, to access the fields of a related table, use a separate lookup such as: -```powerapps-dot +```power-fx LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name' ``` @@ -137,7 +137,7 @@ In the example below, consider the first lookup in the `If` statement. `(OrderID Power Apps currently interprets both the left-hand side `OrderId` and right-hand side `A[@OrderId]` as a field in the lookup scope. Therefore, lookup will always find the first row in `[dbo].[Orders1]` because the condition is always true (that is, any row's `OrderId` is equal to itself.) -```powerapps-dot +```power-fx ClearCollect( A, Filter( @@ -182,7 +182,7 @@ When your formula uses multiple scopes with `ForAll`, `Filter`, and `Lookup` on For example, you can use the **As** operator to disambiguate in the example below. -```powerapps-dot +```power-fx ClearCollect( A, Filter( @@ -221,7 +221,7 @@ ForAll( Alternatively, you can use **ThisRecord** for the same purpose. -```powerapps-dot +```power-fx ClearCollect( A, Filter( diff --git a/power-platform/power-fx/reference/function-rand.md b/power-platform/power-fx/reference/function-rand.md index 4994e8c2ca..7f6bc7701f 100644 --- a/power-platform/power-fx/reference/function-rand.md +++ b/power-platform/power-fx/reference/function-rand.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # Rand and RandBetween functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Returns a pseudo-random number. diff --git a/power-platform/power-fx/reference/function-readnfc.md b/power-platform/power-fx/reference/function-readnfc.md index ad778dff84..eff360185c 100644 --- a/power-platform/power-fx/reference/function-readnfc.md +++ b/power-platform/power-fx/reference/function-readnfc.md @@ -77,7 +77,7 @@ Additional **RTD** and **TNF** values may be supported in the future. If mor 1. Set the **OnSelect** property of the button control to this formula that will add an item to our collection: - ```powerapps-dot + ```power-fx With(ReadNFC(), Set(id, Coalesce(Identifier, "No ID")); ForAll(NDEFRecords, Collect(tagRecords, {ID: id, Value: Coalesce(Text, URI)}))) diff --git a/power-platform/power-fx/reference/function-recordinfo.md b/power-platform/power-fx/reference/function-recordinfo.md index ffa36bf1fa..72d7fec28a 100644 --- a/power-platform/power-fx/reference/function-recordinfo.md +++ b/power-platform/power-fx/reference/function-recordinfo.md @@ -53,27 +53,27 @@ The information available: ## Examples -```powerapps-dot +```power-fx RecordInfo( First(Accounts), RecordInfo.EditPermission ) ``` Checks the edit permission for the first record in the `Accounts` data source, which could be in Dataverse, SharePoint, SQL Server, or another tabular data source. If the user has permission to edit this record and modify the `Accounts` data source in general, then **RecordInfo** will return _true_. -```powerapps-dot +```power-fx With( { MyRecord: First( Accounts ) }, RecordInfo( MyRecord, RecordInfo.EditPermission ) ) ``` Captures a record using the [**With**](function-with.md) function and then passes this value to the `RecordInfo` function. The result will be the same as the last example. -```powerapps-dot +```power-fx Collect( MyAccounts, FirstN( Accounts, 10 ) ); RecordInfo( First( MyAccounts ), RecordInfo.EditPermission ) ) ``` Captures the first 10 records from the `Accounts` data source into the `MyAccounts` collection. Since the records originated from a data source, they can be used with the **RecordInfo** function. The result will be the same as the last example. -```powerapps-dot +```power-fx Collect( MyCollection, [ 1, 2, 3 ] ); RecordInfo( First(MyCollection), RecordInfo.DeletePermission ) ``` diff --git a/power-platform/power-fx/reference/function-relate-unrelate.md b/power-platform/power-fx/reference/function-relate-unrelate.md index 14e479ad43..809884b138 100644 --- a/power-platform/power-fx/reference/function-relate-unrelate.md +++ b/power-platform/power-fx/reference/function-relate-unrelate.md @@ -148,7 +148,7 @@ You'll first create a simple app to view and reassign the reservations that are 1. In **Gallery2**, set **NextArrow2**'s **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Relate( ComboBox1.Selected.Reservations, ThisItem ) ``` @@ -172,7 +172,7 @@ At this point, you can move the relationship from one record to another, but you 1. In **Gallery2**, set the **OnSelect** formula for **NextArrow2** to this formula: - ```powerapps-dot + ```power-fx If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) @@ -190,7 +190,7 @@ At this point, you can move the relationship from one record to another, but you 1. Ensure that the duplicate of **Gallery2** is named **Gallery2_1**, and then set its **Items** property to this formula: - ```powerapps-dot + ```power-fx Filter( Reservations, IsBlank( 'Product Reservation' ) ) ``` @@ -254,7 +254,7 @@ You'll create another app that resembles the one you created earlier in this top 1. Set the **Cancel** icon's **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Unrelate( Gallery1.Selected.Contacts, ThisItem ) ``` @@ -274,7 +274,7 @@ You'll create another app that resembles the one you created earlier in this top 1. Insert an **Add** icon, and set its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx Relate( Gallery1.Selected.Contacts, ComboBox1.Selected ) ``` diff --git a/power-platform/power-fx/reference/function-remove-removeif.md b/power-platform/power-fx/reference/function-remove-removeif.md index a378d876db..63de178007 100644 --- a/power-platform/power-fx/reference/function-remove-removeif.md +++ b/power-platform/power-fx/reference/function-remove-removeif.md @@ -47,7 +47,7 @@ You can also use the **[Clear](function-clear-collect-clearcollect.md)** functio When used with a data source, these functions cannot be delegated. Only the first portion of the data source will be retrieved and then the function applied. This may not represent the complete story. A warning may appear at authoring time to remind you of this limitation. #### Delegation support (Experimental) -Delegation support for RemoveIf is now in Experimental Preview (default OFF) for data sources that support it. If a data source doesn't support this feature, Power Apps will send a query to the server and retrieve all data that matches the filter expression up to the maxium of either 500, 2000, or the data page size. Then, it will perform a delete operation on each of those records with individual calls to the server. +Delegation support for RemoveIf is now in Experimental Preview (default OFF) for data sources that support it. If a data source doesn't support this feature, Power Apps will send a query to the server and retrieve all data that matches the filter expression up to the maximum of either 500, 2000, or the data page size. Then, it will perform a delete operation on each of those records with individual calls to the server. ## Syntax @@ -81,7 +81,7 @@ To create a collection with this data: 1. Insert a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control. 1. Set button control's **OnSelect** property to the below formula: - ```powerapps-dot + ```power-fx ClearCollect( IceCream, { ID: 1, Flavor: "Chocolate", Quantity: 100 }, { ID: 2, Flavor: "Vanilla", Quantity: 200 }, @@ -147,7 +147,7 @@ In this example, you'll remove an item by using a _button_ that is outside the g 1. Set the **OnSelect** property for this button control to the following formula: - ```powerapps-dot + ```power-fx Remove( Contacts, Gallery1.Selected ) ``` @@ -185,7 +185,7 @@ If you already have [prepared sample data](#prepare-for-sample-data), skip this 1. Add a [**Button**](/power-apps/maker/canvas-apps/controls/control-button) control to your screen. 1. Set the **OnSelect** property to the following formula: - ```powerapps-dot + ```power-fx ClearCollect( SampleContacts, { 'Full Name': "Yvonne McKay (sample)", 'Primary Email': "someone_a@example.com" }, { 'Full Name': "Susanna Stubberod (sample)", 'Primary Email': "someone_b@example.com" }, @@ -242,7 +242,7 @@ Sample collection is created that you can use in the following example. 1. Select the **Icon** property for icon and set it to the following formula to update the icon image as trash icon: - ```powerapps-dot + ```power-fx Icon.Trash ``` @@ -253,12 +253,12 @@ Sample collection is created that you can use in the following example. 1. Set the **OnSelect** property to the following formula: - ```powerapps-dot + ```power-fx Remove( [@Contacts], ThisItem ) ``` > [!NOTE] - > You must use [global disambiguation operator](operators.md#disambiguation-operator) **[@**...**]** in this example with sample data that uses the _Contacts_ table to avoid conflict with a _One-to-Many_ relationship. If you use data sources such as a list or a SQL Server table, using _global disambgulation operator_ is not required. + > You must use [global disambiguation operator](operators.md#disambiguation-operator) **[@**...**]** in this example with sample data that uses the _Contacts_ table to avoid conflict with a _One-to-Many_ relationship. If you use data sources such as a list or a SQL Server table, using _global disambiguation operator_ is not required. ![OnSelect for trash icon.](media/function-remove-removeif/gallery-onselect.png) diff --git a/power-platform/power-fx/reference/function-replace-substitute.md b/power-platform/power-fx/reference/function-replace-substitute.md index 37358c39e6..77f8a74013 100644 --- a/power-platform/power-fx/reference/function-replace-substitute.md +++ b/power-platform/power-fx/reference/function-replace-substitute.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Replace and Substitute functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Replace a portion of a string of text with another string. diff --git a/power-platform/power-fx/reference/function-round.md b/power-platform/power-fx/reference/function-round.md index e850c3820b..f3ce4b3cc1 100644 --- a/power-platform/power-fx/reference/function-round.md +++ b/power-platform/power-fx/reference/function-round.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Int, Round, RoundDown, RoundUp, and Trunc functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Rounds a number. diff --git a/power-platform/power-fx/reference/function-savedata-loaddata.md b/power-platform/power-fx/reference/function-savedata-loaddata.md index 01b2ee7549..9e564e7174 100644 --- a/power-platform/power-fx/reference/function-savedata-loaddata.md +++ b/power-platform/power-fx/reference/function-savedata-loaddata.md @@ -122,7 +122,7 @@ Following simple example captures and stores the names and pictures of everyday 1. Set the **OnSelect** property of the button control to this formula that will add an item to our collection: - ```powerapps-dot + ```power-fx Collect( MyItems, { Item: TextInput1.Text, Picture: Camera1.Photo } ) ``` @@ -135,7 +135,7 @@ Following simple example captures and stores the names and pictures of everyday 1. Set the **OnSelect** property of the button control to this formula in order to save our collection to the local device: - ```powerapps-dot + ```power-fx SaveData( MyItems, "LocalSavedItems" ) ``` @@ -150,7 +150,7 @@ Following simple example captures and stores the names and pictures of everyday 1. Set the **OnSelect** property of the button control to this formula in order to load our collection from the local device: - ```powerapps-dot + ```power-fx LoadData( MyItems, "LocalSavedItems" ) ``` diff --git a/power-platform/power-fx/reference/function-send-app-notification.md b/power-platform/power-fx/reference/function-send-app-notification.md index b6d8322a31..736f4ded24 100644 --- a/power-platform/power-fx/reference/function-send-app-notification.md +++ b/power-platform/power-fx/reference/function-send-app-notification.md @@ -119,7 +119,7 @@ In addition, an in-app notification can include zero to many actions on the noti The following sends a simple in-app notification to a recipient with a title and body. It doesn't include any actions and utilizes default values for all other parameters. -```powerapps-dot +```power-fx XSendAppNotification( "Welcome", LookUp(Users, 'Primary Email'=""), @@ -130,12 +130,12 @@ XSendAppNotification( -The following example formula can be used with an automated plugin when a a new Task record is created. The formula is designed to send an in-app notification to the owner of the task record. The notification card contains two actions that the owner can take: +The following example formula can be used with an automated plugin when a new Task record is created. The formula is designed to send an in-app notification to the owner of the task record. The notification card contains two actions that the owner can take: - A **side pane** action, opens the new task record in a side pane. - A **Teams chat** action, initiates a Teams chat with the owner of the account record that is assigned as the **Regarding** table record for the new task. It's important to note that this assumes an account record has been selected in the task field. -```powerapps-dot +```power-fx XSendAppNotification( "New task assigned", AsType(ThisRecord.Owner, Users), diff --git a/power-platform/power-fx/reference/function-sequence.md b/power-platform/power-fx/reference/function-sequence.md index f8c0d24498..0961c0588a 100644 --- a/power-platform/power-fx/reference/function-sequence.md +++ b/power-platform/power-fx/reference/function-sequence.md @@ -29,13 +29,13 @@ The **Sequence** function generates a single column table of sequential numbers, Use **Sequence** with the **ForAll** function to iterate a specific number of times. For example, the following formula adds 10 random numbers to the collection **MyRandomNumbers**: -```powerapps-dot +```power-fx ForAll( Sequence( 10 ), Collect( MyRandomNumbers, Rand() ) ) ``` **ForAll** can also be used to transform the value into other data types and return a new table. For example, the following formula returns a table of the next 10 days: -```powerapps-dot +```power-fx ForAll( Sequence( 10 ), DateAdd( Today(), Value, Days ) ) ``` diff --git a/power-platform/power-fx/reference/function-setfocus.md b/power-platform/power-fx/reference/function-setfocus.md index 8d7988fe3b..9977c587af 100644 --- a/power-platform/power-fx/reference/function-setfocus.md +++ b/power-platform/power-fx/reference/function-setfocus.md @@ -45,7 +45,7 @@ The control with focus may be visually different based on the [**FocusedBorderCo - [**Label**](/power-apps/maker/canvas-apps/controls/control-text-box) control - [**TextInput**](/power-apps/maker/canvas-apps/controls/control-text-input) control -You cannot set the focus to controls that are within a [**Gallery**](/power-apps/maker/canvas-apps/controls/control-gallery) control, [**Edit form**](/power-apps/maker/canvas-apps/controls/control-form-detail) control, or [Component](/power-apps/maker/canvas-apps/create-component). **SetFocus** can be used with a control in a scrollbale screen. +You cannot set the focus to controls that are within a [**Gallery**](/power-apps/maker/canvas-apps/controls/control-gallery) control, [**Edit form**](/power-apps/maker/canvas-apps/controls/control-form-detail) control, or [Component](/power-apps/maker/canvas-apps/create-component). **SetFocus** can be used with a control in a scrollable screen. You cannot set the focus to controls that are within a [**Container**](/power-apps/maker/canvas-apps/controls/control-container) control. @@ -67,7 +67,7 @@ You can use **SetFocus** only in [behavior formulas](/power-apps/maker/canvas-ap ### Focus on a newly exposed or enabled input control -Many shopping carts allow the customer to use the shipping address as the billing address, alleviating the need to enter the same information twice. If a different billing address is desired, the billing address text input boxes are enabled, and it is helpful to guide the customer to the these newly enabled controls for faster data entry. +Many shopping carts allow the customer to use the shipping address as the billing address, alleviating the need to enter the same information twice. If a different billing address is desired, the billing address text input boxes are enabled, and it is helpful to guide the customer to these newly enabled controls for faster data entry. ![Animation of choosing to use a custom Billing address, with focus moved to the Billing name input control as a result,turning off the automatic sync with the Shipping addresss.](media/function-setfocus/shipping-billing.gif) @@ -108,7 +108,7 @@ When validating a form, it can be helpful to not only display a message if there In this animation, the validation button is repeatedly pressed until all the fields have been filled in properly. Note that the mouse pointer doesn't move down from the top of the screen. Instead the **SetFocus** function hsa moved the input focus to the control that requires attention with this formula: -```powerapps-dot +```power-fx If( IsBlank( Name ), Notify( "Name requires a value", Error ); SetFocus( Name ), IsBlank( Street1 ), @@ -140,7 +140,7 @@ To create this example: ### Focus when displaying a screen > [!NOTE] -> Although this example appears to be an **Edit form** control, unforutnatley **SetFocus** is not yet supported by that control. Instead, this example uses a scrollable screen to host the input controls. +> Although this example appears to be an **Edit form** control, unfortunately **SetFocus** is not yet supported by that control. Instead, this example uses a scrollable screen to host the input controls. Similar to exposing an input control, when displaying a data entry screen it is helpful to focus the first input control for faster data entry. @@ -150,7 +150,7 @@ In this animation, the data entry screen on the left is not using **SetFocus**. On the right we have exactly the same app with the **OnVisible** property of the data entry screen set to this formula: -```powerapps-dot +```power-fx SetFocus( Name ) ``` diff --git a/power-platform/power-fx/reference/function-showerror.md b/power-platform/power-fx/reference/function-showerror.md index 75b37e084d..84e09c179a 100644 --- a/power-platform/power-fx/reference/function-showerror.md +++ b/power-platform/power-fx/reference/function-showerror.md @@ -71,7 +71,7 @@ Note: This function was previously named **ShowError** when it could only displa 2. Set the **OnSelect** property of the **Button** to the formula: - ```powerapps-dot + ```power-fx Notify( "Hello, World" ) ``` @@ -83,7 +83,7 @@ Note: This function was previously named **ShowError** when it could only displa 4. Change the type of message to indicate an error. Add a second argument to our formula: - ```powerapps-dot + ```power-fx Notify( "Hello, World", NotificationType.Error ) ``` @@ -95,7 +95,7 @@ Note: This function was previously named **ShowError** when it could only displa 6. Change the type of message to indicate a warning. Change the second argument in our formula: - ```powerapps-dot + ```power-fx Notify( "Hello, World", NotificationType.Warning, 4000 ) ``` @@ -107,7 +107,7 @@ Note: This function was previously named **ShowError** when it could only displa 8. Change the type of message to indicate success. Change the second argument in our formula: - ```powerapps-dot + ```power-fx Notify( "Hello, World", NotificationType.Success, 0 ) ``` diff --git a/power-platform/power-fx/reference/function-sort.md b/power-platform/power-fx/reference/function-sort.md index fae797a4de..fc0dc67d1e 100644 --- a/power-platform/power-fx/reference/function-sort.md +++ b/power-platform/power-fx/reference/function-sort.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Sort and SortByColumns functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Sorts a [table](/power-apps/maker/canvas-apps/working-with-tables). diff --git a/power-platform/power-fx/reference/function-split.md b/power-platform/power-fx/reference/function-split.md index 41314515f9..acee6cb1b6 100644 --- a/power-platform/power-fx/reference/function-split.md +++ b/power-platform/power-fx/reference/function-split.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Split function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Splits a text string into a table of substrings. diff --git a/power-platform/power-fx/reference/function-startswith.md b/power-platform/power-fx/reference/function-startswith.md index 92fc684bd4..b9840516ca 100644 --- a/power-platform/power-fx/reference/function-startswith.md +++ b/power-platform/power-fx/reference/function-startswith.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # EndsWith and StartsWith functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Tests whether a text string begins or ends another text string. diff --git a/power-platform/power-fx/reference/function-table-counts.md b/power-platform/power-fx/reference/function-table-counts.md index 457befc8ed..f515593415 100644 --- a/power-platform/power-fx/reference/function-table-counts.md +++ b/power-platform/power-fx/reference/function-table-counts.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Count, CountA, CountIf, and CountRows functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Counts all [records](/power-apps/maker/canvas-apps/working-with-tables#records) in a [table](/power-apps/maker/canvas-apps/working-with-tables), or counts all records that satisfy a condition. diff --git a/power-platform/power-fx/reference/function-table-shaping.md b/power-platform/power-fx/reference/function-table-shaping.md index b12c272792..8658b588e7 100644 --- a/power-platform/power-fx/reference/function-table-shaping.md +++ b/power-platform/power-fx/reference/function-table-shaping.md @@ -57,7 +57,7 @@ For all these functions, the result is a new table with the transform applied. T The arguments to these functions support delegation. For example, a **Filter** function used as an argument to pull in related records searches through all listings, even if the **'[dbo].[AllListings]'** data source contains a million rows: -```powerapps-dot +```power-fx AddColumns( RealEstateAgents, Listings, Filter( '[dbo].[AllListings]', ListingAgentName = AgentName ) @@ -69,7 +69,7 @@ However, the output of these functions is subject to the [non-delegation record If you use **AddColumns** in this manner, **Filter** must make separate calls to the data source for each of those first records in **RealEstateAgents**, which causes lots of network chatter. If **[dbo](.[AllListings]** is small enough and doesn't change often. You can call the **Collect** function in [**OnStart**](signals.md#app) to cache the data source in your app when it starts. As an alternative, you could restructure your app so that you pull in the related records only when the user asks for them. > [!NOTE] -> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. Afer this version, all apps were automatically updated to the new syntax described in this article. +> In Power Apps prior to version 3.24042, column names were specified with a text string using double quotes, and if connected to a data source they also needed to be logical names. For example, the logical name **"cr43e_name"** with double quotes was used instead of the display name **Name** without quotes. For SharePoint and Excel data sources that contain column names with spaces, each space was specified with **"\_x0020\_"**, for example **"Column Name"** as **"Column_x0020_Name"**. After this version, all apps were automatically updated to the new syntax described in this article. ## Syntax @@ -118,7 +118,7 @@ Let's try some of the examples from earlier in this article. 1. Create a collection by adding a **[Button](/power-apps/maker/canvas-apps/controls/control-button)** control and setting its **OnSelect** property to this formula: - ```powerapps-dot + ```power-fx ClearCollect( IceCreamSales, Table( { Flavor: "Strawberry", UnitPrice: 1.99, QuantitySold: 20 }, @@ -132,7 +132,7 @@ Let's try some of the examples from earlier in this article. 1. Add a second **Button** control, set its **OnSelect** property to this formula, and then run it: - ```powerapps-dot + ```power-fx ClearCollect( FirstExample, AddColumns( IceCreamSales, Revenue, UnitPrice * QuantitySold ) ) diff --git a/power-platform/power-fx/reference/function-table.md b/power-platform/power-fx/reference/function-table.md index 86da56b0fb..446c6eaf4e 100644 --- a/power-platform/power-fx/reference/function-table.md +++ b/power-platform/power-fx/reference/function-table.md @@ -46,21 +46,21 @@ You can also create a single-column table with the **[ value1, value2, ... ]** s ## Examples - Set the **[Items](/power-apps/maker/canvas-apps/controls/properties-core)** property of a listbox to this formula: - ```powerapps-dot + ```power-fx Table( {Color: "red"}, {Color: "green"}, {Color: "blue" } ) ``` The listbox shows each color as an option. - Add a text gallery, and set its **[Items](/power-apps/maker/canvas-apps/controls/properties-core)** property to this function:
- ```powerapps-dot + ```power-fx Table( {Item: "Violin123", Location:"France", Owner:"Fabrikam"}, {Item:"Violin456", Location:"Chile"} ) ``` The gallery shows two records, both of which contain the name and location of an item. Only one record contains the name of the owner. - This formula combines standard sizes with extended sizes into a single table - ```powerapps-dot + ```power-fx Table( { Value: "XS" }, [ "S", "M", "L" ], { Value: "XL" } ) ``` diff --git a/power-platform/power-fx/reference/function-text.md b/power-platform/power-fx/reference/function-text.md index c011af6f5a..501a7176e9 100644 --- a/power-platform/power-fx/reference/function-text.md +++ b/power-platform/power-fx/reference/function-text.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli contributors: @@ -16,7 +16,7 @@ contributors: # Text function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts any value and formats a number or date/time value to a string of text. diff --git a/power-platform/power-fx/reference/function-trace.md b/power-platform/power-fx/reference/function-trace.md index 401a1c7c14..6c4608c2e8 100644 --- a/power-platform/power-fx/reference/function-trace.md +++ b/power-platform/power-fx/reference/function-trace.md @@ -40,7 +40,7 @@ When used with [Test Studio](/power-apps/maker/canvas-apps/test-studio), **Trace 1. Create a button control in Power Apps Studio. 2. Set the **OnSelect** formula to the formula: - ```powerapps-dot + ```power-fx Set( x, x+1 ); Trace( x ); ``` diff --git a/power-platform/power-fx/reference/function-trig.md b/power-platform/power-fx/reference/function-trig.md index 057344be91..bd9623809f 100644 --- a/power-platform/power-fx/reference/function-trig.md +++ b/power-platform/power-fx/reference/function-trig.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Acos, Acot, Asin, Atan, Atan2, Cos, Cot, Degrees, Pi, Radians, Sin, and Tan functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Calculates trigonometric values. diff --git a/power-platform/power-fx/reference/function-trim.md b/power-platform/power-fx/reference/function-trim.md index f0345a1eea..7a67ef21a4 100644 --- a/power-platform/power-fx/reference/function-trim.md +++ b/power-platform/power-fx/reference/function-trim.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # Trim and TrimEnds functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Removes extra spaces from a string of text. diff --git a/power-platform/power-fx/reference/function-update-updateif.md b/power-platform/power-fx/reference/function-update-updateif.md index dba16e1101..fd5c6391f3 100644 --- a/power-platform/power-fx/reference/function-update-updateif.md +++ b/power-platform/power-fx/reference/function-update-updateif.md @@ -48,7 +48,7 @@ Both **Update** and **UpdateIf** return the modified data source as a [table](/p When used with a data source, these functions cannot be delegated. Only the first portion of the data source will be retrieved and then the function applied. This may not represent the complete story. A warning may appear at authoring time to remind you of this limitation. #### Delegation support (Experimental) -Delegation support for UpdateIf and RemoveIf is now in Experimental Preview (default OFF) for data sources that support it. If a data source does not support this feature, Power Apps will now send a query to the server and retrieve all data that matches the filter expression up to the maxium of either 500, 2000, or the data page size. Then, it will update those records and send each back to the server to be updated. +Delegation support for UpdateIf and RemoveIf is now in Experimental Preview (default OFF) for data sources that support it. If a data source does not support this feature, Power Apps will now send a query to the server and retrieve all data that matches the filter expression up to the maximum of either 500, 2000, or the data page size. Then, it will update those records and send each back to the server to be updated. ## Syntax diff --git a/power-platform/power-fx/reference/function-user.md b/power-platform/power-fx/reference/function-user.md index 9051af7f10..767b3b9d41 100644 --- a/power-platform/power-fx/reference/function-user.md +++ b/power-platform/power-fx/reference/function-user.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # User function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Returns information about the current user. diff --git a/power-platform/power-fx/reference/function-value.md b/power-platform/power-fx/reference/function-value.md index fec45a709f..f44ff1afd1 100644 --- a/power-platform/power-fx/reference/function-value.md +++ b/power-platform/power-fx/reference/function-value.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli contributors: @@ -16,7 +16,7 @@ contributors: # Decimal, Float, and Value functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Converts a string of text or other types to a number. diff --git a/power-platform/power-fx/reference/function-weeknum.md b/power-platform/power-fx/reference/function-weeknum.md index 7445dc7464..8a92f48361 100644 --- a/power-platform/power-fx/reference/function-weeknum.md +++ b/power-platform/power-fx/reference/function-weeknum.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.author: gregli search.audienceType: - maker @@ -17,9 +17,9 @@ contributors: --- # WeekNum and ISOWeekNum functions -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Dataverse formula columns -Returns the week number of a specific date. +Returns the week number of a specific date. ## Description diff --git a/power-platform/power-fx/reference/function-with.md b/power-platform/power-fx/reference/function-with.md index 1cecaeb1a2..02de1d93b8 100644 --- a/power-platform/power-fx/reference/function-with.md +++ b/power-platform/power-fx/reference/function-with.md @@ -6,7 +6,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -19,7 +19,7 @@ contributors: # With function -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Desktop flows :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Platform CLI Calculates values and performs actions for a single [record](/power-apps/maker/canvas-apps/working-with-tables#records), including inline records of named values. @@ -46,7 +46,7 @@ If the _Record_ argument to **With** is an error, that error will be returned by ### Simple named values -```powerapps-dot +```power-fx With( { radius: 10, height: 15 }, Pi() * (radius*radius) * height @@ -60,7 +60,7 @@ This example uses a record of named values to calculate the volume of a cylinder ![Interest calculator using With function.](media/function-with/interest-calculator.gif) -```powerapps-dot +```power-fx With( { AnnualRate: RateSlider/8/100, // slider moves in 1/8th increments and convert to decimal Amount: AmountSlider*10000, // slider moves by 10,000 increment Years: YearsSlider, // slider moves in single year increments, no adjustment required @@ -96,7 +96,7 @@ Here are the detailed instructions for creating this app: ### Primary key returned from Patch -```powerapps-dot +```power-fx With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),       ForAll( NewOrderDetails, Patch( OrderDetails, Defaults( OrderDetails ), @@ -112,7 +112,7 @@ This example adds a record to the **Order** table in SQL Server. It then uses th ### Extracted values with a regular expression -```powerapps-dot +```power-fx With( Match( "PT2H1M39S", "PT(?:(?\d+)H)?(?:(?\d+)M)?(?:(?\d+)S)?" ), Time( Value( hours ), Value( minutes ), Value( seconds ) ) diff --git a/power-platform/power-fx/reference/object-app.md b/power-platform/power-fx/reference/object-app.md index dd3f8e4ca6..920e7927a8 100644 --- a/power-platform/power-fx/reference/object-app.md +++ b/power-platform/power-fx/reference/object-app.md @@ -90,7 +90,7 @@ In a browser, the confirmation dialog box might appear with a generic message fr 1. Set the **App** object's **ConfirmExit** property to this expression: - ```powerapps-dot + ```power-fx AccountForm.Unsaved Or ContactForm.Unsaved ``` @@ -101,7 +101,7 @@ In a browser, the confirmation dialog box might appear with a generic message fr 1. Set the **App** object's **ConfirmExitMessage** property to this formula: - ```powerapps-dot + ```power-fx If( AccountsForm.Unsaved, "Accounts form has unsaved changes.", "Contacts form has unsaved changes." @@ -117,7 +117,7 @@ In a browser, the confirmation dialog box might appear with a generic message fr To export system-generated application logs to [Application Insights](/power-apps/maker/canvas-apps/application-insights), you need to set up the **Instrumentation Key** for your canvas app. -1. Open your app for [editing](/power-apps/maker/canvas-apps/edit-app) in Power Apps Stuido. +1. Open your app for [editing](/power-apps/maker/canvas-apps/edit-app) in Power Apps Studio. 2. Select the **App** object in the left navigation tree view. 3. Enter the **Instrumentation Key** in the properties pane. @@ -129,7 +129,7 @@ Use named formulas, in the **Formulas** property, to define a formula that can b In Power Apps, control properties are driven by formulas. For example, to set the background color consistently across an app, you might set the **Fill** property for each to a common formula: -```powerapps-dot +```power-fx Label1.Fill: ColorValue( Param( "BackgroundColor" ) ) Label2.Fill: ColorValue( Param( "BackgroundColor" ) ) Label3.Fill: ColorValue( Param( "BackgroundColor" ) ) @@ -137,7 +137,7 @@ Label3.Fill: ColorValue( Param( "BackgroundColor" ) ) With so many places where this formula may appear, it becomes tedious and error prone to update them all if a change is needed. Instead, you can create a global variable in **OnStart** to set the color once, and then reuse the value throughout the app: -```powerapps-dot +```power-fx App.OnStart: Set( BGColor, ColorValue( Param( "BackgroundColor" ) ) ) Label1.Fill: BGColor Label2.Fill: BGColor @@ -148,7 +148,7 @@ While this method is better, it also depends on **OnStart** running before the v Named formulas provide an alternative. Just as we commonly write *control-property = expression*, we can instead write *name = expression* and then reuse *name* throughout our app to replace *expression*. The definitions of these formulas are done in the **Formulas** property: -```powerapps-dot +```power-fx App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) ); Label1.Fill: BGColor Label2.Fill: BGColor @@ -165,7 +165,7 @@ The advantages of using named formulas include: Named formulas are defined, one after another in the **Formulas** property, each ending with a semi-colon. The type of the formula is inferred from the types of the expression, which is based on the types of the elements within the expression and how they're used together. For example, these named formulas retrieve useful information about the current user from Dataverse: -```powerapps-dot +```power-fx UserEmail = User().Email; UserInfo = LookUp( Users, 'Primary Email' = User().Email ); UserTitle = UserInfo.Title; @@ -198,7 +198,7 @@ Although each error is processed individually by **OnError**, the default error Consider a **Label** control and **Slider** control that are bound together through the formula: -```powerapps-dot +```power-fx Label1.Text = 1/Slider1.Value ``` @@ -220,7 +220,7 @@ If necessary, we could also modify the formula to `Label1.Text = IfError( 1/Slid If we add an **OnError** handler, it will have no impact before step 5, but it can impact how the error is reported: -```powerapps-dot +```power-fx Trace( $"Error {FirstError.Message} in {FirstError.Source}" ) ``` @@ -232,7 +232,7 @@ With this in place, from the app user's perspective, there won't be any error. B If we also wanted to have the same default error banner displayed in addition to the trace, we can rethrow the error with the **Error** function after the **Trace** call just as it did if the **Trace** wasn't there: -```powerapps-dot +```power-fx Trace( $"Error {FirstError.Message} in {FirstError.Source}" ); Error( FirstError ) ``` @@ -285,22 +285,22 @@ After changing **StartScreen** in Studio, test it by hovering over the **App** o ### Examples -```powerapps-dot +```power-fx Screen9 ``` Indicates that `Screen9` should be shown first whenever the app starts. -```powerapps-dot +```power-fx If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen ) ``` Checks if the Param "admin-mode" has been set by the user and uses it to decide if the HomeScreen or AdminScreen should be displayed first. -```powerapps-dot +```power-fx If( LookUp( Attendees, User = User().Email ).Staff, StaffPortal, HomeScreen ) ``` Checks if an attendee to a conference is a staff member and directs them to the proper screen on startup. -```powerapps-dot +```power-fx IfError( If( CustomConnector.APICall() = "Forest", ForestScreen, OceanScreen diff --git a/power-platform/power-fx/reference/object-host.md b/power-platform/power-fx/reference/object-host.md index 35dc4f94e2..03890c4c3f 100644 --- a/power-platform/power-fx/reference/object-host.md +++ b/power-platform/power-fx/reference/object-host.md @@ -45,7 +45,7 @@ For example, a browser user agent string might be: - Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.78 > [!NOTE] -> If you're running Power Apps in a native app or using the [the wrap](/power-apps/maker/common/wrap/wrap-how-to) feature in Power Apps, the app is presented via a browser control, which supplies a user agent string. +> If you're running Power Apps in a native app or using the [wrap](/power-apps/maker/common/wrap/wrap-how-to) feature in Power Apps, the app is presented via a browser control, which supplies a user agent string. ## OSType property @@ -65,7 +65,7 @@ The **OSType** property provides the name of the operating system where the app The **OSType** text can be used in any formula, such as showing it in a label's text property: -```powerapps-dot +```power-fx Label1.Text: "You're running " & Host.OSType ``` @@ -75,7 +75,7 @@ The **SessionID** property returns the GUID that identifies the current session. > [!NOTE] > In embedded scenarios such as Power Apps in Power BI, the SessionID property returns the underlying Power Apps session ID, not the Power BI session ID. -```powerapps-dot +```power-fx Label1.Text: $"Provide session ID { Host.SessionID } to your administrator." ``` @@ -86,7 +86,7 @@ The **TenantID** property provides the Globally Unique Identifier (GUID) that sp > [!NOTE] > Similar to **SessionID**, in embedded scenarios such as Power Apps in Power BI, the tenant ID is the tenant used for the Power Apps session authentication. -```powerapps-dot +```power-fx Label1.Text: Host.TenantID ``` @@ -97,7 +97,7 @@ The **Version** property provides the identification and version number of the P > [!NOTE] > The **Version** property is always an empty string when working in Power Apps Studio. -```powerapps-dot +```power-fx Label1.Text: Host.Version ``` ## OfflineEnabled property @@ -107,7 +107,7 @@ The **OfflineEnabled** property provides the runtime mode of the app in the Powe > [!NOTE] > Even if a canvas app doesn't function without network connectivity, the **OfflineEnabled** property remains true in Power Apps Studio for canvas apps that have been enabled for offline use. -```powerapps-dot +```power-fx Label1.Text: Host.OfflineEnabled ``` ## Examples diff --git a/power-platform/power-fx/reference/operators.md b/power-platform/power-fx/reference/operators.md index aad02992a6..b326f7f4e4 100644 --- a/power-platform/power-fx/reference/operators.md +++ b/power-platform/power-fx/reference/operators.md @@ -5,7 +5,7 @@ author: gregli-msft ms.topic: reference ms.custom: canvas ms.reviewer: mkaur -ms.date: 3/22/2024 +ms.date: 6/10/2024 ms.subservice: power-fx ms.author: gregli search.audienceType: @@ -18,7 +18,7 @@ contributors: # Operators and Identifiers in Power Apps -**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps +**Applies to:** :::image type="icon" source="media/yes-icon.svg" border="false"::: Canvas apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Model-driven apps :::image type="icon" source="media/yes-icon.svg" border="false"::: Power Pages Some of these operators are dependent on the language of the author. For more information about language support in canvas apps, see [Global apps](/power-apps/maker/canvas-apps/global-apps). @@ -92,7 +92,7 @@ A few controls and functions apply formulas to individual records of a table. To For example, in the following **Gallery** control, the **Items** property is set to the **Employees** data source (such as the **Employees** table included with the [Northwind Traders sample](/power-apps/maker/canvas-apps/northwind-orders-canvas-overview)): -```powerapps-dot +```power-fx Employees ``` @@ -101,7 +101,7 @@ Employees The first item in the gallery is a template that is replicated for each employee. In the template, the formula for the picture uses **ThisItem** to refer to the current item: -```powerapps-dot +```power-fx ThisItem.Picture ``` @@ -110,7 +110,7 @@ ThisItem.Picture Likewise, the formula for the name also uses **ThisItem**: -```powerapps-dot +```power-fx ThisItem.'First Name' & " " & ThisItem.'Last Name' ``` @@ -121,7 +121,7 @@ ThisItem.'First Name' & " " & ThisItem.'Last Name' **ThisRecord** is used in functions that have a [record scope](/power-apps/maker/canvas-apps/working-with-tables#record-scope). For example, we can use the **Filter** function with our gallery's **Items** property to only show first names that being with _M_: -```powerapps-dot +```power-fx Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) ) ``` @@ -130,7 +130,7 @@ Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) ) **ThisRecord** is optional and implied by using the fields directly, for example, in this case, we could have written: -```powerapps-dot +```power-fx Filter( Employees, StartsWith( 'First Name', "M" ) ) ``` @@ -138,7 +138,7 @@ Although optional, using **ThisRecord** can make formulas easier to understand a Use **ThisRecord** to reference the whole record with **Patch**, **Collect**, and other record scope functions. For example, the following formula sets the status for all inactive employees to active: -```powerapps-dot +```power-fx With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) }, ForAll( InactiveEmployees, Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) ) @@ -150,7 +150,7 @@ Use the **As** operator to name a record in a gallery or record scope function, For example, you can modify the **Items** property of our gallery to use **As** to identify that we are working with an Employee: -```powerapps-dot +```power-fx Employees As Employee ``` @@ -159,14 +159,14 @@ Employees As Employee The formulas for the picture and name are adjusted to use this name for the current record: -```powerapps-dot +```power-fx Employee.Picture ``` > [!div class="mx-imgBorder"] > ![Picture of an employee using the Employee name set with the As operator.](media/operators/as-gallery-as-picture.png) -```powerapps-dot +```power-fx Employee.'First Name' & " " & Employee.'Last Name' ``` @@ -175,7 +175,7 @@ Employee.'First Name' & " " & Employee.'Last Name' **As** can also be used with record scope functions to replace the default name **ThisRecord**. We can apply this to our previous example to clarify the record we're working with: -```powerapps-dot +```power-fx With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) }, ForAll( InactiveEmployees As Employee, Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) ) @@ -185,7 +185,7 @@ When nesting galleries and record scope functions, **ThisItem** and **ThisRecord For example, this formula produces a chessboard pattern as a text string by nesting two **ForAll** functions: -```powerapps-dot +```power-fx Concat( ForAll( Sequence(8) As Rank, Concat( @@ -213,7 +213,7 @@ Let's unpack what is happening here: A similar example is possible with nested **Gallery** controls instead of **ForAll** functions. Let's start with the vertical gallery for the **Rank**. This gallery control will have an **Items** formula of: -```powerapps-dot +```power-fx Sequence(8) as Rank ``` @@ -222,7 +222,7 @@ Sequence(8) as Rank Within this gallery, we'll place a horizontal gallery for the **File**, that will be replicated for each **Rank**, with an **Items** property of: -```powerapps-dot +```power-fx Sequence(8) as File ``` @@ -231,7 +231,7 @@ Sequence(8) as File And finally, within this gallery, we'll add a **Label** control that will be replicated for each **File** and each **Rank**. We'll size it to fill the entire space and use the **Fill** property to provide the color with this formula: -```powerapps-dot +```power-fx If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige ) ``` @@ -307,7 +307,7 @@ Behind the scenes, a mapping is maintained between the display names seen in for ## Name disambiguation -Since display names aren't unique, the same display name may appear more than once in the same table. When this happens, the logical name will be added to the end of the display name in parenthesis for one of more of the conflicting names. Building on the example above, if there was a second field with the same display name of **Custom Field** with a logical name of **cra3a_customfieldalt** then the suggestions would show: +Since display names aren't unique, the same display name may appear more than once in the same table. When this happens, the logical name will be added to the end of the display name in parentheses for one of more of the conflicting names. Building on the example above, if there was a second field with the same display name of **Custom Field** with a logical name of **cra3a_customfieldalt** then the suggestions would show: > [!div class="mx-imgBorder"] > ![Studio formula bar showing the use of the logical name cr5e3_customfieldalt to disambiguate the two versions of "Custom Field."](media/operators/customfield_suggest_alt.png) diff --git a/power-platform/power-fx/reference/showhostinfo.md b/power-platform/power-fx/reference/showhostinfo.md index 4dbf232505..bdbe9d9a21 100644 --- a/power-platform/power-fx/reference/showhostinfo.md +++ b/power-platform/power-fx/reference/showhostinfo.md @@ -34,7 +34,7 @@ HostInfo – Required. The type of information to display. 1. Set the [OnSelect](/power-apps/maker/canvas-apps/controls/properties-core) property of the [Sync icon](/power-apps/maker/canvas-apps/controls/control-shapes-icons) to `ShowHostInfo(HostInfo.OfflineSync)` 1. Save and publish the app. -When the users selects the Sync icon on on their mobile device, a pop-up with the offline sync details such as sync status, last sync date, and downloaded tables are displayed. +When the users selects the Sync icon on their mobile device, a pop-up with the offline sync details such as sync status, last sync date, and downloaded tables are displayed. ## Known issue - The table column in the available table section shows the table name instead of the display name. diff --git a/power-platform/power-fx/tables.md b/power-platform/power-fx/tables.md index d912646a9f..ee80d93aa3 100644 --- a/power-platform/power-fx/tables.md +++ b/power-platform/power-fx/tables.md @@ -117,7 +117,7 @@ For example, take a table of **Products** placed in a global variable: ![Tables requested.](media/tables/requested.png "Tables requested") -```powerapps-dot +```power-fx Set( Products, Table( { Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 }, @@ -138,7 +138,7 @@ The first argument to **Filter** is the table of records to operate on, and the Adding to this example, we can calculate how much of each product to order: -```powerapps-dot +```power-fx AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' @@ -151,7 +151,7 @@ Here we are adding a calculated column to the result. **AddColumns** has its own Finally, we can reduce the result table to just the columns that we want: -```powerapps-dot +```power-fx ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), @@ -191,7 +191,7 @@ In addition, define a context variable named **Value** with this formula: **Upda Let's put it all together. In this context, the following formula: -```powerapps-dot +```power-fx Ungroup( ForAll( X, ForAll( Y, @@ -212,7 +212,7 @@ The innermost **ForAll** function defines another record scope for **Y**. Since Since **Y** is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result: -```powerapps-dot +```power-fx Ungroup( ForAll( X, ForAll( Y, @@ -231,7 +231,7 @@ All the **ForAll** record scopes override the global scope. The **Value** contex To operate on a single column from a table, use the **ShowColumns** function as in this example: -```powerapps-dot +```power-fx ShowColumns( Products, "Product" ) ``` @@ -241,7 +241,7 @@ This formula produces this single-column table: For a shorter alternative, specify *Table.Column*, which extracts the single-column table of just *Column* from *Table*. For example, this formula produces exactly the same result as using **ShowColumns**. -```powerapps-dot +```power-fx Products.Product ``` @@ -266,7 +266,7 @@ Note that the value in the **Price** column doesn't include a currency symbol, s ## Inline tables You can create a table by using the **[Table](reference/function-table.md)** function and a set of records. You can express the table at the start of this topic by using this formula: -```powerapps-dot +```power-fx Table( { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }, { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 }, @@ -276,7 +276,7 @@ Table( You can also nest tables: -```powerapps-dot +```power-fx Table( { Name: "Chocolate", 'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 }, diff --git a/power-platform/power-fx/untyped-object.md b/power-platform/power-fx/untyped-object.md index 5e7a9868ac..a502c29827 100644 --- a/power-platform/power-fx/untyped-object.md +++ b/power-platform/power-fx/untyped-object.md @@ -27,10 +27,10 @@ The value of a variable of type **untyped object** can't be used directly. You a The following examples convert the value of an **untyped object** variable named `UOValue`. -```powerapps-dot +```power-fx Text(UOValue) ``` -```powerapps-dot +```power-fx Value(UOValue) ``` @@ -58,16 +58,16 @@ Each field on the record is also of type **untyped object**, and needs to be pro The following examples use fields from an **untyped object** variable named `UORecord`. -```powerapps-dot +```power-fx Text(UORecord.StringField) ``` -```powerapps-dot +```power-fx Value(UORecord.Field.ChildField) ``` In case a field name consists of an invalid identifier name, for example when the field names starts with a number or contains invalid characters such as a hyphen, you can put the field names in single quotes: -```powerapps-dot +```power-fx untyped.'01' untyped.'my-field' ``` @@ -78,13 +78,13 @@ An **untyped object** variable can contain an array. Even though the array could For example, to get the second number in an array of **untyped object** containing number values ( `[1, 2, 3]` ), the following formula can be used to retrieve the second row in the table and convert column to a number: -```powerapps-dot +```power-fx Value( Index( UOArray, 2 ) ) ``` If the **untyped object** was converted to a **Table()** first, the second row in the result single-column table is a `Value` column containing the **untyped object**: -```powerapps-dot +```power-fx Value( Index( Table( UOArray ), 2 ).Value ) ``` @@ -92,25 +92,25 @@ For an array of records that have a text column called `Field`, the same logic a The `Field` column can be access directly from the **untyped object** returned by the **Index()** function. -```powerapps-dot +```power-fx Text( Index( UORecordArray, 2 ).Field ) ``` When using the **Table()** function, first retrieve the single-column `Value` column to get the **untyped object**, then access the `Field` column: -```powerapps-dot +```power-fx Text( Index( Table( UORecordArray ), 2 ).Value.Field ) ``` To convert an array of records to a typed table, you can use the [ForAll()](./reference/function-forall.md) function and convert each individual field. -```powerapps-dot +```power-fx ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } ) ``` If the **untyped object** is first converted to a table, again, the resulting single-column table of **untyped object** will require you to use the `Value` column to get the fields. -```powerapps-dot +```power-fx ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } ) ``` diff --git a/power-platform/power-fx/working-with-json.md b/power-platform/power-fx/working-with-json.md index 38e4035169..c5b26c881c 100644 --- a/power-platform/power-fx/working-with-json.md +++ b/power-platform/power-fx/working-with-json.md @@ -32,7 +32,7 @@ Power Fx allows makers to read **JSON** into an [Untyped object](untyped-object. Each of the fields can be accessed using the dot notation on the **Untyped object** value returned from **ParseJSON**. -```powerapps-dot +```power-fx Set( untyped, ParseJSON( jsonStringVariable ) ); Set( item, Text ( untyped.ItemName ) ); @@ -43,7 +43,7 @@ Set( preorder, Boolean ( untyped.AvailableForPreOrder ) ); It is generally a good idea to explicitly convert an untyped object's value to a specific type. Setting an untyped object as a variable value makes the variable an **Untyped object** as well. So, converting such value explicitly when setting to a variable is likely needed. But in most cases untyped object values will convert to a specific type automatically ("coerce") when used as function parameters where the type is a simple type like boolean, number, or text, and the function's parameter profile does not have potential conflicting overloads. -```powerapps-dot +```power-fx Left( untyped.ItemName, 1 ); // "W" Radians( untyped.Quantity ); // 0.80285146 If (untyped.AvailableForPreOrder, "Available", "Not Available" ); // "Available" @@ -51,14 +51,14 @@ If (untyped.AvailableForPreOrder, "Available", "Not Available" ); // "Available" In addition to automatically converting the type in function calls, untyped objects will also be converted when assigned to control properties, where possible. -```powerapps-dot +```power-fx Label1.Text: untyped.Quantity InputText1.Default: untyped.ItemName ``` -And finally, when [using operators](./operators.md) such as **&** or **+**, an **Untyped object** will be coerced if there is no ambigiuty on the expected type. +And finally, when [using operators](./operators.md) such as **&** or **+**, an **Untyped object** will be coerced if there is no ambiguity on the expected type. -```powerapps-dot +```power-fx untyped.Quantity + 1 // result is a number untyped.ItemName & " (preorder)" // result is text untyped.Quantity + untyped.Quantity // result is a number @@ -70,7 +70,7 @@ untyped.Quantity & untyped.ItemName // result is text In case a field name consists of an invalid identifier name, for example when the field names starts with a number or contains invalid characters such as a hyphen, you can put the field names in single quotes: -```powerapps-dot +```power-fx untyped.'01' untyped.'my-field' ``` @@ -84,7 +84,7 @@ As accessing fields on **Untyped objects** isn't evaluated when writing the form **JSON** values don't have to be in a record-style notation. Valid **JSON** can be just a value, such as `"text value"`, `true` or `123.456`. In such a case, the **Untyped object** that **ParseJSON** returns is the value itself and the dot notation isn't used. -```powerapps-dot +```power-fx Set( myText, Boolean( ParseJSON( "true" ) ) ); Set( myNumber, Value( ParseJSON( "123.456" ) ) ); @@ -108,7 +108,7 @@ Finally, **JSON** supports nested records. Converting such **JSON** to **Untyped When converting this **JSON** string to an **Untyped object** variable named `jsonObject`, the fields can be accessed using the dot notation. -```powerapps-dot +```power-fx Set( jsonObject, ParseJSON( jsonStringVariable ) ); Set( parentName, Text( jsonObject.RootElement.Parent.Name ) ); // "This is the parent" @@ -141,25 +141,25 @@ If any of the fields in the dot notation expression don't exist, **Blank()** wil This **JSON** contains a record with a field named `OrderLines` which contains an array of records. Each record has two fields: `Item` and `Quantity`. If the **JSON** is converted into an **Untyped object** using the **ParseJSON** function and set to a variable named `jsonOrder`, we can access the individual order lines in several ways. -```powerapps-dot +```power-fx Set( jsonOrder, ParseJSON( jsonStringVariable ) ); ``` You can retrieve individual records and values using the [Index()](reference/function-first-last.md) function. For example, to get the second record in the `OrderLines` field, then access the `Quantity` field and convert it to a value. -```powerapps-dot +```power-fx Set( line2Quantity, Value( Index( jsonOrder.OrderLines, 2 ).Quantity ); // 5 ``` You can convert the array of order lines directly to a table. This will create a single-column table with an **Untyped object** representing the record. -```powerapps-dot +```power-fx Set( orderLines, Table( jsonOrder.OrderLines ) ); ``` Single column table 'orderLines' now has a 'Value' column that represents the **Untyped object**. To use any of the fields from a record in this table, use the dot notation to access the specific **JSON** field on the **Untyped object** in the `Value` column. -```powerapps-dot +```power-fx Set( jsonRecord, Index( orderLines, 2 ) ); // Get the second record in the table Set( line2Item, Text( jsonRecord.Value.Item ) ); // "Widget 2" @@ -167,7 +167,7 @@ Set( line2Item, Text( jsonRecord.Value.Item ) ); // "Widget 2" To make the use of the order line records easier and more straightforward in other parts of your app, you can convert the whole **Untyped object** to an entirely typed record using the [ForAll()](reference/function-forall.md) function. Providing the **Untyped object** directly to **ForAll()** means you can access the object fields directly instead of using the single-column `Value` field. -```powerapps-dot +```power-fx Set( typedOrderLines, ForAll( jsonOrder.OrderLines, { Item : Text( ThisRecord.Item ), Quantity : Value( ThisRecord.Quantity ) } ) ); ``` @@ -186,6 +186,6 @@ The previous examples use arrays of records, but **JSON** can also contain array We can retrieve one of the items from the array using the **Index()** function, and convert it to text. -```powerapps-dot +```power-fx Text( Index( ParseJSON( jsonStringVariable ), 2 ) ) // "Second Item" ``` diff --git a/power-platform/well-architected/experience-optimization/design-standards.md b/power-platform/well-architected/experience-optimization/design-standards.md index 4b6ab3f9ff..0c40039ea7 100644 --- a/power-platform/well-architected/experience-optimization/design-standards.md +++ b/power-platform/well-architected/experience-optimization/design-standards.md @@ -126,7 +126,7 @@ Interaction is where accessibility matters the most. If a user can't navigate a - *Hyperlinks*. Usability and accessibility of hyperlinks can be improved by making them clear, concise, and meaningful out of context. Apply sufficient color contrast and visually differentiate from other content. - *Tables*. Relying on visual cues alone isn't sufficient to create an accessible table. Structural markup allows assistive technology to recognize headers and data cells. - *Forms*. Input fields, used for various web interactions, often raise accessibility concerns for individuals who use screen readers or keyboards. -- *Focus*. Focus visibility helps users who rely on the keyboard to navigate the page, by visually indicating the element they interact with next. Sometimes focus needs to be moved programatically or limited to a specific area to optimize the experience. +- *Focus*. Focus visibility helps users who rely on the keyboard to navigate the page, by visually indicating the element they interact with next. Sometimes focus needs to be moved programmatically or limited to a specific area to optimize the experience. - *State changes*. Specify text for any state change and announcements. Communicating error states and guiding users through error recovery (such as missing information or system issue) is critical. ## Power Platform facilitation diff --git a/power-platform/well-architected/operational-excellence/release-engineering-continuous-integration.md b/power-platform/well-architected/operational-excellence/release-engineering-continuous-integration.md index 2295e4d5a3..e83288ba5c 100644 --- a/power-platform/well-architected/operational-excellence/release-engineering-continuous-integration.md +++ b/power-platform/well-architected/operational-excellence/release-engineering-continuous-integration.md @@ -4,7 +4,7 @@ description: Learn how to optimize software development and quality by following author: manuelap-msft ms.author: mapichle ms.reviewer: jhaskett-msft -ms.date: 05/10/2024 +ms.date: 06/13/2024 ms.subservice: well-architected ms.topic: conceptual --- @@ -108,7 +108,7 @@ Failed tests should temporarily block a deployment and lead to a deeper analysis - [Application lifecycle management (ALM) with Microsoft Power Platform](/power-platform/alm/) - [Build CI/CD with Azure for Microsoft Power Platform](/azure/architecture/solution-ideas/articles/azure-devops-continuous-integration-for-power-platform) - [Power Platform environments](/power-platform/admin/environments-overview) -- [Establishing an environment strategy](/power-platform/guidance/adoption/environment-strategy) +- [Establishing an environment strategy](/power-platform/guidance/white-papers/environment-strategy) - [Co-development governance](/power-apps/guidance/co-develop/governance) - [Use scenarios to implement healthy ALM with Microsoft Power Apps](/power-platform/alm/implement-healthy-alm) - [Automate tests with Azure Pipelines](/power-apps/maker/canvas-apps/test-studio-classic-pipeline-editor) diff --git a/power-platform/well-architected/performance-efficiency/select-services.md b/power-platform/well-architected/performance-efficiency/select-services.md index abd774b6e8..2ed49a3049 100644 --- a/power-platform/well-architected/performance-efficiency/select-services.md +++ b/power-platform/well-architected/performance-efficiency/select-services.md @@ -4,7 +4,7 @@ description: Learn how to select the appropriate services and features that meet author: manuelap-msft ms.author: mapichle ms.reviewer: jhaskett-msft -ms.date: 05/16/2024 +ms.date: 06/13/2024 ms.subservice: well-architected ms.topic: conceptual --- @@ -75,7 +75,7 @@ Key considerations in this decision-making include: - _Understand available features._ Different regions may offer different features. Understand the features that are available in a region before you select it. Ensure that a region meets your workload performance needs. -- _Consider latency._ Latency, the time data takes to travel from source to destination, increases the further services are from each other. Services communicating across regions can face increased latency. Identifying services that frequently communicate and positioning them within the same region is recommended. Additionally, selecting a region proximate to your primary user base can minimize latency, offering a better user experience. If you have users in different parts of the world, you might need to compromise on latency for some of them. You should analyze your user personas and workloads to find the optimal balance. Choosing a datacenter location is part of your [environment strategy](/power-platform/guidance/adoption/environment-strategy). +- _Consider latency._ Latency, the time data takes to travel from source to destination, increases the further services are from each other. Services communicating across regions can face increased latency. Identifying services that frequently communicate and positioning them within the same region is recommended. Additionally, selecting a region proximate to your primary user base can minimize latency, offering a better user experience. If you have users in different parts of the world, you might need to compromise on latency for some of them. You should analyze your user personas and workloads to find the optimal balance. Choosing a datacenter location is part of your [environment strategy](/power-platform/guidance/white-papers/environment-strategy). ### Evaluate networking requirements diff --git a/power-platform/well-architected/reliability/metrics.md b/power-platform/well-architected/reliability/metrics.md index f7965d5c56..324c9aa9a9 100644 --- a/power-platform/well-architected/reliability/metrics.md +++ b/power-platform/well-architected/reliability/metrics.md @@ -20,7 +20,7 @@ This guide describes the recommendations for defining availability and recovery The targets are improved through monitoring and testing. Work with your internal stakeholders to establish realistic expectations for reliability. This exercise will also help stakeholders support your architectural design choices and understand that you're designing to best meet the targets you agreed on. -Microsoft Power Platform handles most [infrastructure-level](https://trust.salesforce.com/) availability and reliability concerns for you. However, the availability of the workloads you build is a shared responsibility. It's important to understand that even with Microsoft's [commitment to high availability](https://trust.salesforce.com/en/#systemStatus), the risk of system downtime is never zero. +Microsoft Power Platform handles most [infrastructure-level](/power-platform/admin/business-continuity-disaster-recovery) availability and reliability concerns for you. However, the availability of the workloads you build is a shared responsibility. It's important to understand that even with Microsoft's [commitment to high availability](https://servicetrust.microsoft.com/), the risk of system downtime is never zero. Consider using the following metrics to quantify the business requirements. @@ -137,4 +137,4 @@ For more information, see [Cloud monitoring SLOs](/azure/cloud-adoption-framewor Refer to the complete set of recommendations. > [!div class="nextstepaction"] -> [Reliability checklist](checklist.md) \ No newline at end of file +> [Reliability checklist](checklist.md) diff --git a/ps-docs/account-planning-guide.md b/ps-docs/account-planning-guide.md index fc9638c007..11e0c72649 100644 --- a/ps-docs/account-planning-guide.md +++ b/ps-docs/account-planning-guide.md @@ -1,11 +1,11 @@ --- title: Overview of an account planning guide -description: Learn how to generate an account planning guide in Project “Sophia”. +description: Learn how to generate an account planning guide in Project "Sophia." Guides help the user provide the needed data, and then reason over it for a given scenario. author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 10/31/2023 +ms.date: 3/20/2024 ms.service: power-platform ms.author: pemikkel search.audienceType: @@ -26,12 +26,16 @@ Use the account planning guide in Project "Sophia" to help you generate account 1. Go to [https://projectsophia.preview.microsoft.com]( https://projectsophia.preview.microsoft.com). 1. From the **Home** screen, select **Guides** > **Account planning**. -1. From the top right, select **Domains** to optimize responses your specific area of interest. -1. Select **Add data** > **Upload files**. -1. Select the file name and then select **Open**. -1. Select **Generate**. +1. To get relevant results, select **Domains** located at the top right and choose a specific domain. +1. Select **Add data** and then select one of the following options: + - **Upload files** + - Connect to **Dynamics 365 Sales** + > [!IMPORTANT] + > You need to have an account to establish a connection with Dynamics 365 Sales. For more informatoin, see [Use data from Dynamics 365 Sales](ask-question.md#use-data-from-dynamics-365-sales). + +1. When your data loads, select **Generate**. -Project "Sophia" is going to generate a tailored account plan based on your data. You can upload more data and refine your account plan or continue exploring your data. +Project "Sophia" is going to generate a tailored account plan based on your data. You can upload or connect to more data and refine your account plan or continue exploring your data. > [!div class="mx-imgBorder"] > ![Accounting planning guide.](media/account-plan.png) diff --git a/ps-docs/ai-cursor.md b/ps-docs/ai-cursor.md index 28ab517ca5..296424d16e 100644 --- a/ps-docs/ai-cursor.md +++ b/ps-docs/ai-cursor.md @@ -1,11 +1,11 @@ --- -title: Use the AI cursor in Project “Sophia” -description: Use the AI Cursor to interact with generated content in Project “Sophia”, +title: Use the AI cursor in Project "Sophia" +description: Use the AI Cursor to interact with generated content in Project "Sophia" by asking follow up questions and expanding the research journey author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 10/31/2023 +ms.date: 3/20/2024 ms.service: power-platform ms.author: pemikkel search.audienceType: @@ -19,17 +19,17 @@ contributors: [This article is prerelease documentation and is subject to change.] -The AI cursor provides a way for you to interact with the data that’s generated or ask a new question. It responds to natural language commands and provides contextual recommendations as you navigate the content. Use the AI cursor to ask questions about the content on a blueprint or a block of content in the blueprint. +The AI cursor provides a way for you to interact with the generated data or ask a new question. It responds to natural language commands and provides contextual recommendations as you navigate the content. Use the AI cursor to ask questions about the content on a blueprint or a block of content in the blueprint. When content is generated, follow these steps to use the AI cursor: 1. Select the AI cursor or use the keyboard shortcut **Alt + C**. 2. Select an area or block of content to ask a question about and enter your question. -3. Select **Generate** > **Generate as new blueprint** to create a new blueprint, or **Generate in place of existing block** to regenerate content in the selected block. Pressing **Enter** instead of manually selecting one of the two options will always generate a new blueprint. +3. Select **Generate** > **Generate as new blueprint** to create a new blueprint, or **Generate in place of existing block** to regenerate content in the selected block. Pressing **Enter** instead of manually selecting one of the two options generates a new blueprint as well. > [!TIP] > - **Update an existing block**: If you experience unexpected results, you can ask Project "Sophia" to adjust the results. For example, update an existing block to use another chart type, group by something else, or explain what an acronym means in your source data to help get better results. When you press **Enter** it generates a new blueprint instead of updating an existing block on the current blueprint. -> - **Add data**: You can upload additional data to an existing workspace at any time using the AI cursor. +> - **Add data**: You can add additional data to an existing workspace using the AI cursor. You can add more data by [uploading files](ask-question.md#supported-data-files) or [use data from Dynamics 365 Sales](ask-question.md#use-data-from-dynamics-365-sales). > [!div class="mx-imgBorder"] > ![Use the AI cursor.](media/ai-cursor.png) @@ -40,4 +40,4 @@ As you explore a subject in depth, it can be beneficial to review the questions As you ask questions, journey lines display the questions that you asked. By zooming out to view an overview of all your blueprints, you can use the journey lines to see the path that led to your conclusion. -:::image type="content" source="media/journey.png" alt-text="Journey lines"::: \ No newline at end of file +:::image type="content" source="media/journey.png" alt-text="Journey lines"::: diff --git a/ps-docs/ask-question.md b/ps-docs/ask-question.md index d6e98a767f..26827a2003 100644 --- a/ps-docs/ask-question.md +++ b/ps-docs/ask-question.md @@ -1,11 +1,11 @@ --- -title: Ask Project “Sophia” a question -description: Use the exploratory option to explore a question or topic. +title: Ask Project "Sophia" a question +description: Use the exploratory option to explore a question or topic. Write questions in natural language to reason over your data with AI-generated analysis and charts. author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 10/31/2023 +ms.date: 06/10/2024 ms.service: power-platform ms.author: pemikkel search.audienceType: @@ -19,7 +19,7 @@ contributors: [This article is prerelease documentation and is subject to change.] -When you can ask Project "Sophia" a question or upload data and ask questions about the data, it generates a AI-powered blueprint. +When you ask Project "Sophia" a question or add data and ask questions about the data, it generates a AI-powered blueprint. It's also beneficial to select **Domains** when you use Project “Sophia”. Choosing a domain provides a better understanding of the context of your question. For instance, in the context of sales and marketing, the terms "hunters" and "farmers" hold distinct meanings that might not be apparent without that context. Similarly, there are common acronyms that can mean something different based on context. @@ -27,7 +27,7 @@ Follow these steps to ask a question: 1. Go to [https://projectsophia.microsoft.com](https://projectsophia.microsoft.com). 1. From the Home screen, select **New workspace**. -1. From the top right, select **Domains** to optimize responses your specific area of interest. +1. To get relevant results, select **Domains** located at the top right and choose a specific domain. 1. Enter your question in the text box and then select **Generate**. You'll get an AI-powered blueprint in response to your question including an overview and suggested next steps. @@ -35,13 +35,16 @@ You'll get an AI-powered blueprint in response to your question including an ove ## Ask questions about your data -You can upload a data file and ask questions about the data. The [supported file formats](ask-question.md#supported-data-files) are .csv, .xlsx, and .pdf. In future releases, you will be able to **connect to data** instead of uploading data. - -1. Use one of the following methods to ask questions about your data: - - On the Home screen, select **go** on the **Onboarding** tile > **Exploratory** > **upload data or use sample data**. You can also use the sample sales data provided to familiarize yourself with Project "Sophia". - - On the Home screen, select **New workspace** > **Add data** > **Upload files** +One of the many benefits of Project Sophia is that you can connect to your business data; currently Dynamics 365 Sales. Additinoally, you can further enrich the analysis by uploading data files. The [supported file formats](ask-question.md#supported-data-files) are .csv, .xlsx, and .pdf. -1. Select the file name and then select **Open**. +1. Use one of the following options to ask questions about your data: + - On the Home screen, on the **Onboarding** tile, select **go** > **Exploratory** > **upload data or use sample data**. You can also use the sample sales data provided to familiarize yourself with Project "Sophia". + - On the Home screen, select **New workspace** > **Add data** > **Upload files**. + - On the Home screen, select **New workspace** > **Add data** > use data from **Dynamics 365 Sales**. + > [!IMPORTANT] + > You need to have account to establish a connection with Dynamics 365 Sales. For more informatoin, see [Use data from Dynamics 365 Sales](ask-question.md#use-data-from-dynamics-365-sales). + +1. If you're uploading a file, select the file name and then select **Open**. If you're connecting to a data source, follow the instructions in the authentication dialog box. 1. From the top right, select **Domains** to optimize responses your specific area of interest. 1. Select **Generate** or enter your question in the text box and then select **Generate**. @@ -57,13 +60,32 @@ You can upload a PDF (.pdf), CSV (.csv), and Excel (.xls) file. The following li - Column header in the first row only. - No more than 10 tables and max 50 columns for each table. - Can’t contain merged cells. - - Elements such as images, charts and macros can't be processed. + - Elements such as images, charts, and macros can't be processed. - PDF: - The file must contain selectable text. You can test it by trying to highlight text within the PDF. If you can’t select or highlight the text, then it can't be processed. - - Use original digital documents or PDF that are converted directly from word processors or other digital sources. A scanned PDF will not work. + - Use original digital documents or PDF that are converted directly from word processors or other digital sources. A scanned PDF won't work. - Encrypted or password-protected files aren’t supported. - If a PDF contains tables make sure the borders are clearly outlined. Avoid using any contrasting colors to differentiate between rows and columns. +### Use data from Dynamics 365 Sales + +> [!IMPORTANT] +> You need to have account to establish a connection with Dynamics 365 Sales. + +You can connect to your business data from Dynamics 365 Sales, which enables you to do rich analysis across your business data estate. + +For Dynamics 365 Sales connection: +- Your sign in information for Project "Sophia" is used to connect to Dynamics 365 Sales. +- If you have access to multiple instances, you are prompted to choose one. +- If an instance isn't found, then the option to connect to **Dynamics 365 Sales** won't be available. + +Current limitations in data integration: +- We currently support contacts, opportunities, leads, accounts, sales orders, and cases. +- The data is fetched at the time of connection. +- By default we include the most recent 2000 rows (most recentently created) and a maximum of 100 columns for each table. +- You can establish one connection in a workspace. +- You can upload files for additional context in addition to connecting to a data source. + ### Work with content @@ -75,7 +97,7 @@ You can upload a PDF (.pdf), CSV (.csv), and Excel (.xls) file. The following li Legend: 1. **Home**: Go to the Home screen. -1. **New workspace**: Opens a blank canvas where you can explore and [ask questions](ask-question.md) related to your business. Or you can upload business data and [ask questions about the data](ask-question.md#ask-questions-about-your-data). When you ask a question, a workspace is created which can be accessed from the Home screen. +1. **New workspace**: Opens a blank canvas where you can explore and [ask questions](ask-question.md) related to your business. Or you can add business data and [ask questions about the data](ask-question.md#ask-questions-about-your-data). When you ask a question, a workspace is created which can be accessed from the Home screen. 1. **Workspace name**: To rename a workspace, select the default name **Untitled** and rename it. 1. **Keep it**: Saves the generated content. Select the **Untitled** text box and enter a name for the generated workspace. If you don’t save the generated information, the system automatically saves it as, **Untitled**. You can access all workspaces from the Home screen. 1. **Regenerate**: Regenerates the results or select **Regenerate with new data** to replace with another data set instead of starting over. The **Regenerate** option can generate different results, but the level of difference depends on the specificity of the question asked. For example, a general question such as "tell me something interesting about my data," generates different results, whereas as question such as "show me my top 10 accounts based on last years sales numbers" generate similar results. diff --git a/ps-docs/faq-ps.md b/ps-docs/faq-ps.md index cead0d0053..eb77c8a3c4 100644 --- a/ps-docs/faq-ps.md +++ b/ps-docs/faq-ps.md @@ -1,11 +1,11 @@ --- -title: Frequently asked questions Project “Sophia” -description: Frequently asked questions about Project “Sophia.” +title: Frequently asked questions Project "Sophia" +description: Frequently asked questions about Project "Sophia." author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 11/13/2023 +ms.date: 3/20/2024 ms.service: power-platform ms.author: pemikkel search.audienceType: @@ -15,29 +15,29 @@ contributors: - mikkelsen2000 --- -# Frequently asked questions about Project “Sophia” (preview) +# Frequently asked questions about Project "Sophia" (preview) [This article is prerelease documentation and is subject to change.] -## 1. Why can't I access Project “Sophia"? +## Why can't I access Project "Sophia"? Project "Sophia" is only available in the European Union (EU) and United States. If you're trying to access it while you're in the European Union (EU) or United States and still get a notification stating **Project Sophia is not yet available your region**, then it's because the data residency of the tenant you're trying to access from is based outside of the European Union (EU) or United Stated. You can sign up for product news and to be notified when Project "Sophia" is available in new regions, [here](https://aka.ms/projectsophianews). -## 2. Can I provide feedback to the product team? +## Can I provide feedback to the product team? Submit your feedback on Project “Sophia", [here](https://aka.ms/projectsophiafeedback). -## 3. Why do I get an error when trying to upload a file? +## Why do I get an error when trying to upload a file? You can upload a PDF (.pdf), CSV (.csv), and Excel (.xls) file. For more information, see [Supported data files and limitations](ask-question.md#supported-data-files). - -## 4. The page never loads when I select next actions: +## The page never loads when I select next actions: This might happen if you select multiple **next actions** while a previous next action is loading. We're aware of the issue and are working on a fix in an upcoming release, but until then select **cancel** and try the action again. -## 5. How can I refine a single block instead of the entire blueprint? +## How can I refine a single block instead of the entire blueprint? If you're using the AI cursor and press enter after entering your prompt, your prompt will automatically create a new blueprint. You can choose to update only a single block on a blueprint by selecting **Generate** and then select **Generate in place of existing block**. This replaces or updates the content of an existing block based on the content you enter. -## 6. Can I connect to data instead of uploading files? -No, but we plan to support connecting to your enterprise data in future releases. +## Can I connect to data instead of uploading files? +Yes, you can connect to Dynamics 365 Sales to analyze your data. For more information, see [Use data from Dynamics 365 Sales](ask-question.md#use-data-from-dynamics-365-sales). +We plan to support connecting to more enterprise data sources in upcoming releases. -## 7. What are the preview terms? Is Microsoft using my data to train their models? How do I know my data is safe? +## What are the preview terms? Is Microsoft using my data to train their models? How do I know my data is safe? The use of Project "Sophia" is subject to the terms outlined in, see [Preview terms](https://aka.ms/projectsophiapreviewterms). diff --git a/ps-docs/overview.md b/ps-docs/overview.md index 98757b4667..433eb32976 100644 --- a/ps-docs/overview.md +++ b/ps-docs/overview.md @@ -1,11 +1,11 @@ --- -title: Project “Sophia” overview -description: Learn how to use Project “Sophia” to help you create exploratory journeys and understand business data with AI-generated charts and insights. +title: Project "Sophia" overview +description: Learn how to use Project "Sophia" to help you create exploratory journeys and understand business data with AI-generated charts and insights. author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 11/16/2023 +ms.date: 3/20/2024 ms.service: power-platform ms.author: pemikkel search.audienceType: @@ -42,10 +42,10 @@ You can also go back to the **Onboarding** screen, by going to the Home screen a Legend -1. **Exploratory**: Offers a blank canvas where you can explore and ask questions related to your business. Or you can upload business data and ask questions about the data. Project "Sophia" uses the uploaded data to generate insights and suggests next actions. +1. **Exploratory**: Offers a blank canvas where you can explore and ask questions related to your business. Or you can add business data, by uploading files or connect to your business data sources such as Dynamics 365 Sales, and ask questions about the data. Project "Sophia" uses the data to generate insights and suggests next actions. 2. **Guides**: Helps you through the process of gathering relevant data to tackle specific role-based business tasks. For preview, only the account planning guide is available. Guides for sales territory planning, supply chain optimization, and others are coming soon. 3. **Question**: Enter your question in the text box and then select **Generate**. -4. **Blueprint**: The results that are generated when you ask a question or upload data. You can also generate a new blueprint by selecting one of the suggested next steps. +4. **Blueprint**: The results that are generated when you ask a question. You can also generate a new blueprint by selecting one of the suggested next steps. 5. **Block**: Example of the different blocks of content that is generated. ## Home screen @@ -59,11 +59,11 @@ The next time you sign in to Project "Sophia", you'll see the Home screen. The f Legend 1. **Home**: Takes you to the Home screen as shown in the screenshot. -2. **New workspace**: Opens a blank canvas where you can explore and ask questions related to your business. You can also upload data and ask questions about the data. When you ask a question, a workspace is created that you can access from the Home screen. +2. **New workspace**: Opens a blank canvas where you can explore and ask questions related to your business. You can also upload data, or connect to data sources, and ask questions about the data. When you ask a question, a workspace is created that you can access from the Home screen. 3. **Guides**: Helps you through the process of gathering relevant data to tackle specific role-based business tasks. For preview, only the account planning guide is supported. Guides for sales territory planning, supply chain optimization, and others are coming soon. 4. **Documentation**: Access online help documentation. 5. **Onboarding**: Select **Go** to go to the [**Onboarding**](overview.md#onboarding-screen) screen. -6. **Workspace**: When you ask a question or upload data and inquire about the data, a workspace is generated. You can access all your workspaces from the Home screen. +6. **Workspace**: When you ask a question or add data and inquire about the data, a workspace is generated. You can access all your workspaces from the Home screen. 7. **Workspace name**: The name of your workspace. The default title of a workspace is **Untitled**. You can select the title and rename it. ## Waiting room @@ -76,4 +76,4 @@ If Project "Sophia" reaches its full capacity during the preview period, you're ## Authenticated and unauthenticated experience -If you don't sign in to Project "Sophia", you can't ask questions or upload any data. However, you can still access a limited unauthenticated experience where you can use sample data and get a feel for Project "Sophia", and view suggested next steps. +If you don't sign in to Project "Sophia", you can't ask questions or add any data. However, you can still access a limited unauthenticated experience where you can use sample data and get a feel for Project "Sophia", and view suggested next steps. diff --git a/ps-docs/workspace.md b/ps-docs/workspace.md index 1a9e185641..f88d604983 100644 --- a/ps-docs/workspace.md +++ b/ps-docs/workspace.md @@ -1,11 +1,11 @@ --- -title: View your workspace in Project “Sophia” -description: Learn how to navigate a workspace in Project “Sophia". +title: View your workspace in Project "Sophia" +description: Learn how to navigate a workspace in Project "Sophia." author: mikkelsen2000 -ms.topic: Overview +ms.topic: overview ms.custom: ms.reviewer: mkaur -ms.date: 10/31/2023 +ms.date: 3/20/2024 ms.service: power-platform ms.author: pemikkel search.audienceType:
ParametersDefining criteriaEnvironment