21. Jan. 2010 

Hurra wir leben noch

Styles sind eine tolle Sache – dachte ich immer.
4D 2004 ist ein altbewährtes stabiles Datenbanksystem – dachte ich immer. 4D 2003 und 2004 sind so alt, dass nur noch die v11 supportet werden muss – dachte 4D immer.

Möge der geneigte Leser mir verzeihen, aber wie sagte ein alter Lehrer von mir immer “... denn das Denken der Gedanken ist gedankenloses Denken!” Jedenfalls mache ich mich frohgemut an die Arbeit, zwei problemlos laufende Anwendungen aus 4D 2003 auf 4D2004.8 aufzubessern. Mit der konkreten Systemumgebung habe ich jahrelange Erfahrung: Ich entwickle unter Mac OS, der Kunde arbeitet unter XP und das hat immer geklappt, weil wir ganz zum Schluss als normale Anwender unter XP testen.

Also Standard-Workflow: 4D 2003 von XP nach Mac OS konvertiert (ResTransporter sei Dank!). Kopierte Version auf dem Mac mit Tools öffnen und Struktur komprimieren. Dann die Anwendung unter 4D 2004.8 öffnen, alles bestens. Nun alle neue Features programmieren, testen, alles läuft bestens – unter Mac OS. Anwendung unter XP starten, 2 Sekunden nach dem Start crashed 4D (Runtime interpreted). Komisch denke ich. Tools auf die Anwendung loslassen, keine Probleme, die Struktur und die Daten sind in Ordnung. Komisch denke ich. SanityCheck auf die Anwendung loslassen, Einstellung “Fatal only” - Start – Crash – Sanity Check ist kommentarlos abgeschmiert. Mein Umfeld findet mich etwas ratlos ...

Na gut, denke ich – mal sehen, was die andere Anwendung macht. Der geneigte Leser erahnt bereits das Ergebnis: genau das gleiche, Runtime crashed, SanityCheck crashed. Nun will ich keinen damit erheitern, dass mich mein Umfeld nunmehr nicht nur ratlos findet, sondern – aber lassen wir das.

Ich nehme mir die Zeit, die ich nicht habe und die mir keiner bezahlt, und mache mich auf die Suche (nachdem mir die 4DWerkstatt zwar Trost und Rat spendet, aber im Ergebnis auch nichts am Dilemma ändert). Also: Anwendung wird unter 4D Server auf XP gestartet: läuft. Ich nehme einen Client unter Mac OS: läuft. Ich nehme einen Client unter XP: Crash.

Zum Glück (und das ein guter Rat an alle, die das noch nicht so machen) lauten die ersten Befehle in der Startup-Methode:
If (Shift down)
  TRACE
End if

So komme ich bis zu einem Befehl, der lautet: $vl_Fenster:=Open form window([Katalogdaten];"Anmeldung") - und da: Crash. Ich folge dem Rat des Kollegen oz und tausche das Formular “Anmeldung” gegen ein ganz neu erstelltes aus. In diesem Formular habe ich nur ein einziges Textfeld “Hello world”, formatiert mit meinem Standard-Style. Doch die Hoffnung trügt, auch hier crashed die Anwendung an genau dieser Stelle.

Den geneigten Leser wird es kaum interessieren, womit ich mich die nächsten Stunden beschäftigt habe und was meine Umgebung (und die 4Dwerkstatt) mit mir erleiden musste. Ich mach’s kurz und komme zur Lösung, die so banal wie erschreckend ist.

Ich verwende in der Anwendung (wie es sich für ordentliche Programmierung gehört) Komponenten. Und ich verwende eine Objektbibliothek mit ständig benötigten Objekten. Und ich verwende (weil ich mir viel Arbeit ersparen will – hahahahaha!) Styles.
Und irgendwann komme ich mal auf die gnadenlos geniale Idee, in meinem neuen Startlayout “Hello world” den Style des Textfeldes raus zu nehmen: Und – Nachtigall ick hör Dir trapsen – der Crash bleibt aus.

stylemist

Ich mache mich also hurtig daran, sämtliche Styles in der Anwendung zu löschen und neue einzurichten. Dass die Arbeit, nunmehr bei hunderten von Objekten in Dutzenden von Layouts die Styles wieder neu zuzuweisen eine unerquickliche tagelange Arbeit bedeutet – naja, man gönnt sich ja sonst nichts. Jedenfalls hat das zum Ergebnis: 4D crashed nicht mehr und sogar SanityCheck tut das, was es soll: es läuft und kein fataler Fehler in der Anwendung weit und breit!

Ursachenforschung ist hier nicht mein Ding und nachdem sich selbst 4D nicht veranlasst sieht, an der Version 2004 auch nur noch einen kleinen Finger krumm zu machen – na ja, ich versteh’s ja: die v11 macht genug Arbeit.

Lieber Leser: Ich kann Dich nur warnen! Styles in 4D sind Himmel und Hölle! Sei besonders vorsichtig bei der Verwendung von Styles in Objektbibliotheken und Komponenten! Und sei gewarnt: ein Style, der überall und allerorten “HurraWirLebenNoch” heißt und die gleichen Definitionen hat, ist nicht immer derselbe. 4D legt möglicherweise beim Einfügen eines Bibliothekobjektes oder bei den Komponenten nach Gutdünken weitere Styles an und Du hast keine Kontrolle mehr, was in Deinem Layout tatsächlich verwendet wird. Und offensichtlich verheddern sich die Ressourcen der Styles gaaanz tief in 4D zu einem Knäuel, an dem sich sogar SanityCheck die Zähne ausbeißt und sich kommentarlos verabschiedet.

Last, but not least kann ich mir natürlich eine Anmerkung nicht verkneifen: Hätten auch meine Kunden mit Mac OS gearbeitet, mir wären mindestens 2 Tage Arbeit erspart geblieben und das Problem wäre gar nie entstanden. Oder auch: hätte ich unter XP entwickelt, hätte mich der Fehler schon vor Wochen an den Rand des Wahnsinns gebracht.

Also, sucht’s Euch aus, welchen Tod Ihr sterben wollt.

Werner Gminder

Die V11 macht auch Zicken mit Stilformaten. Es werden keine neuen Stile eingefügt, doch Stile die fehlen crashen die Datenbank vollkommen unerwartet und an ganz anderer Stelle.

Was sich meinereiner wünschte?

  • Stilformate die sich an die Konzepte von CSS anlehnen,
  • in allen Objekten der Datenbank zur Verfügung stehen
  • auch in 4D Write und
  • im V12 Textfeld
  • Stildefintionen im SPAN, also sowas <SPAN STYLE=font-family: Times New Roman; "font-size: 12pt"; "color: black";"background-color: #FFFFFF"> sieht nicht nur bescheiden aus, ist in diesem Jahrtausend nicht mehr on vogue.
    Wünschen würde ich mir <span class="Fließtext"> und Fließtext ist der Name eines der 4D-weiten Stilformate. Dann könnte – endlich – ein akzeptabler HTML-Export aus 4D Write gelingen. Irgendjemand an HTML-eMails interessiert? Oder an einem Editor dazu? Nein, WebArea und TinyMCE sind doppelt bombig.
    Das gilt synonym für den Schnellbericht, der HTML-Export ist … naja schweigen wir.

    Wundert mich alles nicht mehr. Das ist normal. Mich kann man nur zum Staunen bringen, wenn jemand was mit der Webarea macht und es NICHT rummst

    4D Themen: Berichte in Arbeit