Zum Inhalt springen

Anhänge: Dateien dort, wo die Arbeit steht

Version 0.6.04 Min. Lesezeit

In der ersten Fassung der Navigation stand ein Menüpunkt „Dokumente“. Er war ein Versprechen, das GODAV Pro nicht halten konnte, denn es gab schlicht keinen Ort für Dateien. Das Bildschirmfoto eines Fehlers, das unterschriebene Protokoll, der Projektauftrag: All das landete weiter in Mailpostfächern. Mit den Anhängen hat sich das geändert, und den Menüpunkt gibt es seitdem nicht mehr. Dateien hängen dort, wo über sie gesprochen wird, also am Vorgang oder am Projekt. Ein eigener Bereich daneben hätte eine zweite Ablage versprochen, und zwei Ablagen heißt, dass man in beiden suchen muss.

Projektkarte von Business Central mit der Box „Anhänge“ unter der Beschreibung Auch ein Projekt hat seine Anhänge: der Ort für den Projektauftrag oder die Rahmenvereinbarung.

Eine Tabelle für zwei Besitzer

Ein Anhang gehört entweder zu einem Vorgang oder zu einem Projekt. Naheliegend wären zwei getrennte Tabellen gewesen, eine je Besitzer. Ich habe mich für eine einzige entschieden, in der genau einer der beiden Verweise gesetzt sein muss, und das prüft die Datenbank selbst. Der Grund: Jede Regel rund um Anhänge, also wer sie sehen darf, wer sie ändern darf, wie gelöscht und wie ausgeliefert wird, stünde sonst zweimal im Code. Und die zweite Fassung ist erfahrungsgemäß die, in der eines Tages die Sichtbarkeitsprüfung fehlt.

Die Bedingung „genau einer“ ist dabei keine Zierde. Ohne sie gäbe es Anhänge, die an gar nichts hängen: in keiner Liste sichtbar, über keine Prüfung erreichbar, für immer liegengeblieben. Und ein Anhang mit zwei Besitzern wäre noch schlimmer, weil die Prüfung gegen das eine Projekt liefe, angezeigt würde er aber im anderen.

Die ganze Karte nimmt Dateien an

Wer eine Datei anhängen will, zieht sie auf den Vorgang, und zwar irgendwohin. Ich wollte kein kleines gestricheltes Zielfeld, das man erst suchen muss. Sichtbar wird die Ablagefläche nur, solange etwas darüber schwebt. Das klingt einfach, hatte aber seine Tücken. Ziehen und Ablegen meldet sich bei jedem inneren Element neu, sodass die Hervorhebung ohne Gegenmaßnahme flackert. Und der Editor für die Beschreibung nimmt selbst Bilder entgegen, denn ein Bild im Text ist Teil eines Satzes und kein Dokument. Ohne eigene Prüfung wäre aus einem solchen Bild zusätzlich ein Anhang geworden.

„Datei wählen“ ist dabei kein zweiter Weg zum selben Ziel, sondern der einzige, der ohne Maus funktioniert. Ziehen und Ablegen lässt sich weder mit der Tastatur bedienen noch mit einem Screenreader finden.

Mehrere Dateien auf einmal gehen ebenfalls, sie werden aber nacheinander hochgeladen und nicht gleichzeitig. Fünf große Dateien parallel lägen sonst zusammen im Arbeitsspeicher des Servers. Scheitert eine davon, etwa weil sie zu groß ist, laufen die übrigen trotzdem durch, und die Meldung nennt genau diese eine Datei beim Namen.

Einstellungen, Reiter „Allgemein“, mit der Höchstgröße je Datei Die Höchstgröße stellt der Betrieb ein. Die Oberfläche prüft sie schon vor dem Hochladen.

Die eingestellte Grenze prüft übrigens schon der Browser, bevor er auch nur ein Byte schickt. Der Server prüft zwar ohnehin noch einmal, aber erst, nachdem er die Datei empfangen hat. Achtzig Megabyte zu übertragen, nur um danach „zu groß“ zu lesen, ist eine Wartezeit, die niemand versteht. Deshalb darf jeder Angemeldete diese Einstellung lesen, ändern dürfen sie nur Administratoren.

Erst der Inhalt, dann der Eintrag

Die Datei selbst und ihre Angaben wie Name, Größe und Besitzer liegen getrennt. Beim Speichern kommt zuerst der Inhalt, danach der Eintrag in der Liste. Scheitert der zweite Schritt, wird der erste zurückgenommen. Andersherum könnte ein Anhang in der Liste stehen, dessen Download ins Leere läuft, und ein sichtbar kaputter Eintrag ist für den Nutzer von einem Datenverlust nicht zu unterscheiden.

Ich hätte beides auch in eine gemeinsame Datenbanktransaktion packen können, solange die Dateien in der Datenbank liegen. Die Speicherung steckt aber hinter einer Schnittstelle, damit sie sich später gegen einen anderen Speicher tauschen lässt. Ein externer Dateispeicher kann an keiner Datenbanktransaktion teilnehmen. Hätte die Schnittstelle das trotzdem versprochen, wäre sie nur eine verkleidete Datenbanklösung gewesen.

Auch beim Herunterladen gab es eine Falle: Ein schlichter Link auf die Datei schickt keine Anmeldung mit und endet deshalb mit „nicht angemeldet“. Den Zugang einfach an die Adresse zu hängen, hätte ihn in jedes Protokoll unterwegs geschrieben. Deshalb holt die Anwendung die Datei selbst ab und reicht sie dann an den Browser weiter.

Außerdem

  • Gelöscht wird weich. Der Eintrag verschwindet aus der Liste, die Datei selbst bleibt erhalten.
  • Anhängen, Umbenennen und Löschen stehen im Änderungsprotokoll des Vorgangs beziehungsweise des Projekts.
  • Größen werden binär gerechnet, wie die Grenze selbst. Sonst stünde in der Liste eine Datei mit „26 MB“, die eine Grenze von 25 gar nicht verletzt.

Was noch fehlt

Eine Vorschau für Bilder und PDFs gibt es bewusst noch nicht. Jede Datei wird heruntergeladen und nie im Browser angezeigt, und daran soll eine Vorschau nichts ändern. Sie braucht deshalb einen eigenen Weg, auf dem der Dateityp vorher geprüft wird.

  • Vorgänge
  • Architektur
  • Sicherheit