Skip to main content

SqlObject() für SQL-Statements

Oft müssenmü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über die Funktionen aus der Portal-Script API umgesetzt werden. Beim Verbindungsaufbau wird das Benutzer-Passwort häufighäufig im Klartext hinterlegt und häufighäufig werden bei Fehlern die Datenbank-Verbindungen nicht geschlossen.

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

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

Das Objekt enthältenthält diverse property.  

@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ältenthält das Property das Ergebnis als Array.  
@property {string} Log EnthältEnthält die kompletten Log-Informationen.
@property {string} SQL Speichert den zuletzt ausgeführtenausgeführten SQL-Befehl.
@property {string} SQLWhere WHERE-Bedingung fürfür SELECT oder UPDATE-Statements. Das "WHERE" selber muss nicht angegeben werden.
@property {boolean} ExpectHits Wenn beim SELECT Statement keine Treffer ermittelt wurden, kann dies optional als Fehler interpretiert werden.
@property {boolean} SelectDistinct Beim SELECT Statement kann optional ein 'SELECT DISTINCT' ausgeführtausgeführt werden.
@property {int} SelectTop Bei SELECT-Befehlen kann die Trefferanzahl optional auf die gegebene Anzahl eingeschränkteingeschränkt werden.
@property {string} SQLGroupBy Hier könnenkönnen SQL-Spalten angegeben werden, worüberworüber ein SELECT Resultset gruppiert ausgegeben werden soll.

Das "GROUP BY" muss selber nicht angegeben werden.
@property {string} SQLOrderBy Angabe von Spalten überüber welche die Treffer in einem SELECT sortiert ausgegeben werden.  
@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} SQLType Speichert den Verbindungs-Namen aus der dbConn.json.
@property {string} ConnType "odbc" oder "mysql" und fürfür Testzwecke "oracle"
@property {string} ConnStr Verbindungsname aus der "dbConn.json"
@property {string} SQLUser Benutzer um die DB-Verbindung aufzubauen
@property {string} DB Datenbankname aus "dbConn.json"
@property {string} DBO "dbo"-Angabe (nur MS SQL) aus "dbConn.json"
@property {string} DateFormat Datumsformat fürfür INSERT / UPDATE
@property {string} ReturnID Beim INSERT kann optional ein RückgabewertRückgabewert der eingefügteneingefügten Spalte zurückgegebenzurückgegeben werden, wie zum Beispiel eine Auto-Inkrement-Spalte.
@property {string} ReturnAutoColumn Angabe einer Auto-Inkrement-Spalte, dessen Wert nach einem INSERT zurückgegebenzurückgegeben werden soll
@property {string} ReturnAutoColWhere Bei MS SQL kann bei einem INSERT Befehl die Rückgabe-Rückgabe-Spalte direkt im SQL-Statement angegeben werden. Bei MySQL muss nach dem INSERT ein SELECT auf die Datenbank ausgeführtausgeführt werden. FürFür die Abfrage wird eine passende WHERE-Bedingung benötigt,benötigt, welche hier angegeben werden muss.
@property {*} ColumnArray Array aus Spalten-Objekten fürfür SELECT / INSERT / UPDATE Befehle.

Das Objekt unterstütztunterstützt MySQL und MS SQL. ORACLE ist kaum getestet und ist daher offiziell nicht freigegeben,  

  

/** Die Funktion ermittelt zu einem Tabellen-Namen den vollständigenvollständigen Namen.

  * Aus der Datenbankverbindung wird der Datenbank-Name und bei MS SQL die "dbo"-Angabe hinzugefügt.hinzugefügt.

  * @param {string} tableName Tabellen-Name

  * @returns {string} VollständigerVollständiger Tabellen-Aufruf (Beispiel: "MyTable" -> "DatabaseName.dbo.MyTable")

  **/

SqlObject.getFullTable( tableName )

  

/** Setzt die Properties auf leere Strings zurückzurück.

  * @returns {boolean} true / false

  **/

SqlObject.resetEntries( )

  

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

  * @param {string} table Neuer Tabellen-Name

  * @returns {boolean} true / false

  **/

