minor
#28955
Full text search for grid component potentially leads to a logged error
Full-text search in grid components crashes if technical
columns are unintentionally assigned default resource providers.
2025-10-30T10:18:26,547 ERROR [qtp756936249-65]: com.top_logic.basic.util.ResourcesModule - Missing resource '[layouts.demo.table.table_grid.tableGrid.row0]'. S(dDrkqth32wcqnFV2mZsSl2xoyvvOln+Cqa/fKF2b5aE=) java.lang.Exception: Stacktrace at com.top_logic.basic.util.ResourcesModule.newUnknownKey(ResourcesModule.java:568)
The problem occurs as follows:
- Tables support full text search across all columns
- A "Full Text Resource Provider" is used for each column to obtain searchable data
- !Technical/auxiliary columns are explicitly configured with null as provider to exclude them from the search
- During the table lifecycle, these technical columns are nevertheless assigned a default provider
- During the full text search, an attempt is made to use this provider, which leads to an
error message such as "Resource Provider not found"
The actual problem is that the explicit null value is overwritten by a default provider
.
Cause
The cause lies in the copy mechanism of the table column configuration:
1. If a column is explicitly configured with setFullTextProvider(null), the flag
fullTextProviderExplicitlySet is set to true
2. Columns are copied/cloned during the table life cycle
3. During this copy process, the fullTextProviderExplicitlySet flag is not copied and is reset to
false
4. Later, when table configuration providers assign default values,
setFullTextProviderAsDefault() is called
5. Since the flag is now false, the default provider is assigned and overwrites the
original null setting
6. The technical column now has a provider, although it should be ignored for the full-text search
The logic can no longer distinguish between "no provider has been set" and "null
has been explicitly set to exclude".
Possible solution
The smallest and safest solution is to ensure that the
fullTextProviderExplicitlySet flag is correctly retained during the column copy process:
1. Add a copyFullTextProviderExplicitlySet() method in the ColumnDescription class,
which copies the flag
2. Customize the copyFrom() method to call the new method during the copy process
3. Ensure that the flag is copied correctly for all column cloning operations
This approach:
- Maintains the existing API semantics
- Is minimal and invasive
- Solves the problem at the root (missing flag copying)
- Does not affect any other functionality
Test
Check whether the error occurs in TL-Demo during a full-text search.