Zum Hauptinhalt springen

Umstieg auf die neuen React MultiTable-Gadgets

Ab Version 24.0.0 werden im Invoice-Standard ausschließlich die neuen React MultiTable-Gadgets und Funktionen

  • TableGadgetReact
  • TableMonitorReact
  • TableDialogReact
  • showTableDialogReact

verwendet.

Die alten Gadgets und Funktionen
  • TableGadget
  • TableMonitor
  • TableDialog
  • showTableDialog

werden vorerst weiterhin unterstützt, aber es wird empfohlen, auf die neuen Gadgets umzusteigen. Auch wenn der Umstieg nicht jetzt erfolgt, müssen die Breaking Changes dennoch evaluiert werden.

Breaking Changes

Clientseitiger Zugriff

Was ist passiert?

Der clientseitige Zugriff auf eine MultiTable-Instanz über das globale Window-Objekt hat sich für die neuen Gadgets verändert. Anstatt über window.multiTableInstances["<id>"] kann nun über window.ouGadgetInstances["multitable-<id>"] auf die Instanz zugegriffen werden. Dabei ist <id> die ID der MultiTable-Instanz.

Über diesen Zugriff erhält man ein Objekt, das das Interface MultiTableExternalInterface erfüllt. Für mehr Infos siehe MultiTableExternalInterface.

Was muss angepasst werden?

Beispiel OUSP Invoice:

Das MultiTable-Gadget der Eingangsrechnungspositionszeilen ist nicht mehr über window.multiTableInstances.invoiceItems erreichbar, sondern über window.ouGadgetInstances["multitable-invoiceItems"]. Auch die API der MultiTable-Instanz hat sich geändert, wie im Abschnitt davor beschrieben.

gefahr

Das bedeutet, dass jeglicher Customizing-Code, der clientseitig diesen alten Zugriff auf die Positionszeilen verwendet, angepasst werden muss.

Klick-Funktion der TableMonitor-Buttons

Was ist passiert?

Die Funktionalität hinter den click-Events der Buttons im TableMonitor hat sich ein wenig verändert. Es stehen immer noch die gleichen Funktionen am options-Objekt zur Verfügung, allerdings sind zwei neue Funktionen hinzugekommen:

  • options.getRowIndex(row: MultiTableRow): number;
  • options.commit(): void;

Was muss angepasst werden?

Gibt es im Customizing Code in einer click-Funktion eines TableMonitor-Buttons, müssen Aufrufe dieser Art angepasst werden:

Vorher:

const currentIndex = options.rows.indexOf(options.selectedRows[0]);

Nachher:

const currentIndex = options.getRowIndex(options.selectedRows[0]);

Zudem muss am Ende jeder click-Funktion die commit()-Funktion aufgerufen werden, um die Änderungen wirksam zu machen. Z.B.:

moveRowUp: {
label: "move up",
icon: "ionicon ion-md-arrow-round-up",
onlyShowIcon: true,
tooltip: "de:Zeile nach oben verschieben;en:Move row up",
enabled: "single",
toggleGroup: "navgroup",
click: (options) => {
const currentIndex = options.getRowIndex(options.selectedRows[0]);
options.moveSelectedRow(currentIndex - 1);
options.commit();
},
},

Benutzerdefinierte Zellen und Slots

Was ist passiert?

Benutzerdefinierte Zellen sowie Benutzerdefinierte Slots werden nicht mehr unterstützt.

Was muss angepasst werden?

Sollte ein derartiges Customizing verwendet worden sein, sollte am besten ein Entwickler für die Klärung des weiteren Vorgehens hinzugezogen werden.

HTML-Templates

Was ist passiert?

Über die Eigenschaft html konnte in den Optionen für den MultiTable HTML definiert werden, das über bzw. unter dem MultiTable angezeigt wird. Hier ist nun keine Vue.js-Syntax mehr verwendbar, sondern es muss mit einem Callback, welches einen HTML-String zurückgibt, gearbeitet werden.

Was muss angepasst werden?

So könnte eine Umstellung aussehen:

Vorher:

html: {
header: "<div>Anzahl Zeilen: {{options.rows.length}}</div>"
}

Nachher:

html: {
header: (options) => `<div>Anzahl Zeilen: ${options.rows.length}</div>`
}