Opportunity Migration — Remaining Work Items¶
| Date | February 10, 2026 (updated) |
| Project | CRM 2011 → D365 Opportunity Migration (Bio-Cat) |
| Status | One test record migrated and validated. All value transformations verified. |
Current State¶
One test record ("Prozyme 6 (HUT assay)") has been migrated from CRM 2011 to D365. A field-by-field validation was performed comparing all 42 mapped fields between the source and target systems.
Validation results for the test record:
| Category | Count | Meaning |
|---|---|---|
| Matched | 19 | Source and target values agree (includes transformed values) |
| Mismatched | 0 | — |
| Target empty | 1 | kl_requestedby — systemuser lookup requires team mapping |
| Source empty | 4 | Source is null; D365 has a default value — OK |
| Both empty | 18 | Neither system has data for this field — OK |
Remaining Work Items¶
WI-1: Systemuser Lookup Mapping for kl_requestedby¶
| Priority | Must-fix before migration |
| Status | Not started |
| Affects | CFPRequested_by → kl_requestedby |
| Type | Team decision + data prep |
Problem¶
CRM 2011 stores CFPRequested_by as a Picklist of staff names. D365 kl_requestedby is a Lookup to systemuser. The migration cannot map picklist integers to systemuser GUIDs without a mapping table.
The current CRM 2011 picklist values are:
| CRM 2011 Value | Label |
|---|---|
| 2 | Chris Schuler |
| 7 | Dottie Davis |
| 9 | Other |
| 14 | Chris Penet |
| 100000000 | Michael Hammond |
| 100000001 | Charlie Pettygrove |
| 100000002 | Erin Steva |
| 100000003 | Marc Jensen |
| 100000004 | Karen Engel |
| 100000005 | Jenn Daughtrey |
| 100000006 | Mark Walin |
| 100000007 | Stephen Schuler |
| 100000008 | Maggie Murphy |
| 100000009 | Kris Norman |
| 100000010 | Dan Little |
Team Action Required¶
- Confirm which of these people exist as systemusers in D365.
- Query D365
systemusersentity byfullnameto get GUIDs. - Decide what to do with
"Other"(value 9) and people who don't exist in D365. - Provide the completed mapping to the migration team.
Note: The
kl_legacyrequestedbyfield already stores the raw value as a fallback text field. If the systemuser mapping is too complex, the team may decide to leavekl_requestedbyempty and rely on the legacy field.
WI-2: Create Legacy Opportunity ID Field in D365¶
| Priority | Must-fix before migration |
| Status | Not started |
| Affects | D365 Opportunity entity customization |
| Type | D365 configuration (Maker Portal) |
Problem¶
There is currently no field in D365 to store the CRM 2011 OpportunityId GUID. Without this:
- Validation cannot reliably match D365 records back to their CRM 2011 source (it falls back to matching by name, which is fragile).
- Re-runs of the migration cannot detect "already migrated" records.
- Cleanup is difficult if records need to be rolled back.
Solution¶
- Open D365 → Power Apps Maker Portal → Tables → Opportunity.
- Create a new column:
- Display Name: Legacy Opportunity ID
- Logical Name:
kl_legacyopportunityid(or per your publisher prefix) - Data Type: Single Line of Text (100 characters)
- Searchable: Yes
- Save and Publish the Opportunity table customization.
- Provide the new field's logical name to the migration team so it can be included in the field mapping.
Verification¶
Open an Opportunity form in D365, confirm the "Legacy Opportunity ID" field is visible (or add it to the form if needed).
WI-3: Resolve Ambiguous and Missing Mappings¶
| Priority | Should-fix before migration |
| Status | Not started |
| Affects | Fields listed in the mapping report's "Ambiguous" and "Missing" sections |
| Type | Decision + possible D365 configuration |
These fields from the mapping report need team decisions:
3a — Ambiguous Fields Requiring a Decision¶
| Source | Candidates | Decision Needed |
|---|---|---|
customerid (Account) |
accountid or parentaccountid |
Which D365 field should receive the CRM 2011 customer? |
parentcontactid (Contact) |
contactid or parentcontactid |
Which D365 field? |
CFSBPCity / CFSCity (City) |
kl_shipto_city |
Which source field is correct? |
CFSFax / CFSBPFax (Fax) |
kl_legacyfax |
Which source field? |
CFSFormula_1 through CFSFormula_20 |
kl_legacyformula |
Concatenate all 20 formula fields into one text field? What delimiter? |
CFPUnit_of_Measure |
kl_priceuom and/or kl_legacyuom |
Confirm the UOM value translation (gms→gms, kgs→kgs, mls→mL, liters→L, Gallons→gal) |
3b — Missing Fields¶
These were identified in the mapping report as needing new D365 columns or are currently excluded from migration. Review each and decide whether to:
- Create the column in D365 and add to the field mapping
- Skip (document as intentionally excluded)
Key ones:
- ownerid → ownerid (Owner assignment — should migrated records keep the original owner or be assigned to a migration account?)
- CFPUnit_of_Measure → kl_legacyuom (UOM translation — mapping table exists but field not in active mapping)
- new_reminderson → Legacy Reminders On (not yet mapped)
- Formula fields → kl_legacyformula (20 source fields → 1 target)
3c — Fields Flagged for Possible Removal¶
CFSContact→kl_legacycontact: mapping report asks if this should be removed since it's accounted for elsewhere as a non-Legacy field. Decision needed.CFPRequested_by→kl_legacyrequestedby: same question. Decision needed.
WI-4: Full Migration Dry Run¶
| Priority | Do after WI-1 through WI-3 are complete |
| Status | Not started |
| Type | Operational |
Steps¶
- Run a dry-run migration across all Opportunity records to surface any data edge cases (no records are written — this is a validation-only pass).
- Review all warnings for unmapped Option Set values, type conversion failures, or skipped fields.
- Fix any newly discovered issues.
- Migrate a small batch (e.g. 10 records) and validate them in D365.
- When satisfied, proceed to the full migration.
WI-5: Post-Migration Validation¶
| Priority | Do after full migration |
| Status | Not started |
| Type | Operational |
Steps¶
- Run a field-by-field comparison of all migrated Opportunity records between CRM 2011 and D365.
- Review the summary for any fields with high mismatch or missing-value rates.
- Spot-check individual records in D365 for correctness (open the record, verify key fields).
- Deliver the validation summary to stakeholders.
Reference: Option Sets That Match Between Systems (No Action Needed)¶
These option sets use identical integer values in both CRM 2011 and D365:
| Field | Values |
|---|---|
kl_shippingmethod |
2=UPS Regular, 3=UPS Next Day Air AM, 4=UPS Next Day Air, 5=UPS 2nd Day AM, 6=UPS 2nd Day, 7=UPS NDA Saver, 8=UPS 3-Day, 9=FedEx, 10=Other, 11=?????, 100000000=FedEx Ground |
kl_allergens |
100000000=Eggs, 100000001=Fish, 100000002=Milk, 100000003=Peanuts, 100000004=Shellfish, 100000005=Soybeans, 100000006=Tree Nuts, 100000007=Wheat, 100000008=Sulfites. D365 adds 100000009=None. |
Reference: Key Resources¶
| Resource | Purpose |
|---|---|
| Active field mapping | 42 field-level source → target mappings — edit to add/remove fields |
| Mapping report | Documents all identified source fields, their D365 targets, and any ambiguous/missing items |
| CRM 2011 environment | Source system for reading Opportunity records |
| D365 environment | Target system for creating/updating Opportunity records |
| Power Apps Maker Portal | Where D365 entity customizations (new columns, Option Sets) are configured and published |