Project Dataverse Sync — Administrator Guide
Overview
This guide covers deployment, licensing, Dataverse environment preparation, and centralised configuration for Project Dataverse Sync. It is intended for IT administrators and Power Platform administrators, not end users.
System Requirements
| Component | Requirement |
|---|---|
| Microsoft Project | Desktop (MSI or C2R), any recent version |
| .NET Framework | 4.7.2 or later (included in Windows 10 1803+) |
| WebView2 Runtime | Microsoft Edge WebView2 Runtime (Evergreen) |
| OS | Windows 10 or Windows 11 |
| Network | HTTPS access to login.microsoftonline.com, *.api.crm*.dynamics.com, and app.pdms.io
|
| Dataverse | Any Power Platform environment with Dataverse enabled |
| Permissions | User must have read/write access to the Dataverse tables they intend to publish into |
Installation
WebView2 Runtime prerequisite
The add-in embeds a WebView2-hosted UI. If WebView2 is not present on the machine, the UI panels will not load. Deploy the Evergreen WebView2 Runtime before or alongside the add-in:
MicrosoftEdgeWebView2RuntimeInstaller.exe /silent /install
The runtime can also be deployed via Intune, SCCM, or Group Policy as a prerequisite step.
ClickOnce deployment (recommended)
The primary and recommended installation method is ClickOnce via VSTO. Users self-install from a URL and receive automatic updates on every Project launch — no administrator involvement is needed for updates.
How it works
The add-in is published as a VSTO ClickOnce application. Users install it by running setup.exe from the published URL. After installation, Microsoft Project loads the add-in from the local ClickOnce cache and checks for updates automatically on every launch (UpdateEnabled = true, UpdateInterval = 0 days).
Published endpoint
The ClickOnce deployment is hosted at https://msproject.pdms.io/dataverse/.
The installation entry points are:
| File | Purpose |
|---|---|
| setup.exe | Bootstrapper — installs prerequisites then the add-in |
| ProjectSyncDataverse.vsto | VSTO manifest — used by Project to load and update the add-in |
Prerequisites installed by the bootstrapper
The setup.exe bootstrapper automatically installs the following if not already present:
- Microsoft .NET Framework 4.7.2
- Microsoft Visual Studio 2010 Tools for Office Runtime (VSTO Runtime 4.0)
WebView2 is not included in the bootstrapper; it must be pre-installed separately (see above).
Registry entry created by ClickOnce
ClickOnce registers the add-in with a URL-based manifest:
HKCU\Software\Microsoft\Office\MS Project\AddIns\ProjectSyncDataverse
Manifest = https://msproject.pdms.io/dataverse/ProjectSyncDataverse.vsto
LoadBehavior = 3
LoadBehavior = 3 means the add-in loads automatically when Microsoft Project starts.
Code signing
All ClickOnce manifests and the setup.exe bootstrapper are signed with a code-signing certificate (SHA-256, thumbprint 562f755d824a95df473c7dcca9463677d2350a79). Verify the signature before distributing the bootstrapper internally.
Automatic updates
Once installed via ClickOnce, the add-in checks https://msproject.pdms.io/dataverse/ for a newer version each time Microsoft Project starts. If a newer version is found, it is downloaded and applied silently in the background; the user is prompted to restart Project to activate it. No administrator action is required for updates to reach users.
MSI installer (alternative)
The MSI is an alternative for environments that require per-machine installation, offline deployment, or management through Intune/SCCM.
-
Default install path:
%ProgramFiles%\WACG Inc.\ProjectSync Dataverse\ -
Install scope: Supports both per-user and per-machine installation (
Scope="perUserOrMachine"). The installer UI defaults to per-user; per-machine requires the CLI flag below. - Upgrade: Major upgrades are handled automatically; a downgrade will show an error and abort.
- Repair / Remove: Available through Add or Remove Programs (Modify is disabled by default).
The MSI registers the add-in with a local file path manifest:
HKCU\Software\Microsoft\Office\MS Project\AddIns\ProjectSyncDataverse
FriendlyName = "ProjectSync Dataverse Add-In"
Description = "ProjectSync Dataverse Add-In"
Manifest = "file://<INSTALLFOLDER>ProjectSyncDataverse.vsto|vstolocal"
LoadBehavior = 3
Silent / scripted installation
msiexec /i ProjectSyncDataverse.msi /quiet /norestart
For per-machine installation add ALLUSERS=1:
msiexec /i ProjectSyncDataverse.msi /quiet /norestart ALLUSERS=1
Choosing between ClickOnce and MSI
| Consideration | ClickOnce | MSI |
|---|---|---|
| Automatic updates | Built-in | Manual re-deploy required |
| User self-install | Yes (run setup.exe from URL) | Yes |
| Per-machine installation | Per-user only | Yes (ALLUSERS=1) |
| Deployment tool (Intune, SCCM) | Possible (deploy setup.exe) | Yes |
| Offline installation | No (requires internet) | Yes |
| Group Policy control | Limited | Yes |
User Data and File Locations
All per-user data is stored in %APPDATA%\WACG_INC\ProjectSyncDataverse\:
| File | Purpose |
|---|---|
license.pds |
Activated license file |
authenticators.json |
Saved account list (tenant ID, user ID, UPN) |
cache-<accountId>.bin |
Encrypted MSAL token cache per account |
Additional files are stored under %LOCALAPPDATA%\PDMS-Project-Addon\:
| Path | Purpose |
|---|---|
%LOCALAPPDATA%\PDMS-Project-Addon\ |
WebView2 user-data folder for the embedded UI panels. Can be cleared via Ribbon → Options → Cache → Clear cache. |
%LOCALAPPDATA%\PDMS-Project-Addon\Logs\ |
Diagnostic log files (only written when logging is enabled). |
No data is written to HKLM by the add-in at runtime; the registry keys above are written by the installer only.
Licensing
License file location
The license is stored as %APPDATA%\WACG_INC\ProjectSyncDataverse\license.pds. It is loaded once at add-in startup.
Activating a license for a user
Option 1 — Online activation (recommended): The user opens the Manage License panel in the ribbon, clicks Manage License Online, and completes the purchase or activation at app.pdms.io.
Option 2 — File activation: If the license has been purchased centrally, the user can click Load License From File in the Manage License panel and select the license.pds file.
Administrators can also pre-deploy the license file to %APPDATA%\WACG_INC\ProjectSyncDataverse\license.pds via a script or software deployment tool before the user first launches the add-in; no user action is then required.
Trial licenses
The add-in supports evaluation mode controlled by the license file:
-
EvaluationUsedDays— days already used. -
EvaluationDurationDays— total permitted trial days. - The add-in is fully functional while
EvaluationUsedDays < EvaluationDurationDays. - The ribbon shows a countdown label (e.g. Trial: day 3 of 30). After expiry it shows Trial License Expired.
Authentication and Azure AD
OAuth application
The add-in authenticates using the Microsoft Identity Platform (MSAL) with a Microsoft-published multi-tenant application:
-
Application (client) ID:
d3590ed6-52b3-4102-aeff-aad2292ab01c
This is the Microsoft Office client ID, which is pre-consented in most Microsoft 365 tenants and does not require additional Azure AD app registration.
Required API permissions
The add-in requests delegated permissions for:
-
Dynamics CRM—user_impersonation(access Dataverse Web API on behalf of the user)
No admin consent is required if the tenant's user consent policy allows delegated Dynamics CRM access.
If your tenant disables user consent, an Azure AD administrator must grant the user_impersonation permission for the Dynamics CRM resource on the Microsoft Office application (d3590ed6-52b3-4102-aeff-aad2292ab01c), or configure a tenant-level consent policy that covers it.
Token cache
Each account's MSAL token cache is stored as an encrypted binary file at %APPDATA%\WACG_INC\ProjectSyncDataverse\cache-<accountId>.bin. Tokens are refreshed silently using the cached refresh token. If silent refresh fails, the add-in prompts the user to sign in interactively.
Required network access
Ensure the following endpoints are reachable from user workstations:
| Endpoint | Purpose |
|---|---|
https://login.microsoftonline.com |
Azure AD token acquisition |
https://<org>.api.crm*.dynamics.com |
Dataverse Web API |
https://globaldisco.crm.dynamics.com |
Environment discovery |
https://app.pdms.io |
License management portal |
Dataverse Environment Preparation
Timephased Data Preparation
If your deployment uses timephased sync, prepare and map dedicated Dataverse tables for these scopes:
- Task timephased data
- Assignment timephased data
- Team member timephased data
In the add-in, users configure these under Mappings → Timephased Data.
Grouping strategy
The timephased grouping option controls row granularity for both publish and get-updates processing:
- Daily: highest detail, highest row volume.
- Weekly: moderate detail and load.
- Monthly: lowest detail, lowest row volume.
For large schedules, prefer Weekly or Monthly unless reporting requirements explicitly require Daily.
Required Dataverse permissions
Users need at minimum:
-
Read on
EntityDefinitions(metadata) — required for loading table lists and attribute metadata. - Read / Write / Create on the target tables (projects, tasks, resources, etc.) that the user will publish into.
-
Read / Write / Create on the
pds_Configcustom table (see below) for any user who manages the centralised configuration.
Centralised Sync Configuration (pds_Config)
The add-in can read a centralised mapping configuration stored in a custom Dataverse table called pds_Config (pds_configs collection). This table is created automatically the first time a user saves a Dataverse Config from the Mappings panel.
Table schema
| Logical name | Display name | Type | Description |
|---|---|---|---|
pds_configid |
Config Id | Primary key | GUID |
pds_configname |
Config Name | String (255) | Human-readable name |
pds_configjson |
Mappings JSON | Memo (1 MB) | Full field-mappings JSON |
pds_disallowmappingschange |
Disallow Mappings Change | Boolean | Prevents users from modifying field mappings |
pds_disallowmappingsexport |
Disallow Mappings Export | Boolean | Hides the Save Mappings to File button |
pds_disallowmappingsimport |
Disallow Mappings Import | Boolean | Hides the Load Mappings from File button |
pds_disallowuploadlookupvalues |
Disallow Upload Lookup Values | Boolean | Prevents users from pushing lookup values to Dataverse |
pds_disallowuploadpicklistvalues |
Disallow Upload Picklist Values | Boolean | Prevents users from pushing picklist values to Dataverse |
The add-in reads the first record in this table. Only one configuration record is expected per environment.
Governance flags
Setting any pds_disallow* flag to true removes the corresponding capability from all users connecting to that environment:
| Flag | Effect on users |
|---|---|
pds_disallowmappingschange |
All mapping tabs become read-only; Save/Import buttons are hidden |
pds_disallowmappingsexport |
Save Mappings to File button is hidden |
pds_disallowmappingsimport |
Load Mappings from File file picker is hidden |
pds_disallowuploadlookupvalues |
Upload of lookup table values in Sync Lookups is suppressed |
pds_disallowuploadpicklistvalues |
Upload of picklist/option-set values in Sync Lookups is suppressed |
Setting a default mapping for new projects
Store a valid mappings JSON in pds_configjson. When a user connects to this environment and has no existing mappings saved in their project file, the add-in will automatically apply this default. This allows you to standardise field mappings across the organisation without each user having to configure them manually.
Publish Host Mode
Administrators (or power users) can change how the publish panel is displayed via Ribbon → Options. This setting is persisted per user in %LOCALAPPDATA%\...\user.config.
| Mode | Behaviour |
|---|---|
| Window (default) | Publish runs in a floating dialog window |
| Task Pane | Publish runs in the Microsoft Project task pane (side panel) |
| Background | Publish runs with no visible UI; auto-close is forced on |
Background mode is useful for automated or scripted publish workflows where the user should not be interrupted.
Diagnostic Logging
Users can enable diagnostic logging via Ribbon → Options → Diagnostics → Enable diagnostic logging. When enabled:
- Trace output and unhandled exceptions are written to
%LOCALAPPDATA%\PDMS-Project-Addon\Logs\aspds-<yyyyMMdd-HHmmss>-<pid>.log. - The setting is persisted per user; it stays on until the user turns it off.
- The Open log folder button in the same dialog opens the folder in Explorer.
When filing a support ticket, ask the user to enable logging, reproduce the issue, then attach the most recent log file. Logging is off by default and should be left off in normal use.
Upgrading
The MSI uses a MajorUpgrade element. Installing a newer version over an older one will:
- Silently remove the old version.
- Install the new version to the same install directory.
- Preserve all user data in
%APPDATA%\WACG_INC\ProjectSyncDataverse\.
Downgrading is blocked by the installer; the user will see a downgrade error.
Uninstalling
Via Add or Remove Programs → select ProjectSync Dataverse → Uninstall.
Silent uninstall:
msiexec /x {ProductCode} /quiet /norestart
The product code can be found in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall after installation.
User data (%APPDATA%\WACG_INC\ProjectSyncDataverse\) is not removed on uninstall. Delete it manually if a clean removal is required.
Troubleshooting
| Symptom | Likely cause | Resolution |
|---|---|---|
| Add-in tab does not appear in Project ribbon | Add-in is disabled in Project trust center, or add-in load failed | In Project: File → Options → Add-ins → Manage — re-enable ProjectSync Dataverse Add-In |
| WebView2 panels show blank / crash | WebView2 Runtime not installed or outdated | Install/update the Evergreen WebView2 Runtime |
| "No Active License" in ribbon | License file missing or invalid | Deploy license.pds to %APPDATA%\WACG_INC\ProjectSyncDataverse\
|
| No environments appear after login | User lacks access to any Power Platform environment, or globaldisco.crm.dynamics.com is blocked |
Check Power Platform environment access; verify network allows discovery endpoint |
| Admin consent required dialog in browser | Tenant disables user consent for Dynamics CRM delegated permissions | Grant admin consent for Dynamics CRM user_impersonation on app ID d3590ed6-52b3-4102-aeff-aad2292ab01c
|
pds_Config table not found (404) |
Table not yet created in the environment | A user with sufficient Dataverse privileges must save a Dataverse Config from the Mappings panel; the table is created automatically on first save |
| Governance flags not taking effect | Add-in reading a stale cached config | Close and reopen the Mappings panel to force a refresh |