PL-100 study materials
PL-100 study resources

Field Inspection App: Platform, Delegation, and Release Strategy

PL-100 · Put your knowledge to work in context.

All case studies

Field Inspection App: Platform, Delegation, and Release Strategy

Contoso Utilities has 220 field technicians who perform 6,500 safety inspections per day, many in basements and remote pump stations with no connectivity. The current canvas app reads a SharePoint list containing 182,000 inspection records. Technicians report the app takes 25–40 seconds to open, the gallery displays incomplete counts, and a yellow delegation warning appears on a Filter that uses StartsWith on asset ID and a lookup to the site table. Makers build in the default environment and publish directly to production; a change last month overwrote a colleague’s screen. The operations manager wants offline inspections, role-based visibility so technicians see only their assigned sites, and a reliable release process. Premium licensing is approved for technicians but not for the 15 office staff who only view reports. The team must choose a data platform and a delivery pattern before a four-week pilot.

1. Which data platform should the pilot use, and what evidence would make you reconsider? Explain how it resolves the offline, delegation, and security symptoms.

Read the worked answer

Recommendation: Dataverse for the pilot. The symptoms are not one bug; they are limits of using a large SharePoint list as an operational database. A 182,000-item list with lookup filters and StartsWith will hit delegation and performance limits in a canvas app. Dataverse gives delegable queries, real relationships, row-level security, and an audit trail.

Why it fits each symptom:

  • Offline: cache only the technician’s assigned inspections with SaveData/LoadData in the canvas app, or move the inspection form to a model-driven app with an offline profile. Do not try to cache 182,000 rows.
  • Delegation: filtering on a Dataverse lookup and StartsWith on a text column is delegable, so counts and galleries reflect the server result rather than the first page of records.
  • Security: technicians get a security role scoped to their business unit or a team; a filter on assigned technician is enforced by the app, and record access is enforced by Dataverse.

Reconsider if: the 220 technicians cannot all be licensed, the data must remain on-premises for regulatory reasons, or the pilot must run with zero premium cost. In that case, a SQL-backed app with virtual tables may solve delegation but not offline. The office staff who only read reports should use a Power BI report or a read-only export, not a Dataverse-backed app, because Dataverse access requires premium licensing.

2. Diagnose the gallery count and delegation warning. Give a concrete Power Fx and data model change, and explain why it still works offline.

Read the worked answer

The gallery count is likely computed with CountRows(Gallery.AllItems) or a CountRows over a filtered SharePoint source. The client only knows about the records it has loaded, so the count is incomplete. The delegation warning comes from combining a delegable predicate with a non-delegable one, often a lookup compared by display name or a function such as Lower or IsBlank around the lookup.

Concrete change:

Filter(
    Inspections,
    StartsWith(AssetID, txtSearch.Text) &&
    Site.Id = varSelectedSite.Id &&
    Technician.Email = User().Email
)

Compare the lookup by Site.Id, not Site.Name. Bind the gallery to the Dataverse view My open inspections, and show the count from a rollup or aggregate column on the technician or site record rather than counting gallery items. If a live count is required, run a separate delegable query against the same filtered view.

Offline behavior: the query above runs against the local offline cache when disconnected only if the app has cached the relevant records. Use an offline profile or a SaveData/LoadData collection containing only inspections assigned to the signed-in technician. On reconnect, push changes with Patch and handle conflicts by comparing a ModifiedOn value. This keeps the count and filter correct because the cached set is small and the same filter is applied locally.

3. Propose the environment and solution strategy, including what office staff can use without premium licensing.

Read the worked answer

Use development, test, and production environments, not the default environment. The default environment should be restricted to personal productivity and excluded from the inspection solution.

  • Dev: unmanaged solution, makers collaborate, connection references point to a dev SharePoint site or Dataverse environment.
  • Test: managed solution imported from dev; pilot technicians and a test gateway/data connection; user acceptance testing.
  • Prod: managed solution only; no direct editing; deployment through a pipeline or export/import with environment variables for site URLs and email recipients.

Put the app, Dataverse tables, flows, and connection references in one solution with a clear publisher prefix. Use environment variables for the SharePoint site used for attachments and for the approval mailbox. Restrict who can create environments and who can deploy to prod.

Office staff without premium: they cannot use a canvas app or model-driven app that reads Dataverse. Give them a Power BI report built on a dataset that refreshes from Dataverse, or a scheduled export to SharePoint/CSV. Power BI Pro licensing is separate, but it avoids granting Dataverse access. If they need to comment or update status, that is a write operation and requires a premium license or a deliberate process change, such as submitting a request through a SharePoint form that a licensed flow processes.