Composite Attribute Mapping (Combine Values)
Learn how to create composite attribute mappings by combining multiple source values and text to form custom outputs in the push dialog mapping table.
What is a composite mapping?
Most attributes in the push dialog get their value from one source — a single zone extract, or one filename segment, or a carryover. A composite lets you build a value out of several sources strung together with literal text.
Common uses:
- Compose a display name from zone values:
A204+-+Rev C→A204 - Rev C - Stitch the discipline code from a filename segment with the drawing number from a PDF zone
- Add a fixed prefix (e.g.
WIP_) to a carryover value
The composite editor is a small modal that lives off the Source dropdown of any mapping row.
How to open it
In the push dialog's mapping table:
- Find the row for the destination attribute you want to compose.
- In the Source dropdown, pick Combine values….
- The row collapses to a single button that says either Compose… (no parts yet) or N parts — edit.
- Click the button to open the Compose value for "attribute name" modal.
Hover the button at any time to see a tooltip with the current composition (e.g. Composition: Zone:DrawingNumber + " - " + FilenameSegment:Rev). The live-resolved value is always visible in the rightmost preview column.
The composition canvas
The modal shows your composition as a row of chips — one per part:
- Token chip (blue) — pulls a value from a source (zone, filename segment, carryover, file name slice, etc.)
- Literal chip (white, with editable text) — exact text written as typed
Underneath the chip row, two buttons add new parts:
- + Insert token — opens the token picker (source value + optional split / segment)
- + Insert text — appends an editable literal chip you can type into directly
Reordering chips
Each chip has ‹ and › buttons to move it earlier / later. Buttons disable themselves at the ends of the row, so you can't accidentally move past the boundaries. There's no drag-and-drop — just click ‹ or › until the chip is where you want it.
Editing chips
- Token chip — click the chip's label to reopen the token picker for that part. Pick a different source or change the split.
- Literal chip — type directly into the chip; it grows as you type.
- Backspace on a focused token chip removes it.
- × on the right of any chip removes that part.
Live preview
The push dialog's preview column updates as you compose. The preview is rendered against the highlighted file in the file list above the mapping table — click another row to switch which file the composition is rendered against. That's the easiest way to confirm a composition produces sensible values across different files.
Source tokens
A composite token can pull from any source already available to that file:
| Source category | Examples |
|---|---|
| Zone values | Zone:DrawingNumber, Zone:RevisionStamp — extracted text from named PDF zones |
| Filename segments | FilenameSegment:Rev (named via filename mapping) or Filename split by _ → segment 3 (unnamed) |
| Carryover | Carryover:DrawingNumber — the existing value on the source ACC version (same-cloud copies only) |
| File name | FileName (with extension), FileName (without extension), FileExtension |
Each token can be split with a separator + segment picker (All / First / Last / Specific), exactly like the non-composite case. So you can compose Zone:DrawingNumber + - + FilenameSegment:Rev split by . segment Last to take just the trailing dot-segment of the revision.
Tokens that don't resolve on a given file produce empty values. The push still uploads — the composition just collapses where the token is missing.
Display name composition + extension
Composite has special handling on the built-in File name (display name) row (__displayName__):
- The original file extension is always re-appended automatically at upload time, regardless of what you compose. You don't need a
.pdfliteral at the end. - A green banner inside the modal reminds you of this when you're composing the display name: The file extension is added automatically. Whatever you compose here becomes the file's name; the original extension (.pdf) is appended on upload.
- Cleanup of forbidden characters (per-cloud) runs on the resolved name — see filename sanitization warnings.
- The duplicate-name preflight runs against the composed names — if your composition produces the same name for two different files, you'll see the warning before pushing.
This means a composition like Zone:DrawingNumber + - + Zone:Rev produces A204 - C across all three clouds, with .pdf (or whatever the source extension is) added on upload.
How composites are stored in presets
When you save a mapping as a preset, composite definitions are captured in full. The JSON shape is:
"__displayName__": {
"selectedSourceToken": "composite",
"include": true,
"parts": [
{ "kind": "token", "sourceToken": "Zone:DrawingNumber" },
{ "kind": "literal", "literalText": " - " },
{ "kind": "token", "sourceToken": "FilenameSegment:Rev" }
]
}
Apply the preset on a different folder and the composite re-resolves against that folder's available tokens. Tokens that don't exist on the new folder are silently skipped on a per-file basis at push time.
Worked examples
"Drawing Number - Revision" display name
| Step | Action |
|---|---|
| 1 | In the File name (display name) row, pick Combine values… |
| 2 | Click Compose… |
| 3 | + Insert token → Source: Zone:DrawingNumber → confirm |
| 4 | + Insert text → type - |
| 5 | + Insert token → Source: FilenameSegment:Rev → confirm |
| 6 | Close the modal |
| Result | Display name preview: A204 - C. Upload name: A204 - C.pdf. |
Prefixed carryover
| Step | Action |
|---|---|
| 1 | In the Status row, pick Combine values… |
| 2 | + Insert text → type WIP_ |
| 3 | + Insert token → Source: Carryover:Status → confirm |
| Result | If carryover is Approved, the resolved value becomes WIP_Approved for every file. |
Multi-segment compose from one filename
| Step | Action |
|---|---|
| 1 | In the Drawing Code row, pick Combine values… |
| 2 | + Insert token → Source: Filename split by _ segment 1 (Originator) |
| 3 | + Insert text → type - |
| 4 | + Insert token → Source: Filename split by _ segment 4 (Type) |
| 5 | + Insert text → type - |
| 6 | + Insert token → Source: Filename split by _ segment 6 (Number) |
| Result | A filename ACE_PRJ_ZZ_DR_A_0001 produces ACE-DR-0001. |
Limits and gotchas
- The composite editor is only available when the file has at least one source value (zone / filename / carryover). The dropdown shows Combine values… as disabled if no source is available.
- Token chips reference source-side names (zone field name, filename segment key, carryover attribute name). If you rename a zone in the template, presets that reference the old name will silently skip that token.
- Literal chips are written exactly as typed — leading and trailing spaces are preserved.
- The composition is applied to every file in the push, not just the selected file. The selected file is only used to render a live preview.
Next steps
- Pushing Files to the Cloud — the dialog the composite editor lives in
- Attribute mapping presets & auto-memory — save your composition for reuse
- Zone Templates — define the zone tokens composites pull from