Zum Hauptinhalt springen

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);
},
});
}
);