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} | 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 |
| @property | {string} | Log | |
| @property | {string} | SQL | Speichert den zuletzt |
| @property | {string} | SQLWhere | WHERE-Bedingung |
| @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' |
| @property | {int} | SelectTop | Bei SELECT-Befehlen kann die Trefferanzahl optional auf die gegebene Anzahl |
| @property | {string} | SQLGroupBy | Hier Das "GROUP BY" muss selber nicht angegeben werden. |
| @property | {string} | SQLOrderBy | Angabe von Spalten |
| @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 |
| @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 |
| @property | {string} | ReturnID | Beim INSERT kann optional ein |
| @property | {string} | ReturnAutoColumn | Angabe einer Auto-Inkrement-Spalte, dessen Wert nach einem INSERT |
| @property | {string} | ReturnAutoColWhere | Bei MS SQL kann bei einem INSERT Befehl die |
| @property | {*} | ColumnArray | Array aus Spalten-Objekten |
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)