Use solution checker to validate your model-driven apps in PowerApps

To deliver on complex business requirements, model-driven app makers often can end up with highly advanced solutions that customize and extend the Common Data Service platform. With advanced implementations comes an increased risk where performance, stability, and reliability issues become introduced, which can negatively impact the user experience. Identifying and understanding how to resolve these issues can be complicated and time consuming. With the solution checker feature, you can perform a rich static analysis check on your solutions against a set of best practice rules and quickly identify these problematic patterns. After the check completes, you receive a detailed report that lists the issues identified, the components and code affected, and links to documentation that describes how to resolve each issue.

The solution checker analyzes these solution components:

  • Common Data Service plug-ins
  • Common Data Service custom workflow activities
  • Common Data Service web resources (HTML and JavaScript)
  • Common Data Service configurations, such as SDK message steps

Solution checker works with unmanaged solutions that can be exported from an environment.

Note

  • This topic explains how to run solution checker from the PowerApps maker portal. A PowerShell module is also available that you can use to interact directly with the service. The Microsoft.PowerApps.Checker.PowerShell module can be used for analysis of managed and unmanaged solutions for supported versions of on-premises and online environments, or to automate and integrate the service into your build and release pipelines. More information: Microsoft.PowerApps.Checker.PowerShell Overview
  • Solution checker doesn't work with solutions that contain JavaScript using ECMAScript 6 (2015) or later versions. When JavaScript using one of these versions is detected, a JS001 syntax issue for the web resource is reported.

Enable the solution checker

The Solution checker is enabled by default in every Common Data Service environment. A Solution checker menu item is available when you select an unmanaged solution in the Solutions area of PowerApps. If the Run option is not available in the Solution checker menu, you can enable it by installing the PowerApps checker solution. To install it, follow these steps:

  1. Sign in to PowerApps and select the Common Data Service environment where you want to enable the solution checker.

  2. On the left navigation pane, select Solutions.

  3. On the toolbar, select Solution checker and then select Install – this opens the Microsoft AppSource page. You need to allow pop-up windows if your browser blocks the page from opening.

    Install solution checker

  4. Select Free Trial on the AppSource page.

  5. If you agree, accept the terms and conditions and select the environment to install the PowerApps checker solution.

  6. When the installation is complete, refresh the Solution list on the PowerApps site to verify that the solution checker is available.

  7. To check a solution, Run the solution checker.

Run the solution checker

After you install the PowerApps checker in your environment, a Solution checker menu item is available when you select an unmanaged solution in the Solutions area of PowerApps.

  1. Sign in to PowerApps.

  2. In the left pane, select Solutions.

  3. Next to the unmanaged solution that you want to analyze, select ..., point to Solution checker, and then select Run.

    Run solution checker command

  4. The status pane located on the upper right of the Solutions page displays Solution checker running.

    Solution checker status

    Note the following:

    • The solution checker can take a few minutes to complete the analysis.

    • During this time you will notice a Running… state in the Solution check column of the Solution list.

    • You'll receive an email notification and a notification in the Notifications area of the PowerApps site when the check is completed.

  5. View the report when the check is completed.

Cancel a check

After you submit a solutions check in your environment, the check can be canceled through the status pane on the upper right area of the Solutions page.

When you cancel a check, the solution check stops running and the solution check status returns to the previous state.

Solution checker states

When you install the solution checker in your environment, the Solution check column becomes available in the Solutions list. This column displays the solution analysis states for a solution.

State Description
Hasn’t been run The solution has never been analyzed.
Running The solution is being analyzed.
Couldn’t be completed Solution analysis was requested but the analysis did not complete successfully.
Results as of date and time Solution analysis completed and results are available for download.
Couldn’t be completed. Result as of date and time The latest analysis request did not complete successfully. The last successful results can be downloaded.
Checked by Microsoft This is a Microsoft-managed solution. Solution analysis is not permitted on these solutions.
Checked by Publisher This is a third-party-managed solution. Currently, solution analysis is not available for these solutions.

Review the solution checker report

When a solution check is completed, you can view the analysis report in the portal or you can download the report from your web browser. In the portal, you have options to filter, group results by Issue, Location or by Severity and view detailed information for issues detected in your solution.

  1. In the left pane, select Solutions.

  2. Next to the unmanaged solution where you want to view the solution checker report, select ..., point to Solution checker, and then select View results.

  3. Select an Issue to view the details and guidance on how to resolve.

The solution check results are also available for download. The solution checker zip file is downloaded to the folder specified by your web browser.The download report is in Excel format and contains several visualizations and columns that assist you in identifying the impact, type, and location of each issue detected in your solution. A link to detailed guidance about how to resolve the issue is also provided.

  1. In the left pane, select Solutions.
  2. Next to the unmanaged solution where you want to download the solution checker report, select ..., point to Solution checker, and then select Download results.
  3. The solution checker zip file is downloaded to the folder specified by your web browser.

