Mapping Sheet Overview
The Mapping Sheet is the Excel workbook in which you define how a source system maps onto a target system:
- Structures: which source folder goes to which target folder
- Content types: which source content type becomes which target content type
- Metadata fields: which source property fills which target field, and how
- Principals: which source user or group becomes which target user or group
- Permissions: which source permission becomes which target permission level
The mapping decisions themselves are always yours. The Populate Mapping Sheet flow prefills the workbook with everything found in the extracted source and target, so you start from a complete inventory instead of an empty sheet.
The Mapping Sheet is a specific workbook that ships with the Transformation Accelerator. Use this workbook. Don't rename it, and don't replace it with another file. An empty or self-made Excel file won't work. The dropdowns, formulas, named ranges and key columns the mapping depends on exist only in the template.
Workflow
| Step | What you do | Result |
|---|---|---|
| 1 | Extract the source and the target to MongoDB with their connectors. | Source and target data are in two databases. |
| 2 | Find the path of the Mapping Sheet that the transformation uses. Keep the file where it is and don't rename it. | The workbook the transformation will read. |
| 3 | Run Populate Mapping Sheet with mappingSheetPath set to that same path. | The source columns and the target lookup sheets are filled. |
| 4 | Map: pick a target from the 🟨 dropdowns and fill in the 🟩 settings. | Every source row has a target. |
| 5 | Resolve every 🟥 red and 🟧 amber cell (Validation checks). | A complete, consistent mapping. |
Populate Mapping Sheet overwrites every sheet it writes to, including the mapping choices you already made on those sheets. Run it once before you start mapping. If you need to run it again later, back up the workbook first and carry your mapping over afterwards.
Sheets at a glance
The workbook has a Legend sheet, five mapping sheets you work in, and five target lookup sheets that feed the dropdowns.
| Mapping sheet | What you map | Dropdown reads from | Prefilled by the flow from |
|---|---|---|---|
Structures | Source folders → target folders | Target Structures | Source CONTAINER objects |
Content Types | Source content types → target content types | Target Content Types | Distinct content types of source CONTAINER and RECORD objects |
Metadata Fields | Source properties → target fields, with rules | Target Metadata | Every property path used per source content type |
Principals | Source users and groups → target users and groups | Target Principals | Source PRINCIPAL objects |
Permissions | Source permissions → target permission levels | Target Permissions | Distinct permission values in source ACL objects |
Color legend
Every column has a color that tells you who is responsible for it.
| Color | Meaning | What you do |
|---|---|---|
| 🟦 Blue | Source side | Filled by Populate Mapping Sheet. You can also type or paste values here. |
| 🟨 Yellow | Target choice | Pick from the dropdown. Never type free text. |
| ⬜ Grey, italic | Formula | Fills in automatically. Never edit. |
| 🟩 Green | Manual target-side setting | Fill in by hand where needed. |
The validation checks use two more colors:
| Color | Meaning |
|---|---|
| 🟥 Red | Error. The row won't map correctly until it's fixed. |
| 🟧 Amber | Warning. Something is missing, or a value will be ignored. |
Ground rules
- Columns with a
*in the header are key columns. Never rename or delete them. - Don't touch the
(helper)columns. They're hidden and drive the dropdowns and the checks. - Don't map in the
Target …sheets. They're lookup lists. Every dropdown reads from them. - Formulas, dropdowns and checks cover rows 2 to 10,000. Rows below that won't work.
- Multi-value cells. Four columns accept a list of values:
KindandSource SystemNameonContent Types, andKind(s)andSource Content Types SystemNameonMetadata Fields. Separate the values with commas. Spaces around the separators are ignored.
Sheet reference
- Structures
- Content Types
- Metadata Fields
- Principals
- Permissions
- Target sheets
Maps source folders to target folders. The flow prefills one row per source folder down to sourceDepth levels.
| Column | Color | Description |
|---|---|---|
*Source ID | 🟦 | ID of the source folder. |
Source Name | 🟦 | System name of the source folder. |
Source Path | 🟦 | Full hierarchy path of the source folder. |
Only contents | 🟦 | TRUE / FALSE. Migrate the folder's contents without the folder itself. |
Only documents | 🟦 | TRUE / FALSE. Migrate only the documents in the folder, not its subfolders. |
Target | 🟨 | Target folder, shown as Name (Path). |
Target ID | ⬜ | ID of the chosen target folder. |
Target Name | ⬜ | Name of the chosen target folder. |
Target Path | ⬜ | Path of the chosen target folder. |
Target Type | ⬜ | Type of the chosen target folder. |
Branch | 🟩 | Optional branch setting for this folder. |
Target turns 🟥 red while a source row has no target, and green once it has one. This lets you see at a glance which folders still need a target.
Maps source content types to target content types. The flow prefills one row per distinct content type, per kind (CONTAINER or RECORD).
| Column | Color | Description |
|---|---|---|
*Kind | 🟦 | CONTAINER or RECORD. Multi-value. |
*Source SystemName | 🟦 | System name of the source content type. Multi-value, so several source content types can share one target in a single row. |
Source DisplayName | 🟦 | Display name of the source content type. |
Target | 🟨 | Target content type, picked by display name. |
*Target SystemName | ⬜ | System name of the chosen target content type. |
Target DisplayName | ⬜ | Display name of the chosen target content type. |
Comments | 🟩 | Free notes. |
Metadata Fields looks up each row's target content type on this sheet. Finish this sheet first, and the metadata dropdowns show the right fields straight away.
Maps source properties to target fields. The flow prefills one row per property path per source content type.
| Column | Color | Description |
|---|---|---|
*Kind(s) | 🟦 | CONTAINER or RECORD. Multi-value. |
*Source Content Types SystemName | 🟦 | Source content type this property belongs to. Multi-value. |
Source Content Types DisplayName | 🟦 | Display name of the source content type. |
Source DisplayName | 🟦 | Property name, relative to source.properties, for example title or author.name. |
Source Content Store Path | 🟦 | Full path of the property in the content store, for example source.properties.author.name. |
Target Content Type | ⬜ | Target content type that the source content type is mapped to on Content Types. |
Target | 🟨 | Target field. The dropdown offers only fields of the row's Target Content Type. |
*Target SystemName | ⬜ | System name of the chosen target field. |
Target DisplayName | ⬜ | Display name of the chosen target field. |
Target Content Store Path | ⬜ | Path the value is written to, for example target.properties.<field>. |
Target Type | ⬜ | Data type of the target field. |
Rule | 🟩 | How the value is produced. See Rules. |
Parameter | 🟩 | Input for the rule. |
Max Length | 🟩 | Whole number. Truncates text values. |
Format | 🟩 | Output format, for example for dates. |
Comments | 🟩 | Free notes. |
Rules
Rule | Behavior | Parameter | Source Content Store Path |
|---|---|---|---|
| (empty) | The source value is copied as is. | Must be empty | Required |
fixed | Parameter is written as is. The source value isn't used. | The value to write | Must be empty |
sheet | The source value is translated through a lookup sheet. | Name of the lookup sheet | Required |
Target Content Type is never typed. It finds the Content Types row whose Source SystemName list contains this row's source content type. A field listed against one source content type therefore still resolves on a Content Types row that lists several.
The Target dropdown lists at most the first 15 fields of a target content type, in the order they appear on Target Metadata. If a target content type has more fields, reorder Target Metadata so the fields you need are in the top 15.
Maps source users and groups to target users and groups. The flow prefills one row per source principal.
| Column | Color | Description |
|---|---|---|
*Source SystemName | 🟦 | System name of the source user or group. |
Source DisplayName | 🟦 | Display name of the source user or group. |
Target | 🟨 | Target user or group, shown as DisplayName (SystemName). |
*Target SystemName | ⬜ | System name of the chosen target principal. |
Target DisplayName | ⬜ | Display name of the chosen target principal. |
Maps source permissions to target permission levels. The flow prefills one row per distinct permission value in the source ACLs.
| Column | Color | Description |
|---|---|---|
*Source | 🟦 | Source permission value. |
Target | 🟨 | Target permission level. |
Priority | 🟩 | Decides which target level wins when several source permissions of one principal map to different target levels. A lower value means higher priority here. |
The five Target … sheets are the lookup lists behind the dropdowns. Populate Mapping Sheet fills them from the extracted target. You can also paste an export from the target system. Grey columns are formulas. Leave them in place.
| Sheet | Columns | Feeds the dropdown on |
|---|---|---|
Target Structures | *ID, Name, Path, Type, ⬜ Display | Structures → Target |
Target Content Types | *SystemName, DisplayName | Content Types → Target |
Target Metadata | *SystemName, DisplayName, *ContentType, ContentStorePath, Type, ⬜ Key, ⬜ Label | Metadata Fields → Target |
Target Principals | *SystemName, DisplayName, ⬜ Display | Principals → Target |
Target Permissions | *Name | Permissions → Target |
On Target Metadata, *ContentType must contain the system name of the target content type, exactly as on Target Content Types. Label shows DisplayName, or SystemName when there's no display name.
Validation checks
The template checks your mapping as you work. Resolve every colored cell before you continue with the transformation.
| Sheet | Cell | Color | Meaning | Fix |
|---|---|---|---|---|
Structures | Target | 🟥 | The source folder has no target. | Pick a target folder. |
Metadata Fields | Target Content Type | 🟧 | The source content type isn't mapped on Content Types. | Map it on Content Types. |
Metadata Fields | Target Content Type | 🟥 | The source content types in this row map to different target content types. | Split the row, or align the mapping on Content Types. |
Metadata Fields | Target to Target Type | 🟥 | The chosen field doesn't exist on the row's current target content type. This usually happens after a content type mapping change. | Pick the field again from the dropdown. |
Metadata Fields | Parameter | 🟥 | Rule is fixed or sheet, but there's no parameter. | Fill in the parameter. |
Metadata Fields | Parameter | 🟧 | There's a parameter, but no rule, so it's ignored. | Set a rule or clear the parameter. |
Metadata Fields | Source Content Store Path | 🟧 | The path is missing on a row that needs it, or set on a fixed row that won't use it. | Add or clear the path. |
Metadata Fields | Max Length | 🟧 | Max length is set on a non-text target field. | Clear it. |
Populate Mapping Sheet flow
Populate Mapping Sheet prefills the Mapping Sheet with the data from the extracted source and target. It fills the 🟦 source columns of the five mapping sheets and all five Target … lookup sheets. It doesn't make any mapping choices.
Before you run it
- The source and the target are extracted to MongoDB with their connectors, each in its own database.
- The target extraction includes the target's
CONTENTTYPEandPRINCIPALobjects. For SharePoint Online (spo), it also includes thepermissionLevelrecords. - You know the path of the Mapping Sheet that the transformation uses.
What it writes
The flow processes the sheets in the order below. It overwrites each sheet it writes to.
| Step | Source-side sheet | Target-side sheet | What is collected |
|---|---|---|---|
| 1 | Structures | Target Structures | CONTAINER objects up to sourceDepth / targetDepth levels deep, sorted by path. |
| 2 | Principals | Target Principals | All PRINCIPAL objects. |
| 3 | Content Types | Target Content Types | Source: every distinct content type per kind (CONTAINER, RECORD). Target: every CONTENTTYPE object. |
| 4 | Metadata Fields | Target Metadata | Source: every property path under source.properties, per kind and content type. Target: every field of every CONTENTTYPE. |
| 5 | Permissions | Target Permissions | Source: every distinct permission value in the ACL objects. Target: depends on targetSystem. |
How the source property paths are collected
For every CONTAINER and RECORD, the flow walks source.properties recursively and writes one row per leaf value. Each combination of kind, content type and property path is written once. Nested objects produce dotted paths. For example, source.properties.author.name appears as author.name in Source DisplayName, and as the full path in Source Content Store Path.
How Target Content Types handles duplicate display names
The Content Types → Target dropdown selects by display name. The flow therefore writes only the first target content type for each display name. If two target content types share a display name, only one of them appears on Target Content Types.
Settings
mongoConnection
The MongoDB connection string for the source, including the name of the database.
Example: mongodb://localhost:27017/source
mongoConnectionTarget
The MongoDB connection string for the target, including the name of the database.
Example: mongodb://localhost:27017/target
mappingSheetPath
The path to the Mapping Sheet that the transformation uses. Use exactly the same path, so the transformation reads the sheet you populated. Don't rename the file.
Example: C:/Migrations/Contoso/Mapping Sheet.xlsx
sourceDepth
The maximum folder depth that is included on Structures.
Depth is counted from the absolute path stored in the content store, not from the root folder of the connector. Every path segment counts as one level, including the drive letter.
You set the root of a File System source connector to C:\Users\user\Documents\testData. testData is the root folder in your content store, but its depth is 5: C:, Users, user, Documents, testData.
To include testData plus two levels below it, set sourceDepth to 7.
| Folder | Depth |
|---|---|
C:/Users/user/Documents/testData | 5 |
C:/Users/user/Documents/testData/Projects | 6 |
C:/Users/user/Documents/testData/Projects/2024 | 7 |
C:/Users/user/Documents/testData/Projects/2024/Q1 | 8, excluded |
In the content store, paths always use / as the separator, also for Windows sources. A folder whose name contains / is counted incorrectly.
Example: 8
targetDepth
The maximum folder depth that is included on Target Structures. It's counted the same way as sourceDepth.
Example: 8
excludedPropertiesPaths
Optional. An array of property paths to leave out of Metadata Fields. Use the full path, including source.properties.. The property and everything nested below it are skipped.
Example: ["source.properties.acls"]
targetSystem
The target system. It decides how Target Permissions is filled and how ContentStorePath is built on Target Metadata.
| Value | Target Permissions | ContentStorePath |
|---|---|---|
spo | Read from the target: RECORD objects with content type permissionLevel. | target.properties.<systemName> |
alfresco | Fixed list: Consumer, Contributor, Editor, Collaborator, Coordinator | target.properties.<id> |
netdocuments | Fixed list: administer, cabDefault, edit, noAccess, share, view | target.properties.<id> |
opentextcs | Fixed list: see, see_contents, modify, edit_attributes, add_items, reserve, add_major_version, delete_versions, delete, edit_permissions | target.properties.<id> |
documentum | No fixed list yet. The sheet is left empty, so fill it in by hand. | target.properties.<id> |
| any other value | The flow logs an error and leaves the sheet empty. | target.properties.<id> |
Troubleshooting
A dropdown is empty
The matching Target … sheet is empty. Check that the target was extracted to mongoConnectionTarget, and that the grey formula columns (Display, Key, Label) on the target sheet are still in place.
A target field is missing from the Metadata Fields dropdown
The dropdown shows at most 15 fields per target content type. Also check that *ContentType on Target Metadata matches the *SystemName on Target Content Types exactly.
A target content type is missing from Target Content Types
Another target content type has the same display name. The flow keeps only the first one. Add the missing one by hand, with a unique display name.
Target Permissions is empty
targetSystem is empty, has an unsupported value, or is documentum. For spo, check that the permissionLevel records were extracted.
My mapping disappeared after running the flow again
Populate Mapping Sheet overwrites the sheets it writes to. Back up the workbook before you run the flow again, and carry your mapping over afterwards.