Zum Hauptinhalt springen

UserExit und asynchrones Laden

Daten können auch asynchron über ein Portalskript geladen werden. Dazu muss das Portalskript in der Option script hinterlegt sein. Der Dialog öffnet sich mit einer Ladeanimation und im Hintergrund wird das Portalskript aufgerufen. Im Anschluss werden die zurückgegebenen Daten an das Table weitergegeben.

Beispiel

Portalskript

Zunächst wird ein Portalskript ou.cust.tableDialog.callback.fetch angelegt:

context.enableModules();
const { TableDialog } = require("ou.sp.gadget.TableDialog");

context.returnValue = TableDialog.from([
{ id: "1", name: "name1" },
{ id: "2", name: "name2" },
{ id: "3", name: "name3" }
]).transfer();

UserExit

Im UserExit wird dieses Portalskript unter der Option script hinterlegt:

documents.sdk.exitRegistry.registerFileFieldExitCallback("ouspDemo", "mappenFeld", function (documentsContext, options) {

var fileContext = documentsContext.getFileContext()

showTableDialog({
title: "Beispieldatensätze",
script: "ou.cust.tableDialog.callback.fetch",
multiSelect: true,
success: function(selectedRows) {
if (selectedRows.length <= 0) {
return
}

var names = selectedRows.map(function(row) { return row.name }).join(", ")
fileContext.setFileFieldValue(options.fileFieldName, names)
}
})

})

preLookupScript

Mit der preLookupScript Option kann ein Portalskript ausgeführt werden, welches nur die Anzahl Einträge zurück gibt. Somit wird der Dialog nicht angezeigt, wenn es keine Einträge oder nur einen Eintrag gibt, außer showDialogOnSingleResult ist auf true gesetzt, dann wird der Dialog nur nicht angezeigt, wenn es keine Einträge gibt.

Portalskript

Portalskript ou.cust.tableDialog.callback.preLookup

// Die Anzahl Einträge zurück geben z.B.
context.returnValue = fileResultset.size()
// oder
context.returnValue = array.length

UserExit

documents.sdk.exitRegistry.registerFileFieldExitCallback("ouspDemo", "mappenFeld", function (documentsContext, options) {

var fileContext = documentsContext.getFileContext()

showTableDialog({
title: "Beispieldatensätze",
script: "ou.cust.tableDialog.callback.fetch",
preLookupScript: "ou.cust.tableDialog.callback.preLookup",
multiSelect: true,
empty: function() {
// callback wird getriggert, da das preLookupScript 0 zurück gibt.
}
})
})