Jump to content

Resco Sync Engine

From Resco's Wiki

The Resco Sync Engine keeps data on mobile devices consistent with the backend server. It is what makes Resco mobile apps work offline — and what makes them stay fast and responsive once they're back online. The sync engine works with Microsoft Dataverse (Power Platform, Dynamics 365), Salesforce, and Resco Cloud backends, and handles everything from a handful of records to data models containing tens of millions.

This page introduces the sync engine: why offline-first synchronization matters, what the engine does for you out of the box, and where to go to configure it. For the mechanics of how synchronization actually works under the hood, see Synchronization.

Why synchronization matters

Mobile business apps can connect to the backend in one of two ways: online (every action triggers a server request) or offline (data lives in a local database on the device, and changes are reconciled with the server periodically). Resco is offline-first. The sync engine is what makes that possible.

For a side-by-side comparison of both modes, see Online versus Offline. The short version: online mode means the app's responsiveness is bound to your worst connection of the day. Offline mode means the app is bound to local storage speed — which is always fast, always available, and doesn't care whether the user is in a warehouse, a basement, on a plane, or in a rural service area.

Benefits of offline-first

The obvious wins of working offline are speed and connection independence. There are a few less obvious ones worth calling out:

  • Resilience. Your field team keeps working during backend outages, maintenance windows, and carrier issues. The app doesn't go down when the server does.
  • Cost predictability. Less data over the wire means lower mobile data costs and reduced load on the backend. On platforms that charge per API call, this can translate directly into lower licensing pressure.
  • Deterministic user experience. No spinners, no timeouts, no "is this saving?" anxiety. Tapping save writes to the local database immediately; the sync engine handles getting it to the server when the network allows.

For a longer treatment, including the technical reasons why online client-server communication is inherently inefficient, see Online versus Offline.

What the sync engine does

Out of the box, the sync engine provides:

  • High-volume capability. Designed for data models with millions of records. The optional Tabular Data Stream (TDS) protocol further accelerates record downloads from Dataverse backends.
  • Granular control over what's stored offline. You choose which tables, fields, and records each user gets — down to row-level filters per user role. See Sync Filter and Document filters.
  • Two-way reconciliation. Server changes are downloaded, client changes are uploaded, and conflicts are detected and handled. See Conflict resolution.
  • Flexible scheduling. Manual sync, automatic periodic sync, sync on app start, sync on data change, or targeted partial sync triggered by user action. See Automatic synchronization and SmartSync.
  • Observability. Built-in tools for monitoring sync health, identifying bottlenecks, and resolving conflicts at scale. See Monitoring and optimizing below.

Who benefits

Field workers

The app responds instantly because the data is already on the device. There is no "loading…" between opening a record and seeing it. Work continues regardless of signal strength; saved changes are queued and reconciled with the server in the background. The user doesn't need to think about sync — the app handles it.

Administrators and Woodford makers

The sync engine exposes enough configuration to keep sync times reasonable as the data grows, without requiring custom code. The first lever is the data model itself — enabling only the entities and fields the app actually needs. Sync Filters then limit which records each user downloads. SmartSync lets you define targeted partial syncs for specific scenarios (e.g., "refresh today's tasks every 5 minutes"). The Sync Dashboard and SyncStats Analyzer surface which users, devices, or entities are causing problems, so troubleshooting starts with data rather than guesswork.

IT and architects

The security boundary is explicit and configurable: sync filters define what leaves the server, and the engine respects backend permissions and security roles. Backend load is predictable because sync runs against well-known endpoints with controllable concurrency (see Advanced sync setup). The same engine works across Dataverse, Salesforce, and Resco Cloud, so the architecture decision is portable across backends.

Configuring sync

The single most impactful sync decision is made before any sync filter or performance tuning: which entities and fields are part of the mobile data model in the first place. Don't download data your users won't use — every table excluded, every field disabled, every record filtered out is data the sync engine never has to move. The defaults are sensible for many projects, but the levers below let you tune for volume, use case, and performance.

Goal Tool
Choose which tables and fields are available on mobile (start here) Data model in mobile apps
Decide which records each user can see and download Sync Filter
Limit attachments and cloud documents downloaded to the device Document filters
Sync only a subset of entities on demand, on a trigger, or periodically SmartSync
Schedule and automate full sync cycles Automatic synchronization
Tune download performance (parallel threads, page size, entity order) Advanced sync setup
Deep optimization of the download phase Sync download optimization
Use a faster download protocol on Dataverse Tabular Data Stream (TDS)
Define how conflicting changes are reconciled Conflict resolution
Share records across users beyond ownership rules Shared records
Set up sync from scratch in Woodford (entry point) Configuration → Offline Data Sync

For a detailed walkthrough of every phase the sync engine goes through during a sync cycle, see Synchronization steps.

Monitoring and optimizing

Once sync is running in production, the following tools help you keep it healthy:

  • Sync Dashboard — server-side view of all sync runs across all users and devices. Filter by platform, date, user; inspect logs; resolve conflicts centrally.
  • SyncStats analyzer — on-device aggregated stats from past syncs. Surfaces problematic modules, entities, and recurring errors. Available inside Resco Mobile CRM.
  • Storage analyzer — on-device view of what's actually using local storage (entities, attachments, cloud documents, SmartSync definitions). Useful when devices fill up.
  • Sync log — authoritative per-sync record stored server-side. Counts, timings, errors, per-entity downloader stats, cleanup stats. The source of truth when troubleshooting.
  • Resco Agents — connect an AI assistant (Claude, ChatGPT, Copilot, Cursor) to your project's sync logs and configuration. Useful for asking questions across multiple sync runs in natural language, or having the AI explain a specific failure in plain English.

When something goes wrong, start with Synchronization troubleshooting.

See also