Field Service Asset History Customers Can Actually See
A technical guide to one canonical asset record in Dataverse that feeds Field Service and a Power Pages portal: the model, account-scoped permissions, external licensing and an incremental sync that lets legacy systems keep running.
When service history sits in one legacy system, assets in another, and customers say the data is wrong, build one canonical asset record in Dataverse. Use the Field Service customer asset table, with parent and top-level assets and functional locations, link work orders to those assets, and publish a curated service history table rather than raw work orders. Surface it through Power Pages with Account-scope table permissions, which follow the parent account of the signed-in contact, and Parent-scope permissions for child records, so nobody sees another customer's equipment. External users are licensed as Power Pages authenticated users per site. Sync incrementally from the legacy systems with alternate keys and upsert, keeping them as the source until each cuts over.
Why do customers say the asset data in the portal is wrong?
Because they are looking at the join between two systems that never agreed on what an asset is. The asset register holds serial numbers, models and install dates; the service system holds visits against a site, a contract or a free-text equipment description. When the two are stitched together for a portal, visits attach to the wrong unit, replaced equipment still shows as installed, and a machine moved between sites carries history that belongs to its old location. The customer knows their own equipment better than your data does, so they notice immediately.
Publishing the stitched data faster does not help. The fix is to decide what the single asset record is, where it lives, and which system is allowed to change each part of it, before any customer sees it.
- Visits recorded against a site or contract, not a specific serial number.
- Different identifiers for the same unit in each system, with no mapping table.
- Replaced or scrapped units never closed in the asset register.
- Equipment sold, moved or transferred between customers, with history following the unit to the new owner.
- Contacts linked to the wrong account, or to a shared account used for convenience.
What should the canonical asset model in Dataverse look like?
Use the Dynamics 365 Field Service tables for what they are designed for, and add a small number of your own where the portal needs a curated view. The customer asset is the record every system points to. Assets form a hierarchy through the parent asset, with the top-level asset identifying the whole installation, and functional locations describe the position at the customer site separately from the unit currently installed there. How to model that hierarchy for your equipment is part of the build described on our Field Service implementation partner page, so we only cover what the portal adds.
The important design choice is not to show customers raw work orders. Work orders carry internal notes, costs, scheduling detail and statuses that mean nothing outside your company. Publish a customer-facing service history table instead, one row per completed visit per asset, written by the legacy import for past visits and by a process on work order completion for new ones.
| Table | Role in the model | Shown in the portal |
|---|---|---|
| Account | The customer that owns the equipment; the anchor for portal security. | Indirectly, as the scope of everything else. |
| Contact | The portal user, with the parent account set to their company. | Their own profile only. |
| Functional location | The site, building, line or room, in its own hierarchy. | Yes, to group assets the way the customer thinks about their site. |
| Customer asset | The canonical unit: product, serial number, account, functional location, parent and top-level asset, legacy keys. | Yes, the installed base list and asset detail. |
| Work order | Internal service delivery, linked to the customer asset on the work order and its incidents. | No; open work is shown as a summary status only. |
| Service history (custom) | One curated row per completed visit per asset, with date, type, outcome and report. | Yes, the history customers actually read. |
| Documents | Service reports, certificates and manuals attached to history rows or assets. | Yes, through the parent record. |
How do you match legacy asset and service records to one asset?
Matching is the part that decides whether customers trust the portal, and it cannot be fully automated. Load the asset register first, because it holds the identity of each unit, then attach service history to those assets. Store every legacy identifier on the Dataverse record as an alternate key, so each source record maps to exactly one row and can be reloaded safely.
- Match on product and serial number first, then on legacy identifiers from any existing cross-reference, then on site and equipment description with a human review.
- Put every record that does not match cleanly into an exceptions table with a named owner, rather than guessing or dropping it.
- Where history was recorded against a site only, attach it to the functional location, not to whichever asset happens to be there now.
- Mark units that are replaced or scrapped as inactive with a date, so the installed base shows what is really on site.
- Give customers a "report incorrect data" action on each asset that creates a correction request for your team; it turns complaints into a queue you can clear.
- Duplicate detection rules on serial number help stop new duplicates once the load is done.
How do you make sure no customer sees another customer's equipment?
Scope everything through the relationship between the signed-in contact and their account. In Power Pages, a table permission with the Account access type grants rows related to the parent account of the signed-in contact, through a relationship you choose. Put an Account-scope read permission on customer asset through its account relationship, and on functional location and service history in the same way. Documents and other child records get Parent-scope permissions that follow the relationship to a record the user can already reach, so a report is visible only because its asset is.
The full model, including why a Parent permission under a Global parent is effectively Global and how to test as a real external user rather than as an admin, is on our Power Pages table permissions guide. Two points are specific to asset portals.
- Equipment changes hands. If service history is only scoped through the asset, a new owner sees the previous owner's visits. Store the account on each service history row at the time of the visit and scope history by that account, not only by the asset.
- Group customers. Account scope follows the contact's parent account; if head office users must see equipment at several site accounts, design that access explicitly and test it, rather than assuming an account hierarchy is followed.
- Contact hygiene. A contact attached to the wrong or a shared account exposes that account's whole installed base; review contact-to-account links before invitations go out.
- Read only by default. Customers rarely need to write to assets; route corrections through a request table instead of granting write.
- Never enable the Web API for these tables with wider permissions than the pages use.
What should customers see first?
A short list of things they can check against reality, done well. The first release earns trust when every asset a customer sees is theirs, correctly located and correctly dated. Adding more screens before that is true multiplies complaints.
| Release | What customers see | Why in this order |
|---|---|---|
| First | Installed base by site, asset detail with serial number and install date, last completed visit, and a correction request action. | Customers can verify it themselves, and their corrections clean the data. |
| Second | Full service history per asset with service reports and certificates to download. | Only once history is matched to the right units and owners. |
| Third | Open work status and next planned maintenance from agreements. | Depends on the live Field Service process, not only on the migrated data. |
| Later | Raising a service request against a specific asset. | Creates work, so it needs the case or work order process agreed internally first. |
- Never show technician internal notes, costs, prices, margins or internal statuses.
- Show dates in the customer time zone and state when the data was last updated.
How are external customer users licensed?
Customer contacts who sign in to a Power Pages site are covered by Power Pages authenticated user capacity for that site, counted per month as unique people who sign in, not by internal Power Apps or Dynamics 365 licences. Anonymous visitors to pages that read Dataverse count towards anonymous capacity. Internal staff with qualifying licences can generally use the site without consuming external capacity. Capacity is per website, so running a separate portal per region or brand multiplies it.
We do not quote prices, and Microsoft revises definitions and qualifying licences, so check current terms before you budget. How licensing scales with audience size, and why a custom front end over Dataverse does not remove it, is covered in our Power Pages or custom front end comparison.
How do you sync from legacy systems while they keep running?
Treat the legacy systems as the source of truth until each one cuts over, and make Dataverse a one-way, incremental copy of them in the meantime. A full reload every night is simple to build and painful to run: it rewrites every row, fires every plug-in and flow, and makes it impossible to tell what actually changed. An incremental sync moves only what changed since the last successful run and can be replayed safely when a run fails.
- Detect change in the source: a modified date watermark, a change table or an export of changed records since the last successful run, stored per source.
- Upsert on alternate keys that hold the legacy identifiers, so a record is created once and updated after that, and a rerun never creates duplicates.
- Load in dependency order: accounts, functional locations, assets and their parents, then service history, then documents.
- Handle deletions explicitly with an inactive flag rather than deleting rows the portal or history may still reference.
- Block edits in Dataverse to fields the legacy system still owns, by security role or form logic, so the sync is never overwritten and never overwrites.
- Run a reconciliation of counts and key fields per source after each run, with differences reported to a named owner.
- Tooling can be dataflows, Azure Data Factory or an integration service; the choice matters less than keys, watermarks and reconciliation.
How do you cut over from the legacy systems without a gap in history?
One source at a time, with ownership moving on a stated date. Customers should never see a period where recent visits are missing because the old system stopped and the new process had not started. If you are also untangling several Field Service versions or regions at once, the sequencing guidance in Field Service transformation on a legacy estate applies here too.
| Step | Source of truth | What happens |
|---|---|---|
| 1. Mirror | Legacy systems | Incremental sync into Dataverse; portal open to internal testers and a few friendly customers only. |
| 2. Asset register cutover | Dataverse for assets; legacy for service history | New and changed assets maintained in Field Service; the legacy asset register frozen read only. |
| 3. Service cutover | Dataverse for new work | New visits run as Field Service work orders and write service history on completion; legacy history stays as imported rows. |
| 4. Final sync and freeze | Dataverse | Last incremental run, reconciliation signed off, legacy systems frozen read only as the audit source. |
| 5. Open the portal | Dataverse | Invitations go out account by account after contact-to-account links are reviewed. |
Should the customer portal run on Power Pages or a custom front end?
For most Field Service customers Power Pages is the natural route, because the assets and history already live in Dataverse and table permissions do the scoping. The Power Platform consulting service describes what a Power Pages build covers. It is still a platform decision worth making deliberately. We recommend the right solution - whether that's Microsoft Dynamics 365, Power Platform, or a custom-built CRM. Some businesses need the Microsoft ecosystem. Others need full control without licensing. We deliver both.
A custom front end becomes the better choice when the portal is a product in its own right with its own experience requirements, or when the asset data belongs on a platform you own and a very large external audience makes Microsoft licensing hard to justify. In that case a custom-built CRM and portal on React, Node.js, PostgreSQL or .NET, integrated with Field Service for the technicians, carries the same canonical model and the same account-scoped security in your own code.
How do you decide between Dynamics 365 and a custom CRM for the service platform?
Can afford licensing and want the Microsoft ecosystem
Dynamics 365
Microsoft 365, Teams and Outlook integration, a mature partner ecosystem, Copilot, and apps for sales, service and field operations that are configured rather than built.
Need full control and zero licensing
Custom CRM
A CRM built on React, Node.js, PostgreSQL or .NET that you own outright: your data model, your hosting, no per-user subscription, and features shaped exactly to your process.
Not sure which fits
We help you decide
A short discovery weighs licensing budget, process complexity, integrations and long-term ownership, then recommends one path. We deliver both, so the recommendation has no reason to lean.
How does Solzet deliver a customer asset history portal?
We start with a data assessment: exports from the asset register and the service system, a trial match of a representative sample, the list of exceptions and their causes, a proposed canonical model, and the permission design written out table by table. That tells you how much of the history can be shown with confidence before a portal is built.
Delivery then combines three pieces of work in one project: the Field Service and Dataverse model, the incremental sync from the legacy systems, and the Power Pages site with tested table permissions. Solzet delivers remotely from Yerevan, Armenia, with senior consultants and full-stack developers and 8+ years of Dynamics 365 Customer Engagement, Power Platform and custom CRM development, directly or white-label for Microsoft partners. We integrate with ERP and finance systems that hold equipment or billing data but do not implement them.
What do people ask us?
How do we show customers their Field Service asset and service history in Power Pages?
Build one customer asset record in Dataverse, with parent and top-level assets and functional locations, and link work orders to it. Publish a curated service history table rather than raw work orders. Expose assets, locations and history through Power Pages with Account-scope table permissions and Parent-scope permissions for documents, and test every page signed in as a real customer contact.
How do Power Pages table permissions stop one customer seeing another customer's assets?
An Account access type permission grants rows related to the parent account of the signed-in contact through a relationship you choose, such as the account on the customer asset. Child records like service reports use Parent-scope permissions, so they are visible only through an asset the user can already reach. Correct contact-to-account links are essential, because a contact on the wrong account sees that account's equipment.
Should customers see Field Service work orders directly?
Usually not. Work orders carry internal notes, costs, scheduling detail and statuses that confuse or mislead customers. A customer-facing service history table with one row per completed visit per asset, written from the legacy import and on work order completion, gives you control over what is published and keeps the portal stable when the internal process changes.
What happens to service history when equipment moves to a different customer?
If history is scoped only through the asset, the new owner sees the previous owner's visits. Record the account on each service history row at the time of the visit and scope portal permissions by that account as well as the asset. Update the account on the customer asset on the transfer date so the installed base list moves to the new owner.
How are external customers licensed for a Power Pages asset portal?
Signed-in customer contacts are covered by Power Pages authenticated user capacity, counted monthly as unique users who sign in to that site, and anonymous visitors count towards anonymous capacity. Internal users with qualifying licences generally do not consume external capacity. Capacity is per site. We do not quote prices; confirm current Microsoft terms with your licensing partner before budgeting.
Can the legacy systems keep running while we build the portal?
Yes. Keep them as the source of truth and sync incrementally into Dataverse using a change watermark per source, alternate keys holding the legacy identifiers and upsert, so reruns never create duplicates. Block edits in Dataverse to fields the legacy system still owns, reconcile after every run, then move ownership one source at a time on a stated date before freezing each legacy system.
What should the first release of an asset portal include?
Only what customers can verify: their installed base by site, asset detail with serial number and install date, the last completed visit, and an action to report incorrect data. Add full history with downloadable reports once matching is proven, then open work and planned maintenance. Raising service requests comes last, because it creates work that needs an agreed internal process.
Where should you go next?
Dynamics 365 Field Service implementation partner
The asset model, feasibility sprint and Field Service build for technicians and dispatch.
Power Pages table permissions
Access types, scoping child records, web roles and testing as a real external user.
Power Pages or custom front end
Choosing the portal route and how external licensing scales with audience size.
Field Service on a legacy estate
Sequencing a multi-phase Field Service programme across mixed versions.
Power Platform development
Power Pages, Power Apps, Power Automate and Dataverse built by senior developers.
Custom CRM Development
A customer portal and asset platform on React, Node.js, PostgreSQL and .NET without Microsoft licensing.
Which solution is right for your business?
Tell us what you need. A senior consultant replies within one business day with a recommendation - Dynamics 365, Power Platform, or a custom-built CRM - not a sales script.