Daten aus einer Datenbank
Portalskript
Ein TableDialog kann automatisch über eine Datenbank befüllt werden. Dazu kann die Funktion fromDatabase verwendet werden.
Wie auch in der alten showTableResultDialog Funktion können Spaltenüberschriften und Feldmappings als Parameter übergeben werden.
ou.cust.tableDialog.callback.fetchFromDatabase
const { TableDialog } = require("ou.sp.gadget.TableDialog");
const { Database, QueryBuilder } = require("ou.sp.Database");
const args = TableDialog.getParams();
const searchValue = args.searchValue.replace(/\*/, "%") || "%";
const dbUser = util.getEnvironment("OUSP_DATABASE_USER");
const dbPassword = util.getEnvironment("OUSP_DATABASE_PASSWORD");
const db = new DBConnection("odbc", "ousp", dbUser, dbPassword);
const database = new Database(db);
const query = QueryBuilder.select(["recipient", "costcenter", "costcenterName"])
.from("costcenter")
.where(
"recipient LIKE '" +
searchValue +
"%' OR costcenter LIKE '" +
searchValue +
"%' OR costcenterName LIKE '%" +
searchValue +
"%'"
)
.orderBy("recipient")
.orderBy("costcenter");
const tableDialog = TableDialog.fromDatabase(database, query);
if (db) {
db.close();
}
// Spaltendefinition
tableDialog.columns = {
recipient: {
label: "Rechnungskreis",
field: "recipient",
},
costcenter: {
label: "Id",
field: "costcenter",
},
costcenterName: {
label: "Kostenstelle",
field: "costcenterName",
},
};
context.returnValue = tableDialog.transfer();
UserExit
Der Aufruf aus einem UserExit könnte dann so aussehen:
documents.sdk.exitRegistry.registerFileFieldExitCallback(
"ouspDemo_MultiTable",
"userExit_singleDatabase",
function (documentsContext, options) {
var fileContext = documentsContext.getFileContext();
var searchValue = fileContext.getFileFieldValue(options.fileFieldName);
if (!searchValue) {
return;
}
showTableDialog({
title: "Beispieldatensätze",
script: "ou.cust.tableDialog.callback.fetchDatabase",
params: {
searchValue: searchValue,
},
success: function (selectedRows) {
if (selectedRows.length <= 0) {
fileContext.setFileFieldValue(options.fileFieldName, "");
return;
}
var selectedRow = selectedRows[0];
fileContext.setFileFieldValue(options.fileFieldName, selectedRow.vendorName);
},
});
}
);