> Inhalt: JavaScout Base-System (JSBS)

JSBS_BO – Basisklasse für ein Business-Object

* Bitte beachten Sie die Hinweise und Bestimmungen bezüglich Urheberrecht, Haftungsausschluß und geschützte Marken oder Warenzeichen die für dieses Web-Dokument und möglicherweise auch für 'verlinkte' Dokumente gelten.

  • Der Betreiber dieser Web-Site (www.javascout.biz) ist nicht verantwortlich für den Inhalt von Web-Sites, die innerhalb dieses Web-Dokumentes oder anderer Dokumente von www.javascout.biz verlinkt sind.

  • Wenn dieses Web-Dokument oder andere Dokumente dieser Web-Site (www.javascout.biz) Rechte von Ihnen verletzen, oder sie glauben, dass Rechte Anderer (Dritter Personen) dadurch verletzt werden, informieren Sie bitte den Betreiber dieser Web-Site.
    Eine E-Mail können Sie ganz einfach durch anklicken des Symbols oder Textes im Frame rechts oben senden.

Dieses Dokument drucken.

 Letzte Bearbeitung dieses  Dokuments:
2012-06-04

Inhaltsverzeichnis

Code 
Erklärungen und Anwendungsbeispiele 
Verwandte Dokumentation
 

Code

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;
    }
}

zum Inhaltsverzeichnis

Erklärungen und Anwendungsbeispiele

xxx

zum Inhaltsverzeichnis

Verwandte Dokumentation

Dokument

Inhalt

Leitfaden für die Entwicklung von Heavyweight-Clients mit dem JS-FCF – Notwendige Schritte zur Entwicklung des StartFrames  

Dieser Leitfaden enthält die notwendigen Tätigkeiten für die Entwicklung eines StartFrame (auch als Command-Center bekannt).
Das StartFrame stellt die Möglichkeiten bereit, verschiedene TaskFrames für die Bearbeitung von Geschäftsfällen aufzurufen.
Weiters ist im StartFrame jener Programm-Code enthalten, der die Verbindung zum Datenbanksystem bzw. zum Java-Application-Server (JAS) herstellt.

zum Inhaltsverzeichnis