Web-Seite Carsten von Olnhausen Carsten von Olnhausen
Bilder werden geladen...
Individual Software
Projekt Management
Übersicht der Projektstruktur der realisierten Anwendung
Die Aufgabe der Projekt Management Anwendung besteht darin, die erforderlichen Daten und Dokumente für die Projekte der Firma zentral zur Verfügung zu stellen.
Durch die gemeinsame Nutzung der Daten können die Projekte optimal auf die vorhandenen Kapazitäten der einzelnen Filialen zur Bearbeitung aufgeteilt werden.
Der Kunden kann über eine Internet Verbindung ebenfalls auf seine Daten zugreifen.
An einem solchen Beispiel ist gut zu sehen, wo die Vorteile einer Individual Software Lösung liegen. Der heutige Funktionsumfang ist bei dieser Firma erheblich umfangreicher als anfangs geplant.
Auch gibt es Funktionen im System, die sich nicht so bewährt haben, wie zu Anfang vermutet. Das kann ein völlig normaler Prozess in der Softwareentwicklung sein. Funktionen müssen auf die Bedürfnisse des Anwenders zugeschnitten sein. Andere Elemente werden im Laufe der Zeit durch den Fortschritt der Technik obsolet.
Neue Möglichkeiten erschießen sich durch moderne Browser und innovative Techniken wie Visual WebGui.
Durch neue Hardware wie Tablet und Smartphone eröffnen sich ebenfalls neue Möglichkeiten, ein solches System aufzuwerten und es an aktuelle Entwicklungen anzupassen.
Individual Software
Projekt Management
Daten in der ersten Ausbaustufe
Die Kunden und Projektdaten werden einer MS-SQL Datenbank gespeichert.
Da sich das Projektgeschäft des Kunden als sehr dokumentenlastig darstellt, werden die Dokumente in der SQL Datenbank verwaltet, aber auf externen File-Servern vorgehalten
Die Menge / Größe der Dokumente hätte die Kapazität der Datenbank im Laufe der letzten 10 Jahre gesprengt.
Die Entscheidung, die Dokumente nicht in der SQL Datenbank zu speichern, hat sich bewährt.
Individual Software
Projekt Management
Benutzer und Rechte Verwaltung
Das System ist mit einer umfangreichen Benutzer Verwaltung ausgestattet. Benutzer können alleine oder als Mitarbeiter einer Firma existieren.
Die Rechte des Benutzers ergeben sich aus seiner Firmenzuordnung.
Somit reicht es aus, eine Firma oder Abteilung an einem Projekt zu beteiligen um einer ganzen Gruppe von Benutzern Zugriff zu gewähren.
Individual Software
Projekt Management
Basis des Business ist eine spezialisierte CAD-Anwendung.
Stammdaten Daten Schnittstelle CAD-Anwendung – Projekt Management
Die Hauptanwendung des Kunden ist eine spezialisierte CAD-Anwendung, welche in C++ umgesetzt wurde.
Für dieses System wird eine IBM DB2 Datenbank verwendet.
In jeder Filiale ist ein IBM DB2 Datenbank Server vorhanden.

Einer meiner Kollegen entwickelte einen Dienst, welcher die Zeichnungsprojekte in den DB2 Datenbanken über Nacht abgleicht.
Die zentralen Projekt- und Kundendaten wurden anfangs parallel in allen Datenbanken gepflegt. Um den Arbeitsaufwand hier zu reduzieren, bot sich eine zentrale Lösung mit der Projekt Management Anwendung an.
Die Datenhaltung der Projekt Management Anwendung wurde erweitert, damit alle Daten für die CAD Systeme zentral vorgehalten werden können.
Die Datenbanken wurden abgeglichen, um alle Kundendaten im zentralen System auf den aktuellen Stand zu bringen.
Es wurde ein Service geschaffen, der die Änderungen in der PMA erkannte, und dann die CAD Datenbanken aktualisierte. Das lokale Bearbeiten der Daten in den CAD Anwendungen wurde deaktiviert. Durch diese Umstrukturierung wurden viele Arbeitsvorgänge rationeller.
Individual Software
Projekt Management
Frontend 1: Windows Forms Anwendung über Web-Service
Die professionelle Anwendung für den Benutzer der Projekt Management Anwendung ist eine Windows Anwendung, die mithilfe eines MSI Installations-Paketes lokal auf einem Windows Rechner installiert wird. Die Anwendung verfügt über ein Versionsmanagement und kann sich bei Bedarf automatisch updaten.
Die Anwendung verfügt über alle Funktionen der Projekt Management Anwendung. Werden Dokumente auf den lokalen Rechner heruntergeladen, werden diese in einem lokalen Cache (Zwischenspeicher) hinterlegt. Somit muss ein Dokument nur einmal vom Server geladen werden.
Eine der zentralen Masken der Projekt Management Anwendung:
Ein Explorer, ähnlich dem Windows Explorer.
Der Anwender kann die Dokumente auswählen.

