Upgrade auf 23.0.0
Unbedingt die aktuellen Installationsvoraussetzungen vorab prüfen!
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.
Bitte unbedingt vorher folgende Punkte 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.
- Alter Import
- Neuer Import
Beispiel bisheriger Aufruf in Documents5
//#import "ou.sp.Library"
const logger = Logging.use("someCategory");
Beispiel neuer Aufruf in Documents6
context.enableModules();
const { Logging } = require("ou.sp.Logging");
const logger = Logging.use("someCategory");
Die alte #import Syntax wird nicht mehr unterstützt!
Für die Umstellung von #import auf require gibt es hier Migrationsanleitung:
Anpassungen an require-Modulen
Wenn bereits ein Library-Modul mit require() eingebunden wurde, muss es an die neue Syntax angepasst werden.
- Alter Import
- Neuer Import
Beispiel bisheriger Aufruf
context.enableModules();
const Logging = require("ou.sp.Logging");
const logger = Logging.use("someCategory");
Beispiel neuer Aufruf
context.enableModules();
const { Logging } = require("ou.sp.Logging");
const logger = Logging.use("someCategory");
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.
Für die Umstellung gibt es hier 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.
- Alter Import
- Neuer Import
Beispiel bisheriger Aufruf in Documents5
//#import "ou.sp.Library"
const logger = Logging.use("someCategory");
Beispiel neuer Aufruf in Documents6
context.enableModules();
const { Logging } = require("ou.sp.Library");
const logger = Logging.use("someCategory");
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");
Für die Umstellung gibt es hier 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);
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:
return "Hello";
context.returnValue = "Hello";
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!
- Alte Logik
- Neue Logik
Beispiel bisheriger Rückgabewert direkt über return
context.enableModules();
const { FolderCounter } = require("ou.sp.gadget.FolderCounter");
return FolderCounter.fromContextFolder();
Beispiel neue Logik, Rückgabewert über context.returnValue und transfer()
context.enableModules();
const { FolderCounter } = require("ou.sp.gadget.FolderCounter");
context.returnValue = FolderCounter.fromContextFolder().transfer();
Es muss zwingend die .transfer()-Funktion aufgerufen werden!
Features
IntelliSense für VSCode
In der Library wurde das IntelliSense komplett überarbeitet und deutlich verbessert. Eine ausführliche Dokumentation ist zu finden unter: