bcquality/microsoft/knowledge/upgrade/first-install-dataversion-zero-check.md
Jesper Schulz-Wedde 0c2a0ceb82 Add lifecycle error and privacy knowledge
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 95c06ad8-377d-4faa-8d07-06300b1c81ec
2026-07-14 12:02:49 +02:00

1.6 KiB

bc-version domain keywords technologies countries application-area
all
upgrade
dataversion
first-install
on-install-app-per-company
moduleinfo
zero-version
al
w1
all

Detect first install with DataVersion() = Version.Create('0.0.0.0')

Description

On the first install of an extension on a tenant the platform records a zero data version: AppInfo.DataVersion() returns Version.Create('0.0.0.0'). During reinstall, DataVersion() identifies the previously installed data version. The OnInstallAppPerCompany trigger uses this distinction to separate a brand-new install from a reinstall. Ordinary version upgrades do not run install code.

Best Practice

In OnInstallAppPerCompany, fetch the current ModuleInfo via NavApp.GetCurrentModuleInfo, compare AppInfo.DataVersion() to Version.Create('0.0.0.0'), and run first-install seed logic only when they match. On a non-zero data version, follow the reinstall path or exit.

See sample: first-install-dataversion-zero-check.good.al.

Anti Pattern

Treating OnInstallAppPerCompany as if it always implies "fresh tenant". The trigger also fires when reinstalling over an existing data set; without the 0.0.0.0 guard, first-install seed code can run again and duplicate rows.

See sample: first-install-dataversion-zero-check.bad.al.

See also

  • use-upgrade-tags-not-version-checks.md — for upgrade steps after first install, use upgrade tags rather than DataVersion.
  • install-code-does-not-run-on-version-upgrade.md — ordinary version upgrades invoke upgrade code, not install code.