Here's a summary of each column in the report.

Report field Description Applies-to component
Issue The title of the issue identified in the solution. All
Category The categorization of the issue identified, such as Performance, Usage, or Supportability. All
Severity Represents the potential impact of the issue identified. Available impact types are High, Medium, Low, and Informational. All
Guidance Link to article detailing the issue, impact, and recommended action. All
Component The solution component where the issue was identified. All
Location The location and/or source file of the component where the issue that was identified occurred, such as the assembly or JavaScript file name. All
Line # The line number reference of the issue in the impacted web resource component. Web resources
Module Module name where the issue identified in the assembly was detected. Plug-in or custom workflow activity
Type Type of the issue identified in the assembly. Plug-in or custom workflow activity
Member Member of the issue identified in the assembly. Plug-in or custom workflow activity
Statement The code statement or configuration that resulted in the issue. All
Comments Details about the issue that include high-level resolution steps. All

Best practice rules used by solution checker

Solution component Rule name Rule description
Plug-in or workflow activity il-specify-column Avoid selecting all columns via Dynamics 365 for Customer Engagement query APIs.
Plug-in or workflow activity meta-remove-dup-reg Avoid duplicate Dynamics 365 for Customer Engagement plug-in registrations.
Plug-in or workflow activity il-turn-off-keepalive Set KeepAlive to false when interacting with external hosts in a Dynamics 365 for Customer Engagement plug-in.
Plug-in or workflow activity il-avoid-unpub-metadata Avoid retrieving unpublished Dynamics 365 for Customer Engagement metadata.
Plug-in or workflow activity il-avoid-batch-plugin Avoid using batch request types in Dynamics 365 Customer Engagement plug-ins and workflow activities.
Plug-in or workflow activity meta-avoid-reg-no-attribute Include filtering attributes with Dynamics 365 for Customer Engagement plug-in registrations.
Plug-in or workflow activity meta-avoid-reg-retrieve Use caution with Dynamics 365 for Customer Engagement plug-ins registered for Retrieve and RetrieveMultiple messages.
Plug-in or workflow activity meta-remove-inactive Remove inactive configurations in Dynamics 365 for Customer Engagement.
Plug-in or workflow activity il-meta-avoid-crm2011-depr-message Don't use Microsoft Dynamics CRM 2011 deprecated messages.
Plug-in or workflow activity meta-avoid-crm4-event Don't use Microsoft Dynamics CRM 4.0 plug-in registration stage.
Plug-in or workflow activity il-avoid-specialized-update-ops Don't use specialized update operation requests in Dynamics 365 for Customer Engagement.
Plug-in or workflow activity il-use-autonumber-feature Use the auto number feature instead of a custom auto numbering solution.
Plug-in or workflow activity il-avoid-parallel-plugin The usage of parallel patterns should be avoided within plug-ins.
Plug-in or workflow activity il-avoid-lock-plugin Avoid lock of static members in plug-ins.
Plug-in or workflow activity meta-avoid-retrievemultiple-annotation Avoid registering a plugin on RetrieveMultiple of annotation.
Web Resources web-use-async Interact with HTTP and HTTPS resources asynchronously.
Web Resources meta-remove-invalid-form-handler Correct or remove invalid Dynamics 365 for Customer Engagement form event registrations.
Web Resources meta-remove-orphaned-form-element Correct or remove orphaned Dynamics 365 for Customer Engagement form event registrations.
Web Resources web-avoid-modals Avoid using modal dialogs.
Web Resources web-avoid-crm2011-service-odata Don't target the Microsoft Dynamics CRM 2011 OData 2.0 endpoint.
Web Resources web-avoid-crm2011-service-soap Don't target the Microsoft Dynamics CRM 2011 SOAP services.
Web Resources web-avoid-browser-specific-api Don't use Internet Explorer legacy APIs or browser plug-ins.
Web Resources web-avoid-2011-api Don't use the deprecated Microsoft Dynamics CRM 2011 object model.
Web Resources web-use-relative-uri Don't use absolute Common Data Service endpoint URLs.
Web Resources web-use-client-context Use client contexts.
Web Resources web-use-dialog-api-param Use dialog API parameters.
Web Resources web-use-org-setting Use organization settings.
Web Resources web-use-grid-api Use the grid APIs.
Web Resources web-avoid-isActivityType Replace Xrm.Utility.isActivityType method with new Xrm.Utility.getEntityMetadata and don't use in ribbon rules.
Web Resources meta-avoid-silverlight Silverlight web resource usage is deprecated.
Web Resources web-remove-debug-script Avoid including debug script in non-development environments.
Web Resources web-use-strict-mode Use strict mode when possible.
Web Resources web-use-strict-equality-operators Use strict equality operators.
Web Resources web-avoid-eval Don't use the 'eval' function or its functional equivalents.

See also

Best practices and guidance for the Common Data Service
Best practices and guidance for model-driven apps
Common issues and resolutions for Solution Checker