installOrUpgrade
installOrUpgrade führt die Installation bzw. das Upgrade durch.
API und Checks
Die API der Metadaten orientiert sich an den Package-Metadaten von otrPackage. Da dieses Tool leider bisher alles andere als stabil funktioniert, haben wir uns entschieden, auf der API aufzubauen. Ggf. ist in der Zukunft daher ein schnellerer Wechsel möglich.
API Abweichungen
updateScriptswird nicht unterstützt. otris verwendet hier einen XML Runner.updateScriptsJswurde hinzugefügt. Durch unsere Implementierung ist es möglich, hier mit "normalen" PortalScripten zu arbeiten.
Checks
Package überprüft anhand der Lib compare-versions folgendes:
Ist das Paket bereits installiert?
- Wenn ja, ist es neuer als die bereits installierte Version? -> Upgrade
- Wenn nein -> Installation
Sind die Abhängigkeiten erfüllt?
- Wenn ja -> Upgrade oder Installation
Beispiele
Aufruf im PortalScript:
const { Package } = require("ou.sp.Library");
const PACKAGE_METADATA = {
name: "library-demo",
version: "24.0.0",
title: "Library SDK Demo",
description: "Demo Package for Library SDK",
contentType: "module",
dependencies: [],
// do not use updateScripts yet - this is purely for otris compatibility
updateScripts: {},
updateScriptsJs: [{
version: "1.0.0",
updateScriptName: "ou.cust.demo.install.1.0.0"
}],
icon: "mdi:mdi-transfer-up"
};
Package.installOrUpgrade(PACKAGE_METADATA);
Implementierung eines Upgrade-Scripts (TypeScript)
Update-Scripts werden mit Package.createInstallerModule() implementiert. User-Switching, Fehlerbehandlung und die Konstruktion des Rückgabewertes übernimmt createInstallerModule automatisch.
import type { InstallStepInputOptions } from "@one-unity/library/ou.sp.Package";
const { Package } = require("ou.sp.Library");
function doMyUpgradeStuff(options: InstallStepInputOptions): void {
// do the actual work
options.appendToResultSuccess("Did the thing");
}
module.exports = Package.createInstallerModule(
[{ id: "MY-ISSUE-ID", execute: doMyUpgradeStuff }],
{ message: "Applying update 1.0.0", asUser: "oucadmin" }
);
Siehe createInstallerModule für die vollständige API.