Diagram - BPMN Data and Groups

Edit page catalogs without selection, bind data references and IO, and categorize visual Groups.

#Usage

Use a selected visual Group record. Category membership does not reparent enclosed nodes.

A data definition is catalog metadata; a reference is a saved canvas node. Local IO belongs to an activity/event. A Group is a visual frame with saved logical membership. Keep those identities separate when editing and reusing graphs.

Use the BPMN setup with the module installed in the store. Keep the matching semantic root and copied inspector under Diagram.Root. The examples below include their complete model and controls.

#Edit page catalogs without selection

Loading Demo...

Start with no selection. Use Page catalogs, then Page data definitions and its item-definition controls. Rename Orders: every bound reference receives the derived name in one transaction. Catalog controls remain available with no selected node. Read only disables writes; completeness/status feedback describes the result.

The page BPMN envelope owns dataCatalog: { version: 1, items, definitions }. Item definitions describe type/collection metadata. Object definitions have process and scope ownership; store definitions belong to the page catalog and can be reused by different participants on that collaboration page. Definitions are not canvas nodes.

#Edit local IO and associations

Loading Demo...

Select Review invoices to edit its IO. Rename request IO remaps the input association atomically. Try clearing referenced IO rejects until associations are repaired or removed. Select a dotted association to edit its owner-local IO ID. Process inputs and outputs are separate paper-fold nodes at process/lane level.

editor.setIO(id, io?) sets or clears local IO; renameIO(id, oldId, newId) updates associations in the same transaction. Data associations name explicit local ioId, not the activity body ID. Input runs from data reference/process input to the owner; output runs from owner to reference/process output. Item-definition identity and collection status must match. Two omitted item definitions mean unspecified types. Associations stay in one process/scope and have one source/target.

#Data reference

ModelFields, defaults and limits
Item definitionid, optional name, structure, isCollection; ≤64/page. IDs unique across item and definition arrays.
Object definitionid, kind: 'object', processId, scopeId, optional name, itemDefinitionId, isCollection; object visibility in its owning scope and descendants.
Store definitionid, kind: 'store', optional name, itemDefinitionId, integer capacity 0–1,000,000, Boolean isUnlimited default false. Unlimited overrides capacity descriptively.
CatalogVersion 1; ≤128 definitions/page; ID syntax ≤128 characters. Optional name/state/structure nonblank ≤256. Unknown versions/fields or dangling IDs reject.
dataReference nodedataKind: 'object' | 'store', optional definitionId, state; missing binding is incomplete authoring. Bound names/collection markers derive from catalog authority.
Process dataInput/dataOutputOptional name, itemDefinitionId, isCollection, state; top-level process/lane only, no embedded subprocess IO nodes.
Owner io{ inputs, outputs }, ≤16 local IDs across directions on tasks/calls. Send permits at most one input/no output; Receive permits at most one output/no input. Subprocess IO excluded.
Event IOStandalone Message/Signal/Error/Escalation: catches/boundaries at most one output, throws at most one input. Composite payload mapping excluded.
IO itemLocal id, optional name, itemDefinitionId, isCollection, state; IDs distinct across both directions.
dataAssociation flowdirection: 'input' | 'output', actual ioId and process/scope; no assignments, transformations or direct reference-to-reference data transfer.

When itemDefinitionId is present its item owns collection status; redundant isCollection on object/IO metadata rejects. Reference labels and symbols are materialized and validated; their geometry, font and label positions stay instance-owned. createDiagramBpmnNode(..., model) resolves these values during initial creation. Use setDataCatalog/updateNode/setIO for live atomic semantic and visual updates. Catalog edits check current content permission on every BPMN node on that page.

Copied form operations include addItem, removeItem, toggleItemCollection, addDataDefinition, removeDataDefinition, definitionName, storeCapacity, saveCatalog, dataKind, reference, duplicateReference, processIO, saveIO, removeIO, clearIO, renameIO and associationIO. Removing a used identity rejects; clear/repair references first. duplicateDataReference deliberately shares an existing same-page definition, unlike generic graph duplication which clones dependencies. diagramBpmnDataCatalog, bpmnDataPresentation and diagramBpmnIOIdentity expose catalog/presentation and stable owner/local-IO identity; they do not transfer values.

#Group visually without reparenting

Loading Demo...

Select the frame, then Capture enclosed members. Review, Ship and their sequence become explicit category members. Move/resize the frame and membership remains saved; its tasks are never structural children. Select logical members uses recorded membership even outside the frame. Delete members with cleanup removes nodes, incident connectors and category references together; Undo restores them.

A Group stays at page root, with page ID in process/scope as artifact ownership. It is a transparent dash-dot frame: true node: borders/labels select it, the interior does not intercept picking. It cannot own children, be parented/rotated, become a flow node or be any connector endpoint. Routing excludes it as an obstacle. Ordinary layout does not maintain its enclosure.

#Category and Group reference

SurfaceContract
categoryCatalogVersion 1; ≤32 categories/page, ≤32 values/category, ≤512 member IDs/value.
Categoryid, optional nonblank name ≤256, values; IDs unique across categories and values on page.
Valueid, optional nonblank value ≤256, explicit memberIds.
Groupkind: 'group', optional categoryValueId. Unbound warns; bound label derives as Category: Value, with ID fallback. Edit catalog text instead of the reserved label.
MembersSame-page events/boundaries, tasks, calls, subprocesses, gateways, data references and sequence flows; can cross pools/scopes and belong to several values.
Excluded membersParticipants, lanes, Groups, annotations, process IO, messages and associations. Enclosure can visually surround these without assigning logical membership.

setCategoryCatalog, groupMemberIds, categorizeEnclosed, duplicateGroup and deleteCategorized are editor operations. Capture is an additive snapshot of fully enclosed visible FlowElements plus sequences whose endpoints are enclosed, not continuous recategorization. Deleting a frame leaves metadata/members. Deleting a member requires cleanup. Remove/rebind frames before deleting their category value.

Catalog changes need current content permission on page nodes/connectors; identity or membership changes also require structure permission. Group binding needs structure permission. Layer/ancestor locks and history permissions apply. Inspector operations are addCategory, renameCategory, removeCategory, addCategoryValue, removeCategoryValue, saveCategoryValue, bindGroup, captureGroup, selectGroupMembers and duplicateGroup. diagramBpmnCategoryCatalog, diagramBpmnCategoryValue and bpmnGroupLabel read derived category data.

Reuse captures required catalogs with the graph. Native JSON saves their page-local identities. XML has format-specific type/default rules described in the retained XML export and import guides; native store isUnlimited defaults false, while omitted XML attributes follow the schema default on import.