mcpField
U
ui5-best-practices-smart-controls

ui5-best-practices-smart-controls

github.com/ui5开发44161 次安装1 周前更新
代码仓库

关于 ui5-best-practices-smart-controls

ui5-best-practices-smart-controls 是面向 freestyle 应用中 OData V2 服务的 UI5 Smart 控件指南,适用于编写、审查和排查相关代码。它提供控件选择建议、实现规则、常见问题处理及无障碍检查。

主要功能

  1. 01提供 Smart 控件选择参考
  2. 02说明控件层级与绑定规则
  3. 03列出常见错误及处理方法
  4. 04涵盖性能与无障碍检查
  5. 05指导 API 核验和代码校验

适用场景

  1. 01规划 OData V2 表单和筛选界面
  2. 02排查 SmartField 或 SmartChart 显示问题
  3. 03审查 Smart 控件代码及无障碍设置

MCP 相关

指南建议使用 MCP 工具 get_api_reference 核验控件 API,并使用 run_ui5_linter 验证代码。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ui5/plugins-coding-agents --skill ui5-best-practices-smart-controls

安装后在 Claude Code 中输入/ui5-best-practices-smart-controls确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
filter-bar.md
smart-chart.md
smart-field.md
smart-filter-bar.md
smart-form.md
smart-link.md
smart-multi-input.md
value-help-dialog.md

详细介绍

UI5 智能控件最佳实践

在使用 OData V2 服务的自由风格应用中生成、审查或排查 UI5 智能控件代码时,请始终遵循这些指南。

UI5 版本基线: SAPUI5 1.136+ LTS。除非另有说明,以下提及的所有功能均从此版本开始提供。

何时加载各参考文档

触发条件加载
正在处理或规划 sap.ui.comp.smartfield.SmartFieldreferences/smart-field.md
正在处理或规划 sap.ui.comp.smartform.SmartFormreferences/smart-form.md
正在处理或规划 sap.ui.comp.smartfilterbar.SmartFilterBarreferences/smart-filter-bar.md
正在处理或规划 sap.ui.comp.smartchart.SmartChartreferences/smart-chart.md
正在处理或规划 sap.ui.comp.navpopover.SmartLinkreferences/smart-link.md
正在处理或规划 sap.ui.comp.smartmultiinput.SmartMultiInputreferences/smart-multi-input.md
正在处理或规划 sap.ui.comp.filterbar.FilterBarreferences/filter-bar.md
正在处理或规划 sap.ui.comp.valuehelpdialog.ValueHelpDialogreferences/value-help-dialog.md

输出任何内容前都要先加载。不要凭记忆处理。


核心规则

必须遵守
  • 始终在智能控件上指定 entitySet,或确保控件继承的绑定上下文能够解析实体类型。
  • 在 XML 中使用 ControlConfiguration 覆盖 SmartFilterBar 字段设置(控件类型、筛选器类型、索引)。运行时只能修改 visible、label 和 visibleInAdvancedArea。
  • 使用正确的层级结构:SmartForm > Group > GroupElement > SmartField。切勿将 SmartField 直接放在 SmartForm 中。
  • 以编程方式访问内部控件(例如 getInnerControl()、getChart())前,先等待 initialise 事件。
  • 与 OData V2 模型配合使用时,在绑定中使用 sap.ui.model.odata.type.* 类型。切勿在 OData V2 中使用 sap.ui.model.type.*。
  • 在 SmartFilterBar 和 SmartChart 上设置 ariaLabelledBy,并引用可见标题,以满足无障碍要求。
  • 提交数据前,在 SmartForm 上使用 check() 进行客户端必填字段验证。
  • 使用 MCP 工具 get_api_reference 验证控件 API。使用 run_ui5_linter 验证代码。
禁止事项
  • 不要将 Smart 控件用于 OData V4 服务。请改用 MDC 控件(sap.ui.mdc)。
  • 不要在 SmartField 的 value 属性上设置自定义格式化器。SmartField 会根据元数据自行管理渲染。请使用注解来影响行为。
  • 不要在 SmartField 上使用复合绑定语法(parts: [...])。对于单位/货币字段,SmartField 会自行管理复合绑定。
  • 初始化期间不要同步调用 getChart()。请使用 initialise 事件或 getChartAsync()。
  • 不要直接修改 SmartChart 或 SmartTable 的内部控件(例如内部的 sap.chart.Chart)。请使用智能控件的公共 API。
  • 不要对字段标签进行硬编码。请在 OData 元数据中使用 sap:label 或 @Common.Label 注解。
  • 不要在 HTML 中使用内联样式或脚本(以符合 CSP 要求)。
  • 不要使用全局访问(sap.ui.comp.smartfield.SmartField)。请使用 sap.ui.define 或 ES6 导入。

