diff --git a/src/System Application/App/Extension Management/src/ExtensionInstallationImpl.Codeunit.al b/src/System Application/App/Extension Management/src/ExtensionInstallationImpl.Codeunit.al
index c8e9fa8a7f..a94a006138 100644
--- a/src/System Application/App/Extension Management/src/ExtensionInstallationImpl.Codeunit.al
+++ b/src/System Application/App/Extension Management/src/ExtensionInstallationImpl.Codeunit.al
@@ -405,5 +405,52 @@ codeunit 2500 "Extension Installation Impl"
exit(Result = PolicyToTestFor);
end;
+
+ procedure ReinstallExtension(PackageId: Guid; lcid: Integer; IsUIEnabled: Boolean): Boolean
+ var
+ DependentModules: List of [ModuleInfo];
+ DependentModule: ModuleInfo;
+ Success: Boolean;
+ begin
+ Success := true;
+ DependentModules := GetDependentModulesForExtensionToReinstall(PackageId);
+
+ if not UninstallExtension(PackageId, IsUIEnabled) then
+ Success := false;
+
+ if not InstallExtension(PackageId, lcid, IsUIEnabled) then
+ Success := false;
+
+ foreach DependentModule in DependentModules do
+ if not InstallExtension(DependentModule.PackageId, lcid, IsUIEnabled) then
+ Success := false;
+
+ exit(Success);
+ end;
+
+ local procedure GetDependentModulesForExtensionToReinstall(PackageId: Guid): List of [ModuleInfo]
+ var
+ DependencyApp: Record "NAV App Installed App";
+ NAVAppInstalledApp: Record "NAV App Installed App";
+ InstalledModuleDependencies: List of [ModuleDependencyInfo];
+ DependentModules: List of [ModuleInfo];
+ InstalledModuleDependency: ModuleDependencyInfo;
+ InstalledModule: ModuleInfo;
+ begin
+ if NAVAppInstalledApp.FindSet() then
+ repeat
+ NavApp.GetModuleInfo(NAVAppInstalledApp."App ID", InstalledModule);
+ InstalledModuleDependencies := InstalledModule.Dependencies();
+ foreach InstalledModuleDependency in InstalledModuleDependencies do begin
+ DependencyApp.Get(InstalledModuleDependency.Id);
+ if DependencyApp."Package ID" = PackageId then begin
+ if not DependentModules.Contains(InstalledModule) then
+ DependentModules.Add(InstalledModule);
+ end;
+ end;
+ until NAVAppInstalledApp.Next() = 0;
+ exit(DependentModules);
+ end;
+
}
diff --git a/src/System Application/App/Extension Management/src/ExtensionManagement.Codeunit.al b/src/System Application/App/Extension Management/src/ExtensionManagement.Codeunit.al
index ada09c3bfc..d921469ab4 100644
--- a/src/System Application/App/Extension Management/src/ExtensionManagement.Codeunit.al
+++ b/src/System Application/App/Extension Management/src/ExtensionManagement.Codeunit.al
@@ -283,5 +283,18 @@ codeunit 2504 "Extension Management"
begin
ExtensionOperationImpl.GetDeploymentDetailedStatusMessageAsStream(OperationId, OutStream);
end;
+
+ ///
+ /// ReInstalls an extension.
+ /// Uninstalls the extension and all dependent extensions and then installs it again.
+ ///
+ /// The ID of the extension package.
+ /// The Locale Identifier.
+ /// Indicates if the reinstall operation is invoked through the UI.
+ ///
+ procedure ReinstallExtension(PackageId: Guid; lcid: Integer; IsUIEnabled: Boolean): Boolean
+ begin
+ exit(ExtensionOperationImpl.ReinstallExtension(PackageId, lcid, IsUIEnabled));
+ end;
}