Table of Contents

Limitations

List & Label Cross Platform (LLCP) is built on a different rendering engine than List & Label Classic. As a result, some features currently have limitations, or behave differently, compared to Classic.

This section documents these differences so you can plan around them when migrating existing projects or designing new reports.


Undefined Classic behavior is not reproduced

The Classic designer accepts report definitions that are syntactically valid but semantically undefined. Classic still produced some output for them — but that output was an artifact of its internal evaluation order, not specified behavior. Over the years, reports have come to rely on such results. LLCP does not aim to reproduce them.

A typical example is a field from a subordinate table used in the header line of a top-level table. In Classic, the field resolves against whichever record of the child table happens to be current at that point, which effectively means the first record fetched — the value is arbitrary and changes with sort order, data source, or query plan. In LLCP, the field does not resolve in this context at all.

This is not an isolated case. Because the designer imposes few structural constraints and virtually every property can be driven by a formula, the two engines will always differ in evaluation order, in when and how data is supplied, and in the exact point at which a formula is evaluated. Report constructs that depend on those internals rather than on documented behavior are therefore unlikely to carry over.

Important

Restricting the designer to Cross Platform-compatible features does not help here. It filters unsupported object types and functions, but cannot detect a construct that is undefined in the first place.

The practical consequence for migration: treat such constructs as a design defect to be corrected, not as a missing LLCP feature. Move the data access to the hierarchy level where the value is actually well defined — for example, by evaluating the child data in the table body, in a nested table, or via an aggregate function that is explicitly scoped. Comparing Classic and LLCP output side by side with production-like data, as described in Testing and validation, is the reliable way to find them.

Tip

Where a report has to serve both engines, use the virtual identifier LL.IsCrossPlatform in conditional expressions to branch between the Classic construct and its Cross Platform equivalent.


Available topics