Welche Dokumente angezeigt werden, ist von den Rechten des Anwenders abhängig.

Dokumente können Typabhängig herunter geladen und / oder mit einem zum Paket gehörenden Viewer angesehen werden. Hat der Anwender das Recht Dokument einzustellen, kann er diese hier ins System laden.
Individual Software
Projekt Management
Warum wurden mehrere Frontends umgesetzt?
Exkurs für den technisch interessierten Leser

Warum zwei Frontends?


Der erste Entwurf dieses Projektes wurde in php von einer externen Firma umgesetzt.
Leider war das Ergebnis nicht passend für die Wünsche des Kunden.

Daher entschloss man sich 2003 einen neuen Ansatz mit Microsofts recht neuer ASP.net Framework 1.1 Technik umzusetzen.
Was für mich der Startschuss und den Einstieg in dieses Projekt bedeutete.

Im Jahre 2003 war der Internet Explorer 6.0 noch state of art. Verglichen mit der heutigen Entwicklung also eher die graue Steinzeit im Internet.

Da das erste Modul in erste Linie als Viewer für extrem große Grafiken dienen sollte, lag hier der erste Stolperstein für das Projekt im Weg.
Die Ladezeiten mit den damals eher geringen Download Leistungen der DSL Anschlüsse verhinderten eine erfolgreiche Umsetzung als reine Web-Anwendung.

Der erste Ansatz eine ASP.NET Web-Seite unter Framework 1.1 war zu Teilen bereits umgesetzt, nur eben die wichtige Viewer Funktionalität war damals so einfach nicht umsetzbar. Die Web-Anwendung bot zu diesem Zeitpunkt die Möglichkeit in den Projekten die Verzeichnisstruktur anzulegen und zu bearbeiten. Dokumente konnten in die Projekte geladen werden.

Also wurde eine auf Windows Forms basierende zweite Anwendung umgesetzt. Diese Anwendung hatte am Anfang zwei Module. Ein Center in dem sich der Benutzer anmeldete. Hier standen Masken zur Verfügung das Projekt zu suchen und auszuwählen. Das Projekt wurde in einem Explorer ähnlich dem Windows Explorer dargestellt. Der Explorer bot Funktionen an Dokumente ins System zu laden, Dokumente herunter auf den PC zu laden oder Grafische Dokumente in Pixel basierenden Formaten im Viewer zu betrachten.

Der Viewer wurde mit einer Kacheltechnik umgesetzt. Große Zeichnungen wurden in einer Serverhintergrundverarbeitung bei Laden ins System aufbereitet d.h. in Kacheln zerlegt. Der Viewer hat die Bestanteile des Dokumentes in einem lokalen Cache geladen. Aus dem lokalen Cache wurden die Dokumente der Ansicht entsprechend wieder zusammen gesetzt.

Diese Windows Anwendung wurde als MSI Installationspaket ausgeliefert. Die ASP.NET Anwendung stellte das Paket als Download zur Verfügung.

Beide Anwendungen kommunizierten über einen gemeinsamen ASP.NET Web-Service mit dem Web-Server der als Gateway ins Internet diente.

2006 ASP.net Web-Anwendung: Umsetzung Viewer


Auf Grund steigender Server und Leitungsleistung war 2006 der Punkt gekommen, einen neuen Ansatz für einen Web-Viewer umzusetzen.
Durch den kombinierten Einsatz von JavaScript und ASP.NET konnte ein Modul umgesetzt werden, welches ähnlich dem Windows Form Viewer mit einer serverbasierten ähnlichen Kachel Lösung arbeitet.
Die Lösung funktionierte zwar nicht so flott wie die lokal Cache gestützte Lösung der Windows Forms Anwendung Viewer, stellte ab diesem Zeitpunkt ein verwendbaren Viewer im Web Browser zur Verfügung.
Die immer weiter steigende Download Leistung der Internet Zugänge kam direkt in den folgenden Jahren den Produkt entgegen.

