Seiten

Donnerstag, 3. Februar 2011

Java Development 3-2-2011

So geht ein weiterer Java-Lastiger Tag zu ende. Heute habe zusammen mit meinem Ausbilder den ganzen Tag an der Datenbankanbindung und der Übertragung der Daten an die SQL-Datenbank gearbeitet. Mit gutem bis mäßigen Erfolg. Das Auslesen der Attribute aus der Datenbank ist nun möglich. Das heißt, die Comboboxen füllen sich jäh nach Eintrag aus der Datenbank, was dafür sorgt, dass die Boxen ohne Programmieraufwand mit weiteren Einträgen versehen werden können. Auch gelingt das Auslesen der in den Boxen angeklickten Einträgen und die Übertragung des Inhaltes. Allerdings möchte ich mich systemintern irgendwie an die von der Datenbank verwendeten IDs halten ( Einem Integer-Wert wird ein String gegenübergestellt ). Allerdings bilden diese Integer IDs, im Gegensatz zu Strings eine Verwechslungsgefahr mit sich. Ich glaube, dass ich das morgen nochmal mit Sebastian klären muss.


Die Tage scheinen einfach zu kurz für effektives Programmieren zu sein. Ansonsten habe ich heute die erste echte Auswertung mit meinem kleinen PHP- Tool gemacht und an den zuständigen Mitarbeiter übergeben.
Dabei ist aufgefallen, dass es beim Ausrechnen der Schweizer- Werte zu Unstimmigkeiten kommt, was mit der Mehrwertsteuer zusammenhängt. Aber ein kurzes Suchen hat das Problem innerhalb von wenigen Minuten behoben. Es hat sich auch gezeigt, dass das Tool wohl nicht ausreichend getestet wurde. Ich habe haufenweise Ideen es zu verbessern, allerdings müsste ich es dafür fast von Grund auf neu schreiben. Hinzufügen werde ich irgendwann allerdings einen Generator für die Datenbankabfrage. Dieser generiert dann ein Datum in der von SQL verlangten Form.

Mittwoch, 2. Februar 2011

Java Development 2-2-2011

Heute war ein großer Java - Tag.

Für die Arbeit an dem Zeiterfassungs - Tool musste ich eine Uhr schreiben, die für den Benutzer mitläuft. Hörte sich ursprünglich shr einfach an, war aber ein programmiertechnischer Alptraum. Für jemanden, der von Threading noch nie etwas gehört hat möglicherweise nicht zu lösen.

Zuerst wollte ich, weil mich der Ehrgeiz gepackt hat natürlich eine eigene Uhr schreiben, die auch richtig funktioniert. Nachdem ich erkannt habe was für Anforderungen daraus erwachsen ( durch die Notwendigkeit einen parallelen Prozeß laufen zu lassen, der die Uhrzeit berechnet ) habe ich mir überlegt einfach einen Abfrage der Systemuhr zu übergeben. Diese Abfrage muss aber auch irgendwo gemacht werden.

Sicher kann diese Berechnung nicht die GUI Klasse durchführen, da sie die etwas störende Eigenschaft hat bei Aufgaben, die nichts mit der Darstellung der GUI zu tun haben und über die einfache einmalige Belegung von Variablen hinausgehen einzufrieren, sich zu benässen und zu sterben.
Somit musste ich ohnehin einen parallel laufenden Thread erzeugen und habe mich wieder daran gemacht meinen eigenen kleinen Wecker zu schreiben.
Vorneweg: verwendet habe ich die Java Timer Klasse, deren wunderbare scheduler-Methode allerdings ein Objekt vom Typ Timertask benötigt. Beide Threadfunktionen. TimerTask stellt das run() - Interface zur Verfügung, dass implementiert werden muss. Also habe ich mir zwei nette kleine Klassen geschrieben, die eine ein TimerTask und die andere ein Timer mit einer wunderbaren Singleton-Funktion, die dafür sorgt, das beim Klicken auf die Start methode, bei der eigentlich ein Timer erzeugt und gestartet wird, keine unnötigen Instanzen erzeugt werden.
Mein nächstes Problem war, dass der Timer nur über eine close() - Methode verfügt, die keine Rückgabe hat und den Thread beendet. Durch die Singleton konnte ich aber nicht einfach einen neuen Thread erzeugen. Durch Suchen stieß ich darauf, dass man auch die TimerTasks wunderbar beenden und neu in den Timer einstellen kann. als ich schließlich das erkannt habe war nur noch ein wenig codegeschiebe nötig.

Zum Schluß habe ich mich noch mit der ziemlich unübersichtlichen und unangenehmen GUI erstellung von java beschäftigt. Dank des Visual Editors, der mir wenigstens Einblicke ermöglichte konnte ich mich Stück für Stück an die wunderbaren gridBagConstraints und add()-Funktionen heranpirschen.
- kann man das nicht irgendwie Praktischer umsetzen?

