Fix Table Row Mode

by UI52b8c4a944e39No licenseListed Oct 8, 2026Updated Oct 8, 2026

Fix deprecated `sap.ui.table.Table` row properties that UI5 linter reports but cannot auto-fix. Use this skill when linter outputs: - `no-deprecated-api` with messages about `visibleRowCountMode`, `visibleRowCount`, `rowHeight`, `fixedRowCount`, `fixedBottomRowCount`, or `minAutoRowCount` Trigger on: deprecated row-related properties on sap.ui.table.Table in JS or XML, modernization to rowMode aggregation. Converts deprecated flat properties to a structured `rowMode` aggregation using `sap.ui.table.rowmodes.Fixed`, `Interactive`, or `Auto`.

Instructions onlySoftware Development
AI-generated overview

Fixes deprecated sap.ui.table.Table row properties by converting them to the rowMode aggregation in UI5 code.

What it does
This skill guides the modernization of deprecated row-related properties on sap.ui.table.Table that the UI5 linter reports but cannot auto-fix. It maps flat properties such as visibleRowCountMode, visibleRowCount, rowHeight, fixedRowCount, fixedBottomRowCount and minAutoRowCount to the structured rowMode aggregation using sap.ui.table.rowmodes.Fixed, Interactive or Auto. It provides before-and-after examples for XML views and JavaScript, including setter-based patterns, plus a safety check that aborts modernization when properties are incompatible with the chosen RowMode class.
When to use it
Use it when UI5 linter output reports no-deprecated-api messages about deprecated row properties on sap.ui.table.Table in JavaScript or XML. It is intended for modernizing those tables to the rowMode aggregation, not for migrating sap.ui.table.Table to sap.m.Table.
Requirements
No scripts; instructions only. The agent needs access to the affected UI5 project files and the UI5 linter to identify and verify affected Table instances.

Fix Table Row Mode (no-deprecated-api)

This skill fixes deprecated row-related properties on sap.ui.table.Table that the UI5 linter detects but cannot auto-fix. The modernization replaces flat properties with a structured rowMode aggregation.

IMPORTANT: Do NOT modernize sap.ui.table.Table to sap.m.Table — they are not equivalent.

Linter Rule

Rule IDMessage Pattern
no-deprecated-apiUse of deprecated property 'visibleRowCountMode' of class 'sap.ui.table.Table'
no-deprecated-apiUse of deprecated property 'visibleRowCount' of class 'sap.ui.table.Table'
no-deprecated-apiUse of deprecated property 'rowHeight' of class 'sap.ui.table.Table'
no-deprecated-apiUse of deprecated property 'fixedRowCount' of class 'sap.ui.table.Table'
no-deprecated-apiUse of deprecated property 'fixedBottomRowCount' of class 'sap.ui.table.Table'
no-deprecated-apiUse of deprecated property 'minAutoRowCount' of class 'sap.ui.table.Table'

Property Mapping

Deprecated Property on TableNew Property on RowModeNotes
visibleRowCountMode(Determines RowMode class)"Fixed" → rowmodes:Fixed, "Interactive" → rowmodes:Interactive, "Auto" → rowmodes:Auto
visibleRowCountrowCountUsed in Fixed and Interactive mode
minAutoRowCountminRowCountUsed only in Auto mode
rowHeightrowContentHeightName change
fixedRowCountfixedTopRowCountName change (Top added)
fixedBottomRowCountfixedBottomRowCountNo change

RowMode Class Selection

Choose based on the old visibleRowCountMode value:

  • "Fixed" (or not set — this is the default) → rowmodes:Fixed
  • "Interactive" → rowmodes:Interactive
  • "Auto" → rowmodes:Auto

Pre-Modernization Safety Check

If a property set on the Table doesn't exist on the selected RowMode class (e.g., minAutoRowCount on a Fixed mode table), this indicates possible dynamic row mode switching. Abort modernization for that table and flag for manual review.

Fix Strategy — XML Views

Step 1: Add XML Namespace

Add to the root <mvc:View> tag:

xml
xmlns:rowmodes="sap.ui.table.rowmodes"

Step 2: Remove Deprecated Properties and Add rowMode Aggregation

Before (Fixed mode):

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

After:

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

Before (Interactive mode):

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

After:

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

Before (Auto mode):

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

After:

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

Fix Strategy — JavaScript

Step 1: Add RowMode Import

Add the appropriate class to sap.ui.define:

  • "sap/ui/table/rowmodes/Fixed" for Fixed mode
  • "sap/ui/table/rowmodes/Interactive" for Interactive mode
  • "sap/ui/table/rowmodes/Auto" for Auto mode

Step 2: Replace Properties with rowMode

Before:

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

After:

javascript
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        })    });});

Also handle setter-based patterns:

Before:

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

After:

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

Implementation Steps

  1. Run linter with --details to identify all affected Table instances
  2. For each Table, determine the RowMode class from visibleRowCountMode (default: "Fixed")
  3. Safety check: Verify all deprecated properties are compatible with the chosen RowMode class
  4. XML views: Add xmlns:rowmodes="sap.ui.table.rowmodes" namespace, remove deprecated properties, add <rowMode> aggregation
  5. JavaScript: Add RowMode import, create RowMode instance with mapped properties, set via constructor or setRowMode()
  6. Verify by re-running the linter

RowMode Properties Reference

ModeAvailable Properties
FixedrowCount, fixedTopRowCount, fixedBottomRowCount, rowContentHeight
InteractiverowCount, rowContentHeight
AutominRowCount, fixedTopRowCount, fixedBottomRowCount, rowContentHeight

Notes

  • If visibleRowCountMode is not set, the default was "Fixed" — use rowmodes:Fixed
  • The <table:rowMode> aggregation goes inside <table:Table>, alongside <table:columns>
  • In XML, always use the rowmodes: namespace prefix for RowMode elements
  • Both old and new APIs are synchronous — no async handling needed

Related Skills

  • fix-deprecated-controls: For other no-deprecated-api errors on sap.ui.table.Table (e.g., deprecated classes, properties not related to row mode), use fix-deprecated-controls
  • fix-js-globals: If the Table is instantiated via global access (e.g., new sap.ui.table.Table()), fix-js-globals handles converting to proper module imports

Source and attribution

Source:UI5/plugins-coding-agentsinplugins/ui5-modernization/skills/fix-table-row-modeat commit2b8c4a9

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal