Ausgabe von Objektverknüpfungen

Dieser Artikel beschreibt, wie Sie im Sammlungsmodul Angaben zu verknüpften Objekten ausgeben können.  

Listengeneratorfunktion

Für die Druckausgabe von Objektverknüpfungen stellt MuseumPlus im Listengenerator eine Listengeneratorfunktion bereit, mit deren Hilfe die existierenden Verknüpfungen aus der Datenbank ausgelesen und formatiert ausgegeben werden können. Die Funktion wird an Stelle eines Feldnamens in der Listendefinition hinterlegt und hat folgendes Format:

=<<Objektbezüge([Filter,...,Filter,][Paramter])>>

Es kann dabei als Filter die Art der Objektverknüpfung angegeben werden (Enthält, Teil von, Kopie). Bei der Ausgabe werden dann nur die Einträge mit den entsprechenden Typen berücksichtigt.

Als Parameter kann ein numerischer Wert zwischen 0 und 3 angegeben werden, welche die Formatierung der Ausgabe steuern. Wird dieser Parameter weggelassen, benutzt MuseumPlus automatisch den Wert 0.

  • 0: Ausgabe durch Semikolon getrennt, kurze Ausgabeform
  • 1: Ausgabe durch Semikolon getrennt, kurze Ausgabeform
  • 2: Ausgabe durch Zeilenumbruch getrennt, lange Ausgabeform
  • 3: Ausgabe durch Zeilenumbruch getrennt, lange Ausgabeform

Direkter Datenbankzugriff

Ein Nachteil bei der Verwendung der Listengeneratorfunktion ist die fehlende Einflussmöglichkeit auf die exakte Auswahl und Gestaltung der auszugebenden Informationen. Es gibt allerdings noch die Möglichkeit, direkt auf die Datenbank zuzugreifen. Dazu nutzt man die Möglichkeit des Listengenerators in MuseumPlus, VisualBasic-Befehle auszuführen. Was man allerdings benötigt ist etwas Hintergrundwissen über die Datenbankstruktur von MuseumPlus.

Hintergrundwissen

Die Speicherung von Informationen zur Verknüpfung zwischen mehreren Objekten erfolgt in MuseumPlus in einer separaten Tabelle. Um die Objektverknüpfungen eines bestimmten Objektes herausfinden zu können, benötigt man die eindeutige Nummer des Datensatzes des Sammlungsobjektes. Es handelt es sich dabei um die Objekt-ID, die stets oben rechts in der Erfassungsmaske angezeigt wird.

Verwendung der Funktion DLOOKUP

Nach dieser kurzen Einführung in die Hintergründe nun der Blick direkt in die Datenbank: Die betreffende Tabelle für Objektverknüpfungen heißt ObjObj und kann im Listengenerator mit der VisualBasic-Funktion DLOOKUP folgendermaßen ausgelesen werden:

=DLOOKUP("OobObj2ID","ObjObj","OobBeziehungS='Teil von' AND OobObj1Id=" & [ObjId])

Dieses Beispiel liefert die Objekt-ID des ersten Objekts, welches mit dem aktuellen Objekt über die Verknüpfung Teil von verknüpft ist. Weitere Informationen zur Verwendung von DLOOKUP finden sich hier.

Für die Auswahl der gewünschten Informationen aus der Tabelle ObjObj benötigt man die sogenannten generischen Feldnamen - also den internen, von der Datenbank verwendeten Namen - der Felder, welche die Informationen enthalten. Die wichtigsten generischen Feldnamen der Tabelle ObjObj habe ich in der folgenden Liste zusammengestellt:

  • OobObj1ID: Objekt-ID des aktuellen Objektes
  • OobObj2ID: Objekt-ID des verknüpften Objektes
  • OobBeziehungS: Art der Beziehung (Enthält, Teil von, siehe auch...)
  • OobBemerkungS: Kommentar zur Beziehung
  • OobNachweisS Nachweis der Beziehung

Die Feldbezeichnungen können übrigens mit Hilfe einer MuseumPlus-Funktionalität herausgefunden werden: Positioniert man die Einfügemarke in einem Feld und betätigt danach die Tastenkombintion >Strg<->I<, werden einige Feldinformationen angezeigt, unter anderem der generische Feldname

Beispiel: Auslesen des übergeordneten Objektes (bei Teilobjekten)

Eine Einschränkung bei der Verwendung der Funktion DLOOKUP macht sich beim Ermitteln von Objektbezügen allerdings sofort bemerkbar: In der Tabelle für Objektbeziehungen werden nur die IDs der entsprechenden Objekte gespeichert. Für die Druckausgabe will man aber meist besser interpretierbare Ausgaben erhalten, z.B. die Inventarnummer und den Titel des Objektes. Diese Informationen sind jedoch in der Datenbank in einer anderen Tabelle gespeichert. Bei einer "echten" Datenbankabfrage könnte man die dafür notwendigen Abfragen miteinander kombinieren. Bei DLOOKUP geht das so ohne Weiteres nicht. Allerdings kann man sich mit einem kleinen Trick behelfen: DLOOKUP-Aufrufe lassen sich durchaus ineinander schachteln. Ein DLOOKUP-Aufruf könnte z.B. die ID eines verknüpften Objektes ermitteln und liefert das Ergebnis an eine zweite DLOOKUP-Funktion, welche die dazugehörigen Objektinformationen ausliest. Das sieht dann etwa so aus:

=DLOOKUP("ObjInventarNrS & ", " & ObjTitelOriginalS", "ObjDaten", "ObjId=" & NZ(DLOOKUP("OobObj2ID","ObjObj","OobBeziehungS='Teil von' AND OobObj1Id=" & [ObjId]),0))

Die äußere DLOOKUP-Funktion liest die Objektinformationen aus, die innere die ID des verknüpften Objektes. Damit es nicht zu einem Fehler kommt, wenn es überhaupt keine entsprechende Objektverknüpfung gibt, ist die innere DLOOKUP-Funktion zusätzlich von einer Funktion NZ umschlossen, welche in diesem Fall der äußeren Funktion die Objekt-ID "0" vorgaukelt, die es jedoch in einer MuseumPlus-Datenbank nicht gibt, weswegen die äußere Funktion dann auch kein entsprechendes Objekt finden kann und schlicht nichts ausgibt.