Class Viewer

Inspect classes and routines, and copy them between servers

Browse class and routine source (including INT code) and copy a class to another namespace or another server from the context menu.

  • Properties, Methods, Queries, Parameter
  • Signaturen und Beschreibungen auf IRIS
  • Vererbungshierarchie navigierbar
  • Storage-Definition in lesbarer Form
  • Überladene Methoden aus Superklassen zusammengeführt

InterSystems IRIS und Caché sind objektrelationale Datenbanken, was bedeutet, dass jede Tabelle durch eine Klasse unterstützt wird, und jede Klasse definiert ihre eigene Storage-Struktur, Vererbungshierarchie und Methoden. Die meisten SQL-Clients zeigen nur die Tabellen-Seite dieser Beziehung — die Spalten und Indizes — und lassen die Klassen-Seite unsichtbar. Das ist eine verpasste Gelegenheit: Klassen dokumentieren, wie Daten gespeichert werden, wie sie vererbt werden und welche Geschäftslogik sie haben.

Der Class Viewer macht die Klassendefinition lesbar, organisiert nach Properties, Methoden, Queries und Parametern, mit der Vererbungshierarchie als navigierbarer Baum. Man muss nicht zur IDE gehen, um zu sehen, wie eine Klasse aufgebaut ist — es ist direkt im SQL-Client.

Class Viewer Panel zeigt eine IRIS-Klasse mit Tabs für Properties, Methods, Queries, Parameters, Storage und Inheritance, das Properties-Tab ist ausgewählt und zeigt eine Liste von Properties mit ihren Typen, Kollatierungen und ob sie berechnet sind
Klassen lesbar wie Tabellen: Properties, Methods, Queries und Storage.

Properties: Spalten als Klassenelemente

Das Properties-Tab listet jede Property der Klasse mit ihrem Typ, Kollation, ob sie berechnet ist, ob sie privat ist, ob sie transient ist, und ob sie erforderlich ist. Das ist die Klassenperspektive dessen, was eine Spalte ist — nicht nur der SQL-Datentyp, sondern die Property-Definition, die ihn unterstützt.

Properties, die von Superklassen geerbt werden, werden mit einer Notiz angezeigt, welche Klasse sie definiert hat, sodass man die Vererbung verfolgen kann, ohne jede Klasse in der Hierarchie manuell zu öffnen. Überladene Properties — Properties, die in einer Subklasse neu definiert werden — werden ebenfalls notiert, sodass klar ist, wann eine Property ihre Basis-Definition ändert.

Methods: Geschäftslogik und validierte Berechnungen

Das Methods-Tab listet jede Methode, die auf der Klasse definiert ist, mit ihrer Signatur, ihrem Rückgabetyp und ob sie klassenweit oder instanzspezifisch ist. Methoden, die von Superklassen geerbt werden, werden notiert, und überladene Methoden werden hervorgehoben, sodass man sehen kann, wo die Implementierung tatsächlich lebt.

Das ist der Ort, an dem Geschäftslogik dokumentiert ist, und es ist der Grund, warum Klassen mehr als nur Tabellen sind. Eine Methode wie CalculateDiscount() kann von SQL aufgerufen werden, aber sie lebt auf der Klasse, nicht in der SQL-Schicht, also ist der Class Viewer der Ort, an dem man sie findet.

Queries: SQL-Views als Klassenmember

IRIS und Caché erlauben es, SQL-Queries als Klassenmitglieder zu definieren, was bedeutet, dass eine Abfrage in der Klasse lebt, nicht als separate View oder gespeicherte Prozedur. Das Queries-Tab listet diese Abfragen mit ihren Parametern und Spalten, sodass man sehen kann, welche Abfragen verfügbar sind, ohne die gesamte Klassendefinition zu lesen.

Das ist besonders nützlich für Klassen, die komplexe Berichte oder Aggregationen definieren — die Abfrage ist Teil der Klasse, nicht ein separates Objekt, also ist der Class Viewer der Ort, an dem man sie findet.

Class Viewer mit dem Storage-Tab ausgewählt, zeigt die Storage-Definition einer Klasse in lesbarer Form, mit Data-Global, Index-Globals, und Map-Blöcken, die anzeigen, welche Properties in welchen Subscripts gespeichert sind
Storage-Definition: welche Property in welchem Subscript, in welchem Global.

Storage: Wie die Klasse die Daten speichert

Das Storage-Tab zeigt die Storage-Definition der Klasse in lesbarer Form. Das ist nicht die tabellarische Darstellung, die der Table Viewer zeigt — das ist die Klassenperspektive, die erklärt, wie Properties auf Global-Subscripts gemappt werden.

Die Storage-Definition ist das, was es möglich macht, einen Wert in einem Global zu sehen und zu wissen, welche Property er ist. Umgekehrt, wenn eine Property in Slot 7 definiert ist, aber das Lesen der Daten aus Slot 8 kommt, ist das ein Metadaten-Inkonsistenzproblem, und das Storage-Schema ist der Weg, das zu diagnostizieren.

Das Tab zeigt auch die Index-Definitions — welche Indizes die Klasse hat, welche Spalten sie abdecken und welche Globals sie verwenden. Das ist dasselbe wie das Indexes-Tab im Table Viewer, aber aus der Klassenperspektive, nicht der Tabellenperspektive.

Parameters: Klassenweite Konfiguration

Klassen können Parameter definieren, die klassenweite Konfigurationen sind — Dinge wie DEFAULTGLOBAL, USEEXTENTSET und benutzerdefinierte Parameter, die von Geschäftslogik verwendet werden. Das Parameters-Tab listet diese Parameter mit ihren Werten, sodass man sehen kann, wie eine Klasse konfiguriert ist, ohne die Klassendefinition zu lesen.

