使用解决方案检查器提高组件性能、稳定性和可靠性

为了履行复杂的业务要求,制作者通常最终会推出极为高端的解决方案,用于自定义和扩展 Microsoft Dataverse 平台。 高级实施伴随着风险上升,并带来性能、稳定性和可靠性问题,从而影响用户的体验。 确定这些问题和了解其解决方法可能非常复杂,并且很费时间。 通过解决方案检查器,您可以使用一组最佳实践规则对解决方案执行各种静态分析检查,并快速确定这些问题模式。 检查完成后,将收到详细报告,其中列出了确定的问题,受影响的组件和代码,以及介绍各问题解决方法的文档的链接。

解决方案检查器分析以下解决方案组件:

  • Dataverse 自定义工作流活动
  • Dataverse Web 资源(HTML 和 JavaScript)
  • Dataverse 配置,如 SDK 消息步骤
  • Power Automate 流(通过流检查器
  • Power Fx 表达式(通过应用检查器

解决方案检查器支持可从环境中导出的非托管解决方案。

备注

  • 本主题介绍如何从 Power Apps 开发者门户运行解决方案检查器。 另外还提供 PowerShell 模块,您可以使用它来直接与服务交互。 Microsoft.PowerApps.Checker.PowerShell 模块可用于对 Power Apps 环境的非托管解决方案进行分析,或自动化服务并将服务集成到您的版本和发布管道中。 详细信息:Microsoft.PowerApps.Checker.PowerShell 概述
  • 解决方案检查器支持对 ECMAScript 2015 (ES6) 和最高 ECMAScript 2018 (ES9) 语法使用全局变量。 检测到使用高于 ES6 的全局变量或高于 ES9 的语法的 JavaScript 时,将为 Web 资源报告不支持 Web 语法问题。
  • 使用解决方案检查器并不能保证能够成功导入解决方案。 针对解决方案执行的静态分析检查不知道目标环境的配置状态,导入是否成功可能取决于环境中的其他解决方案或配置。

运行解决方案检查器

  1. 登录到 Power Apps

  2. 在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。

  3. 在要分析的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择运行

    运行解决方案检查器命令。

  4. 解决方案检查器命令按钮具有加载指示器,您将发现正在运行... 解决方案检查列中的状态为正在运行...

    解决方案检查器状态。

    请注意以下事项:

    • 解决方案检查器可能需要几分钟才能完成分析。

    • 检查完成后,您将收到电子邮件通知,Power Apps 站点的通知区域中也会显示通知。

  5. 检查完成后查看报告

取消检查

在环境中提交解决方案检查之后,可以通过解决方案页面右上区域中的状态窗格取消检查。

如果取消检查,将停止运行解决方案检查,而解决方案检查状态将恢复为之前的状态。

解决方案检查器状态

在环境中安装解决方案检查器之后,解决方案列表中将提供解决方案检查列。 此列显示解决方案的解决方案分析状态。

状态 说明
尚未运行 从未分析解决方案。
正在运行 正在分析解决方案。
无法完成 已请求分析解决方案,但是未成功完成。
截止日期和时间的结果 解决方案分析完成,可下载结果。
无法完成。 截止日期和时间的结果 最近的分析请求未成功完成。 可以下载最近的成功结果。
由 Microsoft 检查 这是 Microsoft 托管解决方案。 不允许对这些解决方案进行解决方案分析。
由发布方检查 这是第三方管理的解决方案。 现在不能对这些解决方案进行解决方案分析。

查看解决方案检查器报告

完成解决方案检查之后,可以在门户中查看分析报告,也可以从 Web 浏览器下载该报告。 门户中有用于按问题位置严重性对结果进行排序,以及查看解决方案中检测到的问题的详细信息的选项。

  1. 在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。

  2. 在要查看解决方案检查器报告的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择查看报告

  3. 选择问题以查看详细信息和有关如何解决的说明。

    解决方案检查器查看结果。

也可以下载解决方案检查结果。 将把解决方案检查器 zip 文件下载到 Web 浏览器指定的文件夹。 下载报告的格式为 Excel,其中包含若干可视化效果和列,可帮助您确定解决方案中检测到的每个问题的影响、类型和位置。 还提供了有关如何解决问题的详细指示信息的链接。

  1. 在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
  2. 在要下载解决方案检查器报告的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择下载报告
  3. 将把解决方案检查器 zip 文件下载到 Web 浏览器指定的文件夹。

下面是报告中每列的摘要。

报表列 描述 适用于组件
问题 解决方案中确定的问题的标题。 所有
类别 识别到的问题分类,如性能可维护性使用情况可支持性设计安全性辅助功能升级就绪情况 所有
严重级别 表示确定的问题的潜在影响。 可用影响类型为严重参考 所有
指南 详细说明问题、影响和建议操作的文章的链接。 所有
组件 确定有问题的解决方案组件。 所有
Location 确定发生了问题的组件的位置和/或源文件,如程序集或 JavaScript 文件名。 所有
行号 问题在受影响 Web 资源组件中的行号参考。 Web 资源
模块 在程序集中检测到了问题的模块的名称。 自定义工作流活动
类型​​ 在程序集中确定的问题的类型。 自定义工作流活动
成员 在程序集中确定的问题的编号。 自定义工作流活动
语句 导致问题的代码语句或配置。 所有
注释 包含高级别解决方法步骤的问题相关详细信息。 所有

在本地运行解决方案检查器规则

您可以在开发环境中运行解决方案检查器规则,以在创建解决方案资源时更快地检测问题。 目前,Web 资源(JavaScript 和 TypeScript)支持此功能。 有关更多详细信息,请转到 NPM 包 @microsoft/eslint-plugin-power-apps

解决方案检查器使用的最佳实践规则

下表列出了组件类型、规则描述、严重性和类别。 配置带托管环境的解决方案检查器增强功能后,会阻止或通知严重违规。 详细信息:在托管环境中使用解决方案检查器

解决方案组件 规则名称 规则说明 严重级别 类别
插件或工作流活动 meta-remove-dup-reg 避免重复的 Dataverse 插件注册。 严重 绩效
插件或工作流活动 meta-avoid-reg-no-attribute 包括使用 Dataverse 插件注册筛选属性。 Medium 绩效
插件或工作流活动 meta-avoid-reg-retrieve 使用为 Retrieve 和 RetrieveMultiple 消息注册的 Dataverse 插件时,请务必小心谨慎。 Medium 绩效
插件或工作流活动 meta-remove-inactive 删除 Dataverse 中已停用的配置 可维护性
插件或工作流活动 meta-avoid-crm4-event 请勿使用 Microsoft Dynamics CRM 4.0 插件注册插件。 Medium 升级就绪情况
插件或工作流活动 meta-avoid-retrievemultiple-annotation 避免在批注 RetrieveMultiple 上注册插件。 用法
插件或工作流活动 meta-license-sales-sdkmessages 解决方案包含需要有效 Dynamics 365 许可证的 SDK 消息和操作。 许可
模型驱动应用 meta-license-sales-customcontrols 解决方案包含需要有效 Dynamics 365 Sales 许可证的自定义控件。 许可
模型驱动应用 meta-license-sales-entity-operations 解决方案包含受限 SDK 消息和操作需要有效 Dynamics 365 许可证的实体。 许可
Web 资源 use-async 与 HTTP 和 HTTPS 资源异步交互。 严重 绩效
Web 资源 avoid-modals 避免使用模式对话框。 可支持性
Web 资源 avoid-dom-form 可支持性
Web 资源 avoid-dom-form-event 可支持性
Web 资源 avoid-crm2011-service-odata 请勿以 Microsoft Dynamics CRM 2011 OData 2.0 端点为目标。 严重 升级就绪情况
Web 资源 avoid-crm2011-service-soap 请勿以 Microsoft Dynamics CRM 2011 SOAP 服务为目标。 严重 升级就绪情况
Web 资源 avoid-loadtheme 请勿使用 loadTheme Fluent v8 API。 可支持性
Web 资源 avoid-browser-specific-api 请勿使用 Internet Explorer 旧 API 或浏览器插件。 严重 升级就绪情况
Web 资源 avoid-unpub-api 可支持性
Web 资源 avoid-window-top 可支持性
Web 资源 avoid-2011-api 请勿使用已弃用的 Microsoft Dynamics CRM 2011 对象模型。 而是按照 Dataverse Web API 文档操作。 升级就绪情况
Web 资源 use-relative-uri 请勿使用绝对 Dataverse 端点 URL。 Medium 可维护性
Web 资源 use-cached-webresource Medium 绩效
Web 资源 use-client-context 使用客户端上下文。 Medium 升级就绪情况
Web 资源 use-navigation-api 使用导航 API 参数。 Medium 升级就绪情况
Web 资源 use-offline Medium 升级就绪情况
Web 资源 do-not-make-parent-assumption 设计​​
Web 资源 use-org-setting 使用组织设置。 Medium 升级就绪情况
Web 资源 use-global-context Medium 升级就绪情况
Web 资源 use-grid-api 使用网格 API。 Medium 升级就绪情况
Web 资源 use-utility-dialogs Medium 用法
Web 资源 avoid-isActivityType 将 Xrm.Utility.isActivityType 方法替换为新的 Xrm.Utility.gettableMetadata,并且不在功能区规则中使用。 Medium 升级就绪情况
Web 资源 meta-avoid-silverlight 已弃用 Silverlight Web 资源。 Medium 升级就绪情况
Web 资源 remove-debug-script 避免在非开发环境中包含调试脚本。 Medium 用法
Web 资源 use-strict-mode 如果可能,使用严格模式。 Medium 用法
Web 资源 use-strict-equality-operators 使用绝对相同的运算符。 Medium 用法
Web 资源 avoid-eval 请勿使用“eval”函数或其等效项。 严重 安全组
Web 资源 avoid-with 不要使用“with”运算符。 绩效
Web 资源 remove-alert 不要使用“alert”函数或其功能等效项。 Medium 用法
Web 资源 remove-console 避免在控制台上使用方法。 Medium 用法
Web 资源 avoid-ui-refreshribbon 避免在窗体 onload 和 EnableRule 中使用 refreshRibbon。 严重 绩效
Web 资源 use-getsecurityroleprivilegesinfo 避免 userSettings.securityRolePrivileges。 改为使用 userSettings.getSecurityRolePrivilegesInfo。 绩效
Web 资源 use-appsidepane-api 使用 Xrm.App.sidePanes.createPane,而非 Xrm.Panels.loadPanel。 Medium 升级就绪情况
Web 资源 web-sdl-no-cookies HTTP Cookie 是一种旧的客户端存储机制,具有固有的风险和限制。 请改为使用 Web 存储、IndexedDB 或其他现代方法。 Medium 安全组
Web 资源 web-sdl-no-document-domain 必须检查对 document.domain 属性的写入,以避免绕过同源检查。 严禁使用顶级域名,如 azurewebsites.net。 Medium 安全组
Web 资源 web-sdl-no-document-write 对 document.write 或 document.writeln 的调用可以在不进行任何清理的情况下直接操作 DOM,应该避免。 请改为使用 document.createElement() 或类似方法。 Medium 安全组
Web 资源 web-sdl-no-html-method 对方法 html() 的直接调用经常(例如,在 jQuery 框架中)在不进行任何清理的情况下操作 DOM,应该避免。 请改为使用 document.createElement() 或类似方法。 Medium 安全组
Web 资源 web-sdl-no-inner-html 对 innerHTML 或 outerHTML 属性的分配可以在不进行任何清理的情况下直接操作 DOM,应该避免。 请改为使用 document.createElement() 或类似方法。 Medium 安全组
Web 资源 web-sdl-no-insecure-url 不安全协议(如 HTTP 或 FTP)应替换为加密的对等协议(HTTPS、FTPS),以避免通过不受信任的网络以纯文本发送可能的敏感数据。 Medium 安全组
Web 资源 web-sdl-no-msapp-exec-unsafe 对 MSApp.execUnsafeLocalFunction() 的调用会绕过脚本注入验证,应该避免。 Medium 安全组
Web 资源 web-sdl-no-postmessage-star-origin 应始终提供特定的目标来源,而不是 * 在使用 postMessage 向其他窗口发送数据时提供,以避免数据泄露到信任边界之外。 Medium 安全组
Web 资源 web-sdl-no-winjs-html-unsafe 对 WinJS.Utilities.setInnerHTMLUnsafe() 和类似方法的调用不会执行任何输入验证,应该避免。 请改为使用 WinJS.Utilities.setInnerHTML()。 Medium 安全组
画布应用 app-formula-issues-high 有关更多详细信息,请参考 Power Apps 公式引用。 严重 设计​​
画布应用 应用-公式-问题-中 有关更多详细信息,请参考 Power Apps 公式引用。 Medium 设计​​
画布应用 应用-公式-问题-低 有关更多详细信息,请参考 Power Apps 公式引用。 设计​​
画布应用 应用-使用-delayoutput-文本-输入 在某些情况下使用延迟加载来提高性能。 Medium 绩效
画布应用 应用-缩小-屏幕-控件 限制应用控件数量以提高性能。 Medium 绩效
画布应用 应用-包含-可访问-标签 使用显式标签改进应用的可访问性。 Medium 辅助功能
画布应用 应用-包含-备选-输入 确保所有交互元素都可以访问备选输入。 Medium 辅助功能
画布应用 应用-避免-自动启动 避免在应用内的播放器上使用自动启动。 Medium 辅助功能

另请参见

Dataverse 的最佳实践和指南
模型驱动应用的最佳实践和指南
解决方案检查器的常见问题和解决

备注

您能告诉我们您的文档语言首选项吗? 进行简短调查。(请注意,此调查是英文版调查)

此调查大约需要七分钟。 不会收集个人数据(隐私声明)。