Datei, Öffnen: Ein Suchdialog, der nur zeigt, was man sehen darf
Der letzte Werkstattbericht endete mit einer Ankündigung: ein echter Dokument-Öffnen-Dialog mit Suche über alles, was man sehen darf. Der Hintergrund ist eine kleine Peinlichkeit. Unsere Maklersoftware ist eine Desktop-Anwendung auf .NET, und die Oberfläche kommt aus einem hauseigenen Baukasten, der ursprünglich für dateibasierte Dokumente gebaut wurde. Der Knopf Öffnen auf der Seite Datei tat deshalb bis heute das, was er im Baukasten immer tut: Er öffnete einen Dateidialog. Nur sind unsere Dokumente keine Dateien. Eine Immobilien-Website, eine Vorlage, ein Kontakt — das sind Zeilen auf dem Server, und ein Dateidialog findet davon nichts.
Diese Woche haben wir den Knopf umgehängt. Das klingt nach einer Nachmittagsarbeit. Es waren vier Bauteile, und jedes hatte seine eigene Entscheidung.
Ein Suchbegriff an jedem Datensatz
Eine Suche braucht etwas, worin sie suchen kann. Bisher kannte jeder Datentyp nur seinen Anzeigenamen, und eine Suche über Kontakte, Websites und Vorlagen zugleich hätte eine Abfrage je Typ bedeutet. Jetzt trägt jeder Datensatz einen Suchbegriff — eine Spalte am gemeinsamen Fundament aller Datentypen. Der Server berechnet sie beim Speichern: Beim Kontakt aus Name, E-Mail-Adresse, Telefonnummern und den Firmen, bei der Immobilie aus Objektnummern und Titel, bei der Website aus Name und Adresse.
Und weil Berechnen nicht immer reicht, gibt es einen Schalter. Wer im Eigenschaften-Dialog das Häkchen Manuell setzt, schreibt den Suchbegriff selbst — „Nachbar vom Eckhaus" steht dann an einem Kontakt, den man sonst nie wiederfände. Häkchen weg, und der nächste Speichervorgang stellt den berechneten Standard wieder her. Eine Spalte, ein Schalter, kein zweites Feld.
Eine Entscheidung darunter war weniger offensichtlich: Der Standard des Fundaments ist leer, nicht der Anzeigename. Der Anzeigename eines Firmenmitglieds löst die Firma auf, der einer Datei ihren Ordner — und das Speichern läuft auf einem Arbeitsthread, auf dem die Datenbankschicht keine solchen Nachlader duldet. Drei Tests haben uns das gezeigt, bevor es ein Anwender sehen konnte. Jetzt benennt jeder suchbare Datentyp seine eigenen Felder, und was beim Speichern nachgeladen werden müsste, merkt er sich vorher.
Die Suche läuft auf dem Server
Der Desktop-Client liest seine Daten über einen Lesetunnel, der die Benutzerrechte durchsetzt — davon handelte der letzte Bericht. Die neue Suche geht bewusst nicht durch diesen Tunnel, sondern ist ein eigener Endpunkt: eine einzige Abfrage über die gemeinsame Tabelle aller Datentypen, gefiltert nach Mandant, nach den gesuchten Typen und nach den Datensatzrechten der Rolle. Wer ein Objekt nicht sehen darf, findet es auch nicht über den Umweg der Suche. Das ist keine zweite Rechteprüfung, sondern dieselbe Regel an derselben Stelle.
Gesucht wird je Wort: Alle Wörter müssen vorkommen, * steht für beliebige Zeichen, ? für genau eines. „Meier Berlin" findet den Kontakt, dessen Firma in Berlin sitzt. „LoftPark"* findet den Titel, dessen Mitte man vergessen hat.
Zuletzt geöffnet, auf jedem Rechner
Der zweite Teil des Dialogs ist die Liste der zuletzt geöffneten Dokumente. Der Baukasten hätte sie lokal geführt, als Datei im Profil des Windows-Benutzers. Wir haben sie auf den Server gelegt, je Benutzer, zwanzig Einträge. Ein Makler, der morgens am Schreibtisch und nachmittags am Notebook arbeitet, sieht auf beiden dieselbe Liste. Und weil der Server jede Zeile beim Lesen noch einmal auflöst, verschwindet ein Dokument aus der Liste, sobald es gelöscht wurde oder das Team es einem anderen zugewiesen hat. Die Liste nennt nie etwas, das man nicht öffnen könnte.
Die Liste steckt an zwei Stellen: im Dialog, solange das Suchfeld leer ist, und im Aufklappmenü des Öffnen-Knopfs selbst. Ein Klick, und die Website vom Vormittag ist wieder da.
Dokumente heißen jetzt bei ihrem stabilen Namen
Ein Nebeneffekt, der uns wichtiger ist als der Dialog: Bisher merkte sich ein geöffnetes Dokument seine Website über die laufende Nummer aus der Datenbank. Das reicht, solange die Datenbank dieselbe bleibt. Für eine Recent-Liste, die einen Datenbank-Neuaufbau überleben soll, reicht es nicht. Jetzt tragen Website- und Vorlagen-Dokumente den weltweit eindeutigen Schlüssel ihres Datensatzes, und die Module melden ihre Dokumenttypen an einer zentralen Stelle an — der Dialog kennt kein einziges Modul beim Namen. Wenn im nächsten Schritt Kontakt, Firma und Immobilie eigene Dokumente bekommen, sind das je ein Eintrag in dieser Anmeldung, nicht ein Umbau des Dialogs.
Drei Fundstücke aus dem Livetest
Das erste: Die Suche fand nichts. Gar nichts. Die neue Spalte war da, aber für 26.000 Bestandszeilen leer, weil der Suchbegriff erst beim nächsten Speichern entsteht. Also eine Nachberechnung beim Serverstart — die beim zweiten Anlauf immer noch nichts fand, weil die Datenbank den neuen Schalter an alten Zeilen nicht mit aus, sondern mit nichts belegt hatte. Ein Kriterium, das nichts als aus liest, und die Liste füllte sich.
Das zweite: Eine kopierte Vorlage wurde gefunden, die mitgelieferte nicht. Mitgelieferte Vorlagen gehören einer geteilten Gruppe, die zu keinem Maklerbüro gehört und die der Lesetunnel jedem Benutzer stillschweigend dazurechnet. Die Suche rechnete sie nicht dazu. Jetzt zieht sie denselben Kreis wie der Tunnel — und die Vorlage Standard steht wieder in der Liste.
Das dritte war gar kein Fund dieser Woche, sondern einer aus der letzten: Ein Test im Branch war rot, seit der Wurzelordner eines Mandanten sich gegen jede Zuweisung wehrt. Der Test hatte seinen Ordner direkt unter die Speicherwurzel gehängt und war damit selbst diese Wurzel. Wer einen Branch übernimmt, übernimmt seine roten Tests mit; wir haben ihn mit einer Mandantenwurzel über dem Team-Ordner nachgestellt.
Die Bilanz in Zahlen
- 1 Spalte und 1 Schalter am Fundament aller Datentypen, 6 Datentypen mit eigenem Suchbegriff
- 2 neue Endpunkte: Suche und Recent-Liste, beide mit denselben Rechten wie der Tunnel
- 5 Eigenschaften-Dialoge mit dem Feld Suchbegriff und dem Häkchen Manuell
- 1 Dialog hinter Datei, Öffnen, der kein Modul beim Namen kennt
- über 3.500 automatische Tests, alle grün — drei davon haben uns diese Woche vor uns selbst geschützt
Was Anwender davon sehen: einen Öffnen-Knopf, der tut, was er verspricht. Tippen, finden, öffnen — und nur das, was die eigene Rolle sehen darf. Ein Einzelmakler merkt von der Datentrennung nichts. Ein Maklerbüro mit dreißig Leuten merkt, dass die Suche eines Kollegen nicht seine Kontakte ausspuckt.
Der nächste Schritt steht schon in der Anmeldung der Dokumenttypen: Kontakt, Firma, Lead und Immobilie als eigene Dokumente, mit Eigenschaften für den schnellen Dialog und Öffnen für die ganze Akte.