Ja das war mein Java- Tag

Dienstag, 1. Februar 2011

java Development 1-2-2011

Ein bischen java Entwicklung am Nachmittag um die grauen Zellen zu stimulieren. Aber mit Stimulation war es mir heute nicht so. Ich hatte vor meine am Freitag gecodeten threadlastigen.. Methoden zu verwenden, um einen Hübschen kleinen Timer zu schreiben. Ich hab den auch soweit fertig, allerdings krieg ich noch kein schönes Zeitformat hin.
Mein Ausbilder möchte, das ich intern die daten der Systemuhr verwende, da diese natürlich genauer geht.
Also habe ich mich daran gemacht die methode System.CurrentTimeMillis() zu verwenden. Theoretisch kann ich diese auch für den Timer verwenden, wenn ich jedes mal bei einer Änderung dieses Parameters eine Ausgabe mache.
Es liegt wohl auch an der heute geschriebenen Klausur, dass ich Gehirntechnisch heute nachmittag nicht so ganz auf der Höhe war. Desweiteren musste ich mich erst an die Attributsetzung der GUI-Elemente herantasten, was in diesem Fall ( Compilersettings ? oder generell ? ) nur über die entsprechenden get und set - Methoden möglich war. Dann die Typische cannot make a static reference to a non-static Object Fehlermelderei, aber nach ein wenig herumjonglieren hat auch die Zuweisung und die Ausgabe der fortlaufenden Zeit in der GUI geklappt.

So das war der Dienstagnachmittag. Morgen hoffe ich, die nötigsten Methoden fertigstellen zu können.

Freitag, 28. Januar 2011

Java 0.0.1 28.1.2011

Heute war der erste Tag für die Entwicklung unseres eMail-Support-Surveillance-Tools. Einen Großteil des Tages verbrachte ich zusammen mit meinem Ausbilder Sebastian damit, die wunderbare Entwicklungsumgebung Eclipse Helios zu installieren und gangbar zu machen. Probleme bereitete dabei das Visual Editor Plugin.

Wer schon einmal eine GUI in Java programmiert hat ( oder es zumindest wie ich versuchte ) der wird feststellen, dass es eine Menge schreibarbeit ist, die wirklich keinen spass macht (mir jedenfalls). Zusätzlich zu der erzeugten Textwüste auf dem Bildschirm gibt es erst ein Oberflächen Feedback, wenn man das ganze Gerät fehlerfei gecodet hat und ausführt.
Abhilfe dabei gibt das Visual Editor Plugin für Eclipse. Es ermöglicht eine Darstellung der Maske in einem Teil des Editors und zeigt darin die verwendeten Elemente und deren Position an. Ich finde das fast unverzichtbar. Da ich inzwischen auch noch den Luxus von Visual Studio gewöhnt bin, wo man die Elemente passgenau einsetzen und einfach verschieben kann ( selbstverständlich NOCH einfacher, komfortabler und sicherer als in Helios ) könnte ich mich wohl nur mit großen Überwindungen zum reinen GUI-Coding durchkämpfen.

Nunja, nach einiger Zeit des Probierens ( eine ältere Version des Visual-Editors brachte den Durchbruch ) konnten wir dann mit der Implementierung beginnen.
Zuerst wurde die Maske erzeugt und die Datenbankanbindung geschrieben. Ich habe mich dann den Abend lang damit befasst einen Timer zu schreiben, was sich doch als schwieriger darstellte und man sollte sich ein wenig mit Threading auskennen. Als der dann auch lief musste ich feststellen, dass ich nicht weiß, wie ich Attribute der GUI zur Laufzeit ändern kann...   das muss jetzt ein bisschen warten.

Donnerstag, 27. Januar 2011

OXID "Modulentwicklung" IV - 26.1.2011

Heute habe ich mich den ganzen Tag mit der Entwicklung unserer Voucher - Gutscheintools befasst.

Ich habe immer noch keine Ahnung, wie der shop seinen Parametertransfer vornimmt. Es funktioniert im Moment nur die Ausgabe der voucherdaten.
Einmal Festgehalten: Es wurden bis jetzt 3 Klassen mit den zugehörigen .tpl Dateien geschrieben.
Ersteinmal eine voucher.php und eine voucher.tpl. Diese Klassen dienen legilich als Basis für das Modul. Sie bekommen einen Eintrag in die Menu.xml um das Modul anzeigen zu können. Die Syntax muss natürlich an die Vorgaben passen. Wir erzeugten hierbei keine neue Superkategorie, sondern nur einen weiteren Eintrag bei den Shopsettings (deutsch: Shopeinstellungen).

