Drücke „Enter”, um zum Inhalt zu springen.

dox42 – Custom DataSource für K2 Smartobjekte

dox42 bietet für die Möglichkeit, eigene Datenquellen zu definieren (siehe hierzu auch: https://www.dox42.com/de/Solutions/Datasources und https://www.dox42.com/de/Solutions/Datasources/Custom-Datasource)

Eigentlich wollte ich schon lange die Möglichkeit integrieren, K2 Smartobjekte in dox42 Templates zu integrieren. Nun habe ich endlich mal die Zeit gefunden, genau dies zu tun. Herausgekommen ist eine dox42 Custom DataSource die es erlaubt mit einer ADO Query K2 Smartobjekte abzufragen (siehe hierzu auch: https://help.nintex.com/en-US/k2blackpearl/devref/4.7/Content/ADO_Net_Query.htm) und aus den Ergebnissen Dokumente zu generieren.

Was ich an der Sache genial finde, ist die Tatsache, dass ich mit dieser Möglichkeit auf einen Schlag alle möglichen Datenquellen, die mit den K2 Servicebrokern angebunden werden können, auch in dox42 Templates verwenden kann. D.h. ich bin nicht mehr nur auf die Möglichkeiten beschränkt, die dox42 zur Datenintegration bietet. So eröffnet sich auf einen Schlag z.B. auch die Nutzung bestehender Stored Procedures samt der Übergabe der notwendigen Parameter. Wenn man sich allein die Standardmöglichkeiten der K2-Servicebroker anschaut kann man schon erahnen wie flexibel man plötzlich unterwegs sein kann.

Nachfolgend wird ein kleines, einfaches Beispiel beschrieben. Das Beispiel holt sich über ein Smartobjekt (in diesem Fall der einfachste Fall nämlich ein mit dem K2-Designer erstelltes SmartboxObjekt.

Ziel des Beispiels ist, eine Liste aller vorhandenen Datensätze auszugeben und einen einzelnen Datensatz, der mit Hilfe eines Parameters direkt bei der Abfrage gefiltert wird.

Die Custom DataSource zeigt sich in unserem Beispiel mit dem Icon über „K2 DataSource“. Beim Anklicken öffnet sich ein Dialog, über den die Connection definiert werden kann.

Im einfachsten Fall benötigt man lediglich den K2-Hostname, den Port und den Systemnamen des Smartobjektes, das man verwenden möchte. Im Hintergrund wird dann lediglich mit einem ADO-Query das Smartobjekt abgefragt (in diesem Fall „SELECT * FROM Dox42UsersDemo“

Ausgabe der Test-Funktion:

Man kann aber auch selbst die ADO-Query schreiben. In diesem Fall hat die Angabe des K2 Smartobjektes keine Bedeutung. Mit der Definition der ADO-Query hat man natürlich deutlich mehr Möglichkeiten. So ist es z.B. möglich erforderliche Parameter mit „HAVING“ zu übergeben. So wäre eine Query gegen das UMUser-Smartobjekt denkbar wie z.B.

 

SELECT * FROM UMUser.Get_Users HAVING Label_Name='K2'

Diese Query würde entsprechend die User des K2-Labels zurückgeben.

Auf diese Weise sind sogar JOINS möglich (https://help.nintex.com/en-US/k2blackpearl/devref/4.7/Content/ADO_Net_Query.htm)

Weiter geht es mit unserem einfachen Beispiel.

Hier wird eine Parameter an die ADO-Query übergeben. dox42-Kenner sehen sofort, das es sich in diesem Fall um ein Parameter-Datenfeld handelt, welches dem dox42-Restservice übergeben werden kann und damit Einfluss auf die Erzeugung des gewünschten Dokumentes hat. In diesem Beispiel wird das Ziel verfolgt, nur einen einzigen User aus der Usertabelle abzufragen und dessen Daten in dem Dokument zu verarbeiten.

Einige Funktionen kurz erklärt:

  1. Prüft ob mit den angegebenen Daten eine Verbindung zum K2-Server aufgebaut werden kann
  2. Erzeugt eine einfache „Select“ Query aus dem angegebenen Smartobjekt mit den Eigenschaften (Spaltennamen) des Smartobjektes
  3. Zeigt die Daten aus der Select-Query an
  4. Ruft den Dialog zum Einfügen eines Datenfeldes auf
  5. Speichert die Angaben und schließt den Dialog
  6. Schließt den Dialog ohne zu speichern
  7. Zeigt die Eigenschaften des Smartobjektes an (mit Doppelklick können die jeweiligen Eigenschaften (Spaltennamen) in das Textfeld der K2 ADO Query übernommen werden)

Mit den User Credentials kann die Verbindung zum K2 Server mit einem bestimmten Benutzer aufgebaut werden.

Im dazugehörigen Word-Template sehen wir auf der rechten Seite die verfügbaren Felder unseres Smartobjektes. Im Word-Dokument selber wurden diese Felder bereits eingebaut. Dieses Beispiel ist außerdem mit einer Schleife versehen (das kleine Icon direkt über der Bezeichnung „ID:“

Mit dem Template sollen alle gefunden User angezeigt werden – was im Ergebnis wie folgt aussehen würde:

Sollten wir unseren Parameter „userid“ verwenden wollen, würde das Ergebnis entsprechend so aussehen:

Einen kleinen Wehrmutstropfen gibt es allerdings doch. Die Custom DataSource für K2 Smartobjekte verwendet die Assemblies von K2 um die Verbindung zum K2-Server aufzubauen und die ADO-Query gegen die Smartobjekte auszuführen. Diese sind mit .NET 2.0 erstellt worden. Die Assemblies von dox42 zum Einbinden in das AddIn jedoch mit 4 – das führt bei der Abfrage innerhalb der Templates zu einem „Mixed Mode“ Fehler.

Da für das dox42 Addin Word (bzw. Excel/Powerpoint) als Host dient, reicht es leider nicht aus, den erstellten Assemblies eine app.config beizufügen, welche der Anwendung bei der Ausführung klarmacht, das die Verwendung unterschiedlicher Versionen erwünscht ist.

Um den Fehler dennoch zu umgehen, habe ich in das Verzeichnis, in dem die Dateien winword.exe, powerpnt.exe und excel.exe liegen noch jeweils eine config-Datei erstellt

winword.exe –> winword.exe.config

powerpnt.exe –> powerpnt.exe.config

excel.exe –> excel.exe.config

Da diese configs (zumindest auf meinem System) noch nicht vorhanden waren, habe ich diese selbst angelegt.

Inhalt der Config-Dateien:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      <supportedRuntime version="v2.0.50727"></supportedRuntime>
    </startup>
</configuration>


Das funktioniert zumindest bei mir sehr gut …

Noch ein Hinweis:

Man muss natürlich immer auch im Blick haben wer und wie auf Daten zugreifen können soll. D.h. dieses Beispiel ist natürlich ausschließlich der Funktion gewidmet. Man darf bei der Verwendung  natürlich nie die Sicherheit der Daten vergessen. D.h. immer schön aufpassen wer und wie die Daten (vor allem über die Smartobjekte) abrufen darf und wer nicht. Meine nächste Version der Custom DataSource wird vermutlich noch zusätzlich anbieten Credentials für den Zugriff zu definieren.

Zu guter Letzt:

Das kleine Formular zur Erfassung der Daten mit einem K2-Formular möchte ich nicht vorenthalten. Natürlich nicht spektakulär, aber zur Vollständigkeit:

Sollte jemand Interesse an der Custom DataSource für dox42 haben, dann bitte einfach melden …

Bild von Wilfried Pohnke auf Pixabay