Wenn der Kunde mitarbeitet

In den vergangenen Jahren hatte ich einige kleinere bis mittelgroße Projekte, bei denen der Kunde gelegentlich selbst Hand angelegt hat. Das kann eine „interessante“ Situation sein, muss aber nicht. Es gibt ein paar wenige Tricks, wie man die Sache trotzdem in den Griff bekommt.

Ich als Entwickler habe dabei nicht permanent im Büro des Kunden gearbeitet, und auch auf Seiten des Kunden waren manchmal noch andere Kollegen an der Entwicklung beteiligt. Auch lagen oft mehrere Monate zwischen zwei Änderungen, weil die Applikation einfach stabil lief. Aus meiner Sicht kann es dabei trotzdem verschiedene Situationen geben, für die eine sinnvolle Lösung benötigt wird:

  1. Es muss sichergestellt werden, dass durch ein Update des Programms die bestehenden Daten nicht durch einen alten Stand überschrieben werden.
  2. Es muss sichergestellt werden, dass alle Entwickler immer mit dem aktuellen Programmcode weiterarbeiten.
  3. Das Konzept muss auch mit unterschiedlichem Wissensstand der Kollegen zurecht kommen.

Besonders der dritte Punkt erfordert unter Umständen eine ungewöhnliche Vorgehensweise.

Frontend-/Backend-Trennung

Es handelte sich bei den genannten Projekten allesamt um Access-Projekte, bei denen sowohl die Datenbank als auch das Frontend in Access realisiert waren. Selbstverständlich habe ich Frontend-/Backend-Trennung eingesetzt, so dass ein Softwareupdate keine Daten zerstören konnte. Das ist natürlich keine neue Erfindung (und vor allem ist sie nicht von mir), ich erwähne es nur der Vollständigkeit halber. Was mir jedoch sehr geholfen hat, ist die automatische Neuverknüpfung der eingebundenen Tabellen. Dafür war die von mir geschriebene Klasse clsAttachTables zuständig, die die Tabelleneinbindung überprüft und notfalls korrigiert hat. Natürlich gab es auch einen Assistenten, aber dann hätte der Anwender ja wieder selbst darauf achten müssen. Ich wollte aber eine vollkommen automatische Lösung, daher die Klasse.

Diese Klasse wird im Zuge der durch das Autoexec-Makro ausgelösten Aktionen aufgerufen und erhält die Information, wo das zugehörige Backend im Netzwerk zu finden ist, aus einer INI-Datei (Funktion ReadFromIni). Die Tabellennamen befinden sich in einer lokalen Tabelle im Frontend. So kann ohne Interaktion des Anwenders beim ersten Start nach einem Update die korrekte Verbindung hergestellt werden. Eine nennenswerte Verzögerung beim Start ergibt sich dadurch im Normalfall nicht, denn wenn der aktuelle Einbindungspfad mit dem aus der INI-Datei übereinstimmt, gibt es nichts zu tun.

Im Frontend muss lediglich eine zusätzliche Tabelle mit dem Namen „EingebundeneTabellen“ mit der einzigen Spalte „Tabellenname“ existieren. Das ist nicht so schön, weil hart ausprogrammiert. Wer das ändern mag, ist willkommen.

Die INI-Datei könnte dann auf meinem Rechner z.B. so aussehen (die Pfadangaben sind natürlich frei erfunden):

[Options] 
BackendPath = C:\Users\Chris\Projekte\KUNDE\backend\ 
BackendFile = KUNDE-Data.accdb 
ImportPath = C:\Users\Chris\Projekte\KUNDE\data\

Beim Kunden sähe die gleiche Datei dann vielleicht so aus:

[Options] 
BackendPath = T:\ABTEILUNG\PROJEKT\Daten\
BackendFile = PGMNAME-Data.accdb 
ImportPath = X:\Import\Filialen\Umsaetze\

Da die Klasse clsAttachTables einige Events wirft, kann in der Applikation bei Bedarf eine entsprechende Anzeige eingebaut werden, ohne dass der Code der Klasse verändert werden muss. Dies könnte ein Laufbalken oder eine simple Statuszeilenausgabe sein:

Public Event Starting(NumberOfTables As Long)
Public Event NextTable(TableName As String)
Public Event Aborted(Message As String)
Public Event Finished(backendPath As String)

Dazu muss die Objektvariable nur mit Dim WithEvents x As clsAttachTables deklariert werden. Statt dem x verwenden wir natürlich bitte einen „hübscheren“ Namen :-)

Gleicher Entwicklungsstand, unterschiedliches Wissen

Ideal wäre natürlich, wenn alle Entwickler mit Quellcodeverwaltung arbeiten würden. Dazu ist bei Access noch so etwas wie OASIS oder Ivercy notwendig, da die MDB oder ACCDB selbst sich natürlich nicht für ein Quellcodeverwaltungssystem eignet.

Leider spielt hier Punkt 3 hinein, denn das macht nicht jeder. Besonders Entwickler, die nicht hauptberuflich entwickeln, kennen so etwas oft nicht. Das ist keine Schande, nur eine gefühlte Tatsache ;-) Schlimmer wäre es, wie ein Manager mir mal im Brustton der Überzeugung sagte: „Wir verwenden keine Quellcodeverwaltung, das ist nur was für große Projekte!“ Na gut, dann eben anders.

Auch wenn eine Quellcodeverwaltung (aus welchen Gründen auch immer) für die Kollegen nicht in Frage kommt: Ich arbeite nicht mehr „ohne“! Zu dem „Warum“ habe ich mich in dem Artikel Argumente gegen Quellcodeverwaltung geäußert. Aber ist das überhaupt sinnvoll, wenn nur ich das mache? Was passiert mit dem Code, den die Kollegen schreiben?

Im Grunde ist es sehr einfach. Wir müssen uns nur darüber einig werden, wer wann an dem Code arbeitet. Das ist bei eher seltenen Einsätzen Gottseidank fast zwangsläufig der Fall. Ich muss nur darauf achten, dass ich mir bei Beginn einer Erweiterung den aktuellen Stand zuschicken lasse. Bevor ich anfange, exportiere ich dann den Code mit OASIS und committe ihn mit einem entsprechenden Hinweis. Wenn ich weiß, wer als letztes daran gearbeitet hat, kann ich sogar den Autor noch korrekt einarbeiten (sonst heißt der einfach „Fa. Xyz“), evtl. sogar den Zeitpunkt. Das ist für die spätere Nachvollziehbarkeit vorteilhaft, aber nicht zwingend.

Dann arbeite ich ganz normal an dem Projekt, und wenn ich einen Endstand erreicht habe und das Programm dem Kunden wieder zuschicke, kommt in Git oder Mercurial noch ein „tag“ hinzu, entweder mit der Versionsnummer oder mit „Auslieferung vom “ plus Datum. Und am Ende dann ein „push“ in die Cloud, damit die NSA auch was davon hat :-)

Das ist eigentlich schon alles.

Die in diesem Artikel beschriebenen Klassen und Funktionen können von meinem öffentlichen Projekt auf Bitbucket heruntergeladen werden. Eine Beschreibung findet sich im Artikel VB and VBA Code-Library.


SmallInvoice Logo

Ähnliche Artikel:

AuthorChristoph Jüngling

Selbständiger Softwareentwickler und Seminarleiter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

2 + 15 =