mcpField
F
fix-table-row-mode

fix-table-row-mode

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

关于 fix-table-row-mode

用于将 `sap.ui.table.Table` 弃用行属性迁移到 `rowMode` 聚合的开发技能,面向维护 UI5 应用的开发者。它覆盖 XML 与 JavaScript 写法,并要求迁移前检查模式兼容性。

主要功能

  1. 01映射弃用行属性
  2. 02选择对应 RowMode 类
  3. 03处理 XML 与 JavaScript
  4. 04迁移前检查属性兼容性
  5. 05指导重新运行 Linter 验证

适用场景

  1. 01修复表格行属性弃用错误
  2. 02迁移 XML 视图中的表格
  3. 03更新 JavaScript 表格实例

安装

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

$npx skills add https://github.com/ui5/plugins-coding-agents --skill fix-table-row-mode

安装后在 Claude Code 中输入/fix-table-row-mode确认已加载。

详细介绍

修复表格行模式(no-deprecated-api)

此技能用于修复 sap.ui.table.Table 上与行相关且已弃用的属性。这些属性会被 UI5 linter 检测到,但无法自动修复。现代化改造会将扁平属性替换为结构化的 rowMode 聚合。

重要:不要将 sap.ui.table.Table 现代化为 sap.m.Table——两者并不等价。

Linter 规则

规则 ID消息模式
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'visibleRowCountMode'
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'visibleRowCount'
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'rowHeight'
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'fixedRowCount'
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'fixedBottomRowCount'
no-deprecated-api使用了类 sap.ui.table.Table 的已弃用属性 'minAutoRowCount'

属性映射

Table 上已弃用的属性RowMode 上的新属性备注
visibleRowCountMode(决定 RowMode 类)"Fixed" → rowmodes:Fixed,"Interactive" → rowmodes:Interactive,"Auto" → rowmodes:Auto
visibleRowCountrowCount用于 Fixed 和 Interactive 模式
minAutoRowCountminRowCount仅用于 Auto 模式
rowHeightrowContentHeight名称变更
fixedRowCountfixedTopRowCount名称变更(增加了 Top)
fixedBottomRowCountfixedBottomRowCount无变化

RowMode 类选择

根据旧的 visibleRowCountMode 值选择:

  • "Fixed"(或未设置——这是默认值)→ rowmodes:Fixed
  • "Interactive" → rowmodes:Interactive
  • "Auto" → rowmodes:Auto

现代化改造前的安全检查

如果设置在 Table 上的某个属性不存在于所选的 RowMode 类中(例如,在 Fixed 模式的表格上设置了 minAutoRowCount),这表明可能存在动态行模式切换。中止该表格的现代化改造,并标记为需要人工审核。

修复策略——XML 视图

步骤 1:添加 XML 命名空间

添加到根 <mvc:View> 标签:

xmlns:rowmodes="sap.ui.table.rowmodes"
步骤 2:移除已弃用属性并添加 rowMode 聚合

之前(Fixed 模式):

<table:Table
    rows="{/Products}"
    visibleRowCountMode="Fixed"
    visibleRowCount="5"
    fixedRowCount="1"
    fixedBottomRowCount="2"
    rowHeight="30">
    <table:columns>...</table:columns>
</table:Table>

之后:

<table:Table
    rows="{/Products}">
    <table:rowMode>
        <rowmodes:Fixed
            rowCount="5"
            fixedTopRowCount="1"
            fixedBottomRowCount="2"
            rowContentHeight="30"/>
    </table:rowMode>
    <table:columns>...</table:columns>
</table:Table>

之前(Interactive 模式):

<table:Table
    rows="{/Products}"
    visibleRowCountMode="Interactive"
    visibleRowCount="10"
    rowHeight="25">

之后:

<table:Table
    rows="{/Products}">
    <table:rowMode>
        <rowmodes:Interactive
            rowCount="10"
            rowContentHeight="25"/>
    </table:rowMode>

之前(Auto 模式):

<table:Table
    rows="{/Items}"
    visibleRowCountMode="Auto"
    minAutoRowCount="3">

之后:

<table:Table
    rows="{/Items}">
    <table:rowMode>
        <rowmodes:Auto minRowCount="3"/>
    </table:rowMode>

修复策略——JavaScript

步骤 1:添加 RowMode 导入

将相应的类添加到 sap.ui.define:

  • Fixed 模式使用 "sap/ui/table/rowmodes/Fixed"
  • Interactive 模式使用 "sap/ui/table/rowmodes/Interactive"
  • Auto 模式使用 "sap/ui/table/rowmodes/Auto"
步骤 2:将属性替换为 rowMode

之前:

sap.ui.define([
    "sap/ui/table/Table"
], function(Table) {
    var oTable = new Table({
        visibleRowCountMode: "Interactive",
        visibleRowCount: 10,
        rowHeight: 25
    });
});

之后:

sap.ui.define([
    "sap/ui/table/Table",
    "sap/ui/table/rowmodes/Interactive"
], function(Table, InteractiveRowMode) {
    var oTable = new Table({
        rowMode: new InteractiveRowMode({
            rowCount: 10,
            rowContentHeight: 25
        })
    });
});

同时处理基于 setter 的写法:

之前:

oTable.setVisibleRowCountMode("Fixed");
oTable.setVisibleRowCount(8);
oTable.setFixedRowCount(2);
oTable.setRowHeight(40);

之后:

// Import: "sap/ui/table/rowmodes/Fixed"
oTable.setRowMode(new FixedRowMode({
    rowCount: 8,
    fixedTopRowCount: 2,
    rowContentHeight: 40
}));

实施步骤

  1. 使用 --details 运行 linter,找出所有受影响的 Table 实例
  2. 针对每个 Table,根据 visibleRowCountMode 确定 RowMode 类(默认值:"Fixed")
  3. 安全检查:确认所有已弃用属性都与所选 RowMode 类兼容
  4. XML 视图:添加 xmlns:rowmodes="sap.ui.table.rowmodes" 命名空间,移除已弃用属性,并添加 <rowMode> 聚合
  5. JavaScript:添加 RowMode 导入,使用映射后的属性创建 RowMode 实例,并通过构造函数或 setRowMode() 设置
  6. 验证:重新运行 linter

RowMode 属性参考

模式可用属性
FixedrowCount、fixedTopRowCount、fixedBottomRowCount、rowContentHeight
InteractiverowCount、rowContentHeight
AutominRowCount、fixedTopRowCount、fixedBottomRowCount、rowContentHeight

备注

  • 如果未设置 visibleRowCountMode,默认值为 "Fixed"——请使用 rowmodes:Fixed
  • <table:rowMode> 聚合放在 <table:Table> 内,与 <table:columns> 并列
  • 在 XML 中,RowMode 元素始终使用 rowmodes: 命名空间前缀
  • 新旧 API 均为同步 API——无需进行异步处理

相关技能

  • fix-deprecated-controls:对于 sap.ui.table.Table 上其他 no-deprecated-api 错误(例如与行模式无关的弃用类或属性),请使用 fix-deprecated-controls
  • fix-js-globals:如果通过全局访问方式实例化 Table(例如 new sap.ui.table.Table()),fix-js-globals 会将其转换为正确的模块导入

评论

支持 Markdown