2013 Visual WebGui Frontend


Im Jahre 2013 wurde ein neues Frontend, eine Web-Anwendung mit Visual WebGui gestartet.
Visual WebGui ermöglicht mit extrem günstiger und schneller Projektierung ähnlich den Windows Forms die Umsetzung einer ansprechenden Web-Anwendung.

Die Umsetzung von Login, Projektauswahl und einen Explorer für die Projekte war in kürzester Zeit erfolgt.

Der Viewer erfordert hier wieder Sonderlösungen. Ziel der neuen Plattform war die Unterstützung von Apples iPad und Android Tablets. Der die Tablet Browser der Entwicklung im Desktop Bereich gelinde gesagt etwas hinterherhinken musste hier eine Sonderlösung her.

Die aktuelle Umsetzung lässt sich von einem Tablet gewohnt bedienen und stellt somit eine interessante Weiterentwicklung der Plattform dar.
Individual Software
Projekt Management
Frontend 1: Komponenten der Windows Anwendung
Center, Viewer und Uploader
Das Center ist die zentrale Anwendung die vom Anwender gestartet wird. Hier wählt der Anwender das Projekt aus und kann im Explorer die vorhanden Verzeichnisstruktur mit den Dokumenten sehen.
Individual Software, Projekt Management, Anwendung Center, Projekt Explorer
Projekt Management, Anwendung Viewer, Anzeige Pixel Format basierender Grafiken
Möchte der Anwender ein Dokument öffnen, wird der Viewer gestartet.
Der Viewer lädt über den Web-Service die Dateien in den lokalen Cache um die Dokumente anzeigen zu können.
Dieser Viewer ist für Pixel Grafik Formate ausgelegt.

In der Business Logik auf den Anwendungsserver ist eine Vorverarbeitung implementiert, welche große Dokumente in ein Kachelformat zerlegt.

Der Viewer setzt diese Teilstücke in Abhängigkeit des gewünschten Ausschnittes des Anwenders zusammen. Sollten noch nicht alle Kacheln im lokalen Cache vorhanden sein, werden erst die für die aktuelle Ansicht erforderlichen Kacheln vom Server geladen.
Projekt Management, Anwendung Uploader, Upload von Dateien in die Projekt Management Anwendung
Lädt der Anwender neue Dateien ins Projekt, kopiert das Center die Dateien in einen temporären Ordner.
Das Center startet die Hintergrund Anwendung Uploader.

Der Upload verwaltet den Upload der Dokumente in die Projektmanagement Anwendung. Der Upload wird in kleinen Stücken durchgeführt und kann bei Bedarf unterbrochen werden.

Da es sich bei den Dateien meist um sehr große Grafiken / Zeichnungen handelt wurde diese spezielle Technik des Uploader implementiert.
Individual Software
Projekt Management
Frontend 1: Komponenten der Windows Anwendung
Center, Viewer und Uploader: Kommunikation mit dem Server

Kommunikation mit dem Server mit einem speziellen Web-Service


Kommunikation mit dem Server wird bei allen Anwendungen über einen Web-Service abgewickelt. Der hier implementierte Web-Service verfügt nur über eine Methode die für alle Windows Form Clients identisch ist.

Es wird ein verschlüsseltes und komprimiertes Auftrags Telegramm übertragen. Der Server entschlüsselt die Aufträge. Die werden nach logischer Reihenfolge abgearbeitet. Sofern der Auftrag Daten zurückliefern soll, werden die Antworten den Aufträgen zugeordnet und wieder verschlüsselt und komprimiert an den Client zurück gesendet.

Individual Software, Projekt Management, Anwendung Center, Projekt Explorer
Projekt Management, Anwendung Viewer, Anzeige Pixel Format basierender Grafiken
Projekt Management, Projekt Management, Anwendung Web-Service
Projekt Management, Anwendung Uploader, Upload von Dateien in die Projekt Management Anwendung
Auf der folgenden Seite wird die Entwicklung dieses speziellen Web-Services detaillierter beschrieben. In erster Linie für den an der Softwaretechnik interessierten Leser.

