Inhalte der Datenbank als Xml-Dokumente für den Scriptzugriff oder für Word-Serienbriefe bereitstellen

Inhalte von Tabellen können unter kanonischen Urls als Xml-Dokument bereitgestellt werden, so daß der Inhalt einer Tabelle oder das Ergebnis einer Abfrage von einem Script gelesen und auf einem anderen Server weiterverarbeitet werden kann. Ebenso lassen sich mit dieser Technik die Daten direkt in eine Excel-Tabelle importieren, so daß ein Word-Serienbrief die Daten weiterverarbeitet. Für die Einrichtung ist es nur notwendig, in den Menüs für Tabellen, Views und Abfragen den Xml-Zugriff für das gewünschte Objekt zu gestatten. Die Standardeinstellung sperrt diese Art des Zugriffs. Wahlweise können die Daten, das Tabellenschema der Daten einschließlich der Datentypen oder sowohl Daten als auch Schema abgefragt werden.

Aufrufkonventionen

Die Xml-Darstellungen können über Urls abgerufen werden, die nach dem folgenden Muster aufgebaut sind:
http://datenbank-name.server-daten.de/tables|views|queries/Objektname/data.xml|schema.xml|text.xml
Beispiel: https://beispiel.server-daten.de/tables/Artikel/data.xml

Hinweis: Sehen Sie bei solchen Beispielen immer einmal in den Quellcode der Seite. Dann wird die Struktur der Daten sichtbar.

Nach dem Subdomain-Namen folgt eines der Schlüsselwörter 'tables', 'views' oder 'queries', gefolgt vom Namen des gewünschten Objektes. Anschließend werden entweder die Daten, das Schema oder die Daten als Textdatei (Spaltennamen in erster Zeile, Tabulator als Spaltentrenner) abgerufen.

Varianten der drei Typen

Für den Typ 'Tabellen' entspricht die Ausgabe der Standard-Listendarstellung innerhalb der internen Menüs, welche für die Suche innerhalb dieser Tabelle genutzt wird. Es werden folglich nicht alle Spalten, sondern nur die vordefinierte ID-Spalte (Tabellenname + 'Id') und die erste Spalte ausgegeben. Werden mehr Spalten benötigt, so kann ein View mit den gewünschten Spalten in beliebiger Reihenfolge erstellt werden. Falls eine Ausgabespalte Detailspalte einer Relation ist, so wird nicht der Zahlenwert, sondern der für den Nutzer verständliche Wert aus der Relationen-Grundtabelle ausgegeben. Dies entspricht der Ausgabe, die Views in den internen Masken und in Ausgabeseiten bereitstellen.

Beispiel: https://beispiel.server-daten.de/views/UmsatzView/data.xml

Innerhalb von Abfragen lassen sich verschiedene Tabellen beliebig kombinieren. Hier werden die Relationen nicht berücksichtigt.

Filterung der zurückgegebenen Daten

Die Menge der zurückgegebenen Daten kann zusätzlich eingeschränkt werden, indem an die Url, getrennt durch '?', Kombinationen aus Namen und Werten angehängt werden. Für 'tables' und 'views' entspricht die ausgeführte Filterung der Filterung innerhalb der Standard-Kreuzsuche: Den vorhandenen Spaltennamen werden Filterwerte zugewiesen. Ein Filter
/tables/Artikel/data.xml?A_Name=O
gibt nur die beiden Zeilen mit Oberhemd zurück. Analog zur Standardkreuzsuche können alle Spalten der Tabelle zur Suche verwendet werden, auch wenn diese nicht zurückgegeben werden.

Bei Abfragen kann jeder innerhalb der Abfrage definierte Parameter zur Filterung genutzt werden. Die Abfrage qry_kundenrechnungen, die im Beispiel für PDF-Dokumente erstellen genutzt wird, verwendet den Parameter '@i'. Die folgende Url gibt die Rechnung mit der ID 1 zurück:

https://beispiel.server-daten.de/queries/qry_kundenrechnungen/data.xml?i=1

Das für den MS-SqlServer notwendige '@' zur Kennzeichnung für Parameter wird hier entfernt.

Zusätzliche Einschränkungen

Ein offenkundiges Problem bei dieser Art der Datenabfrage besteht darin, daß die Abfrage von beliebigen Clients durchgeführt werden kann. Um das Problem eines möglichen Mißbrauchs zu reduzieren, können für Abfragen zusätzliche Techniken genutzt werden.
  • Verwenden eines Zufallsschlüssels: Deklarieren Sie sich einen Schlüssel mit einem beliebigen Namen (hier: @id) und verwenden Sie eine Where-Klausel:
    Where @id = 'zufälliger-Ausdruck' And ...
    	[weitere Kriterien]
    Anschließend können Sie die Abfrage wie folgt aufrufen:
    http://datenbank-name.server-daten.de/queries/Abfrage/data.xml?id=zufälliger-Ausdruck
    Dies schränkt die Möglichkeit der Datenabfrage auf alle Nutzer ein, welchen der zufällige Ausdruck bekannt ist.
  • Festlegen und Abfragen der IP-Nummer: Deklarieren Sie einen Parameter mit dem fest vorgegebenen Namen
    @ip_nr varchar(15)
    Beim Aufruf mit
    http://datenbank-name.server-daten.de/queries/Abfrage/data.xml?ip_nr=
    darf der Wert unbelegt bleiben. Findet das ausführende Modul einen Parameter mit diesem Namen in der Url, so wird dieser Parameter mit der IP-Nummer (Servervariable REMOTE_ADDR) des aufrufenden Rechners belegt und so an die Abfrage weitergegeben. Enthält die Abfrage einen Abschnitt
    Where @ip_nr = 'IP-Nummer Ihres Servers' And
    	[weitere Kriterien]
    so erhalten alle Rechner mit anderen IP-Nummern keine Zeilen zurück.