Inheritance: Die Vererbungshierarchie als Baum

Das Inheritance-Tab zeigt die Vererbungshierarchie als Baum, mit der aktuellen Klasse an der Wurzel und allen Superklassen darüber und allen Subklassen darunter. Jede Klasse im Baum ist anklickbar, sodass man durch die Hierarchie navigieren kann, ohne die Klassennamen manuell zu suchen.

Das ist der Weg, um zu verstehen, woher eine Property oder Methode kommt: Man sieht die Klasse, sieht die Superklasse im Inheritance-Tab, klickt auf die Superklasse, und sieht ihre Properties. Das ist schneller als die Hierarchie im Kopf zu behalten oder die IDE zu öffnen.

Class Viewer mit dem Inheritance-Tab ausgewählt, zeigt einen Baum von Superklassen über der aktuellen Klasse und Subklassen darunter, jede Klasse anklickbar
Die Vererbungshierarchie, navigierbar wie eine Tabellen-Outline.

Signaturen und Beschreibungen für Methoden, Properties und Parameter, auf IRIS

Seit 4.02 bekommt die Klassenansicht auf IRIS unterhalb der gewohnten Gruppen Methods, Fields, Queries und Storages einen zusätzlichen Zweig Atelier Details: die Klassenbeschreibung, und — gruppiert als Methods, Properties und Parameters — jedes Mitglied mit seiner vollständigen Signatur, zum Beispiel CreateObject(Progid As %Library.String) As %Library.RegisteredObject, plus Beschreibungstext als Kindknoten, wo die Klasse einen trägt. Bis 4.01 zeigte der Baum auf IRIS nur die über SQL gelesenen, blossen Mitgliedsnamen und sonst nichts; der neue Zweig liest sich so, wie der Quelltext selbst die Absicht dokumentiert, ohne die Klasse in einem Editor zu öffnen.

Das kommt über den action/index-Aufruf der Atelier-REST-API — dieselbe Webserver-Verbindung, die der Source-Code-Reiter bereits nutzt, kein eigener ObjectScript-Parser — und braucht deshalb Atelier-API-Version 4 oder neuer (automatisch ausgehandelt) sowie einen erreichbaren Webserver. Fehlt eines davon — ein älterer Server, kein konfigurierter Webserver, ein vorübergehendes Netzwerkproblem —, bleibt der Zweig Atelier Details einfach weg; der Rest des Baums, weiterhin über SQL gelesen, ist davon nicht betroffen. Der Zweig ist IRIS-spezifisch; die gewohnten Gruppen Methods/Fields/Queries/Storages funktionieren auf beiden Plattformen so weiter wie bisher.

Klassen kopieren, exportieren, importieren und kompilieren

Neben dem Lesen stehen fünf schreibende Operationen im Kontextmenü der Klassen: Export, Import, Kopieren, Kompilieren und Löschen. Beim Kopieren wählen Sie das Ziel aus Ihren bestehenden Verbindungen — dieselbe Geste funktioniert innerhalb eines Servers und zwischen Servern —, und die Klasse wird auf dem Ziel kompiliert.

Seit 4.01: das funktioniert jetzt auch auf IRIS. Die fünf Operationen laufen dort über denselben Webserver-Endpunkt, den auch der Quellcode-Reiter benutzt, und ein fehlgeschlagenes Kompilieren zeigt den Fehlertext und die Compiler-Ausgabe des Servers statt eines falschen Erfolgs. In 4.00 waren sie auf IRIS abgeschaltet und nur auf Caché verfügbar.

Zwei Dinge sind dabei zu bedenken. Die Klasse wird auf dem Ziel kompiliert — eine Klasse mit unerfüllten Abhängigkeiten meldet dort also Compile-Fehler, was nützlich ist, aber bewusst geschehen sollte und nicht in die Produktion. Und kopiert wird die Definition, nicht die Daten; für Zeilen nehmen Sie den Data Pumper oder die Query Cloud. Eine Verbindung, die Sie als schreibgeschützt markiert haben, lehnt alle fünf ab — siehe Umgebungen und Schreibschutz.

Wer sonst noch eine Klasse anfasst, beantwortet der Class Viewer nicht allein. Das ist die Quellcode-Suche: serverseitig über alle Klassen und Routinen des Namespace, von einer Tabelle aus als Where is this used? erreichbar.

Wie das zum Rest des Tools passt

Der Class Viewer ist absichtlich parallel zum Table Viewer aufgebaut: Dieselbe Schnittstelle, dieselbe Navigation, dieselbe Filterung, nur auf Klassendefinitionen angewendet statt Tabellendefinitionen. Das ist möglich, weil IRIS und Caché Tabellen und Klassen als zwei Projektionen derselben Struktur behandeln — jede Tabelle ist eine Klasse, jede Klasse ist eine Tabelle — und der Class Viewer ist die Ansicht auf die Klassenseite.

Das macht SQL DATA LENS zu mehr als nur einem SQL-Client: Es ist ein vollständiges Werkzeug für das Verständnis von IRIS- und Caché-Datenbanken, nicht nur ihrer SQL-Schicht. Wenn die Antwort auf eine Frage in der Klassendefinition liegt, nicht in der Tabellendefinition, ist der Class Viewer der Weg, diese Antwort zu finden, ohne die IDE zu öffnen.

Der Class Viewer ist in jeder Edition verfügbar, einschließlich der Free Edition. Laden Sie SQL DATA LENS herunter und sehen Sie, wie eine Tabelle als Klasse aussieht, nicht nur als Spalten.

Explore your IRIS data from SQL down to globals

Download, unzip, connect. Your first namespace is on screen in about three minutes.

Windows 10, 11 and Windows Server (64-bit) · ~130 MB · version 4.02 · full 30-day Pro trial included