Datenbanken zum Controlling von RCS-Nachrichten
Individuelle Datenbanken können ach hervorragend eingesetzt werden um Geschäftsprozesse zu steuern und grundlegendes Controlling durchzuführen. In diesem Tutorial zeigen wir, wie man Kennzahlen zur Anzahl der versandten RCS-Nachrichten pro Tag erheben kann. Das vorgehen lässt sich jedoch leicht auf die verschiedensten Szenarien übertragen. Wir gehen davon aus, dass die Grundlagen zu RCS-Nachrichten und individuellen Datenbanken bekannt sind.
Wenn man eine Datenbank in todo4teams angelegt hat, wird zunächst eine Tabelle für den entsprechenden Controlling-Zweck erzeugt. In diesem Beispiel soll die Anzahl versandter RCS-Nachrichten pro Tag mit einem optionalen Kommentar gespeichert werden. Dazu erzeugen wir im ersten Schritt eine Tabelle:
creationdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
rcsCounter INT,
description VARCHAR(32000)
);
In einem geplanten Skript zum Versand von RCS-Nachrichten fügen wir dann die entsprechenden Daten ein. Dabei gehen wir davon aus, dass die Datenbank den Namen "RCSQuittungsDB" trägt:
rcsCounter = ....
description = .....
var con = helper.getCustomDB("RCSQuittungsDB");
var stmt = con.prepareStatement("INSERT INTO RCSQuittungen (rcsCounter, description) VALUES (?,?)");
stmt.setInt(1, rcsCounter);
stmt.setString(2, doneComment);
stmt.executeUpdate();
stmt.close();
Mit diesem Code-Schnipsel kann in dem entsprechenden geplanten Skript im eingestellten Rhythmus ein Eintrag in der Tabelle RCSQuittungen erzeugt werden. Auf dieser Tabelle können dann die entsprechenden SELECT-Statements genutzt werden, um z.B. pro Tag oder pro Monat die Anzahl der versandten RCS-Nachrichten zu kontrollieren.
Will man das Ganze noch etwas komfortabler gestalten, und auch Benutzern ohne Administrationsrechte diese Möglichkeit geben, kann das mit Hilfe eine Formulars geschehen:

Dabei kann man das Datumsintervall und optional einen Filter vorgeben. Mit dem Suchen-Button können dann die Treffer direkt in der Tabelle des Formulars angezeigt werden. Hier das Callback des Suchen-Buttons:
var con = helper.getCustomDB("RCSQuittungsDB");
var sd = helper.getFormValue(form.getMetaName(), "Startdate");
var ed = helper.getFormValue(form.getMetaName(), "Enddate");
var stmt = null;
var sqlResult = null;
try
{
if (sd != null && ed != null)
{
var startdate = new java.text.SimpleDateFormat("yyyy-MM-dd 00:00:00.000").format(sd);
var enddate = new java.text.SimpleDateFormat("yyyy-MM-dd 23:59:59.999").format(ed);
var searchterm = helper.getFormValue(form.getMetaName(), "Suchbegriff");
var maxHits = helper.getFormValue(form.getMetaName(), "maxHits");
var queryStart = "SELECT creationdate,rcsCounter,description FROM RCSQuittungen WHERE ";
var queryEnd = " ORDER BY creationdate DESC OFFSET 0 ROWS FETCH NEXT "+maxHits+" ROWS ONLY";
if (searchterm != null && !searchterm.isBlank())
{
stmt = con.prepareStatement(queryStart + "description LIKE ? AND creationdate>='"+startdate+"' AND creationdate<='"+enddate+"'"+queryEnd);
stmt.setString(1, "%"+searchterm+"%");
}
else
{
stmt = con.prepareStatement(queryStart +"creationdate>='"+startdate+"' AND creationdate<='"+enddate+"'"+queryEnd);
}
sqlResult = stmt.executeQuery();
var tableResult = new java.util.HashMap();
while (sqlResult.next())
{
var values = new StringArray(3);
values[0] = sqlResult.getString("creationdate");
values[1] = sqlResult.getString("rcsCounter");
values[2] = sqlResult.getString("description");
tableResult.put(values[0], values)
}
helper.setFormValue(form.getMetaName(), "Suchergebnis", tableResult);
if (tableResult.size() == 0)
{
helper.infoMessage("Keine Treffer");
}
if (tableResult.size() == maxHits)
{
helper.infoMessage("Maximale Anzahl Treffer erreicht: "+maxHits);
}
}
else
{
helper.infoMessage("Bitte Start- und Enddatum angeben!");
}
}
catch(de)
{
println(de);
}
finally
{
if (sqlResult) sqlResult.close();
if (stmt) stmt.close();
}
Mit dem Download-Button können die Ergebnisse der Abfrage direkt als CSV-Datei heruntergeladen werden:
var con = helper.getCustomDB("RCSQuittungsDB");
var sd = helper.getFormValue(form.getMetaName(), "Startdate");
var ed = helper.getFormValue(form.getMetaName(), "Enddate");
var stmt = null;
var sqlResult = null;
try
{
if (sd != null && ed != null)
{
var startdate = new java.text.SimpleDateFormat("yyyy-MM-dd 00:00:00.000").format(sd);
var enddate = new java.text.SimpleDateFormat("yyyy-MM-dd 23:59:59.999").format(ed);
var searchterm = helper.getFormValue(form.getMetaName(), "Suchbegriff");
var maxHits = helper.getFormValue(form.getMetaName(), "maxHits");
var queryStart = "SELECT creationdate,rcsCounter,description FROM RCSQuittungen WHERE ";
var queryEnd = " ORDER BY creationdate DESC OFFSET 0 ROWS FETCH NEXT "+maxHits+" ROWS ONLY";
if (searchterm != null && !searchterm.isBlank())
{
stmt = con.prepareStatement(queryStart + "description LIKE ? AND creationdate>='"+startdate+"' AND creationdate<='"+enddate+"'"+queryEnd);
stmt.setString(1, "%"+searchterm+"%");
}
else
{
stmt = con.prepareStatement(queryStart +"creationdate>='"+startdate+"' AND creationdate<='"+enddate+"'"+queryEnd);
}
sqlResult = stmt.executeQuery();
var StringArray = Java.type("java.lang.String[]");
var sw = new java.io.StringWriter();
var w = new com.proxemo.xutl.csv.CsvWriter(sw, ';');
var head = new StringArray(3);
head[0] = "Datum";
head[1] = "RCSCounter";
head[2] = "Quittung";
w.writeRecord(head);
var rows = 0;
while (sqlResult.next())
{
var values = new StringArray(3);
values[0] = sqlResult.getString("creationdate");
values[1] = sqlResult.getString("rcsCounter");
values[2] = sqlResult.getString("description");
w.writeRecord(values);
++rows;
}
w.flush();
var csv = sw.toString();
w.close();
if (rows == 0)
{
helper.infoMessage("Keine Treffer");
}
else
{
if (rows == maxHits)
{
helper.infoMessage("Maximale Anzahl Treffer erreicht!");
}
helper.download("report_"+java.lang.System.currentTimeMillis()+".csv", csv.getBytes());
}
}
else
{
helper.infoMessage("Bitte Start- und Enddatum angeben!");
}
}
catch(de)
{
println(de);
}
finally
{
if (sqlResult) sqlResult.close();
if (stmt) stmt.close();
}