|
Letzte
Bearbeitung dieses Dokuments: |
Code
Erklärungen
und Anwendungsbeispiele
Verwandte
Dokumentation
package
js_base.bo;
/*
*
de:
* Package mit den Klassen für die Serialization
eine Objekts dieser Klasse.
* Serialization ist notwendig um
die Werte des Objektes zwischen einem Java
* Application
Server (JAS) und einem Heavyweight-Client übertragen zu
können.
* en:
* Package with the
classes to serialize an object of this class.
*
Serialization is neccessary to exchange the values of the object
between a
* Java Application Server (JAS) and a
Heavyweight-Client. */import
java.io.Serializable;
/*
*
de: Package mit den Klassen für die Verbindung zum
Datenbank-System.
* en: package with the classes for
the connection to the database-system. */
import
java.sql.*;
/*
*
de: Package und Basis-Klasse für den Zugriff auf eine
Datenbank-Tabelle.
* en: package with the base-class
for the access to a database-table. */
import
js_base.dba.JSBS_DBA;
/**
*
* @author kurt(at)javascout[dot]biz
* @date
2006-06-22
*
*
@description
* de:
* Basisklasse
für Business-Objects.
* Diese Klasse kann
von Business-Objekt-Klassen, die für spezielle
Geschäftsfälle
* entwickelt werden,
'geerbt' werden.
*
* Vorbemerkung:
* Üblicherweise
ist ein Business-Object einer führenden Datenbank-Tabelle
zugeordnet.
* Z.B.: ein Business-Object für
eine 'Rechnung' ist einer Datenbank-Tabelle
* 'RechnungsKopf'
zugeordnet.
* Deswegen, die Variablen ObjectID,
DataSetID, CreatedBy, CreatedAt,
* ChangedBy,
ChangedAt, ValidFrom und ValidTill
* enthalten
die Werte aus dem entsprechenden Datensatz der zugeordneten
'führenden'
* Datenbank-Tabelle.
*
* Die
Unterscheidung zwischen ObjectID und DataSetID erlaubt die
Aufzeichnung von
* Änderungen von Attributen
in Datensätzen.
* Der ObjectID enthält
ein 'Surrogat' das der eindeutige Schlüssel (Primärschlüssel)
war,
* als der erste Datensatz mit dem ein
Business-Object mit einem neuen
* 'Anwender-bekannten-Schlüssel'
in die Datenbank eingefügt ('inserted') wurde.
* DataSetID
enthält das 'Surrogat' des Datensatzes mit den aktuell gültigen
Werten
* des Business-Object.
*
* Der
'Anwender-bekannte-Schlüssel' ist eine eindeutige Identifikation
aus Attributen,
* die dem Anwender bekannt
sind.
* Dieser Schlüssel muß im
Business-Object mit den spezifischen Geschäftsaufgaben
* festgelegt
werden und besteht üblicherweise aus einem oder mehreren
Geschäfts-
* spezifischen Variablen des
Business-Object.
*
* en:
*
Base-Class for Business Objects.
* This
class can be inherited by Business Objects designed for a specific
project.
*
* Preface:
* Usually
a Business Object is associated with a leading
database-table.
* E.g.: a Business Object with an
'Invoice' is associated with
* the
database-table 'InvoiceHeader'.
* Therefore, the
variables ObjectID, DataSetID, CreatedBy, CreatedAt,
* ChangedBy,
ChangedAt, ValidFrom and ValidTill
* contain the
values from the associated record of the leading database-table.
*
* The differentiation between ObjectID and
DataSetId allows to document the change of
* attributes
in database-records.
* ObjectID contains a
'surrogate' that was the unique key (primary key) of the
database-record
* at the time when a Business
Object with a new 'user-known-key' was initially
inserted.
* DataSetID contains the 'surrogate' of
the database-record with the actually valid values.
*
* The
'user-known-key' is a unique identifier which can be seen by a
user.
* It has to be defined within the Business
Objects designed for a specific application
* and
usually consists of one or more task-specific variables.
*
* @change-log
*
when who why
*
--------------------------------------------------------
* 2008-05-21 KG Methods
isDifferentIncludingNullValues
added.
* 2010-03-26 KG
ClientID added.
*
*/public
class
JSBS_BO
implements
Serializable
{
/*
*
VARIABLEN /VARISBLES
* ------------------- */
/*
* de:
ObjectID – erklärt unter 'Vorbemerkungen' im
Einführungs-Kommentar dieser Klasse.
* en:
ObjectID – see description at 'Preface' in the initial comment
of this class. */
public
double
ObjectID
;
/*
* de:
* ClientID – Mandanten-Identifikation.
*
Damit kann eine Installation des Anwendungsprogramms von
verschiedenen unabhängigen
* Gruppen (Mandant) von
Benutzern verwendet werden.
* Benutzer einer Gruppe
(Mandanten) haben keinen Zugriff auf die Daten von anderen
Gruppen.
*
* en:
* ClientID – Identification of a client.
*
That attribute enables the usage of the application program by
different, independent
* groups (clients) of users.
*
Users of one group (client) have no access to the data of other
groups.
*/
public int
ClientID
;
/*
* de:
DataSetID – erklärt unter 'Vorbemerkungen' im
Einführungs-Kommentar dieser Klasse.
* en:
DataSetID – see description at 'Preface' in the initial comment
of this class. */
public
double
DataSetID
;
/*
* de:
* CreatedBy
– Anwender-Name (sofern innerhalb der Anwendung vorhanden) der
den ersten
* Datensatz für das Business-Object
mit dem 'Anwender-bekannten-Schlüssel' eingefügt hat.
*
*
en:
* CreatedBy – User-name (if available within the
application) who inserted the
* first dataset for the
Business Object with this 'user-known-key'. */
public
String
CreatedBy
=
""
;
/*
* de:
* CreatedTS
– Datum/Uhrzeit (auf 1/1000 Sekunden genau) wann der erste
Datensatz
* für das Business-Object mit dem
'Anwender-bekannten-Schlüssel' eingefügt
wurde.
*
* en:
* CreatedTS –
Date/Time (down to 1/1000 second) when the first dataset of
the
* Business Object with this 'user-known-key' was
inserted into the database. */
public
Timestamp
CreatedAt
=
new
Timestamp(0);
/*
* de:
* ChangedBy
– Anwender-Name (sofern innerhalb der Anwendung vorhanden) der
die letzte
* Änderung eine Attributes des
Datensatzes veranlaßt hat.
*
* en:
*
CreatedBy – User-name (if available within the application) who
made
* the last change of an attribute of the dataset.
*/
public
String
ChangedBy
=
""
;
/*
* de:
* ChangedTS
– Datum/Uhrzeit (auf 1/1000 Sekunden genau) wann die
letzte
* Änderung eines Attributes dieses
Datensatzes ausgeführt wurde.
*
* en:
*
ChangedTS – Date/Time (down to 1/1000 second) when the
* last
change of an attribute of this dataset was performed. */
public
Timestamp
ChangedAt
=
new
Timestamp(0);
/*
* de:
* ValidFrom
– Datum ab dem (um 0:00 Uhr / Mitternacht) die Werte
dieses
* Datensatzes für das Business-Object
gültig sind.
*
* en:
* ValidFrom
– Date, from that on (at 00:00 h / midnight)
* the
data in this dataset is valid for the Business-Object. */
public
Date
ValidFrom
=
new
Date(0);
/*
* de:
* ValidTill
– Datum bis zu dem (um 24:00 Uhr / Mitternacht) die Werte
dieses
* Datensatzes für das Business-Object
gültig sind.
*
* en:
* ValidTill
– Date, until that (at 24:00 h / midnight)
* the
data in this dataset is valid for the Business-Object. */
public
Date
ValidTill
=
new
Date(0);
/*
* de:
* Status-Code
(Werte in der Java-Interface JSBS_BO_Constants definiert) zum
* signalisieren von Ergebnissen ausgeführter
Methoden an die aufrufenden Code.
*
* en:
*
Status code to signal results (values defined in interface
JSBS_BO_Constants)
* of methods to the caller.
*/
public
int
StatusCode
=
CONST_DB_UNKNOWN_ERROR
;
/*
* de:
* Status-Nachricht;
zusätzliche Information zum Status-Code -
* z.B.
der Fehler-Text der vom Datenbank-System bei einem Fehler mitgeteilt
wurde.
*
* en:
* Status message;
additional information for a returned StatusCode –
* e.g.
the error reported by the database-system together with a
database-error. */
public
String
StatusMsg
=
""
;
/*
*
--------------------
*
de: KONSTANTE zum Zurückliefern des Status nach dem Ausführen
einer Methode.
*
en: CONSTANTS to signal the completion status to the calling method.
*/
/*
*
de: OK: Methode endete wie erwartet.
* en: OK: Method ended
as expected. */
public
static final int
CONST_OK
=
0;
/*
*
de: NOTHING_TO_UPDATE: Kein Attribut verändert; 'update' der
Datenbank-Tabelle 'übersprungen'.
* en:
NOTHING_TO_UPDATE: No attribute changed; updating of database tables
skipped. */
public
static final int
CONST_NOTHING_TO_UPDATE
=
1;
/*
*
de: NOT_FOUND: Kein 'Object' mit den spezifizierten Auswahlkriterien
gefunden.
* en: NOT_FOUND: No object with the specified
criteria found. */
public
static final int
CONST_NOT_FOUND
=
2;
/*
*
de:
* DUPLICATE_KEY: Beim Versuch, ein Business-Object
einzufügen wurde festgestellt, dass
* bereits ein
Business-Object mit dem eindeutigen 'Anwender-bekannten-Schlüssel'
existiert.
*
* en:
* DUPLICATE_KEY:
When trying to insert a business-object with the unique
'user-known-key'
* already exists on the database.
*/
public
static final int
CONST_DUPLICATE_KEY
=
3;
/*
*
de:
* CHANGED_INBETWEEN: Ein anderer Anwender hat
mindestens ein Attribut verändert
* seit das zu
ändernde Business-Object von der Datenbank gelesen wurde.
*
*
en:
* CHANGED_INBETWEEN: Another user has changed at
least one attribute since the data of
* the Business Object
was fetched from the database. */
public
static final int
CONST_CHANGED_INBETWEEN
=
4;
/*
*
de: DEADLOCK: Eine 'Deadlock'-Situation ist innerhalb des
Datenbank-Systems aufgetreten.
* en: DEADLOCK: A deadlock
situation occured in the database system. */
public
static final int
CONST_DEADLOCK
=
8;
/*
*
de:
* DB_SYSTEM_ERROR: Ein Fehler ist im
Datenbank-System aufgetreten.
* Die exakte Ursache ist
unbekannt - aber abhängig vom verwendeten
Datenbank-System
* kann eine genauere Information in
der Variable 'StatusMsg' enthalten sein.
*
* en:
* DB_SYSTEM_ERROR: An error occured in the database
system.
* The exact reason for the error is unknown –
but depending on the used database-system
* a more
detailed information might be delivered within the Variable
'StatusMsg'. */
public
static final int
CONST_DB_SYSTEM_ERROR
=
9;
/*
*
de:
* INCONSISTENT_DATA: Die Daten des BO sind nicht
konsistent und können nicht gespeichert
*
werden.
Die
Prüfung innerhalb des BO (z.B. in einer Methode
'isConsistentData' einer erbenden Klass)
* hat ergeben,
dass
entweder
die
Werte einzelner Attribute die Prüfkriterien nicht erfüllen
oder
* die Prüfung des Zusammenhangs mehrerer Werte
nicht widerspruchsfrei ist.
* Dieser Fehler-Code kann in den
erbenden Klassen
weiter
detailliert werden.
*
* en:
*
INCONSITENT_DATA: The data of the BO is not consistent and can not be
stored.
* The verification within the BO (e.g. in a
method 'isConsistentData' of an inheriting class)
* showed
that either the values of single attributes failed the verification
or
* the combination of
the
values of several attributes is not consistent.
* This
Error-Code can be detailled further in inheriting classes.
*/
public
static final int
CONST_INCONSISTENT_DATA
=
10;
/*
*
de:
* DB_UNKNOWN_ERROR: Ein nicht näher
spezifizierte Fehler ist aufgetreten;
* Der Fehler ist
aber nicht durch das Datenbank-System verursacht.
*
*
en:
* DB_UNKNOWN_ERROR: Something went wrong; the
error is not caused by the database-system. */
public
static final int
CONST_DB_UNKNOWN_ERROR
=
999;
/*
*
--------------------
* de:
* METHODE zum
Kopieren der Werte eines anderen Objektes (der gleichen Klasse) in
die
* Variablen dieser Klasse.
*
*
en: METHOD to copy the values from another object (of the same class)
into this object. */
public
void
copyFromJSBS_BO(JSBS_BO
parmJSBS_BO) {
ObjectID
=
parmJSBS_BO.
ObjectID
;
ClientID
=
parmJSBS_BO.
ClientID
;
DataSetID
=
parmJSBS_BO.
DataSetID
;
CreatedBy
=
parmJSBS_BO.
CreatedBy
;
CreatedAt
=
parmJSBS_BO.
CreatedAt
;
ChangedBy
=
parmJSBS_BO.
ChangedBy
;
ChangedAt
=
parmJSBS_BO.
ChangedAt
;
ValidFrom
=
parmJSBS_BO.
ValidFrom
;
ValidTill
=
parmJSBS_BO.
ValidTill
;
StatusCode
=
parmJSBS_BO.
StatusCode
;
StatusMsg
=
parmJSBS_BO.
StatusMsg
;
}/*
*
--------------------
* de: METHODE um eine
'Rückwärts-Kompatibilität' zu erreichen.
*
en: METHOD to have backward compatibility. */
public
void
getJSBS_BO(JSBS_BO
parmJSBS_BO) {
copyFromJSBS_BO(parmJSBS_BO);
}/*
*
--------------------
* de:
* Methoden zum
Vergleichen der Werte von 2 Objekten unter Berücksichtigung der
Regel,
* dass beide Objekte 'gleich' sind wenn sie
'null' sind.
*
* en:
* Method
to compare the Values of 2 objects; regarding the rule that both
objects
* are 'equal' if both objects are 'null'.
*/
public
static boolean
isDifferentIncludingNullValues(String
parmObject1, String parmObject2) {
if
((parmObject1
==
null
)
&& (parmObject2 ==
null
))
return
false
;
if
((parmObject1
!=
null
)
&& (parmObject2 ==
null
))
return
true
;
if
((parmObject1
==
null
)
&& (parmObject2 !=
null
))
return
true
;
return
(parmObject1.compareTo(parmObject2)
!= 0);
}
/*
*/
public
static boolean
isDifferentIncludingNullValues(Integer
parmObject1, Integer parmObject2) {
if
((parmObject1
==
null
)
&& (parmObject2 ==
null
))
return
false
;
if
((parmObject1
!=
null
)
&& (parmObject2 ==
null
))
return
true
;
if
((parmObject1
==
null
)
&& (parmObject2 !=
null
))
return
true
;
return
(parmObject1.compareTo(parmObject2)
!= 0);
}/*
* --------------------
*
de:
* METHODE zum Prüfen ob das Attribut ValidTill
verändert wurde.
* Diese Methode wird verwendet um zu
Prüfen, ob ein Datensatz in der Zeit zwischen
* dem
SELECT für die Anzeige der Daten auf der GUI und dem UPDATE nach
einer Änderung
* von Daten von einem anderen Anwender
verändert wurde.
* en:
* METHOD
to check if the attribute ValidTill was changed.
* This
method is used to determine if the record was changed
* from
another task between the SELECT to display it on the GUI
* and
the UPDATE after a change was made. */
public
boolean
differentValidTill(Date
parmValidTill) {
/*
*
de:
* Der Vergleich wird über das 'String'-Format des
Datums durchgeführt.
* Grund für diesen
'Umweg' ist, dass das Datenbanksystem die interne
*
Repräsentation des Datums möglicherweise leicht
modifiziert.
* Wenn der Vergleich über die
'Milliseconds'-Darstellung (Verwendung der
*
.getTime()-Methode) gemacht würde, dann kann bei der Erfassung
neuer
* Daten folgender Fehler auftreten:
* Wenn
das neu erfasste BO gespeichert und anschliessend geändert
wird,
* dann wird beim Prüfen auf eine Veränderung
von der Datenbank ein um einige
* Millisekunden
unterschiedliches 'ValidTill'-Datum gelesen.
* Die Prüfung
würde dann glauben, dass der Datensatz inzwischen von einem
*
anderen Anwender geändert wurde und einen Fehler melden.
*
Der Vergleich von 'String's liefert aber eine Gleichheit der
beiden
* Datums-Werte.
* en:
* The
comparison is made over the String-format of the date.
* The
reason for this detour is, that the database-system might
slightly
* modify the internal representation by a few
milliseconds.
* If the comparison is made over the
milliseconds representation
* (using the
.getTime()-method) then at the case, that a new Object is
* entered
and changed immediately, the following error occurs:
* The
reread record shows a slightly differnt representation of ValidTill
compared
* to the one that was generated when the
object was entered for the first time.
* So it would
look like the database-record was changed by another task
inbetween.
* The string-representation is the same.
*/
int
intComparisonIndicator
=
(this
.
ValidTill
.toString()).compareTo(parmValidTill.toString());
/*
de: Der Vergleich liefert 0 wenn beide Strings gleich sind.
*
en: The comparison delivers 0 if both strings are equal.
*/
return
(intComparisonIndicator
!= 0);
}/* --------------------
*
de:
* Die beiden folgenden Methoden werden nur von
Server-Side Business-Objects verwendet.
* Nachdem Java keine
Mehrfach-Vererbung (Multi-Inheritance) erlaubt und die
*
Server-Side Business-Objects Klassen von der Klasse des Generellen
Business-Object erben
* und die Klasse für das
Generelle Business-Object von dieser Klasse erbt muss
* das
Übertragen der Common-Attributes-Werte von / zu dem
DataBase-Access-(DBA-)Objekt
* in dieser Klasse
implementiert werden.
* en:
*
The following two methods are used only by Server-Side Business
Objects.
* As Java does not allow Multi-Inheritance and
the Server-Side Business Objects class
* inherits from
the General Business Object class (with the variables and methods
for
* a specific business-entity), the methods to set
and get the common values from the
* DBA
(Data-Base-Access)-Objects have to be implemented in this class.
*/
/*
* --------------------
* de:
*
METHODE um die Common Attributes eines DBA-Objektes auf die Variables
dieses Objektes
* zu übertragen.
*
en:
*
METHOD to get the common attributes from the DBA Object.
*/
public
void
getCommonDBAAttributes(JSBS_DBA
parmJSBS_DBA) {
ObjectID
=
parmJSBS_DBA.
ObjectID
;
ClientID
=
parmJSBS_DBA.
ClientID
;
DataSetID
=
parmJSBS_DBA.
DataSetID
;
CreatedBy
=
parmJSBS_DBA.
CreatedBy
;
CreatedAt
=
parmJSBS_DBA.
CreatedAt
;
ChangedBy
=
parmJSBS_DBA.
ChangedBy
;
ChangedAt
=
parmJSBS_DBA.
ChangedAt
;
ValidFrom
=
parmJSBS_DBA.
ValidFrom
;
ValidTill
=
parmJSBS_DBA.
ValidTill
;
}/*
* --------------------
*
de:
* METHODE um die Common Attributes des DBA-Objektes mit
den Werten der Variablen dieses
* Objektes zu versorgen.
*
en:
* METHOD
to set the common attributes of the DBA Object from the values of the
variables
* of this object. */
public
void
setCommonDBAAttributes(JSBS_DBA
parmJSBS_DBA) {
parmJSBS_DBA.ObjectID
=
ObjectID
;
parmJSBS_DBA.ClientID
=
ClientID
;
parmJSBS_DBA.
DataSetID
=
DataSetID
;
parmJSBS_DBA.CreatedBy
=
CreatedBy
;
parmJSBS_DBA.CreatedAt
=
CreatedAt
;
parmJSBS_DBA.ChangedBy
=
ChangedBy
;
parmJSBS_DBA.ChangedAt
=
ChangedAt
;
parmJSBS_DBA.ValidFrom
=
ValidFrom
;
parmJSBS_DBA.ValidTill
=
ValidTill
;
}
}
xxx
Dokument |
Inhalt |
Dieser
Leitfaden enthält die notwendigen Tätigkeiten für
die Entwicklung eines StartFrame (auch als Command-Center
bekannt). |