选择矩阵

控件适用场景不适用场景
SmartFieldOData V2、单个属性的显示/编辑、根据 Edm 类型和注解自动渲染OData V4、JSON 模型、需要自定义渲染、复合/多属性字段
SmartFormOData V2、包含多个 SmartField 的实体编辑、根据注解自动生成标签OData V4、复杂的自定义布局、非 OData 数据
SmartFilterBarOData V2、由注解驱动的筛选器 UI、与 SmartTable/SmartChart 集成OData V4(请使用 MDC FilterBar)、仅使用 JSON、纯自定义筛选逻辑
SmartChartOData V2、由注解驱动的图表可视化、下钻、变体管理OData V4(请使用 MDC Chart)、非分析型数据、自定义图表 JS
SmartLinkOData V2、语义对象导航、通过 FLP 进行跨应用导航OData V4(请使用 MDC Link)、简单的静态链接、无法使用 FLP
SmartMultiInputOData V2、多值输入(带令牌)、带范围的值帮助OData V4、简单的单值输入、仅使用 JSON
FilterBar不使用 OData 注解的手动筛选器 UI、在 ValueHelpDialog 内、自定义筛选器使用注解的 OData V2(请使用 SmartFilterBar)、OData V4(请使用 MDC FilterBar)
ValueHelpDialog通过表格和条件页签进行复杂的值选择、基于令牌的多选简单下拉列表、单值选择、OData V4(请使用 MDC ValueHelp)

常见错误

症状原因解决方法
SmartField 在编辑模式下显示为纯文本缺少绑定上下文或 entitySet 错误验证 value="{PropertyName}" 和实体上下文解析。
SmartField 显示为 Input 而不是 DatePicker属性缺少 sap:display-format="Date"添加注解,或在 ControlConfiguration 中使用 controlType。
SmartForm 缺少标签OData 元数据中未设置 sap:label 注解为属性添加 sap:label,或在 GroupElement 上设置 label。
SmartFilterBar 的类型前置输入不起作用缺少目标路径正确的 ValueList 注解验证目标:{Namespace}.{EntityName}/{FieldName}。
SmartFilterBar 忽略默认值在 initialise 之后动态设置 ControlConfiguration在 XML 中静态设置值,或使用 setFilterData() API。
SmartChart 高度为 0/不可见容器未提供明确的高度在父容器上设置高度(例如,height="50vh")。
SmartChart 缺少维度/度量UI.Chart 注解错误或缺失验证注解中的 MeasureAttributes 和 DimensionAttributes。
SmartLink 弹出框显示“No content available”FLP 中没有语义对象的导航目标验证 FLP 配置和用户授权。
SmartLink 显示为文本(不可点击)属性上没有 SemanticObject 注解为 OData 属性添加 @Common.SemanticObject 注解。
SmartMultiInput 令牌未持久化缺少 ValueList 或绑定不正确验证 ValueList 注解和导航属性绑定。

性能与无障碍访问

应避免的反模式
  • 急切地请求所有值列表(使用延迟加载;默认情况下,值列表会按需加载)。
  • 在后端查询开销较大的情况下,对 SmartFilterBar 使用 liveMode="true"(会导致频繁重新获取数据)。
  • SmartForm 组嵌套过深(保持层级扁平:Form > Group > GroupElement)。
  • 绕过 SmartChart API 直接修改内部图表(会破坏个性化设置和变式管理)。
  • 当某些图表类型无关时未设置 ignoredChartTypes(会产生不必要的 UI 选项)。
无障碍访问检查清单
  • 在 SmartFilterBar 上设置 ariaLabelledBy,引用可见标题。
  • 在 SmartChart 上设置 ariaLabelledBy,引用可见标题。
  • SmartForm 会通过注解自动将标签传递给 SmartField。
  • 验证 SmartFilterBar“Adapt Filters”对话框的键盘导航是否正常。
  • 使用屏幕阅读器测试 SmartLink 弹出框(必须播报导航目标)。

评论

支持 Markdown