使用解决方案检查器提高组件性能、稳定性和可靠性
为了履行复杂的业务要求,制作者通常最终会推出极为高端的解决方案,用于自定义和扩展 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 语法问题。
- 使用解决方案检查器并不能保证能够成功导入解决方案。 针对解决方案执行的静态分析检查不知道目标环境的配置状态,导入是否成功可能取决于环境中的其他解决方案或配置。
运行解决方案检查器
登录到 Power Apps。
在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
在要分析的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择运行。
解决方案检查器命令按钮具有加载指示器,您将发现正在运行... 解决方案检查列中的状态为正在运行...。
请注意以下事项:
解决方案检查器可能需要几分钟才能完成分析。
检查完成后,您将收到电子邮件通知,Power Apps 站点的通知区域中也会显示通知。
检查完成后查看报告。
取消检查
在环境中提交解决方案检查之后,可以通过解决方案页面右上区域中的状态窗格取消检查。
如果取消检查,将停止运行解决方案检查,而解决方案检查状态将恢复为之前的状态。
解决方案检查器状态
在环境中安装解决方案检查器之后,解决方案列表中将提供解决方案检查列。 此列显示解决方案的解决方案分析状态。
状态 | 说明 |
---|---|
尚未运行 | 从未分析解决方案。 |
正在运行 | 正在分析解决方案。 |
无法完成 | 已请求分析解决方案,但是未成功完成。 |
截止日期和时间的结果 | 解决方案分析完成,可下载结果。 |
无法完成。 截止日期和时间的结果 | 最近的分析请求未成功完成。 可以下载最近的成功结果。 |
由 Microsoft 检查 | 这是 Microsoft 托管解决方案。 不允许对这些解决方案进行解决方案分析。 |
由发布方检查 | 这是第三方管理的解决方案。 现在不能对这些解决方案进行解决方案分析。 |
查看解决方案检查器报告
完成解决方案检查之后,可以在门户中查看分析报告,也可以从 Web 浏览器下载该报告。 门户中有用于按问题、位置或严重性对结果进行排序,以及查看解决方案中检测到的问题的详细信息的选项。
在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
在要查看解决方案检查器报告的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择查看报告。
选择问题以查看详细信息和有关如何解决的说明。
也可以下载解决方案检查结果。 将把解决方案检查器 zip 文件下载到 Web 浏览器指定的文件夹。 下载报告的格式为 Excel,其中包含若干可视化效果和列,可帮助您确定解决方案中检测到的每个问题的影响、类型和位置。 还提供了有关如何解决问题的详细指示信息的链接。
- 在左侧窗格中选择解决方案。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。
- 在要下载解决方案检查器报告的非托管解决方案旁边,选择 ...,指向解决方案检查器,然后选择下载报告。
- 将把解决方案检查器 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-entity-operations | 解决方案包含受限 SDK 消息和操作需要有效 Dynamics 365 许可证的实体。 | 低 | 许可 |
模型驱动应用 | meta-license-fieldservice-customcontrols | 解决方案包含需要有效 Dynamics 365 Field Service 许可证的自定义控件。 | 低 | 许可 |
模型驱动应用 | meta-license-fieldservice-entity-operations | 解决方案包含具有需要有效 Dynamics 365 Field Service 许可证的受限 SDK 消息和操作的实体。 | 低 | 许可 |
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 | 辅助功能 |