enaio® editor-for-reports: SQL-Anfragen
SQL-Anfragen sind Anfragen, mit denen Benutzer über enaio® client auf Daten aus der Datenbank zugreifen können:
- unabhängig von den Zugriffsrechten auf Archivobjekte und
- unabhängig vom Ordnungssystem der Archivobjekte.
Sie können beispielsweise eine Anfrage nach allen Registern stellen, in denen ein bestimmter Dokumenttyp noch nicht vorhanden ist. Sie können eine Anfrage nach der Anzahl der an einem Arbeitsplatz und in einem Zeitraum gescannten Seiten stellen, um den Einsatz von Scannern zu optimieren. Benutzern kann der Zugriff auf genau festgelegte Indexdaten ermöglicht werden.
Die Ergebnisse der Anfragen können an VB-Skript-Makros übergeben werden, die automatisch oder vom Benutzer ausgeführt werden.
Beim Einrichten von SQL-Anfragen unterstützt Sie auf Wunsch das Consulting-Team von OPTIMAL SYSTEMS.
Die SQL-Anfragen können Sie über die Profilverwaltung Benutzern zur Verfügung stellen oder aus der Objektsuche an Benutzer senden. SQL-Anfragen werden verschlüsselt gesendet.
Über SQL-Anfragen können über SQL-Statements und VB-Skripte Daten aus der Datenbank gelöscht und geändert werden. Wollen Sie das verhindern, ändern Sie die Erlaubnis zum Schreibzugriff über enaio® enterprise-manager im Bereich Servereigenschaften > Kategorie: Daten > ADO-Datenbankzugriff.
SQL-Anfragen können nur von Benutzern eingerichtet werden, denen über das Sicherheitssystem die Systemrolle 'Client: SQL-Anfragen bearbeiten' zugeordnet ist und deren Arbeitsplatz der Lizenzschlüssel 'OSM' zugeordnet ist.
Benutzer, an deren Arbeitsplatz der Lizenzschlüssel 'OSE' verfügbar ist und die über die Systemrolle 'Client: SQL-Anfragen ausführen' verfügen, können SQL-Anfragen ausführen. Diesen Benutzern können Sie die SQL-Anfragen über die Profilverwaltung zuordnen.
Mit der Automatischen Aktion 'SQL-Kommando ausführen' ist es ebenfalls möglich, SQL-Statements auszuführen und Ergebnisse in Form von Recordsets an VB-Skripte zu übergeben. Im Gegensatz zu den SQL-Anfragen können mit dieser Aktion Daten in der Datenbank geändert werden.
Einrichten von SQL-Anfragen
SQL-Anfragen werden in enaio® client eingerichtet.
Im Bereich Objektsuche finden Sie den Ordner Desktop, im Kontextmenü des Ordners den Eintrag SQL-Anfrage.
Über diesen Eintrag öffnen Sie das Fenster SQL-Anfrage.
Der erweiterten Anfrage geben Sie einen Namen.
Sie können wählen, ob das Ergebnis der Anfrage eine SQL-Trefferliste sein soll, oder eine Liste von DMS-Objekten.
Ergebnisliste als DMS-Objekte
Im Unterschied zur Ergebnisliste mit SQL-Treffern ist eine Ergebnisliste mit DMS-Objekten eine Trefferliste, die in enaio® client alle Standard-Funktionen zum Bearbeiten und Organisieren der Treffer anbietet. Aktionen werden nicht konfiguriert, Kopfzeilen ebenfalls nicht. Die Spalten der Trefferliste richten sich nach den Einstellungen für Trefferlisten in enaio® client.
Als SQL-Befehl ist nur ein Statement nach dem Format 'select id from object' zulässig. Wie bei Anfragen mit Ergebnislisten als SQL-Treffer können die Anfragen Variablen enthalten, die über einen Dialog abgefragt werden. Die Variablen können vorbelegt sein.
Beispiel:
Die Anfrage ermittelt alle Dokumente eines Typs, die für einen Benutzer, der über eine mit dem Benutzernamen vorbelegten Variable angegeben wird, freigegeben sind.
select d.id from object28 d, osdoccollaboration c, benutzer b
where d.id=c.doc_id and b.id=c.to_user and b.benutzer like '$Benutzer,C30@#BENUTZER#$'
Ergebnisliste als SQL-Treffer
Im Bereich SQL-Befehl tragen Sie den SQL-Befehl ein.
Im Bereich Kopfzeile geben Sie optional Bezeichnungen an, die in der Trefferliste statt der datenbankinternen Bezeichnungen in der Kopfzeile der Tabelle verwendet werden.
Über die Kontrollkästchen binden Sie VB-Skripte ein, die aus der Trefferliste aufgerufen werden können.
Speichern Sie die SQL-Anfrage, wird sie unter dem angegebenen Namen im Ordner Desktop angezeigt.
SQL-Befehl
Mit SQL-Anfragen können Benutzer mit einem SQL-Befehl Daten aus der Datenbank anfragen.
Den SQL-Befehl tragen Sie im Fenster SQL-Anfrage in den entsprechenden Bereich ein.
Beachten Sie dabei folgendes:
- Der SQL-Befehl muss mit der Anweisung 'select' beginnen.
Daten können also nicht gelöscht oder geändert werden.
- Tabellen und Spalten müssen über die datenbankinternen Bezeichnungen angefragt werden.
- Sie können Variablen verwenden.
Der Benutzer trägt beim Ausführen der Anfrage im Dialog Werte ein, die bei der Anfrage für die Variablen verwendet werden.
Über den Datenbankbereich von enaio® editor können Sie die Tabellen- und Spaltenbezeichnungen ermitteln.
Im Fenstermenü der Titelleiste einer Trefferliste in enaio® client finden Sie den Eintrag SQL-Statement. Über diesen Eintrag öffnen Sie ein Fenster mit dem SQL-Statement, über das die Trefferliste erzeugt wurde. Diesem SQL-Statement können Sie ebenfalls die Tabellen- und Spaltenbezeichnungen entnehmen. Die SQL-Statements von Anfragen im Expertenmodus können Sie ebenfalls einsehen.
SQL-Statements aus Trefferlisten und dem Expertenmodus, aber auch SQL-Statements aus Protokollen, unterscheiden sich gegebenenfalls von den SQL-Statements, die für SQL-Anfragen verwendet werden müssen. Diese SQL-Statements werden direkt auf die Datenbank abgesetzt. Datumsfelder müssen deshalb in der Sprache des Datenbank-Benutzers angegeben werden.
Auf die SQL-Statements kann nur ein Benutzer zugreifen, der über die Systemrolle 'Client: SQL-Anfragen bearbeiten' verfügt.
Variablen
Sie können innerhalb des SQL-Befehls Variablen verwenden. Den Variablen weist der Benutzer über einen Dialog einen Wert für die Anfrage zu.
Die Syntax einer Variablen sieht so aus:
$Name,C30$
Variablen sind durch die Start- und Endkennung $ geklammert. Name ist eine beliebige Bezeichnung der Variable für den Benutzerdialog. Dem Namen folgt ein Komma, dem Komma die Angabe eines Feldtyps.
Folgende Typen sind möglich:
C |
Zeichenkette mit '%' am Ende, Wildcards werden ersetzt |
S |
Zeichenkette, Wildcards werden ersetzt |
N |
Zeichenkette ohne Ersetzungen |
D |
Datum |
Darauf folgt eine Längenangabe für die Länge des Textfeldes im Benutzerdialog.
Je nach Feldtyp und der von Ihnen eingesetzten Datenbank muss die Variable zusätzlich durch Hochkommas eingeklammert werden.
Variablen können vorbelegt werden. Im Dialog wird der angegebene Wert voreingetragen. Der Benutzer kann den Wert bestätigen oder überschreiben.
Beispiel für die Syntax einer Variablen mit Vorbelegung:
$Name,C30@Hellmer$
Der vorbelegte Wert ist durch ein führendes @ gekennzeichnet. Als Wert selbst kann ebenfalls die Variable #BENUTZER# für den aktuellen Benutzer oder #DATUM# für das aktuelle Datum benutzt werden. Weiter möglich sind #COMPUTER-IP#, #COMPUTER-GUID#, #COMPUTER-NAME#.
Wollen Sie keine Vorbelegung, lassen Sie das '@' weg.
Bedingungen werden mit '=' oder '!=' formuliert. Platzhalter werden beim Ausführen nicht angehängt. Lässt der Benutzer Variablen leer, wird nach einem leeren, also nicht indexierten Feld gesucht.
Beispiel:
Die SQL-Anfrage erstellt für statistische Auswertungen eine Trefferliste mit anonymisierten Patientendaten. Statt der gesamten Indexdaten der Patientenordner wird nur der Inhalt dreier Indexdatenfelder angezeigt: das Geburtsdatum, das Geschlecht und der Wohnort. Der Benutzer kann über eine nicht vorbelegte Variable das Geschlecht angeben. Lässt er das Feld leer, werden alle Patienten aufgelistet.
select datum1,feld5,feld7 from stamm6 where feld5 LIKE '$Geschlecht,C1$'
Die datenbankinternen Bezeichnungen der Tabelle und der drei gewünschten Spalten ermitteln Sie über die Eigenschaften in enaio® editor.
Eine entsprechende Trefferliste ohne Einschränkung auf ein Geschlecht sieht in enaio® client so aus:
Die Kopfzeile enthält die datenbankinternen Bezeichnungen der Spalten, wenn im Bereich Kopfzeile keine Bezeichnungen eingetragen wurden.
Kopfzeile
Die Trefferliste einer erweiterten Anfrage enthält in der Kopfzeile als Spaltenbezeichnungen die datenbankinternen Bezeichnungen der Spalten. Im Fenster SQL-Anfragen können Sie im Bereich Kopfzeile Bezeichnungen für die Spalten in der Kopfzeile angeben.
Den Bezeichnungen können Werte für die Spaltenformatierung zugeordnet werden.
Die Syntax sieht so aus:
Bezeichnung,Wert;
Folgende Werte können Sie angeben:
-1 |
Die Spalte ist so breit wie der längste Eintrag. Dies ist die Standardeinstellung, d. h. der Eintrag kann entfallen. |
0 |
Die Spalte wird nicht angezeigt. VB-Skripte benötigen eventuell Daten, die angefragt, aber nicht angezeigt werden sollen, beispielsweise die ID eines Archivobjekts. |
Breite in Pixel |
Sie geben einen Wert für die Spaltenbreite in Pixel an. Beispiel: Wohnort,50; |
Beispiel:
Im Beispiel oben werden drei Spalten angefragt. Diesen Spalten werden im Feld Kopfzeile Bezeichnungen zugeordnet.
Geb.-Datum,50;Geschlecht,50;Wohnort,-1;
Die entsprechende Trefferliste in enaio® client sieht so aus:
Die Kopfzeile enthält, statt der datenbankinternen Bezeichnungen der Spalten, die eingetragenen Bezeichnungen mit der angegebenen Spaltenformatierung.
VB-Skripte
Den Daten aus der Trefferliste einer erweiterten Anfrage können Sie VB-Skripte zuordnen.
Sie markieren im Fenster SQL-Anfrage die gewünschten Kontrollkästchen, klicken auf die dazugehörige Aktions-Schaltfläche und tragen das VB-Skript in den geöffneten Skript-Editor ein.
Aktions-Button für gesamte Trefferliste einfügen
Dieses Kontrollkästchen markieren Sie, wenn Sie alle Daten aus der Trefferliste an ein VB-Skript übergeben wollen. In das folgende Feld tragen Sie eine Bezeichnung für die Schaltfläche ein, über den das Skript ausgeführt wird. Das VB-Skript tragen Sie in das Fenster ein, das Sie über die Schaltfläche Aktion 1 öffnen.
Trefferliste nicht öffnen (nur Aktion 1 ausführen)Dieses Kontrollkästchen markieren Sie, wenn das VB-Skript, das der gesamten Liste zugeordnet ist, gleich ausgeführt werden soll.
Mehrfachauswahl von Treffern erlaubenDieses Kontrollkästchen markieren Sie, wenn Sie die Daten der Treffer, die der Benutzer markiert an ein VB-Skript übergeben wollen. Zugeordnet ist das Skript, das für Aktion 1 hinterlegt ist. Es wird über die dort bezeichnete Schaltfläche ausgeführt.
Aktions-Button für einzelne Treffer einfügen
Dieses Kontrollkästchen markieren Sie, wenn Sie die Daten eines markierten Treffers an ein VB-Skript übergeben wollen. In das folgende Feld tragen Sie eine Bezeichnung für die Schaltfläche ein, über den das Skript ausgeführt wird. Das VB-Skript tragen Sie in das Fenster ein, das Sie über die Schaltfläche Aktion 2 öffnen.
Aktion bei Doppelklick auf Treffer ausführen
Dieses Kontrollkästchen markieren Sie, wenn Sie die Daten eines Treffers mit Doppelklick an ein VB-Skript übergeben wollen. Das Skript tragen Sie in das Fenster ein, das Sie über die Schaltfläche Aktion 3 öffnen. Tragen Sie kein Skript ein, wird das Skript, das für Aktion 2 hinterlegt ist, ausgeführt.
Die Schaltflächen sind auch aktiv, wenn keine Treffer ermittelt werden. Beachten Sie dieses in den Skripten.
Beispiele:
Das folgende Skript überträgt alle Daten aus der Trefferliste in eine Excel-Tabelle:
sub ExportToExcel() |
|
dim excel |
'Objekt-Variable für Excel |
dim row, col |
'Laufvariablen |
|
|
if recordset.recordcount = 0 then |
'Abfrage, ob die Trefferliste leer ist |
msgbox "Leeres Recordset", vbCritical,"optimal_AS®" |
|
else |
|
recordset.movefirst |
'Cursor an den Anfang des Recordsets |
set excel = CreateObject("excel.application") |
'Excel-Objekt erzeugen |
excel.workbooks.add |
'Neue Arbeitsmappe anlegen |
for col = 0 to recordset.fields.count - 1 |
'Alle Felder des Recordsets durchlaufen |
excel.activesheet.cells(1, col + 1).value = recordset.fields(col).Name |
'und den Feldnamen in die erste Zeile |
next |
'nächstes Feld |
excel.activesheet.cells(2,1).copyfromrecordset recordset |
'ab 2. Zeile ganzes Recordset kopieren |
excel.visible = true |
'Excel anzeigen |
set excel = nothing |
'Objekt-Variable ungültig machen |
end if |
|
end sub |
|
ExportToExcel |
|
Wollen Sie eine Mehrfachauswahl ermöglichen, steht für das Skript Aktion1 die Variable selrecords zur Verfügung, in der durch Komma getrennt die Indizes der markierten Einträge des Recordsets stehen. Für die erste Zeile der Trefferliste ist der übergebene Index '0'. Ist kein Treffer markiert, ist selrecords leer.
if recordset.recordcount > 0 then msgbox "Folgende Einträge wurden markiert: " & selrecords
Das folgende Skript öffnet als Aktion 2 oder Aktion 3 einen einzelnen markierten Treffer über die 'ID' aus der Trefferliste. Der Cursor steht an der entsprechenden Position und darf nicht durch recordset.movefirst an den Anfang gesetzt werden. Die Variable selrecords wird vor dem Aufruf von Aktion 2 oder Aktion 3 nicht initialisiert.
set a = CreateObject( "optimal_AS.Application")
objecttype = a.FindObjectType( RecordSet.Fields.Item("id").Value)
a.OpenObjectID RecordSet.Fields.Item("id").Value, objecttype,0