Overview

CET 17.0 splits the PMX code that used to live entirely in cm.abstract.pmx into two layers. cm.abstract.pmx is now the abstract/export-facing package: it keeps the PMX order exporter, package initialization, test hooks, and local file-move/debug helpers. The reusable PMX database wrapper types, PMX data-definition objects, constants, and .NET bridge code have been moved into the new shared package cm.core.pmx.

That means most compile-time migration work is import and type rerouting. If your code previously referenced PMX model/database types through cm.abstract.pmx, update those references to cm.core.pmx instead. If your code used PMX import helpers such as PMXFilePartSource or ItemDataConverter, those APIs were not moved into cm.core.pmx; they now live in cm.core.part.import.

The ItemData option payload also changed shape during that extraction. The old abstract-only optionsSeq storage is gone in 17.0; the shared cm.core.pmx.ItemData uses a single canonical options array for option generation, appending through operator<<, exporter insertion, and part initialization from PMX data.

Compile Time Changes

cm.abstract.pmx now depends on cm.core.pmx

The abstract PMX package now imports the shared PMX core package and expects PMX model/database types to come from there.

Old: use cm.abstract.pmx;
New: use cm.abstract.pmx;
New: use cm.core.pmx;

In practice, packages that only need the order exporter can usually keep use cm.abstract.pmx;. Packages that instantiate PMX records or database objects directly should also import cm.core.pmx.

Moved PMX model and database interfaces

The following public PMX classes were removed from cm.abstract.pmx and recreated in cm.core.pmx. Update imports and fully-qualified references accordingly.

Old: cm.abstract.pmx.AttributeData
New: cm.core.pmx.AttributeData

Old: cm.abstract.pmx.Database
New: cm.core.pmx.Database

Old: cm.abstract.pmx.ItemData
New: cm.core.pmx.ItemData

Old: cm.abstract.pmx.OptionData
New: cm.core.pmx.OptionData

Old: cm.abstract.pmx.PartDetails
New: cm.core.pmx.PartDetails

Old: cm.abstract.pmx.PictureData
New: cm.core.pmx.PictureData

Old: cm.abstract.pmx.ProjectInformation
New: cm.core.pmx.ProjectInformation

The internal bridge/base helpers also moved with the same package rewrite:

Old: cm.abstract.pmx.DataDefinition
New: cm.core.pmx.DataDefinition

Old: cm.abstract.pmx.PMXNetObj
New: cm.core.pmx.PMXNetObj

PMX import helpers were rerouted to cm.core.part.import

A few interfaces were removed from cm.abstract.pmx, but they were not moved to cm.core.pmx. They now belong to the part-import layer.

Old: cm.abstract.pmx.ItemDataConverter
New: cm.core.part.import.ItemDataConverter

Old: cm.abstract.pmx.registerItemDataConverter(...)
New: cm.core.part.import.registerItemDataConverter(...)

Old: cm.abstract.pmx.getConverter(...)
New: cm.core.part.import.getConverter(...)

Old: cm.abstract.pmx.PMXFilePartSource
New: cm.core.part.import.PMXFilePartSource

Use cm.core.part.import when your package creates parts from PMX files or registers PMX ItemData converters.

PMXExporter writes the new PMX project metadata records

PMXExporter now creates and inserts additional PMX records before item export. If you extend PMXExporter, override its insert flow, or substitute your own PMX Database, account for the extra records and database calls.

Added effective usage in PMXExporter: ShipToInformation shipToInfo
Added effective usage in PMXExporter: SoldToInformation soldToInfo
Added effective usage in PMXExporter: NotesTable notesInfo
Added effective usage in PMXExporter: OrderInformation[] orderInfos

Added effective database calls:
Database.insertNotesInfo(...)
Database.insertShipToInformation(...)
Database.insertSoldToInformation(...)
Database.insertOrderInformation(...)

ItemData.optionsSeq was removed in favor of options

This is a broader API migration than the single exporter line change. In 16.5, cm.abstract.pmx.ItemData stored PMX options in optionsSeq, ItemData.operator<<(OptionData) appended into optionsSeq, and exporter code iterated item.optionsSeq. In 17.0, the shared cm.core.pmx.ItemData removes optionsSeq and keeps one option sequence named options.

Update any custom code that builds, mutates, exports, or imports PMX ItemData objects accordingly.

Old field: public OptionData[] optionsSeq
New field: public OptionData[] options

Old exporter usage: insertOptionData(itemID, item.optionsSeq)
New exporter usage: insertOptionData(itemID, item.options)

This also affects code on both sides of PMX conversion:

Export generation in 17.0 writes option rows into itemData.options
Import initialization in 17.0 reads option rows from item.options

If your package previously touched optionsSeq directly, switch all such reads and writes to options. If you overrode PMX item-generation or PMX part-initialization flows, verify that they no longer assume two different option collections exist.