P6 Core 6.10.25
Release date: Monday, September 4th, 2026
Documentation can be found here.
TL;DR¶
This release is mostly about making the Groovy DSL do more of the work for application developers. Table lookups are no longer limited to strict equality — you can now express comparisons, value lists and “empty means unbounded” rules in a single call, which is exactly what a validity-date search on a pricebook needs. Tables still stuck on the legacy XML storage can finally be moved to the faster SQL storage, with a safe, restartable migration that never loses data. CSV files can be sorted on a column before processing, and the p6.wrap value wrappers gained enough helpers that most scripts can drop their raw Java imports. On the housekeeping side, the unused blockchain (Web3j) integration is gone — which also removes a known CVE — and two lint rules that fired constantly on perfectly legitimate connector code have been switched off.
Tables¶
- Table lookups now accept typed search criteria instead of plain equality only. A criterion carries a field, an operator (
eq,ne,ieq,lt,le,gt,ge,in) and a value or list of values, and criteria are combined with a logical AND. AnorEmptyflag makes an empty column count as a match, so an open-ended validity window (ValidFrom/ValidToleft blank) still returns the row — including rows where the column is genuinely null because it was added after the data was inserted. The same signatures exist onlookupToFile. Existing equality-based lookups are untouched, and role-based permission filters can never be widened by caller-supplied criteria. Note that table values are stored as text, so comparisons are string comparisons: dates must be zero-padded ISO (YYYY-MM-DD) and numeric ranges are not supported. (STN-30913) -
A table sitting on the legacy XML storage can now be moved to the faster SQL storage with
p6.table.migrateToSqlStorage, keeping all its data — the migration path that was previously missing once a table held records. It copies the rows in batches through a temporary table, swaps the names and triggers the index rebuild. It is safe to call from an application pre-install script: it does nothing on a table already in SQL mode, leaves the original untouched if anything fails before the swap, and re-running it heals a half-finished migration rather than losing rows. The table must not be written to while it runs. (STN-29717)Warning
p6.table.migrateToSqlStoragewas removed again in 6.10.26: a table switched to theSQLstorage mode now takes over the records of its legacyXMLstorage on its own, so the method no longer had a use case. (STN-31671)
Groovy DSL¶
- New
p6.csv.sortmethod to sort a CSV file on a column, by name when the file has a header line or by zero-based index when it doesn’t. It reuses the wholeparseconfiguration, rewrites the file in place by default or writes to a separateoutputdestination, and supports descending and numeric ordering. Useful for normalising vendor batch files before import. As part of this, parsed CSV rows now preserve their column order, which was previously scrambled. (STN-29658) - The
p6.wrapvalue wrappers have been substantially enriched so scripts rarely need to reach for raw Java utilities. Numbers gain comparisons, arithmetic aliases, preciseBigDecimalrounding,percentOf/pct,isBetweenandasFileSize(); dates gain comparisons, diffs (includingweeksUntil/monthsUntil), period boundaries (start/end of week, month, quarter, year), ISO fields andnow(); strings gain substring/regex/case/slug helpers, encoding and hashing, XML escaping and base64/bytes/stream conversions; files expose metadata plusasString/asUri; and XML adds namespace-agnostic querying and namespaced construction. Redundant collection/boolean wrappers that only duplicated native Groovy were removed, and the reference docs were regrouped alongside full unit-test coverage. (STN-28989)
Scripting & Linting¶
- The Groovy linter no longer reports the
CatchExceptionandJavaIoPackageAccessrules. Both fired systematically on legitimate connector code — catchingExceptionaround ap6.*call is the recommended idiom, and directjava.iouse is normal in file-handling scripts — which forced developers to maintain per-script exclusions. The linter now reports strictly fewer violations, so no previously-passing script can start failing. (STN-30979)
Removals & Security¶
- The blockchain integration has been removed from Platform 6: the
web3besu,web3ethereumandweb3quorumDSLs, theweb3jroute type and its route template, and allorg.web3j/camel-web3jdependencies. It was unused and dragged in a vulnerable OkHttp version (CVE-2021-0341, certificate validation bypass), which dependency scanning no longer reports. No new third-party dependency was introduced in its place, and the related documentation pages and tutorial have been removed. Breaking change: any script or route still using the web3 DSL bindings or aweb3j://endpoint must be migrated or removed before upgrading. (STN-29649)