In diesem Sinne sind Abfragen der geeignete Typ für diese Art der Datenverwendung. Tabellen und Views können genutzt werden, um Daten zu verarbeiten, die ohnehin öffentlich sind.

Fehlerbehandlung

Bei dieser Art des Zugriffs können diverse Fehler auftreten: Die Schlüsselwörter tables/views/queries/data/schema sind falsch geschrieben. Das Objekt ist nicht vom geforderten Typ oder fehlt. Das Objekt existiert zwar, der gewünschte Zugriff (Daten, Schema) ist jedoch nicht erlaubt oder das Objekt ist nicht für den anonymen Lesezugriff freigegeben. Ein Spalten- oder Parametername kann falsch sein. Schließlich kann der übergebene Wert vom falschen Datentyp sein. In diesen Fällen wird ein kleines Xml-Dokument mit dem folgenden Format zurückgegeben:
<?xml version='1.0' encoding='UTF-8'?>
<error number='-3' sql-error='0'>wrong type</error>
Das Attribut 'number' liefert eine globale Klassifikation des Fehlers gemäß der folgenden Auflistung:

WertBedeutung
-1Sicherheitseinschränkung
-2Sql-Fehler
-3Falscher Typ: Erlaubt sind data.xml, schema.xml, text.xml
-4Falscher Objekttyp: Erlaubt sind tables, views, queries
-5Ungültiges Objekt: Angefordert Tabelle 'artikel', die es nicht gibt
-6Objekt gibt es zwar, aber der Typ ist falsch: Angefordert Abfrage 'Artikel', es gibt eine Tabelle 'Artikel'
-7Kundendaten konnten nicht abgefragt werden

Beim Fehlertyp -2 / Sql-Fehler wird der Fehler vom Datenbankserver zurückgegeben. Dabei kann es sich bsp. um einen falschen Parameter oder einen falschen Datentyp handeln. In diesem Fall werden die Fehler so aufbereitet, wie dies analog beim Bearbeiten von Abfragen im Menü erfolgt. Die für den MS-SqlServer typische Fehlernummer wird als 'sql-error' zurückgegeben.

Beispiele für diese Fehler:

  • https://beispiel.server-daten.de/tables/kontakt/data.xml - keine Xml-Ausgabe (-1)
  • https://beispiel.server-daten.de/tables/Artikel/data.xml?ArtikelIde=11 - falscher Parametername (-2)
  • https://beispiel.server-daten.de/tables/Artikel/data.xml?ArtikelId=elf - Konvertierungsfehler (-2)
  • https://beispiel.server-daten.de/tables/Artikel/date.xml - falscher Datentyp (-3)
  • https://beispiel.server-daten.de/table/Artikel/data.xml - falscher Objekttyp (-4)
  • https://beispiel.server-daten.de/tables/rtikel/data.xml - ungültiges Objekt (-5)
  • https://beispiel.server-daten.de/tables/ArtikelView/data.xml - Objekt vom falschen Typ (-6)
Für den Fall -7 kann kein Beispiel geliefert werden.

Weitere Hinweise

Die Namen der Objekte (Tabellen, Views und Abfragen), die in Ausgabeseiten und für den Xml-Zugriff nutzbar sind, werden auf dem Webserver gecacht. Dieser Cache wird erneuert, falls eines dieser Objekte geändert wird. Während der nächsten Minute fehlt das Objekt im Cache. Dies ist eine Folge der verzögerten Erstellung von Systemobjekten.

Daraus ergibt sich: Wird für ein Objekt der Xml-Zugriff gestattet und unmittelbar anschließend eine die Xml-Daten abfragende Url aufgerufen, so ist das Objekt unbekannt.

Eine Minute später müßte dies funktionieren.

Anwendung: Import in Excel

Werden die so bereitgestellten Daten für einen Serienbrief benötigt, so genügt es, einmalig in einer Excel-Tabelle den Menüpunkt
- Daten
- Externe Daten importieren
- Neue Webabfrage
zu wählen. Unter 'Adresse' wird die Url mit dem Typ 'text.xml' eingegeben. Beispiel:
https://beispiel.server-daten.de/views/UmsatzView/text.xml
Anschließend wähle man 'Importieren'.

Als Ergebnis wird ein Datenbereich eingefügt, der mit der externen Datenquelle verknüpft bleibt und bsp. per rechter Maustaste (Daten aktualisieren) aktualisiert wird. Basierend auf dieser Excel-Mappe können wie gewohnt Serienbriefe erstellt werden.

Die einfachste Form der Verwendung besteht darin, sich pro verwendeter Tabelle / Abfrage eine Excel-Tabelle zu erzeugen und die obigen Schritte immer im Feld 'A1' auszuführen. Anschließend kann die Excel-Arbeitsmappe gespeichert und vielfach - auch von verschiedenen Rechnern her - verwendet werden.


Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2018 Jürgen Auer, Berlin.