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:

CREATE TABLE RCSQuittungen (
    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:

rcsreporting.png

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 StringArray = Java.type("java.lang.String[]");
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 StringArray = Java.type("java.lang.String[]");
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();
}