SqlObject.setTable( table  )

  

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


  * @param {string} databaseName Name der neuen Datenbank

  * @param {string} dbo Optionale Angabe fürfür die "dbo"-Angabe (nur MS SQL)

  * @returns {boolean} true / false

  **/

SqlObject.switchDatabase(
databaseName, dbo )

  

/** ÄndertÄndert die Datenbankverbindung. Es muss ein gültigergü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ürfür SELECT, INSERT und UPDATE Befehle werden im Property-Array "ColumnArray" gespeichert.

  * @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ürFü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Ü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 )

/** Über die folgende Funktion können unmaskierte Werte (zum Beispiel Funktionsaufrufe)
 * oder eigens maskierte Werte mitgegeben werden.
 * @param {string} sqlColumnName Name der SQL-Tabellen-Spalte
 * @param {string} value Wert
 * @param {string} optType Optionaler Typ für den Rückgabewert ("bit", "date", "datetime", "decimal", "int", "varchar" /
 *                                          Standard:  "varchar")
 * @since 1.0.300
 **/
SqlObject.addColumnValue( sqlColumnName, value, optType )

 

/** Ein SQL-Befehl kann überüber diese Funktion selber zusammengesetzt und ausgeführtausgeführt werden.

  * @param {string} executeStatement AuszuführenderAuszuführender SQL-Befehl

  * @returns  {boolean}  true / false


  **/

SqlObject.executeStatement( executeStatement )

  

/** Diese Funktion setzt aus den hinzugefügtenhinzugefügten Datenbank-Spalten und Werten einen INSERT-Befehl zusammen
 
 * und führtführt im Anschluss executeStatement() aus.
 
 * ÜberÜber die Funktion kann immer nur eine Datenbank-Spalte hinzugefügthinzugefügt werden.

  * @returns  {boolean}  true / false

  **/

SqlObject.insertValues()

  

/** Diese Funktion ist dafürdafür gedacht, um bei einem INSERT mehrere Spalten als Bulk-Import zu importieren.
 
 * Die Funktion erstellt den INSERT-Part aus dem "ColumnArray".


  * @returns  {string} Erstellt den ersten Teil des INSERT-Statements aus den Spalten-Angaben

  **/

SqlObject.getInsertStatementColumns()

  

/** Diese Funktion ist dafürdafür gedacht, um bei einem INSERT mehrere Spalten als Bulk-Import zu importieren.
 
 * Die Funktion erstellt einen Werte-Part aus dem "ColumnArray".
 
 * Aus den Funktionen getInsertStatementColumns() und dieser Funktion muss der INSERT-Befehl zusammengesetzt werden.


  * Im Anschluss kann der Befehl mit der Funktion executeStatement() ausgeführtausgeführt werden.

  * @returns  {string} VALUES-Angabe eines INSERT-Statements fürfür einen Bulk-Import.

  **/

SqlObject.getInsertStatementValues()

  

/** Diese Funktion setzt aus den hinzugefügtenhinzugefügten Datenbank-Spalten und Werten einen UPDATE-Befehl zusammen
 
 * und führtführt im Anschluss executeStatement() aus.

  * @returns  {boolean}  true / false

  **/

SqlObject.updateValues()

  

/** Diese Funktion setzt aus den hinzugefügtenhinzugefügten Datenbank-Spalten und Werten einen UPDATE-Befehl zusammen
 
 * und führtführt im Anschluss executeStatement() aus.
 
 * @param {string} tableType Optionale Angabe.

 *  *    "usedb": Setzt "USE dbname' vor das SELECT und verwendet nur die dbo-Angabe und den Tabellennamen im SELECT

 *  *    "justtable": Verwendet im SELECT nur die Property 'SQLTable'.

 *  *    "usedbjusttable": Kombiniert die beiden Angaben "usedb" und "justtable".
 
 * Andernfalls wird im SELECT-Statement die Property 'FullTable' verwendet.

  * @returns  {*} Gibt ein Array der SQL-Treffer zurück.zurück. Bei einem Fehler wird false zurückgegeben.zurückgegeben.

  **/

SqlObject.selectData(tableType)