Vier D HomeArchivSeminareNachrichten - Twitter4D Expertise
Antworten auf Ihre Fragen •
Datenbank-Pflege •
4D Coaching •
OpenDDDD •
Termine •
4D Expert
V11/V12-Service • Konzepte •
Alternativen •
Meine Apps
Gebrauchtes Mac + iPhone: zu verkaufenFinden Geo-Themen + Projekte GoogleMap-Integration • GeoDDDD • Database Publishing • Database PhotographyVerschiedenes |
31. Aug 2011 Aus dem richtigen LebenIn der Projektarbeit wird die Erst-Installation einer Client/Server-4D Anwendung vor Ort gemacht. Entweder bin ich selber dort oder der Verantwortliche beim Kunden erledigt für mich die Aufgabe. Ganz anders ist das, wenn ich eine App zum Download anbiete und der Anwender keine Idee über 4D hat. Das erste was 4D erfragt nach einem Doppelklick auf die App: "Wo ist die Datendatei?" Der Anwender versteht Bahnhof, ruft hoffentlich an … oder wirft die App in den Papierkorb und ward nimmer gesehen. Findet der Anwender keine Datendatei und versucht es mit Erzeugen, wird es brenzlig. 4D bietet ihm an, die Daten ins Paket der Anwendung zu legen. Eigentlich nicht dumm, alles zusammenhalten, keine Unordnung erzeugen. Also wird die Datendatei angelegt. Meine App reagiert auf die neue Datendatei: hilft dem Anwender, liest das Adressbuch aus, weiß wer Ich bin, wenn es ein Me im Adressbuch gibt und leitet von Schritt zu Schritt zu einer funktionierenden Anwendung. So weit, so gut! Wir kennen das: "traue keiner .0" – wird mir nicht besser gehen. Meine App informiert den Anwender: "Hey, es gibt eine neue Version. Willst'de die laden?" Gemacht, getan! Die neue Version wird gestartet und 4D fragt nach dem Datenfile, weil das zuletzt verwendete ist auf der Platte des Anwenders nicht zu finden, die liegt auf meinem Entwickler-Rechner. Und da haben wir den Salat. Das Datafile ist weg! Die war im Paket der letzten Version der App und die ist durch die neue ersetzt worden. Der Kunde kann glücklich sein, wenn die vorhergehende noch im Papierkorb liegt und ich am Telefon helfen kann. Ich bin nicht glücklich! Den Ärger und den Aufwand würde ich mir gerne sparen. Daten und Struktur zu trennen ist eine der guten Eigenschaften von 4D. FileMaker-Entwickler wissen ein Lied davon zu singen. Die Daten ins Paket der Anwendung zu sichern ist die falscheste der Möglichkeiten. Das muß ich unterbinden, das muß anders laufen. Da ich nicht auf die V13 warten kann und möchte, muß ich selber buchführen, welche Daten zu benutzen sind. Das stellt sich für mich so dar:
Eigene Präferenzenfür meine Anwendung. Solche die nicht in der Struktur (Entwickler-Einstellungen) oder in den Daten (Anwender-Einstellungen) aufgehoben werden sondern auf dem Rechner meines Kunden liegen. Also eine Datei mit dem Namen nach dem Schema de.mettre.prefs.dddd im Preferences-Ordner auf dem Rechner. Ich habe mich entschieden, meine Präferenzen als Name-Wert-Paare anzulegen und alle Werte als Text. Das Bild zu diesem Absatz zeigt die aktuelle Liste:
Funktionalitäten wie den Preferences_Manager lege ich komponenten-fähig an. Ich schreibe eine Präferenz mit Für meine Kontrolle oder um mal dazwischen zu funken kann ich Prefs_On_Mac ohne Parameter verwenden und erhalte dann das abgebildete Fenster. OPEN DATA FILE ist ein unduldsamer 4D-Befehl. Dauert die On Exit zu lange, beendet sich 4D und startet nicht mehr. Das sieht aus wie ein Crash, doch es fehlt das Crash-Log. Gelöst! Dazu auch der feature-request: * während der Laufzeit ist dieser Eintrag leer. Wird 4D korrekt beendet, schreibt Prefs_On_Mac $lastExitInfo:=String(Current date;Date RFC 1123;Current time) in den Wert. ↵ 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? From real lifeDoing project work means installing myself a Client/Server-app at the customers site, or having somebody doing that for me. This changes, when offering an app for download and not being sure the user has any idea about 4D. While starting up, before my code runs, 4D asks for the datafile. The user understands nothing. Hopefully he'll call, but she might just trash the app and leave a bad comment. It might get worse, if the user decides to Create a datafile. 4D offers to save the datafile inside the app-package. Nice idea, keeping the disk tidy. My app is polite. Starting with a fresh datafile it reads the addressbook, finds the me-record and prepares the new datafile for an efficient usage. Really nice! We all know: "never trust a .0" – it won't be better with my app. It's a nice app: "hey, there is a new version. How abouts download now?" Easy doing! The new version starts up and 4D asks for the datafile. The last one used isn't found, that was the one on the developers-machine. Shit! The datafile is gone! It's that one in the app-package and that was replaced with the new version of the app. Happy customers didn't empty the trash. They call me and I might be helpful enough to them open the package and move *.4dd and *.4dindx and *.4dsomething to a save folder. I'm not happy! Keeping structure and data apart is a major advantage of 4D, FileMaker-developers will tell. Putting the data inside the app-package is the worst option. I need to avoid that. I'm not going to wait for V13, nobody pays for waiting. I need to track the last used datafile myself. This is the procedure I installed for my app:
my own preferences
for my app on the users Mac. These prefs are different from those inside the structure (developers prefs) and those stored in the datafile (users prefs) and need to be stored on the machine of my customer. On Mac this is a file named like de.mettre.prefs.dddd in I've decided to store those prefs in name-value-pairs and every value is of type text. This picture illustrates a current state:
Nowadays I implement functionality like the preferences-manager in component-style or api-like. To write a preference I call For my convenience and manual adjustements calling Prefs_On_Mac without parameters opens the shown window. OPEN DATA FILE is a very intolerant 4D-command. Does On Exit take too long, 4D quits and does no restart with the named datafile as expected. It looks like a crash without crash-log. Solved! Check the feature-request: * while my app is running this entry is empty. This value is filled when shutting down and cleared when starting up. ↵ You want to have the source-code? No problem! Send a descend amount of $ or € to my PayPal-account: info@mettre.de. Finding out how much? |