3. Mai 2010 

Ich wollte schon immer eine automatisierte Ablage der verschiedenen Versionen meiner Datenbanken haben, also ein System zur Versionsverwaltung von Quelltext, CVS. In der 4D Werkstadt.nord wurde ich von Patrick Poetschke auf die richtige Idee gebracht: statt auf ein etabliertes System irgendwo aufzusetzen, mir ein eigenes in 4D zu schreiben. Die Kommunikation von der Projekt-Datenbank zur VCS-Datenbank läuft über SOAP und wird von Macros angestoßen. Patrick führte seines vor, nutzbar für ihn aber keine fertige Komponente.

Nur 4D-Mittel (Macros und SOAP) – kein Gedöns mit WebArea-JavaScript oder gar in eins der Standard-CVS sichern.
So einfach wie möglich. Aber nicht einfacher.

Haben wollen

Das wird noch dauern, Zeit haben, nächste Woche gar nicht, nächsten Monat eigentlich auch nicht, ….
Kaum zu Hause – ich wollte nicht warten bis Ostern und Pfingsten aufs gleiche Wochenende fallen – habe ich mir meines selbst gebaut.

Das Macro

ist kurz. Es ruft die 4D Methode VCS_Mngr auf und übergibt den Auftrag "Sichern" und den Namen der aufrufenen Methode. Hier das Macro in seiner ganzen Schönheit:
<macro name="vcs_Save" version="2" method_event="on_save">
<text>
<method>VCS_Mngr("Sichern";"<method_name/>")</method>
</text>
</macro>

Die Methode VCS_Mngr

holt sich über
GET MACRO PARAMETER(Full method text ;$methodText)
den Methodentext, konvertiert ihn in einen Blob
TEXT TO BLOB($methodText;$sendBolb_X;Mac text without length ;$offSet_L)
und schickt das Blob per SOAP an die VCS-4D:
proxy_VCS_Check ("Sichern";$methodName;$modulName;$ddddVersionNbr;$sendBolb_X;->$version_L;->$receiveBlob_X)
Das Ergebnis, also die Methode mit Eintrag der Versionsnummer (Zeile 4: ` vcs_Version=000063) kommt im $receiveBlob_X zurück. Deshalb ist die Variable _action:=4 gesetzt
$methodReturnText:=BLOB to text($receiveBlob_X;Mac text without length ;$offSet_L)
und wird anschließend übers Macro zurückgegeben:
SET MACRO PARAMETER(Full method text ;$methodReturnText)

proxyMethode

Die SOAP-Methode

habe ich mir vom WebService-Wizzard generieren lassen und leicht ausgebaut:

Mischung V2004 und V11

Eigene Projekte laufen unter V2004. Hier muß ich das Sichern-Makro manuell aufrufen. In meinen Kunden-DBs unter V11 wird das Macro bei jedem Sichern einer Methode aufgerufen. Das ist kommod.

Es gibt in 4D bzgl. Macros und Methoden dies und das, was nicht zu Ende oder zu kompliziert gedacht ist – die zurückgegebene Methode wird ans Ende gerollt und alle Einrückungen ausgeklappt. Das ist lästig.
Der ein oder andere Bug taucht auf, mancher auch 60 cm vor der Mattscheibe, z.B. im Kampf mit ASCII und Unicode je nach 4D Version.

Um Beides habe ich drum herum gearbeitet, missen will ich das System nicht mehr.

Mein VCS-Manager

läuft seit Mitte Februar im Hintergrund, ausgeblendet, unauffällig und zuverlässig. Wenn ich an eine Methode ran muß, sieht das so aus:

Im Popup-Menü wähle ich die Projektdatenbank - hier Equident, in der Liste darunter die Methode - hier Dicom_Tool, und in der Liste daneben sehen ich die verschiedenen Varianten

VCS1

und nur einen Doppelklick weg die Methode selbst.

vcs2

Will ich eine ältere Version wieder haben, geht es über den Button TextCopy in die Zwischenablage und in der Zieldatenbank, die nicht mit der Ursprungsdatenbank identisch sein muß, wird der Methodentext in die Zielmethode eingesetzt.

Noch mehr wegnehmen geht nicht, hinzufügen könnte ich noch manches.
George Whitesides: Toward a science of simplicity

Sie möchten den Sourcecode haben? Kein Problem! Überweisen Sie, was es Ihnen wert ist auf mein PayPal-Konto: info@mettre.de. Was ist denn üblich?

4D Themen: Berichte in Arbeit