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.
cm.abstract.pmx now depends on cm.core.pmxThe 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.
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
cm.core.part.importA 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 recordsPMXExporter 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 optionsThis 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.