Skip to main content

DB Zugriff

Oft müssen in den Projekten spezifische Datenbank-Abfragen zu Stammdaten erfolgen oder Daten sollen zu einem definierten Zeitpunkt in eine Datenbank-Tabelle geschrieben werden. Dies kann mit relativ viel Code über die Funktionen aus der Portal-Script API umgesetzt werden. Beim Verbindungsaufbau wird das Benutzer-Passwort häufig im Klartext hinterlegt und häufig werden bei Fehlern die Datenbank-Verbindungen nicht geschlossen.

Sowohl die Invoice- als auch die Mailroom-Lösung greifen häufig lesend und schreibend auf die ausgelieferten Datenbanken zu. Um einfache SQL-Befehle auszuführen wurde eine Bibliothek mit dem SqlObject() erstellt. Das Objekt wird initial mit 2 Parametern aufgerufen:

@param {string} sqlTable  Name der Datenbank-Tabelle
@param {string} dbConnName Name der Datenbankverbindung aus der dbConn.json

Das Objekt enthält diverse property, von denen die wichtigsten hier angegeben werden. 

@property {string} Error Fehlermeldung in der Kontext-Sprache des aktuellen Benutzers.
@property {string} Result Wird initial auf boolean 'true' gesetzt und wird bei Fehlern auf 'false' gesetzt. Bei einem SELECT-Befehl enthält das Property das Ergebnis als Array. 
@property {string} Log Enthält die kompletten Log-Informationen.
@property {string} SQL Speichert den zuletzt ausgeführten SQL-Befehl.
@property {string} SQLTable Speichert den Tabellen-Namen.
@property {string} FullTable Aus dem Tabellen-Namen und den Verbindungsinformationen wird der komplette Tabellen-Name mit Datenbank und bei MS SQL auch inklusive "dbo" generiert.
Beispiel: "MeineTabelle" -> "Datenbankname.dbo.MeineTabelle"
@property {string} DBConn Speichert den Verbindungs-Namen aus der dbConn.json.

 

/** Die Funktion ermittelt zu einem Tabellen-Namen den vollständigen Namen.
 * Aus der Datenbankverbindung wird der Datenbank-Name und bei MS SQL die "dbo"-Angabe hinzugefügt.
 * @param {string} tableName Tabellen-Name
 * @returns {string} Vollständiger Tabellen-Aufruf (Beispiel: "MyTable" -> "DatabaseName.dbo.MyTable")
 **/
SqlObject.getFullTable( tableName )

 

/** Setzt die Properties auf leere Strings zurück.
 * @returns {boolean} true / false
 **/
SqlObject.resetEntries( )

 

/** SetztÄndert manuell die Property "SQLTable" und "FullTable".
 * Der Verbindungsaufbau erfolgt weiterhin über die Angabe des Verbindungs-Namen!

 * @param {string} table Neuer Tabellen-Name
 * @returns {boolean} true / false
 **/
SqlObject.setTable( table )

 

/** Ändert manuell die Property "DB", "DBO" und "FullTable".
 * Der Verbindungsaufbau erfolgt weiterhin über die Angabe des Verbindungs-Namen!

 * @param {string} databaseName Name der neuen Datenbank
 * @param {string} dbo Optionale Angabe für die "dbo"-Angabe (nur MS SQL)
 * @returns {boolean} true / false
 **/
SqlObject.switchDatabase(
databaseName, dbo )

 

/** Ändert die Datenbankverbindung. Es muss ein gültiger Wert aus der "dbConn.json" angegeben werden!
 * @param {string} dbConnectionName Name der Datnbankverbindung aus der "dbConn.json"
 * @returns {boolean} true / false
 **/
SqlObject.switchDbConnection( dbConnectionName )

 

/** Die Datenbankspalten für SELECT, INSERT und UPDATE Befehle werden im Property-Array "ColumnArray" gespeichert.
 * Über die folgenden Funktionen können Datenbankspalten hinzugefügt werden.
 * @param {string} sqlColumnName Name der SQL-Tabellen-Spalte
 * @param {string} sqlColumnType Typ zur SQL-Tabellen-Spalte ("varchar", "date", "datetime", "bit", "int", "decimal")
 * @param {*} optValue Für INSERT und UPDATE Befehle muss ein Wert mitgegeben werden.
 *                                    Der Wert muss zum Tabellen-Spalten-Typen passen!
 * @param {int} optDecimalPlaces Bei numerischen Werten muss die Anzahl der Dezimalstellen angegeben werden!

 **/
SqlObject.addColumn( sqlColumnName, sqlColumnType, optValue, optDecimalPlaces )

/** Über die folgenden Funktionen kann direkt der DB-Spalten-Typ mitgegeben werden **/
SqlObject.addBitColumn( sqlColumnName, optValue )

SqlObject.addDateColumn( sqlColumnName, optValue )
SqlObject.addDatetimeColumn( sqlColumnName, optValue )
SqlObject.addDecimalColumn( sqlColumnName, optValue, optDecimalPlaces )
SqlObject.addIntColumn( sqlColumnName, optValue )
SqlObject.addVarcharColumn( sqlColumnName, optValue )

 

/** Ein SQL-Befehl kann über diese Funktion selber zusammengesetzt und ausgeführt werden.
 * @param {string} executeStatement Auszuführender SQl-Befehl
 * @returns {boolean} true / false

 **/
SqlObject.executeStatement( executeStatement )

 

/** Diese Funktion setzt aus den hinzugefügten Datenbank-Spalten und Werten einen INSERT-Befehl zusammen.
 * @returns {boolean} true / false
 **/
SqlObject.insertValues()