Dynamische Datenanalyse mit JPQL

Das Imixs Workflow System stellt eine flexible Funktion für dynamische Abfragen von Geschäftsdaten bereit. Zum Einsatz kommt hier die sogenannte Entity Query Language – kurz EQL. EQL ist vergleichbar mit SQL und der neuste JEE Standard für die Abfrage objekt-relationaler Daten.Eine typische EQL Abfrage hat dabei folgende Form und gleicht damit einem typischen SQL Statement:

 SELECT project from Entity AS project

Mit Hilfe der WHERE Klausel können – analog zu SQL – Abfragen verfeinert und erweitert werden. Damit ist es möglich beliebige Daten aus einem Datenbanksystem zu selektieren, um diese dann weiter zu verarbeiten.

Der Imixs IX EntityService stellt neben den Standardmethoden auch Methoden für EQL Abfragen bereit. Auch hier wird auf die JEE Implementierung des EJB Containers zugegriffen. Im Gegensatz zu dem von der Java Persistence API bereitgestellten EntityManager verfügt der Imixs EntityService aber über eine wichtige Erweiterung: Der Imixs EntityService erlaubt einen gesicherten Zugriff auf Datensätze.

Dazu werden bei jeder EQL Abfrage die individuellen Benutzerrechte geprüft und durch das IX Workflow System nur Daten selektiert; die vom betreffenden Anwender auch gelesen werden dürfen. D.h. die Abfrage erfolgt ausschließlich mit den Benutzerrechten des aktuell angemeldeten Users und garantiert so die korrekte Abfrage von geschützten Daten. Ein unerlaubter Zugriff auf geschützte Daten wird somit verhindert. Da über das IX Workflow Management System festgelegt werden kann, welche Daten von welchen Benutzern zu einem bestimmten Zeitpunkt gelesen werden dürfen, kann das Abfrage Ergebnis einer EQL Abfrage durch den IX EntityServer für unterschiedliche Benutzer unterschiedlich aussehen. Das IX Workflowsystem erlaubt also nicht nur die Abfrage von Daten, sondern vielmehr den dynamischen Zugriff auf Geschäftsprozesse und deren Daten.

INDEXE

Damit Daten mit Hilfe von EQL ausgelesen werden können, müssen im IX Workflow System entsprechende Indexe auf einzelne Felder existieren. Diese Indexe werden in der Regel durch die entsprechende Anwendung erzeugt bzw. werden von IX Worklfow Manager und IX Model Manager automatisch bereitgestellt. Jeder so erzeugte Index kann dann in ein EQL Statement aufgenommen werden.

EQL BEISPIELE

Mit Hilfe unterschiedlich komplexer EQL Abfragen lassen sich beliebige Daten aus einem Workflow System selektieren. Die nachstehenden Beispiele sollen einen Eindruck vermitteln wie Abfragen aufgebaut und eingesetzt werden können. Dabei wird davon ausgegangen, dass durch das Workflowsystem Indexe auf die Felder “type”, “namcreator”, “namteam”, “txtname” existieren.

Einfache Abfrage

Diese Abfrage selektiert alle Vorgänge vom Type “project”. Dazu wird das Attribut “type” auf einen bestimmten Wert abgefragt:

 SELECT project from Entity AS project
  JOIN project.textItems AS t
  WHERE t.itemName = 'type' 
  AND t.itemValue = 'project' 

Sortierung einer Abfrage

Die nächste Abfrage ist ähnlich mit der vorhergenden, sortiert aber zusätzlich das Ergebnis alphabetisch nach dem Attribut “txtname”:

  SELECT project FROM Entity AS project 
  join project.textItems AS t1
  join project.textItems AS t2
  WHERE t1.itemName = 'type' 
  AND t1.itemValue = 'project'
  AND t2.itemName = 'txtname'
  ORDER BY t2.itemValue ASC

Abfrage mit Mehrfachbedingungen

Das nächste Beispiel zeigt, wie mit sogenannten multiple joins unterschiedliche Bedingungen abgefragt werden können. Der “IN” Operator erlaubt die Abfrage nach unterschiedlichen Werten mit einer Oder-Verknüpfung. Es werden dabei alle Datensätze vom Typ “project” abgefrage bei denen der Username “ronny” entweder der Ersteller ist oder ein Teammitglied ist. Auch hier wird das Egebnis zusätzlich sortiert:

  SELECT project FROM Entity AS project 
  JOIN project.textItems AS t1
  JOIN project.textItems AS t2
  JOIN project.textItems AS t3
  WHERE t1.itemName = 'type' 
    AND t1.itemValue = 'project'
    AND t3.itemName = 'txtname'
  AND  t2.itemName IN ('namcreator','namteam')
       AND t2.itemValue = 'ronny' 
  ORDER BY t3.itemValue ASC

Zu beachten ist hier, dass bei zunehmender Komplexität einer Abfrage die Antwortzeit – also die Dauer bis die selektierten Daten vom System berechnet sind – zunimmt.

Zeiträume Abfragen

Das letzte Beispiel zeigt, wie Zeiträume abgefragt werden können. Auch hier kann auf Attribute vom Typ Date zugegriffen werden, sofern dazu ein Index exisitert. Das IX Workflow System verfügt aber bereits über fest definierte Attribute, die das Erstellungsdatum bzw. das letze Änderungsdatum eines Vorgangs festhalten.

Die folgende Abfragte selektiert alle Vorgänge vom Typ “project”, welche nach dem 1. August 2008 erzeugt wurden:

 SELECT project FROM Entity AS project 
 JOIN project.textItems AS t1
 JOIN project.textItems AS t2
 WHERE t1.itemName = 'type' 
   AND t1.itemValue = 'project'
   AND t2.itemName = 'txtname'
 AND  project.modified>='2008-08-01'
 ORDER BY t3.itemValue ASC

NÜTZLICHE LINKS

Weitere Informationen über EQL sind auf folgenden Webseiten zu finden:

 

Leave a Reply