|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen) oder anderer Objekt-Orientierter Programmiersprachen (z.B. C++, Modula-2, Pascal). Tutorial Datenbank-Ladeprogramm mit Graphischer Benutzeroberfläche (Java_Intro_02) durchgearbeitet. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
In
diesem Schritt werden die erfaßten Daten
(Projekt/Sprach-Kombinationen) in einer Liste angezeigt.
Aus
dieser Liste kann ein Datensatz ausgewählt und dessen Daten im
Detail angezeigt werden.
Bei der Anzeige der Detail-Daten können auch Daten, die nicht zum Anwender-bekannten-Schlüssel gehören (in diesem Tutorial nur das Datei-Verzeichnis), verändert werden.
Dazu ist folgender zusätzlicher Code und folgende sprach-abhängige Konfiguration notwendig:
Das Definieren eines Objektes vom Typ JS_ProjAssist_ProjectLanguage_BOC_Set für die Liste mit den BO.
Methode
zum Anzeigen der Daten der Liste im definierten GUI-Element vom Type
'JTable'.
In diesem Einfachen Tutorial wird diese Methode beim
'konstruieren' des Task-Frames und nach jedem Speichern von Daten
aufgerufen.
Erweiterung der XML-Struktur mit den sprach-abhängigen Texten in der Datei 'DisplayStrings.xml' um die Texte für die Spalten-Überschriften der angezeigten Liste.
Methode
zum Auswählen eines BO.
Die Daten des ausgewählten BO
werden dann noch einmal von der Datenbank gelesen und angezeigt.
Voriger Schritt: Client-Side BO-Set Klasse für eine Liste mit 'ProjectLanguage' Business-Objects
Vorbemerkung
Vorbedingungen
Anzeigen
der Liste
* Object
für das BOC-Set in der Klasse JS_ProjAssist_Project
definieren
und 'konstruieren'
* Methode
zur Anzeige der Liste codieren (in der Klasse
JS_ProjAssist_Project__ActionHandler)
* Methode
zur Anzeige der Liste aufrufen
* Sprachabhängigen
Text in der Datei 'DisplayStrings.xml' erfassen
Zwischen-Test
1
Auswählen und Anzeigen
der Daten eines BO
* Importieren
der notwendigen Bibliotheken
* Methode
zum Auswählen codieren
* Reagieren
auf den Schaltflächen-Klick (Event)
Test
Gesamter
Code am Ende des Schrittes
* Klasse
JS_ProjAssist_Project
* Klasse
JS_ProjAssist_Project__ActionHandler
Weitere
Schritte und verwandte Dokumentation
Nächste
Schritte:
JavaScout
ProjectAssist, Task-Frame Finalisierung (Java_Fatclient_01) –
Verwenden des 'DocumentListener' und anderer 'Listener'
(für
die finalen Arbeiten am Task-Frame).
asdf
(für
die Implementierung der Client-Server-Funktionalität über
den EJB-Mechanismus).
Obwohl
Eclipse in 'deutscher Version' installiert werden kann, sind
die Abbildungen in diesem Dokument mit der 'english Version'
erstellt. |
Tutorial Datenbank-Ladeprogramm mit Graphischer Benutzeroberfläche (Java_Intro_02) durchgearbeitet – und dessen Vorbedingungen auch.
Voriger Schritt Client-Side BO-Set Klasse für eine Liste mit 'ProjectLanguage' Business-Objects abgeschlossen.
Um
die Liste der bereits erfaßten Business-Objects mit der
Projekt-/Sprach-Kombination anzeigen zu können, sind Änderungen
des Codes in den Klassen JS_ProjAssist_Project
und
JS_ProjAssist_Project__ActionHandler
notwendig.
Zusätzlich
muß die Spalten-Überschrift und die Anordnung der Spalten
in der XML-Struktur der Datei 'DisplayStrings.xml' festgelegt werden.
Die Definition der Variable erfolgt in dem Block, in dem schon die BO für 'ProjectLanguage' zum Zeitpunkt des Lesens von der Datenbank und mit den aktuellen, auf der GUI eingegebenen, Werten definiert sind.
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
.
. . . .
.
. . . .
/*
* Business-Objects (Client-Side-Klasse) definieren.
*/
protected
JS_ProjAssist_ProjectLanguage_BOC
structJS_ProjAssist_ProjectLanguage_BOC_Read
;
protected
JS_ProjAssist_ProjectLanguage_BOC
structJS_ProjAssist_ProjectLanguage_BOC_Processed
;
/*
* Liste mit Business-Objects (Client-Side-Klasse) für
die Anzeige definieren. */
protected
JS_ProjAssist_ProjectLanguage_BOC_Set
structJS_ProjAssist_ProjectLanguage_BOC_Set
;
.
. . . .
.
. . . .
Zuletzt muß die Variable noch 'konstruiert' werden:
/*
* Methode
mit den Initialisierungen die notwendig sind bevor das Frame
(Window)
* angezeigt wird. */
private
void
initialize_before_frame()
{
/*
* 'Konstruieren'
der Business-Objects, die in diesem Task-Frame verwendet werden.
*/
structJS_ProjAssist_ProjectLanguage_BOC_Read
=
new
JS_ProjAssist_ProjectLanguage_BOC(
this
);
structJS_ProjAssist_ProjectLanguage_BOC_Processed
=
new
JS_ProjAssist_ProjectLanguage_BOC(
this
);
structJS_ProjAssist_ProjectLanguage_BOC_Set
=
new
JS_ProjAssist_ProjectLanguage_BOC_Set(
this
);
}
In
diesem Tutorial ist das Anzeigen der Liste mit den aktuell gültigen
Projekt-/Sprache-Kombinationen einfach gestaltet.
Bei 'realen'
Anforderungen wird wahrscheinlich erforderlich sein,
Selektionskriterien als Parameter zu übergeben.
Sofort
nach dem Aufrufen der Methode wird das im vorigen Schritt
(Client-Side BO-Set Klasse für
eine Liste mit 'ProjectLanguage'Business-Objects) codierte
BOC-Set verwendet.
Nach dem Aufrufen der Methode zum Selektieren
wird die, schon aus vorigen Schritten bekannte, Abfrage auf
ordnungsgemäße Ausführung oder Fehler
durchgeführt./*
* Methode
zum Anzeigen der Liste mit den aktuell gültigen
Projekt-/Sprach-Kombinationen. */
private
static void
redisplayList(JS_ProjAssist_Project
parmTF) {
/*
* Methode
des BOC-Set zum Selektieren der Daten aufrufen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.selectAllProjectLanguageCombinations();
/*
* Prüfen
ob die Datenbank-Operation fehlerfrei war; dazu den Status-Code des
* BOC-Set abfragen.
*/
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_NOT_FOUND
:
/* Noch
keine Daten erfaßt; kein Fehler.
* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
default
:
/* Ein
anderer Fehler ist beim Selektieren
aufgetreten.
* Fehlerbehandlungs-Methode (in der
Basisklasse für das Task-Frame) aufrufen und zusätzlich
* zur
'Location' (Klassenname, Locationscode "DupKey") auch den
Status-Code und die
* Fehler-Meldung des BOC als
Parameter übergeben.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"redisplay_DBError"
,
Integer.toString(parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusCode
),
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusMsg
);
}/*
* Werte
aus den BO des selektierten Sets auf die JTable der GUI übertragen.
Zum
Anzeigen der Liste wird ebenfalls eine Methode des im vorigen
Schritt implementierten BOC-Set verwendet.
Die
parmTF.
structJSBS_FramePosition_BOC
.
ColumnWidthArray01
definierte
Struktur mit den Werten für die Breite der Spalten wird in
einem späteren Schritt dazu verwendet, beim Schließen des
Fensters die vom Anwender gewählte Breite der Spalten auf der
Datenbank zu sichern und beim neuerlichen Öffnen des Fensters
durch den Anwender die zuvor gewählte Breite der Spalten wieder
einstellen zu
können.
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusMsg
);
}/*
* Werte
aus den BO des selektierten Sets auf die JTable der GUI
übertragen.
* Dabei die Methode der
BOC-Set-Klasse verwenden.
* Die Daten-Struktur
'structJSBS_FramePosition_BOC.columnWidthArrey01' ist in
der
* Basisklasse für das Task-Frame
(JSBS_TaskFrame) definiert und enthält die Information
* über
die Spaltenbreite für die Tabelle.
* Die
Information über die Spaltenbreite wird in diesem Schritt des
Tutorials noch nicht
* verwendet – ist aber als
Parameter für die Methode erforderlich.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.setToGUI(
parmTF.get_pnl_SelectionListTable(),
parmTF.structJSBS_FramePosition_BOC
.
ColumnWidthArray01
);
}/*
* Zuletzt
wird noch ermittelt, wieviele BO in der Liste sind und damit die
Eingabe-Regel
Zuletzt
wird noch Code implementiert, dessen Auswirkungen erst sichtbar
werden, wenn die 'Finalisierung' des Task-Frame durchgeführt
wird.
Weil der Code nicht umfangreich ist – aber damit
diese Methode abgeschlossen ist – wird er jetzt
implementiert.
Bitte beachten Sie die
Kommentare.
parmTF.
structJSBS_FramePosition_BOC
.
ColumnWidthArray01
);
}/*
* Zuletzt
wird noch ermittelt, wieviele BO in der Liste sind und damit die
Eingabe-Regel
* im GUI-Element für die Eingabe
der Auswahl festgelegt.
* Mit dieser Regel kann später
(bei der Auswahl für die Detail-Anzeige) geprüft werden,
* ob mit dem eingegeben Wert auch ein BO ausgewählt
werden kann. */
int
intListSize
=
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
vecRecordSet
.size();
/* Die
umfangreiche Parameterisierung der Eingabe-Regel wird derzeit nicht
genutzt;
* nicht verwendete Parameter werden durch
'null'-Werte ersetzt.
*/
parmTF.
structJSBS_EntrryRules
.setEntryRuleValues(
parmTF.get_txt_Selection().getName(),
null
,
1, intListSize,
null
,
null
,
null
,
null
);
/*
* Als
Service für den Anwender wird, wenn nur ein BO in der Liste
enthalten ist,
* diese gleich zur Auswahl
vorgeschlagen. */
if
(intListSize
== 1)
JSBS_GUIServices.setTextToJTextField(parmTF.get_txt_Selection(),
"1"
);
}
Die im vorigen Abschnitt codierte Methode zum Anzeigen der Liste wird an zwei Stellen aufgerufen.
Sofort
beim 'Konstruieren' des Task-Frames; damit werden alle aktuell
gültigen Projekt-/Sprach-Kombinationen gelistet.
Dieser
Aufruf wird in der Methode initialize_after_frame()
der
Klasse JS_ProjAssist_Project
codiert./*
* Methode
mit den Initialisierungen die notwendig sind nachdem das Frame
(Window)
* angezeigt wird. */
private
void
initialize_after_frame()
{
/* Methode
zum Zuordnen des sprachabhängigen Textes zu den GUI-Elementen
aufrufen.
*/
JSBS_GUIServices.processLanguageDependantElements(this
);
/* Methode
zum Anzeigen der aktuell gültigen Projekt-/Sprach-Kombinationen
aufrufen. */
redisplayList(parmTF);
}
Nach
jedem Speichern der Daten; damit werden neu eingefügte
Projekt-/Sprach-Kombinationen sofort angezeigt.
Dieser Aufruf
wird in der Methode store(...)
der
Klasse JS_ProjAssist_Project__ActionHandler
codiert./*
* Methode
die ausgeführt wird wenn eingegebene Daten auf der Datenbank
gespeichert
* werden sollen. */
private
static void
store(JS_ProjAssist_Project
parmTF) {
/*
.
. . . .
.
. . . .
/*
* Methode
zum Anzeigen der Liste mit den aktuell gültigen Daten
aufrufen. */
redisplayList(parmTF);
}
Diese
Datei wurde im Schritt Text
für die GUI-Elemente von XML-Datei einlesen > Verzeichnis und
Datei mit der XML-Struktur mit den sprachabhängigen Texten
erstellen erstellt
und ist im Verzeichnis 'TEXT.de' enthalten.
Innerhalb des
Bereiches <FrameIndividual>
wird
die Definition der Überschriften der Tabellen-Spalten
erfaßt.
Die sprachabhängigen Texte für die übrigen
GUI-Elemente des Task-Frame wurden im Schritt Klasse
für dasTask-Frame zur Verwaltung von Projekt und Sprache
eröffnen > Datei mit der XML-Struktur mit den
sprachabhängigen Texten erweitern
erfaßt.
<root>
<FrameIndividual>
.
. . . .
. . . . .
</Frame>
<Frame>
<FrameClass>
js_projassist.client.JS_ProjAssist_Project
</FrameClass>
<FrameTitle>
Projekt-
und Sprache-Verwaltung – ProjectAssist für das JavaScout
Fat-Client-Framework / © 2008 www.javascout.biz
</FrameTitle>
<Element>
<ElementName>
pnl_SelectionListTable
</ElementName>
<TableHeaderColumns>
<Column>
<SymbolicName>
Row-Number
</SymbolicName>
<ElementText>
Ausw.
</ElementText>
<Width>
3
</Width>
</Column>
<Column>
<SymbolicName>
ProjectCode
</SymbolicName>
<ElementText>
Projekt-Code
</ElementText>
<Width>
10
</Width>
</Column>
<Column>
<SymbolicName>
LanguageCode
</SymbolicName>
<ElementText>
Sprach-Code
</ElementText>
<Width>
10
</Width>
</Column>
</TableHeaderColumns>
</Element>
<Element>
<ElementName>
btn_Help
</ElementName>
.
. . . .
. . . . .
Eine
detaillierte Beschreibung der Elemente finden Sie im Dokumen
t
Datei
'DisplayStrings.xml' mit sprachabhängigen Texten für die
Anzeige auf der GUI
.
Die
Einstellungen und die Angabe der zu verwendenden Sprache als
Parameter wurden schon im Schritt 2 (
Klasse
für das StartFrame eröffnen > Test
)
ausgeführt und bleiben als Einstellung für das 'Project'
erhalten.
Die Abfolge zum Starten wurde bereits in vorigen
Schritten mit Abbildungen dokumentiert; deswegen folgen nur
Stichworte:
Zum
Starten wird
Run
> Open Run Dialog
ausgewählt.
Im
anschließend erscheinenden Fenster (Run) werden die
Einstellungen nicht verändert und durch Anklicken der
Schaltfläche
[ Run ]
das
Programm gestartet.
|
|
|
|
|
|
Für
die Auswahl eines BO und Anzeigen der Werte im Detail-Bereich ist
eine Änderung des Codes in der Klasse
JS_ProjAssist_Project__ActionHandler
notwendig.
Für den zusätzlichen Code sind folgende Bibliotheken erforderlich:
package
js_
projassist.client
;
.
. . . .
.
. . . .
import
js_base.bo.JSBS_BO;
/*
*
Package und Klassen mit Methoden zum Auslesen von Werten aus
GUI-Elementen bzw.
* Anzeigen von Werten in
GUI-Elementen. */import
js_base.frame.JSBS_GUIServices;
/*
*
Package und Klasse für ein zu bearbeitendes Business-Object.
*/import
js_projassist.bo.JS_ProjAssist_ProjectLanguage_BO;
/**
*
Um
die Werte eines BO ändern, kann ein BO aus der Liste ausgewählt
werden.
Dessen Werte werden dann im Detail in den GUI-Elementen
für die Eingabe angezeigt und können geändert werden –
sofern die Werte nicht Teil des Anwender-bekannten-Schlüssels
sind.
Bedingt durch die Einfachheit dieses Tutorials kann nur ein
anderes 'Stamm-Unterverzeichnis für die generierten Daten'
ausgewählt werden.
Sofort
nach dem Aufrufen der Methode wird der im Feld 'Auswahl' eingegebene
Wert ausgelesen.
Das erfolgt bereits mit einer Methode der
JavaScout-Basisklassen. In dieser Methode wird geprüft, ob der
eingegebene Wert innerhalb der definierten Grenzen
liegt./*
* Methode
zum Auswählen eines Business-Objects aus der angezeigten
Liste,
* neuerliches Lesen des BO von der Datenbank
(falls ein anderer Anwender in der
* Zwischenzeit eine
Veränderung vorgenommen hat) und Anzeigen der Werte im
Detail-Bereich
* (Teil der GUI mit den GUI-Elementen
für die Eingabe von Werten) der GUI. */
protected
static void
getForUpdate(JS_ProjAssist_Project
parmTF) {
/*
* Nummer
aus dem Auswahl-Feld der GUI auslesen.
* Mit der
verwendeten Methode wird die (in der Methode 'redisplayList(...)'
parameterisierte)
* Klasse 'JSBS_EntryRules' auf die
erlaubten Grenzen für die eingegebene Ziffer geprüft.
* Bei
einem ungültigen Wert wird der Hintergrund rot gefärbt.
*/
Integer
intSelectedRow
=
JSBS_GUIServices.getInteger(parmTF.get_txt_Selection(),
parmTF);
/*
* Bei
einer ungültigen Eingabe (auch wenn der Wert außerhalb
der erlaubten Grenzen ist)
* wird von der Methode ein
'null'-Wert zurückgeliefert.
* In diesem Fall
wird die Methode beendet; dem Anwender wird durch den roten
Hintergrund
* die fehlerhafte Eingabe signalisiert.
*/
if
(intSelectedRow
==
null
)
return
;
/*
Damit
der nachfolgende Code leichter zu verstehen ist, werden die Werte
des ausgewählten BO in ein eigenes Objekt kopiert.
if
(intSelectedRow
==
null
)
return
;
/*
* Eingegebene
Nummer ist gültig; indiziertes BO in eigenes Objekt
übertragen.
* Durch das eigene Objekt ist der
folgende Code leichter lesbar. */
int
intListIndex
= intSelectedRow.intValue() -
1;
JS_ProjAssist_ProjectLanguage_BO
structJS_ProjAssist_ProjectLanguage_BO =
(JS_ProjAssist_ProjectLanguage_BO)
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
vecRecordSet
.elementAt(intListIndex);
/*
* Aktuell
gültiges BO von der Datenbank lesen. */
Mit
dem Anwender-bekannten Schlüssel wird das BO, dessen Werte
verändert werden können, noch einmal von der Datenbank
gelesen.
Bei 'echten' Anwendungen wird durch diesen Algorithmus
vermieden, daß ein BO, das inzwischen von einem anderen
Anwender gelöscht wurde, wieder 'aktiviert' wird.
Die
Prüfungen sind schon in den vorigen Algorithmen zum Lesen von
Daten erläutert worden; wenn Sie näheres Interesse daran
haben lesen Sie bitte die
Kommentare.
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.
vecRecordSet
.elementAt(intListIndex);
/*
* Aktuell
gültiges BO von der Datenbank lesen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.selectByUserKnownKey(
structJS_ProjAssist_ProjectLanguage_BO.ProjectCode
,
structJS_ProjAssist_ProjectLanguage_BO.LanguageCode
);
/*
* Prüfen
ob die Datenbank-Operation fehlerfrei war; dazu den Status-Code des
* BOC-Set abfragen.
*/
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Werte auf die GUI-Elemente übertragen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.setToGUI(
parmTF.get_txt_ProjectCode(),
parmTF.get_txt_LanguageCode(),
parmTF.get_txt_TargetDirectoryName());/* Felder,
die Teil des Anwender-bekannten-Schlüssels sind für die
Eingabe sperren.
*/
parmTF.get_txt_ProjectCode().setEditable(
false
);
parmTF.get_txt_LanguageCode().setEditable(
false
);
/* Werte
des BO mit den von der DB gelesenen Daten auf ein weiteres BO
kopieren.
* Dieses BO enthält dann (in einem
späteren Schritt implementiert) die aktuell
* auf
der GUI eingegebenen Werte.
* Damit können
Änderungen erkannt werden und damit Schaltflächen
aktiviert oder
* deaktiviert werden.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
copyFromJS_ProjAssist_ProjectLanguage_BO(
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_NOT_FOUND
:
/* In
der Liste angezeigtes BO wurde in der Zwischenzeit gelöscht.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"getForUpdate_NotFound"
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
default
:
/* Ein
anderer Fehler ist beim Selektieren
aufgetreten.
* Fehlerbehandlungs-Methode (in der
Basisklasse für das Task-Frame) aufrufen und zusätzlich
* zur
'Location' (Klassenname, Locationscode "DupKey") auch den
Status-Code und die
* Fehler-Meldung des BOC als
Parameter übergeben.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"getForUpdate_DBError"
,
Integer.toString(parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusCode
),
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusMsg
);
}
}
Der
Algorithmus für die weiteren Verarbeitungen wird nur
ausgeführt, wenn die Datenbank-Operation fehlerfrei beendet
wurde.
* Zum Übertragen der Werte für die
Anzeige auf der GUI wird die beim BOC implementierte Methode
verwendet.
* Die Felder für die Eingabe der Werte des
Anwender-bekannten Schlüssels werden für die Eingabe
gesperrt.
* Als Vorbereitung für zukünftige
Prüfungen werden die Werte des BOC auf ein weiteres BOC
übertragen.
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Werte auf die GUI-Elemente übertragen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.setToGUI(
parmTF.get_txt_ProjectCode(),
parmTF.get_txt_LanguageCode(),
parmTF.get_txt_TargetDirectoryName());/* Felder,
die Teil des Anwender-bekannten-Schlüssels sind für die
Eingabe sperren.
*/
parmTF.get_txt_ProjectCode().setEditable(
false
);
parmTF.get_txt_LanguageCode().setEditable(
false
);
/* Werte
des BO mit den von der DB gelesenen Daten auf ein weiteres BO
kopieren.
* Dieses BO enthält dann (in einem
späteren Schritt implementiert) die aktuell
* auf
der GUI eingegebenen Werte.
* Damit können
Änderungen erkannt werden und damit Schaltflächen
aktiviert oder
* deaktiviert werden.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
copyFromJS_ProjAssist_ProjectLanguage_BO(
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_NOT_FOUND
:
Damit die Methode vom Anwender aufgerufen werden kann, muß auf die entsprechende Schaltfläche ([ Bearbeiten ]) reagiert werden.
/*
* Methode
die ermittelt, bei welchem GUI-Element ein 'ActionEvent' ausgelöst
wurde
* und die entsprechende Methode aufruft.
*/
protected
static void
handleEvent(JS_ProjAssist_Project
parmTF,
.
. . . .
.
. . . .
if
(cmd.equals(
"btn_Copy"
))
copy(parmTF);
if
(cmd.equals(
"btn_Get"
))
getForUpdate(parmTF);
}
Das
Aufrufen des Task-Frames wurde bereits ausführlich beschrieben;
zuletzt im Abschnitt
Zwischen-Test
1
dieses
Dokuments.
Aus diesem Grund beschränkt sich diese
Beschreibung erst auf das Auswählen von Daten und das
anschließende Anklicken der Schaltfläche [ Speichern ]
.
|
|
|
|
Gesamter
Code am Ende des Schrittes
package
js_projassist.client;
/*
*
Packages mit den GUI-Elementen. */import
java.awt.*;
import
javax.swing.*;
/*
*
Package mit den Klassen zum Bearbeiten von Events */import
java.awt.event.*;
/*
*
Package mit der Basisklasse für das TaskFrame. */import
js_base.frame.*;
/*
*
Package mit den Business-Objects. */import
js_projassist.boc.*;
/*
*/
public
class
JS_ProjAssist_Project
extends
JSBS_TaskFrame
{
/*
* Business-Objects (Client-Side-Klasse) definieren.
*/
protected
JS_ProjAssist_ProjectLanguage_BOC
structJS_ProjAssist_ProjectLanguage_BOC_Read
;
protected
JS_ProjAssist_ProjectLanguage_BOC
structJS_ProjAssist_ProjectLanguage_BOC_Processed
;
/*
* Liste mit Business-Objects (Client-Side-Klasse) für
die Anzeige definieren. */
protected
JS_ProjAssist_ProjectLanguage_BOC_Set
structJS_ProjAssist_ProjectLanguage_BOC_Set
;
/*
* GUI-Elemente die für diesen Task-Frame
spezifisch sind. */
protected
JLabel
lbl_ProjectCode
;
protected
JTextField
txt_ProjectCode
;
protected
JLabel
lbl_LanguageCode
;
protected
JTextField
txt_LanguageCode
;
protected
JLabel
lbl_TargetDirectoryName
;
protected
JTextField
txt_TargetDirectoryName
;
protected
JButton
btn_TargetDirectorySelection
;
/*
* Constructor der Klasse.
* Code darin
wird aufgerufen wenn ein Objekt dieser Klasse erstellt wird.
* Als
Parameter wird das StartFrame (CommandCenter) übernommen;
* das
StartFrame enthält alle Einstellungen, die für die gesamte
Anwendung gelten
* und die Verbindung zu Datenbank oder
Java-Application-Server (JAS). */
public
JS_ProjAssist_Project(JS_ProjAssist_CommandCenter
parmCC)
{
/*
* Aufruf des Constructors der Basisklasse
(JSBS_TaskFrame).
* Darin werden die Klasse des
StartFrames und eventuell Werte einzelner Variablen
* in
lokale Variablen übertragen. */
super
(parmCC);
/*
* Aufrufen
der Methoden mit den individuellen Initialisierungen für diese
Klasse.
*/
initialize_before_frame();
initialize_frame();
initialize_after_frame();
}/*
* Methode
mit den Initialisierungen die notwendig sind bevor das Frame
(Window)
* angezeigt wird. */
private
void
initialize_before_frame()
{
/*
* 'Konstruieren'
der Business-Objects, die in diesem Task-Frame verwendet werden.
*/
structJS_ProjAssist_ProjectLanguage_BOC_Read
=
new
JS_ProjAssist_ProjectLanguage_BOC(
this
);
structJS_ProjAssist_ProjectLanguage_BOC_Processed
=
new
JS_ProjAssist_ProjectLanguage_BOC(
this
);
structJS_ProjAssist_ProjectLanguage_BOC_Set
=
new
JS_ProjAssist_ProjectLanguage_BOC_Set(
this
);
}/*
* Methode
mit der das Frame (Window) angezeigt wird. */
private
void
initialize_frame()
{
/* Frame
(Window) sichtbar machen (anzeigen).
*/
setVisible(true
);
/* Anfangsgröße
festlegen. */
setSize(800,
600);/* Grund-Panel
mit den weiteren GUI-Elementen anzeigen.
* Die
GUI-Elemente und deren Anordnung sind in der geerbten Klasse
* (JSBS_StartFrame) festgelegt.
*/
setContentPane(get_pnl_Main());
}/*
* Methode
mit den Initialisierungen die notwendig sind nachdem das Frame
(Window)
* angezeigt wird. */
private
void
initialize_after_frame()
{
/* Methode
zum Zuordnen des sprachabhängigen Textes zu den GUI-Elementen
aufrufen.
*/
JSBS_GUIServices.processLanguageDependantElements(this
);
/* Methode
zum Anzeigen der aktuell gültigen Projekt-/Sprach-Kombinationen
aufrufen.
*/
JS_ProjAssist_Project__ActionHandler.redisplayList(this
);
}/*
* ******************************
* Methoden
zum 'Construct' (Initialisierung) der einzelnen GUI-Elemente.
* */
protected
JLabel
get_lbl_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_ProjectCode
=
new
JLabel();
lbl_ProjectCode
.setName(
"lbl_ProjectCode"
);
lbl_ProjectCode
.setHorizontalAlignment(SwingConstants.
TRAILING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_ProjectCode;
}/* */
protected
JTextField
get_txt_ProjectCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_ProjectCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_ProjectCode
=
new
JTextField();
txt_ProjectCode
.setName(
"txt_ProjectCode"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_ProjectCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_ProjectCode;
}/* */
protected
JLabel
get_lbl_LanguageCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_LanguageCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_LanguageCode
=
new
JLabel();
lbl_LanguageCode
.setName(
"lbl_LanguageCode"
);
lbl_LanguageCode
.setHorizontalAlignment(SwingConstants.
TRAILING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_LanguageCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_LanguageCode;
}/* */
protected
JTextField
get_txt_LanguageCode() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_LanguageCode
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_LanguageCode
=
new
JTextField();
txt_LanguageCode
.setName(
"txt_LanguageCode"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_LanguageCode in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_LanguageCode;
}/* */
protected
JLabel
get_lbl_TargetDirectoryName() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
lbl_TargetDirectoryName
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
lbl_TargetDirectoryName
=
new
JLabel();
lbl_TargetDirectoryName
.setName(
"lbl_TargetDirectoryName"
);
lbl_TargetDirectoryName
.setHorizontalAlignment(SwingConstants.
LEADING
);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building lbl_TargetDirectoryName in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
lbl_TargetDirectoryName;
}/* */
protected
JTextField
get_txt_TargetDirectoryName() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
txt_TargetDirectoryName
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
txt_TargetDirectoryName
=
new
JTextField();
txt_TargetDirectoryName
.setName(
"txt_TargetDirectoryName"
);
/* Direkte
Eingabe nicht erlauben; nur über Auswahl aus der
Verzeichnis-Struktur.
*/
txt_TargetDirectoryName
.setEnabled(
false
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building txt_TargetDirectoryName in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
txt_TargetDirectoryName;
}/* */
protected
JButton
get_btn_TargetDirectorySelection() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
btn_TargetDirectorySelection
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
btn_TargetDirectorySelection
=
new
JButton();
btn_TargetDirectorySelection
.setName(
"btn_TargetDirectorySelection"
);
/*
* Durch
den 'ActionListener' wird beim Anklicken der Schaltfläche mit
der Maustaste
* die Methode 'actionPerformed'
aufgerufen.
*/
btn_TargetDirectorySelection
.addActionListener(
this
);
/*
* Über
den 'ActionCommand' kann in the Methode 'actionPerformed' abgefragt
werden,
* welche Schaltfläche angeklickt wurde.
*/
btn_TargetDirectorySelection
.setActionCommand(
"btn_TargetDirectorySelection"
);
}
catch
(Throwable
Exc) {
System.out
.println(
"Error
while building btn_TargetDirectorySelection in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
btn_TargetDirectorySelection;
}/*
* ******************************
* Methode
zum 'Construct' (Initialisierung) des Panels mit den GUI-Elementen
für
* die Abwicklung des Geschäftsfalles.
* Diese
Methode überschreibt das 'Construct' des JPanel (mit gleichem
Namen) in der
* geerbten Methode aus der Klasse
JSBS_TaskFrame.
* */
protected
JPanel
get_pnl_DetailFields() {
/* Zuerst
Prüfen, ob die Variable bereits 'constructed' (initialisiert)
ist. */
if
(
pnl_DetailFields
==
null
)
{
/* Variable
noch nicht 'constructed'; Code für die Initialisierung folgt.
*/
try
{
pnl_DetailFields
=
new
JPanel();
pnl_DetailFields
.setName(
"pnl_DetailFields"
);
/*
* Mit
der folgenden Anweisung wird die Eigenschaft 'GridBagLayout
festgelegt
* 'GridBagLayout' unterteilt das JPanel in
'dehnbare' Felder; damit 'wachsen' oder
* 'schrumpfen'
darin platzierte GUI-Elemente abhängig von der Größe
des JPanel. */
pnl_DetailFields
.setLayout(
new
GridBagLayout());
/*
* Die
folgenden Anweisungen platzieren GUI-Elemente in den 'Feldern' des
JPanel. */
/* Zuerst wird eine Variable für die
Platzierungs-Eigenschaften erstellt. */
GridBagConstraints
gbc_lbl_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_ProjectCode.gridx
=
0;
gbc_lbl_ProjectCode.
gridy
=
0;
gbc_lbl_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_ProjectCode.
weightx
=
1;
gbc_lbl_ProjectCode.
anchor
=
GridBagConstraints.
LINE_END
;
gbc_lbl_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_ProjectCode(),
gbc_lbl_ProjectCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_ProjectCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_ProjectCode.gridx
=
1;
gbc_txt_ProjectCode.
gridy
=
0;
gbc_txt_ProjectCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_ProjectCode.
weightx
=
1;
gbc_txt_ProjectCode.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_ProjectCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_ProjectCode(),
gbc_txt_ProjectCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_lbl_LanguageCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_LanguageCode.gridx
=
0;
gbc_lbl_LanguageCode.
gridy
=
1;
gbc_lbl_LanguageCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_LanguageCode.
weightx
=
1;
gbc_lbl_LanguageCode.
anchor
=
GridBagConstraints.
LINE_END
;
gbc_lbl_LanguageCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_LanguageCode(),
gbc_lbl_LanguageCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_LanguageCode = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_LanguageCode.gridx
=
1;
gbc_txt_LanguageCode.
gridy
=
1;
gbc_txt_LanguageCode.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_LanguageCode.
weightx
=
1;
gbc_txt_LanguageCode.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_LanguageCode.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_LanguageCode(),
gbc_txt_LanguageCode);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_lbl_TargetDirectoryName = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_lbl_TargetDirectoryName.gridx
=
0;
gbc_lbl_TargetDirectoryName.
gridy
=
2;
gbc_lbl_TargetDirectoryName.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_lbl_TargetDirectoryName.
weightx
=
1;
gbc_lbl_TargetDirectoryName.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_lbl_TargetDirectoryName.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_lbl_TargetDirectoryName(),
gbc_lbl_TargetDirectoryName);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_txt_TargetDirectoryName = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_txt_TargetDirectoryName.gridx
=
0;
gbc_txt_TargetDirectoryName.
gridy
=
3;
gbc_txt_TargetDirectoryName.
fill
=
GridBagConstraints.
HORIZONTAL
;
gbc_txt_TargetDirectoryName.
weightx
=
1;
gbc_txt_TargetDirectoryName.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_txt_TargetDirectoryName.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_txt_TargetDirectoryName(),
gbc_txt_TargetDirectoryName);/*
* Platzieren
des nächsten GUI-Elements. */
GridBagConstraints
gbc_btn_TargetDirectorySelection = new
GridBagConstraints();
/* Definition
der Platzierungs-Eigenschaften.
*/
gbc_btn_TargetDirectorySelection.gridx
=
1;
gbc_btn_TargetDirectorySelection.
gridy
=
2;
gbc_btn_TargetDirectorySelection.
fill
=
GridBagConstraints.
BOTH
;
gbc_btn_TargetDirectorySelection.
weightx
=
1;
gbc_btn_TargetDirectorySelection.
gridheight
=
2;
gbc_btn_TargetDirectorySelection.
anchor
=
GridBagConstraints.
LINE_START
;
gbc_btn_TargetDirectorySelection.
insets
=
new
Insets(3,
3, 3, 3);
/* Platzieren
des GUI-Elements auf dem JPanel.
*/
get_pnl_DetailFields().add(get_btn_TargetDirectorySelection(),
gbc_btn_TargetDirectorySelection);
}
catch
(Throwable
Exc) {
/* Fehler
beim 'construct' ist sehr unwahrscheinlich und kann nur beim
'Starten'
* des Tasks auftreten.
* Deswegen
werden Fehlermeldungen nur auf der Konsole ausgegeben.
*/
System.out
.println(
"Error
while building pnl_DetailFields in class
JS_ProjAssist_Project"
);
Exc.printStackTrace();
}
}
return
pnl_DetailFields;
}/*
* Methode
die ausgeführt wird wenn ein Klick mit einer Maustaste
* auf
ein GUI-Element, dem der ActionListener hinzugefügt wurde,
erfolgt. */
public
void
actionPerformed(ActionEvent
e) {
/*
* Gleichnamige
Methode in der geerbten Basisklasse aufrufen.
* Damit
werden die 'geerbten' Verarbeitungen (die für alle
Anwendungsprogramme
* gleich sein können) zuerst
ausgeführt. */
super
.actionPerformed(e);
/*
* Weitere
Verarbeitung in einer eigenen Klasse mit statischen Methoden.
*/
JS_ProjAssist_Project__ActionHandler.handleEvent(this
,
e);
}}
package
js_
projassist.client
;
/*
*
Package mit den Klassen zum Bearbeiten von Events. */import
java.awt.event.*;
/*
*
Package mit den Klassen der GUI-Elemente. */import
java.awt.*;
/*
*
Package und Klassen mit den Status-Codes zum Prüfen auf
erfolgreiche Durchführung oder
* Fehler bei einer
Datenbank-Operation. */import
js_base.bo.JSBS_BO;
/*
*
Package und Klassen mit Methoden zum Auslesen von Werten aus
GUI-Elementen bzw.
* Anzeigen von Werten in
GUI-Elementen. */import
js_base.frame.JSBS_GUIServices;
/*
*
Package und Klasse für ein zu bearbeitendes Business-Object.
*/import
js_projassist.bo.JS_ProjAssist_ProjectLanguage_BO;
/**
*
* @author kurt@javascout.biz
*
@date 2008-05-10
*
* @description
* Klasse
mit statischen Methoden die ausgeführt werden wenn ein
'event'
* (z.B. der Klick einer Maustaste auf
eine Schaltfläche) aufgetreten ist.
* Detail-Dokumentation
finden Sie bei den einzelnen Methoden.
*
*
@change-log
* when who why
*
--------------------------------------------------------
*
*/public
class
JS_ProjAssist_Project__ActionHandler
{
/*
* Name
der Klasse als Konstante festlegen weil bei statischen Methoden der
* Name der Klasse nicht über
'getClass().getName() ermittelt werden kann. */
private
static
String
CONST_ClassName
=
"JS_ProjAssist_Project__ActionHandler"
;
/*
* Methode
die ermittelt, bei welchem GUI-Element ein 'ActionEvent' ausgelöst
wurde
* und die entsprechende Methode aufruft.
*/
protected
static void
handleEvent(JS_ProjAssist_Project
parmTF,
ActionEvent
parmActionEvent) {/* Zuerst
wird die 'Identifikation' des GUI-Element aus dem ActionEvent
extrahiert. */
String
cmd = parmActionEvent.getActionCommand().trim();
/* In
diesem Stadium des Tutorials wird zur Kontrolle der
Action-Command
* auf der Konsole ausgegeben.
*/
System.
out
.println(
"ActionCommand:
"
+
cmd);
/* Abfragen
von welchem GUI-Element der Event ausgelöst wurde und
* Aufrufen der entsprechenden Methode.
*/
if
(cmd.equals(
"btn_TargetDirectorySelection"
))
processSelectDirectory(parmTF);
if
(cmd.equals(
"btn_Store"
))
store(parmTF);
if
(cmd.equals(
"btn_Copy"
))
copy(parmTF);
if
(cmd.equals(
"btn_Get"
))
getForUpdate(parmTF);
}
/*
* Methode
die ausgeführt wird wenn das Stamm-Verzeichnis für
generierte Dateien
* ausgewählt werden
soll. */
private
static void
processSelectDirectory(JS_ProjAssist_Project
parmTF) {
/*
* Sprachabhängigen
Text für die 'Title-Bar' des File-Dialog-Fensters aus
* der
XML-Datei 'auslesen'. */
String
strTitle =
parmTF.frmCC
.
structJSBS_XML_DisplayStrings
.getSupplementaryText(
"Project__ActionHandler*FD_TitleBar"
);
/*
* Fenster
für den 'File-Dialog' aufrufen;
* in diesem kann
der Benutzer eine Datei auswählen. */
FileDialog
fd = new
FileDialog(parmTF,
strTitle,
FileDialog.LOAD
);
/*
* Anfangswerte
für Verzeichnis und Dateiname setzen und Fenster sichtbar
machen.
*/
fd.setFile(
""
);
fd.setDirectory(""
);
fd.setVisible(true
);
/*
* Name
für gewähltes Verzeichnis aus dem 'File-dialog' holen und
in einen String übertragen. */
String
strDirectoryName = fd.getDirectory();
/*
* Verzeichnis
im entsprechenden Feld anzeigen.
*/
parmTF.get_txt_TargetDirectoryName().setText(strDirectoryName);
}
/*
* Methode
die ausgeführt wird wenn eingegebene Daten auf der Datenbank
gespeichert
* werden sollen. */
private
static void
store(JS_ProjAssist_Project
parmTF) {
/*
* Werte
aus den GUI-Elementen auf die Variablen des BO übertragen.
* Dabei
die Methode der BOC-Klasse verwenden.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.getFromGUI(
parmTF.get_txt_ProjectCode(),
parmTF.get_txt_LanguageCode(),
parmTF.get_txt_TargetDirectoryName());/*
* Methode
des BOC zum Speichern der Daten aufrufen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.store();
/*
* Prüfen
ob die Datenbank-Operation fehlerfrei war; dazu den Status-Code des
* BOC abfragen.
*/
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Eingabefelder für die Werte, die
den Anwender-bekannten Schlüssel bilden, sperren.
*/
parmTF.get_txt_ProjectCode().setEditable(
false
);
parmTF.get_txt_LanguageCode().setEditable(false
);
/* Verarbeitetes
BO (xxx_Processed) mit neuen Allgemeinen Attributen (Common
Attributes) auf das
* BO, das die Werte, so wie sie auf
der Datenbank sind enthält (xxx_Read) kopieren.
* Damit
kann in einem späteren Schritt verglichen werden ob ein Attribut
geändert wurde.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.
copyFromJS_ProjAssist_ProjectLanguage_BO(
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_DUPLICATE_KEY
:
/* Ein
Datensatz mit den Werten, die den Anwender-bekannten Schlüssel
bilden, existiert bereits.
* Fehlerbehandlungs-Methode
(in der Basisklasse für das Task-Frame) aufrufen und
zusätzlich
* zur 'Location' (Klassenname,
Locationscode "DupKey") auch die Werte für den
Anwender-bekannten
* Schlüssel als Parameter
übergeben. */
parmTF.handleErrorEvent(
CONST_ClassName
,
"DupKey"
,
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
ProjectCode
,
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
LanguageCode
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
default
:
/* Ein
anderer Fehler ist beim Speichern der Daten
aufgetreten.
* Fehlerbehandlungs-Methode (in der
Basisklasse für das Task-Frame) aufrufen und zusätzlich
* zur
'Location' (Klassenname, Locationscode "DupKey") auch den
Status-Code und die
* Fehler-Meldung des BOC als
Parameter übergeben.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"store_DBError"
,
Integer.toString(parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
StatusCode
),
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
StatusMsg
);
}/*
* Methode
zum Anzeigen der Liste mit den aktuell gültigen Daten
aufrufen. */
redisplayList(parmTF);
}
/*
* Methode
die ausgeführt wird wenn eingegebene Daten, die auf der
Datenbank gespeichert
* sind, verändert und als
neuer Datensatz gespeichert werden sollen. */
private
static void
copy(JS_ProjAssist_Project
parmTF) {
/*
* Anwender
darauf aufmerksam machen, daß der Anwender-bekannte
Schlüssel
* nicht gleich bleiben darf. In diesem
Tutorial wird der Wert für die Sprache geändert.
*/
parmTF.get_txt_LanguageCode().setText(
""
);
/*
* Werte
aus den GUI-Elementen auf die Variablen des BO übertragen.
* Dabei
die Methode der BOC-Klasse verwenden.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.getFromGUI(
parmTF.get_txt_ProjectCode(),
parmTF.get_txt_LanguageCode(),
parmTF.get_txt_TargetDirectoryName());/*
* BO
kennzeichnen, daß es sich um ein neu eingegebenes BO
handelt.
* Ein 'neues' BO ist durch die Werte '0' im
DataSetId und ObjectID zu erkennen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
DataSetID
=
0;
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
ObjectID
=
0;
/*
* BO
auf das BO mit den (von der Datenbank) gelesenen Daten
kopieren.
* Das hat in diesem Schritt des Tutorials
noch keine Auswirkungen;
* später wird aber das
Aktivieren und Deaktivieren von Schaltflächen nach einer
Datenänderung
* über den Vergleich der Werte
gesteuert.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.
copyFromJS_ProjAssist_ProjectLanguage_BO(
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Processed
);
/*
* Eingabefelder für die Werte, die den
Anwender-bekannten Schlüssel bilden,
* für
die Eingabe öffnen.
*/
parmTF.get_txt_ProjectCode().setEditable(
true
);
parmTF.get_txt_LanguageCode().setEditable(true
);
}
/*
* Methode
zum Anzeigen der Liste mit den aktuell gültigen
Projekt-/Sprach-Kombinationen. */
protected
static void
redisplayList(JS_ProjAssist_Project
parmTF) {
/*
* Methode
des BOC-Set zum Selektieren der Daten aufrufen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.selectAllProjectLanguageCombinations();
/*
* Prüfen
ob die Datenbank-Operation fehlerfrei war; dazu den Status-Code des
* BOC-Set abfragen.
*/
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_NOT_FOUND
:
/* Noch
keine Daten erfaßt; kein Fehler.
* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
default
:
/* Ein
anderer Fehler ist beim Selektieren
aufgetreten.
* Fehlerbehandlungs-Methode (in der
Basisklasse für das Task-Frame) aufrufen und zusätzlich
* zur
'Location' (Klassenname, Locationscode "DupKey") auch den
Status-Code und die
* Fehler-Meldung des BOC als
Parameter übergeben.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"redisplay_DBError"
,
Integer.toString(parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusCode
),
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
StatusMsg
);
}/*
* Werte
aus den BO des selektierten Sets auf die JTable der GUI
übertragen.
* Dabei die Methode der BOC-Set-Klasse
verwenden.
* Die Daten-Struktur
'structJSBS_FramePosition_BOC.columnWidthArrey01' ist in
der
* Basisklasse für das Task-Frame
(JSBS_TaskFrame) definiert und enthält die Information
* über
die Spaltenbreite für die Tabelle.
* Die
Information über die Spaltenbreite wird in diesem Schritt des
Tutorials noch nicht
* verwendet – ist aber als
Parameter für die Methode erforderlich.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.setToGUI(
parmTF.get_pnl_SelectionListTable(),
parmTF.structJSBS_FramePosition_BOC
.
ColumnWidthArray01
);
/*
* Zuletzt
wird noch ermittelt, wieviele BO in der Liste sind und damit die
Eingabe-Regel
* im GUI-Element für die Eingabe der
Auswahl festgelegt.
* Mit dieser Regel kann später
(bei der Auswahl für die Detail-Anzeige) geprüft werden,
* ob mit dem eingegeben Wert auch ein BO ausgewählt
werden kann. */
int
intListSize
=
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Set
.
vecRecordSet
.size();
/* Die
umfangreiche Parameterisierung der Eingabe-Regel wird derzeit nicht
genutzt;
* nicht verwendete Parameter werden durch
'null'-Werte ersetzt.
*/
parmTF.
structJSBS_EntryRules
.setEntryRuleValues(
parmTF.get_txt_Selection().getName(),
null
,
1, intListSize,
null
,
null
,
null
,
null
);
/*
* Als
Service für den Anwender wird, wenn nur ein BO in der Liste
enthalten ist,
* diese gleich zur Auswahl
vorgeschlagen. */
if
(intListSize
== 1)
parmTF.get_txt_Selection().setText("1"
);
}
/*
* Methode
zum Auswählen eines Business-Objects aus der angezeigten
Liste,
* neuerliches Lesen des BO von der Datenbank
(falls ein anderer Anwender in der
* Zwischenzeit eine
Veränderung vorgenommen hat) und Anzeigen der Werte im
Detail-Bereich
* (Teil der GUI mit den GUI-Elementen
für die Eingabe von Werten) der GUI. */
protected
static void
getForUpdate(JS_ProjAssist_Project
parmTF) {
/*
* Nummer
aus dem Auswahl-Feld der GUI auslesen.
* Mit der
verwendeten Methode wird die (in der Methode 'redisplayList(...)'
parameterisierte)
* Klasse 'JSBS_EntryRules' auf die
erlaubten Grenzen für die eingegebene Ziffer geprüft.
* Bei
einem ungültigen Wert wird der Hintergrund rot gefärbt.
*/
Integer
intSelectedRow
=
JSBS_GUIServices.getInteger(parmTF.get_txt_Selection(),
parmTF);
/*
* Bei
einer ungültigen Eingabe (auch wenn der Wert außerhalb der
erlaubten Grenzen ist)
* wird von der Methode ein
'null'-Wert zurückgeliefert.
* In diesem Fall wird
die Methode beendet; dem Anwender wird durch den roten
Hintergrund
* die fehlerhafte Eingabe signalisiert.
*/
if
(intSelectedRow
==
null
)
return
;
/*
* Eingegebene
Nummer ist gültig; indiziertes BO in eigenes Objekt
übertragen.
* Durch das eigene Objekt ist der
folgende Code leichter lesbar. */
int
intListIndex
= intSelectedRow.intValue() -
1;
JS_ProjAssist_ProjectLanguage_BO
structJS_ProjAssist_ProjectLanguage_BO =
(JS_ProjAssist_ProjectLanguage_BO)
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Set
.
vecRecordSet
.elementAt(intListIndex);
/*
* Aktuell
gültiges BO von der Datenbank lesen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.selectByUserKnownKey(
structJS_ProjAssist_ProjectLanguage_BO.ProjectCode
,
structJS_ProjAssist_ProjectLanguage_BO.LanguageCode
);
/*
* Prüfen
ob die Datenbank-Operation fehlerfrei war; dazu den Status-Code des
* BOC-Set abfragen.
*/
switch
(parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusCode
)
{
case
JSBS_BO.
CONST_OK
:
/* Datenbank-Operation
wie erwartet.
* Werte auf die GUI-Elemente übertragen.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Read
.setToGUI(
parmTF.get_txt_ProjectCode(),
parmTF.get_txt_LanguageCode(),
parmTF.get_txt_TargetDirectoryName());/* Felder,
die Teil des Anwender-bekannten-Schlüssels sind für die
Eingabe sperren.
*/
parmTF.get_txt_ProjectCode().setEditable(
false
);
parmTF.get_txt_LanguageCode().setEditable(
false
);
/* Werte
des BO mit den von der DB gelesenen Daten auf ein weiteres BO
kopieren.
* Dieses BO enthält dann (in einem
späteren Schritt implementiert) die aktuell
* auf
der GUI eingegebenen Werte.
* Damit können
Änderungen erkannt werden und damit Schaltflächen aktiviert
oder
* deaktiviert werden.
*/
parmTF.
structJS_ProjAssist_ProjectLanguage_BOC_Processed
.
copyFromJS_ProjAssist_ProjectLanguage_BO(
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
case
JSBS_BO.
CONST_NOT_FOUND
:
/* In
der Liste angezeigtes BO wurde in der Zwischenzeit gelöscht.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"getForUpdate_NotFound"
);
/* Verarbeitung
innerhalb dieses 'case' mit 'break' beenden.
*/
break
;
default
:
/* Ein
anderer Fehler ist beim Selektieren
aufgetreten.
* Fehlerbehandlungs-Methode (in der
Basisklasse für das Task-Frame) aufrufen und zusätzlich
* zur
'Location' (Klassenname, Locationscode "DupKey") auch den
Status-Code und die
* Fehler-Meldung des BOC als
Parameter übergeben.
*/
parmTF.handleErrorEvent(
CONST_ClassName
,
"getForUpdate_DBError"
,
Integer.toString(parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusCode
),
parmTF.structJS_ProjAssist_ProjectLanguage_BOC_Read
.
StatusMsg
);
}
}
}
Weitere Schritte und verwandte Dokumentation
Dokument |
Inhalt |
In
diesem Schritt des Tutorials werden die abschließenden
Arbeiten begonnen. |
|
Alternativ
kann begonnen werden, das Anwendungsprogramm um den notwendigen
Code für eine Client-Server-Funktionalität zu
erweitern. |