Zusammenfassend lässt sich sagen, diese Entwicklung ist einer der Meilensteine des Projektes. Durch diesen Web-Service konnte die Entwicklungszeit erheblich verkürzt und somit hohe Kosten eingespart werden.
Individual Software
Projekt Management
Entwicklung eines Web-Service
Exkurs für den technisch interessierten Leser

Anforderungen an den Web-Service

Der Web-Service hatte zwei Aufgaben zu erfüllen. Die Kommunikation mit der MS-SQL-Server Datenbank und die Dateizugriffe abzuwickeln.

Eine Besonderheit des Systems, für die MS-SQL-Datenbank wird ein selbst entwickelter OR-Mapper verwendet. Als das Projekt 2003 startet, war noch kein, unserem Projektleiter passender, OR-Mapper von der Stange erhältlich. Also bekam ich die Aufgabe, einen OR-Mapper selbst umzusetzen.

Die erste Umsetzung des Web-Service arbeitete wie vorgesehen. Für jede Funktion war eine spezialisierte Methode implementiert. Mit der steigenden Komplexität des Projektes vermehrten sich die Methoden schlagartig. Was den Nachteil hatte, einen erheblichen Programmieraufwand zu verursachen.

Ein weiteres Manko dieser vielen Methoden, jeder Aufruf hat eine Antwortzeit, die sich aus der Laufzeit durchs Netz zum Web-Service, und der Verarbeitung auf dem Server zusammensetzt. Grobe Faustregel 1-2 Sekunden Laufzeit pro Verarbeitung. Müssen nun 10 Abfragen zum Aufbau einer Maske durchgeführt werden, kommen da schnell 10 – 15 Sekunden zusammen. Der Anwender hat es nicht bemängelt, aber mir hat dieses Verhalten keine Freude bereitet.

Die besondere Lösung war relativ einfach. Es wurde ein Web-Service Handler Objekt WS geschaffen, welches die SQL Anfragen aufzeichnen konnte.
In die Ausführungsschicht des OR-Mappers wurde eine Weiche eingefügt.
Wenn man den OR-Mapper in den Aufzeichnungsmodus umschaltete, wurden die SQL-Befehle im WS Objekt erst einmal aufgezeichnet.
Waren alle Aufträge aufgenommen, wurde dieses Objekt an den Web-Service gesendet.
Der Web-Service führt nun die Aufträge sinnvoll sortiert durch. Insert und Update Aufträge zuerst, darauf folgend die Select Anforderungen.
Der große Trick bei dieser Lösung, anstelle 10 Aufträge hintereinander durchzuführen, wurde nur noch ein Auftrag an den Web-Service gesandt.

Wenn die Operationen Daten zurückliefern sollten, wurden diese ins WS Objekt geschrieben, welches der Web-Service zurück lieferte.

Somit wurde bei einem Auftrag, der 10 Operationen durchführte, 9 mal die Laufzeit zum Server wegrationalisiert, also anstelle von 15 Sekunden Laufzeit nur noch eine Laufzeit von 4-5 Sekunden, je nach Dauer der Verarbeitung auf dem Server.


Wie bekommt man nun diese Innovation in den vorhandenen, umfangreichen Quellcode?

Bei mehreren Tests dieser Funktion zeigte sich eine erhebliche Antwortzeitverkürzung durch das ein Web-Service Handler Objekt WS. Also musste eine Lösung gefunden werden, wie man diese Erweiterung im Laufe der Zeit ohne große extra Entwicklungsaufwand implementiert bekommt.

Der erste Ansatz war, einfach den OR-Mapper so zu erweitern, dass dieser im Web-Service Mode arbeitete.
Was bedeutete, entweder wurden Aufträge aufgezeichnet und auf Anforderung gemeinsam ausgeführt, oder ein einzelner Auftrag wurde direkt über die neue Schnittstelle WS Modul durchgeführt.
Somit arbeitete der vorhandene Source Code direkt mit dieser neuen Technik, wenn man die Aufrufe der einzelnen spezialisierten Methoden einfach aus dem Source Code löschte. Dieser Vorgang dauerte zwar einige Zeit, da immer nur bei Änderungen an einem Modul die Technik umgestellt wurde, führte aber zum Erfolg.
Eine weitere Besonderheit dieses Projektes, die große Masse der Eingabemasken und der erforderliche Business Logik Quellcode werden von einem von mir umgesetzten Code Generator erzeugt. Hier waren es nur ein paar Module, deren Source Code Generierung überarbeitet werden mussten. Alle Code Pattern wurden dann mit direktem Support für das WS Objekt erzeugt.

