Zum Hauptinhalt springen

Upgrade auf 23.0.0

gefahr

Unbedingt die aktuellen Installationsvoraussetzungen vorab prüfen!

tipp

Diese Anleitung berücksichtigt immer nur den Sprung von der vorhergehenden Version zu der gerade beschriebenen Version. Bei Upgrades über mehrere Versionen hinweg müssen alle Änderungen der Zwischenversionen ebenfalls beachtet werden! Siehe genereller Ablauf von Upgrades.

Mit diesem großem Update wird die Kompatibilität zu documentsOS (documents 6) erreicht. In documentsOS wurde die grundzulegende Scripting Engine von Spidermonkey auf V8 aktualisiert. Dieser große Schritt hat zufolge, dass nun die Portalscripte und Scriptlibs-Skripte grundlegend angepasst werden müssen.

Breaking Changes

Bevor man das Update des Systems auf documentsOS macht, sollte man sich unbedingt die otris Dokumentation durchlesen.

Umstellung auf require

In DOCUMENTS 5 konnten Skripte als Module entweder per #import oder später ab Version 5.0d per require() eingebunden werden. Mit documentsOS und der Einführung einer neuen Skript-Engine sollten Portalscripte nun ausschließlich über require() eingebunden werden. Mehr zum Thema, siehe otris Doku / Module.

Beispiel bisheriger Aufruf in Documents5

//#import "ou.sp.Library"

const logger = Logging.use("someCategory");
warnung

Die alte #import Syntax wird nicht mehr unterstützt!

Migration

Für die Umstellung von #import auf require gibt es hier Migrationsanleitung:

Migrationsanleitung

Anpassungen an require-Modulen

Wenn bereits ein Library-Modul mit require() eingebunden wurde, muss es an die neue Syntax angepasst werden.

Beispiel bisheriger Aufruf

context.enableModules();
const Logging = require("ou.sp.Logging");

const logger = Logging.use("someCategory");
gefahr

Der Unterschied liegt in der Deklaration des Moduls. Es muss nun die geschweifte Klammer {} verwendet werden.

Anstatt:

const Logging = require("ou.sp.Logging");

wird nun

const { Logging } = require("ou.sp.Logging");

verwendet.

Migration

Für die Umstellung gibt es hier Migrationsanleitung:

Migrationsanleitung

Änderungen an "ou.sp.Library"

Häufig wurde der Library Import einfach mit //#import "ou.sp.Library" gelöst. Auch hier wurde die Logik überarbeitet.

Beispiel bisheriger Aufruf in Documents5

//#import "ou.sp.Library"

const logger = Logging.use("someCategory");
warnung

Es wird jedoch empfohlen, die Library-Module einzeln zu importieren, also zum Beispiel:

const { Logging } = require("ou.sp.Logging");
const { Iterators } = require("ou.sp.Iterators");
const { MomentHelper } = require("ou.sp.MomentHelper");
Migration

Für die Umstellung gibt es hier Migrationsanleitung:

Migrationsanleitung

Deprecated Database und QueryBuilder

Die Database- und QueryBuilder Klassen sind veraltet und sollten nun nicht mehr verwendet werden. Als Ersatz gibt es das optimierte Modul ou.sp.SelectBuilder.

//#import "ou.sp.Library"
// oder
//#import "ou.sp.Database"
// oder
//#import "ou.sp.SqlHelper"

const db = new DBConnection("odbc", "ouc_additional", "user", "password");
const database = new Database(db);

const query = QueryBuilder.from("costcenter");
const table = database.executeQuery(query);
Migration

Für die zwei veralteten Module Database und QueryBuilder gibt es hier die Migrationsanleitungen:

Mehr Details zum SelectBuilder gibt es hier.

Top-Level return und context.returnValue

In documentsOS ist es nicht mehr erlaubt global ein return zu verwenden (siehe https://otris.software/documents/howto/scripting/breaking.html#globaler-rueckgabewert). Beispiel:

Portalscript D5
return "Hello";
Portalscript D6
context.returnValue = "Hello";
Tipp

Packt man den Top-Level Code in eine Funktion und weist den Rückgabewert dieser Funktion context.returnValue zu, kann man von return auf context.returnValue umstellen, ohne den Kontrollfluss zu verändern und ohne jedes return umschreiben zu müssen:

Vorher:

const docFile = context.file;
if (docFile.field > 50) {
return -1;
}
return 0;

Nachher:

context.returnValue = onSave();
function onSave() {
const docFile = context.file;
if (docFile.field > 50) {
return -1;
}
return 0;
}

Library-Gadgets

Vorsicht gilt bei der Verwendung von Gadgets. Das Verhalten von globalen return und context.returnValue unterscheidet sich auch in der Logik. Es muss zwingend nun die Funktion transfer() aufgerufen werden!

Beispiel bisheriger Rückgabewert direkt über return

Portalscript
context.enableModules();
const { FolderCounter } = require("ou.sp.gadget.FolderCounter");
return FolderCounter.fromContextFolder();
Achtung

Es muss zwingend die .transfer()-Funktion aufgerufen werden!

Features

IntelliSense für VSCode

success

In der Library wurde das IntelliSense komplett überarbeitet und deutlich verbessert. Eine ausführliche Dokumentation ist zu finden unter:

InstelliSense für VSCode

Optimiertes InstelliSense für SelectBuilder

Manuell auszuführende Schritte