id="mxvouchers" cl="voucherserie" 
  
die id kann frei vergeben werden, dient der Orientierung und wird später durch die Smarty-Engine in der entsprechenden Sprache ausgegeben.

list="voucherserie_list"

Wird an den oben angegebene Teil angefügt und bildet damit den  Eintrag in der menu.xml.

Alle Menüpunkte rufen ein Frameset auf, dass die Anzeige in zwei Teile teilt. Im oberen teil wird normalerweise die Liste angezeit: list="voucherserie_list", im unteren Teil die eigentliche Editierungsansicht.

Die hier angezeigte Klasse bzw Template wird dann in Menu.xml in der zeile darunter unter dem Keyword
angezeigt.
id="tbclvouchercodes_main ist dann die Bezeichnung des Bottom Frame, die ebenfalls von Smarty in der Entsprechenden Sprache angepasst ausgegeben wird.

PS: Textfarbgebung  in diesem Editor ist ein Alptraum!

Montag, 24. Januar 2011

Oxid Entwicklung 24-1-2011

Heute war ein sehr erfolgreicher Montag, was die Weiterentwicklung des Oxid Moduls angeht. Meinem Ausbilder ist bei der Struktur des menu.xml, welches die Einträge des Hauptmenüs festlegt aufgefallen, dass für jeden Unterpunkt nicht nur eine .tpl und .php Datei benötigt wird (zusätzlich zum Eintrag des Menüpunktes) sondern auch eine Hauptklasse, welche den gesamten Eintrag strukturiert.

Jeder Eintrag besteht somit aus mindestens 3 Klassen:
  • eine Basisklasse, welche den Eintrag Groß überschreibt und die Form der beiden Später angezeigten Frames vorgibt ( jede Seite Besteht aus einem Top - und einem Bottom - Frame )
  • eine List - Klasse, welche im oberen Frame angezeigt wird und welche die Navigationsstruktur und Suchfunktionen enthält
  • dem Bottom - Frame, in dem die eigentlichen Bearbeitungen vorgenommen werden.
Es war tatsächlich so, dass alle diese Strukturelemente vorhanden sein müssen, damit die vorgefertigte JavaScript - Methode welche einen Alert ausgibt (wollen Sie diesen Eintrag wirklich löschen...) aufgerufen wird. Zu meinem Glück konnte ich durch das einfache Löschen der überladenen Delete-Methode dafür sorgen, dass einzelne Zeilen aus der Datenbank gelöscht werden.
Das nächste Hauptziel ist es, eine Methode zu schreiben, welche die Daten der Zeile vor dem Löschen in eine weitere Tabelle schreibt. Dies ist evtl. leichter als gedacht, da sich die Notwendigen Informationen bereits in den Template-Variablem befinden und einfach nur zurückgeschrieben werden müssen.

Auf gutes Gelingen hoffe ich natürlich weiterhin.

Donnerstag, 20. Januar 2011

OXID "Modulentwicklung" III

So der zweite Tag in Folge ohne nennenswerte Fortschritte. In der Zeile hinter den erzeugten Einträgen aus der Datenbank erscheint ein kleines X, dass beim  Mouseover rot aufleuchtet und verlinkt ist. Beim Anklicken wird die JaveScript methode deleteThis() ausgeführt. Diese benötigt scheinbar eine sDeleteMessage aus dem Pfad
top.basefrm.list.sDeleteMessage oder aus top.basefrm.edit.sDeleteMessage. Wieso weiß ich nicht.

Ich bin nun davon ausgegangen, dass sich die scheinbar im Gegensatz zu oxid.admin. ... nirgendwo definierte
basefrm auf den in jedem Backendfenster enthaltenen unteren Frame bezieht. Da die Methode nicht weiter ausgeführt wird, wenn das beim Regulären Ablauf aufgerufene Popup Fenster nicht mit ja bestätigt wird und die einzige Möglichkeit dies zu umgehen ein Umschreiben der script datei wäre, was nicht in Frage kommt, muss unbedingt so ein blöder Bottom Frame eingeführt werden. Allerdings ist es mit heute auf Biegen und Brechen nicht gelungen einen vernünftig einzufügen. Ich habe nicht den leisesten Schimmer, was ich falsch gemacht habe. Aber wie ich mich kenne war es etwas, woran ich hätte denken können, es aber nicht getan habe.

Das nächste Ziel wird also sein auf irgend eine weise diese meldung zustande kommen zu lassen, damit ich mich endlich der Parameterübergabe und der zugehörigen Löschfunktion zuwenden kann. Es ist wirklich kaum zu fassen wie schwer mir momentan ein fortkommen in diesem Problem fällt.