Die Erweiterung Datei Funktions-Schnittstelle

Was mir jetzt noch nicht so richtig gefallen hatte, waren die Arbeitsschritte Dateien hochladen oder herunterladen. Diese Funktionen liefen noch über spezialisierte Funktionen des Web-Service. Da hier hin und wieder ebenfalls Funktionen erweitert wurden, waren immer noch Updates am Web-Service erforderlich. Zudem war der ganze Zoo an Web-Service Versionen ebenfalls zu pflegen.

Die Lösung dockte ich einfach an das Web-Service Handler Objekt WS an. Ein zweites ähnliches Auftragsmodul WS_File wurde hinzugefügt. Dieses Modul hat für jede erforderliche Dateioperation eine Funktion im Angebot.

Das Ergebnis dieser Umsetzung: Es gibt nur noch genau eine Methode im Web-Service über die alle erforderlichen Serverzugriffe aller Windows-Forms Anwendungen durchgeführt werden. Ein Update ist nur in den seltensten Fälle überhaupt erforderlich. Die Zeit zur Umsetzung dieser Änderungen erstreckt sich über ca. 2 Jahre.

Ob nun direkt auf dem Server oder über die Web-Service Schnittestelle zugegriffen wird unterscheidet sich im Source Code nur noch in der Parametrierung der Schnittstelle. Bei der Datenabfrage gibt es nur eine Kleinigkeit zu beachten, Aufträge im Block definieren und dann gemeinsam ausführen lassen. Da sämtliche Zugriffe durch die Windows Forms Anwendungen in einem separaten Thread durchgeführt werden, ist es sehr einfach diese Position zu finden und den Source Code entsprechend anzupassen.

Zum Anschluss: Komprimierung und Verschlüsselung

Mit dieser Technik ließ sich nun erheblich besser und schneller entwickeln als vorher.

Ein kleiner Wehmutstropfen war ein Kollege von mir, der mir eine lange Nase machte. Er durfte ein neues Projekt aufsetzen und aus allen Erfahrungen lernen. Er hatte ebenfalls einen fertig gekauften OR-Mapper einsetzen dürfen. Die lange Nase machte er mir mit Web-Service 2.0. Dieser komprimierte automatisch die Anfragen und Antworten bevor diese übertragen wurden.

Hier wurde dann der letzte Evolutionsschritt umgesetzt. Es war relativ einfach die beiden Web-Service Objekte mittels einer vorhandenen Bibliothek zu komprimieren und bei der Gelegenheit gleich noch zu verschlüsseln. Da das System über die Jahre gewachsen war, war die Datenmenge mittlerweile immens, wenn man als Super Admin sinnlose Anfragen an das System absetzte.

Was ist eine sinnlose Abfrage an die Datenbank? Hallo System, liefere mal alle Projekte. Zu dem Zeitpunkt waren es ca. 9000. Selbst bei reinen Datenanfragen wurde somit durch die Komprimierung einiges an Datenmenge pro Aufruf des Web-Service reduziert.

Aber der Hauptvorteil dieses Web-Service liegt heute in seiner extrem einfachen Wartbarkeit. Änderungen in der Datenbank erfordern keinerlei Änderungen am Web-Service. Die Business Logik des OR-Mappers wird um eine weitere Tabelle oder Sicht erweitert und kann direkt verwendet werden.

Durch den Code Generator unterstützt, lassen sich so neue Datenstrukturen in sehr kurzer Zeit implementieren. Die Erweiterungen im Code Generator erzeugen mittlerweile direkt funktionierende fertige Windows Forms Dialoge zur Auswahl und Bearbeitung der Daten. Es bleibt nur etwas Designarbeit an der Oberfläche. ASP.net User Controls sind ebenfalls generierbar, allerdings nicht so ausgereift wie die Lösungen der Windows Forms.

Eine echte Besonderheit war die 2013 erfolgte Erweiterung für Visual WebGui. Da Visual WebGui fast 1:1 Windows Forms abbildet, konnte ich den Code Generator mit wenig Aufwand um die Code Generierung für Visual WebGui erweitern.