> Inhalt: JavaScout-Fat-Client-Framework (JS-FCF) 

Tutorial: Programmierung mit dem JS-FCF 

Tutorial:
JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) –
General BO (Business-Object) Klasse für 'ProjectLanguage'

* 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, daß 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:
2008-04-18


Voraussetzungen für das Verständnis dieses Dokuments:

Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen).

Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:

Arbeitszeit:
Ca. 20 bis 60 Minuten; abhängig von der bei den vorigen Beispielen erworbenen Routine
.

In diesem Dokument wird die Generelle Klasse für das Business-Object (BO) 'ProjectLanguage' implementiert.
Dieses BO umfaßt die Daten für eine Kombination aus Project und Sprache.
Eine detaillierte Beschreibung der Attribute finden Sie im Abschnitt
Variablen der Klasse.

Einen Überblick über die verschiedenen Klassen zur Verwaltung von persistenten Daten finden Sie im Dokument Business-Object – Überblick über die Funktion zum Abfragen und Speichern von Daten.

Einen Überblick über die Aufteilung der Daten und Funktionalitäten eines BO in verschiedene Klassen finden Sie im Dokument Business-Object – Realisierung mit Java-Klassen.
Eine detailliertere Beschreibung der Aufgabe einer Generellen BO-Klasse finden Sie im Dokument
Business-Object – General Class (Generelle Klasse).

Inhaltsverzeichnis:

Voriger Schritt: DataBase-Access (DBA) Klasse für 'ProjLang' 

Vorbemerkung 
Vorbedingungen 
Generelle BO-Klasse eröffnen 
Code für die Generelle BO-Klasse 
* Von Basisklasse erben 
* Importieren der Bibliotheken 
* Variablen der Klasse 
* Methode zum Kopieren der Werte eines Objektes der gleichen Klasse 
* Methode zum Vergleichen der Werte eines Objektes der gleichen Klasse 
* Methode zum Übertragen der Werte von einem Objekt der zugehörigen DBA-Klasse 
Gesamter Code am Ende des Schrittes 
* Klasse
JS_ProjAssist_ProjectLangugae_BO 
Weitere Schritte und verwandte Dokumentation 

Nächster Schritt: Server-Side BO (Business-Object) Klasse für 'ProjectLanguage' 

Vorbemerkung

Obwohl Eclipse in 'deutscher Version' installiert werden kann, sind die Abbildungen in diesem Dokument mit der 'english Version' erstellt.
Grund ist, daß zum Zeitpunkt der Erstellung dieses Dokumentes (Oktober 2007) die Eclipse-Texte nur sehr unvollständig ins Deutsche übersetzt sind.
Damit ist (meiner Meinung nach)
1.) Eclipse in deutscher Version wesentlich schwerer verständlich als in englischer Version und
2.) wenn Eclipse weiter übersetzt wird, ist dieses Dokument stark abweichend von den dann vorhandenen deutschen Texten.


Für die 'Massenproduktion' von Generellen Klassen für BO wurde ein Muster-Code entwickelt, aus dem durch Ersetzen von 'Platzhaltern' einfach und vor allem schnell bedarfsgerechte BO-Klassen implementiert werden können.
Der Muster-Code und die Anleitungen zur Adaption sind im Dokument
Muster-Code für ein BO (Generelle Klasse für ein Business-Object) beschrieben.
Der in diesem Tutorial vorgestellte Code folgt der Struktur des Muster-Codes – dadurch wird das Verstehen und Adaptieren leichter.

zum Inhaltsverzeichnis

Vorbedingungen:

zum Inhaltsverzeichnis

Generelle BO-Klasse eröffnen

Diese Klasse wird in einem eigenen Java-Package erstellt. Das Java-Package wird bei der Erstellung der Klasse definiert.

Das Erstellen einer neuen Klasse wurde bereits mehrmals im Detail und mit Abbildungen beschrieben.
Aus diesem Grund wird er Vorgang nur mehr in Stichworten beschrieben.
Wenn sie unsicher sind, nehmen Sie bitte die ausführliche Anleitung unter
JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – DataBase-Access (DBA) Klasse für DB-Tabelle 'ProjLang' > DBA-Klasse eröffnen als Richtlinie.

zum Inhaltsverzeichnis

Code für die Generelle BO-Klasse

Der Code für die Generelle BO-Klasse folgt dem Schema wie es unter Business-Object – General Class (Generelle Klasse) vorgestellt wurde.

Der gesamte Code ist unter Klasse JS_ProjAssist_ProjectLangugae_BO gelistet und mit Kommentaren versehen.
Aus diesem Grund wird anschließend der Code nicht mehr im Gesamten wiederholt sondern nur mehr Erläuterungen gegeben.

zum Inhaltsverzeichnis

Von Basisklasse erben

package js_projassist.bo;
/*
 * Package mit der Basisklasse für ein Business Objekt. */

import js_base.bo.JSBS_BO;
. . . . . . . .
. . . . . . . .

public class JS_ProjAssist_ProjectLanguage_BO extends JSBS_BO {
/*

Variablen für die Common Attributes und Methoden um die Werte der Common Attributes zu Kopieren und zu Vergleichen sind in der Basisklasse JSBS_BO definiert.
Mit den obigen Anweisungen wird die Bibliothek, in der diese Klasse enthalten ist, importiert und von dieser Klasse 'geerbt'.

zum Inhaltsverzeichnis

Importieren der Bibliotheken

package js_projassist.bo;
/*
 * Package mit der Basisklasse für ein Business Objekt. */

import js_base.bo.JSBS_BO;
/* Package mit der Klasse für das DBA- (DataBase-Access-) Objekt. */
import js_projassist.dba.*;
/* */
public class JS_ProjAssist_ProjectLanguage_BO extends JSBS_BO {
/*

Neben der schon beschriebenen Bibliothek mit der Basisklasse werden nur eine weitere Bibliothek aus dem aktuellen Project benötigt.

zum Inhaltsverzeichnis

Variablen der Klasse

. . . . . . . .
. . . . . . . .

/* */
public class JS_ProjAssist_ProjectLanguage_BO extends JSBS_BO {
/*
 * VARIABLE dieses Business-Object.
 * --------------------- */

/* Projekt-Code; das ist die eindeutige Identifikation für ein Projekt. */
    
public String ProjectCode;
/* Sprach-Code; das ist der gewählte ISO-Sprach-Code für die sprachabhängigen Texte. */
    
public String LanguageCode;
/* Name des Ziel-Verzeichnisses in dessen Unterverzeichnisse die
 * generierten XML-Dateien gespeichert werden. */

    
public String TargetDirectory;
/*
 * METHODEN */

/* ---------------------
. . . . . . . .
. . . . . . . .

Die Variablen in der BO-Klasse reflektieren die Geschäfts-spezifischen Aufgaben des Business-Object.

zum Inhaltsverzeichnis

Methode zum Kopieren der Werte eines Objektes der gleichen Klasse

Diese Methode wird insbesondere dann benötigt, wenn die Daten zwischen 'Client-Side' und 'Server-Side' übertragen werden müssen.

. . . . . . . .
. . . . . . . .

/*
 * METHODEN */

/* ---------------------
 * METHODE zum Kopieren der Attribute eines anderen Objekts dieser Klasse. */

    
public void copyFromJS_ProjAssist_ProjectLanguage_BO(
                  JS_ProjAssist_ProjectLanguage_BO parmJS_ProjAssist_ProjectLanguage_BO)
{
/*
 * Aufruf der Methode der Superklasse um die 'Common Attributes', den Status-Code
 * und die (eventuelle) Fehler-Meldung zu kopieren. */

      
super.getJSBS_BO(parmJS_ProjAssist_ProjectLanguage_BO);
/* 
 * Spezifische Werte für dieses BO übertragen. */
      this.ProjectCode = parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode;
      this.LanguageCode = parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode;
      this.TargetDirectory = parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory;
    }

. . . . . . . .
. . . . . . . .

zum Inhaltsverzeichnis

Methode zum Vergleichen der Werte eines Objektes der gleichen Klasse

Der Vergleich beschränkt sich auf die Geschäfts-spezifischen Variablen – nicht auf die Common Attributes.
Diese Methode wird hauptsächlich verwendet um festzustellen, ob eine Änderung durch die Eingabe des Anwenders erfolgt ist.

. . . . . . . .
. . . . . . . .

/* ---------------------
 * METHODE zum Vergleichen der Werte der speziellen Variablen
 * zweier Business-Object dieser Klasse.
 * Die Methode liefert 'true' zurück wenn mindestens die Werte einer Variablen
 * verschieden sind. */

    
public boolean isDifferent(
                    JS_ProjAssist_ProjectLanguage_BO parmJS_ProjAssist_ProjectLanguage_BO)
{
/* 
 * Werte der spezifischen Variablen dieser BO-Klasse vergleichen. */

/* Zuerst prüfen, ob eine der beiden Variablen 'null' ist. */
      
if ((this.ProjectCode == null) || (parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode == null)) {
/* Prüfen, ob beide Variablen 'null' sind. Dann wäre der Vergleich erfüllt. */
        
if ((this.ProjectCode == null) && (parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode == null)) {
/* Beide Variablen 'null'; Vergleich erfüllt. */
        }
        
else {
/* Es kann logischerweise nur eine Variable 'null' sein; der Vergleich ist nicht erfüllt. */
          
return true;
        }
      }
      
else {
/* Keiner der beiden Variablen ist 'null'; Werte der Variablen vergleichen. */
        
if (this.ProjectCode.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.ProjectCode) != 0) return true;
      }
/* *** */
      
if ((this.LanguageCode == null) || (parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode == null)) {
        
if ((this.LanguageCode == null) && (parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode == null)) { }
        
else return true;
      }
      
else {
        
if (this.LanguageCode.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.LanguageCode) != 0) return true;
      }
/* *** */
      
if ((this.TargetDirectory == null) || (parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory == null)) {
        
if ((this.TargetDirectory == null) && (parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory == null)) { }
        
else return true;
      }
      
else {
        
if (this.TargetDirectory.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.TargetDirectory) != 0) return true;
      }
/* Alle Variablen haben gleiche Werte – BO sind nicht verschieden. */
      
return false;
    }

. . . . . . . .
. . . . . . . .

Der Vergleich wirkt auf den ersten Blick kompliziert und schießt scheinbar über das Ziel hinaus.
Es wird im Code aber gleich berücksichtigt, daß die Variablen auch
null sein können (also noch keinen Wert zugewiesen haben).
Bei 'wirklichen' Aufgaben wird das in der überwiegenden Anzahl der Anforderungen auftreten. Deswegen wird in diesem Tutorial gleich der Code so erweitert, daß auch Variablen mit
null-Werten verglichen werden können.

zum Inhaltsverzeichnis

Methode zum Übertragen der Werte von einem Objekt der zugehörigen DBA-Klasse

Vorbemerkung:
In der Generellen Klasse eine Klasse für den Zugriff auf DB-Tabellen zu verwenden ist ein Bruch der Philosophie (Zugriff auf die Datenbank in der 'Server-Side' Klasse des BO) aber aus pragmatischen Gründen notwendig.
Die genaue Erklärung erfolgt im Schritt (noch zu dokumentieren) für das Selektieren eines Sets von BO.
Eine kurze Erklärung ist, daß die BO in einem Set vom Typ 'Generelle Klasse' sind.
Für das Anzeigen einer Liste der erfaßten Projekt-/Sprach-Kombinationen erfolgt (in einem späteren Schritt) das Lesen des Sets von Datensätzen von der DB-Tabelle in der Klasse 'JS_ProjAssist_ProjectLanguage_Set_
BOS' mit der Klasse 'JS_ProjAssist_ProjLang_Set_DBA'.
Gerade bei Datenbank-Zugriffen ist wichtig, keinen überflüssigen Code auszuführen und aus diesem Grund werden die Werte aus der DBA-Klasse direkt in die (Generelle) BO-Klasse übernommen ohne einen 'Umweg' über die (Server-Side) BOS-Klasse zu gehen.
Wenn Sie diese Erklärung jetzt noch nicht verstanden haben können Sie das Tutorial trotzdem ohne Bedenken fortsetzen ;-).

. . . . . . . .
. . . . . . . .

/* ---------------------
 * METHODE zum Übertragen der Werte der Variablen des zugehörigen DBA-Objekts. */

    
public void getDBAAttributes(JS_ProjAssist_ProjLang_DBA parmJS_ProjAssist_ProjLang_DBA) {
/*
 * Aufruf der Methode der Superklasse um die 'Common Attributes'
 * und die (eventuelle) Fehler-Meldung zu kopieren. */

      
super.getCommonDBAAttributes(parmJS_ProjAssist_ProjLang_DBA);
/* 
 * Spezifische Werte für dieses BO übertragen. */
      this.ProjectCode = parmJS_ProjAssist_ProjLang_DBA.ProjectCode;
      this.LanguageCode = parmJS_ProjAssist_ProjLang_DBA.LanguageCode;
      this.TargetDirectory = parmJS_ProjAssist_ProjLang_DBA.TargetDirectory;
    }
. . . . . . . .
. . . . . . . .

zum Inhaltsverzeichnis

Gesamter Code am Ende des Schrittes

Klasse JS_ProjAssist_ProjectLanguage_BO

package js_projassist.bo;
/*
 * Package mit der Basisklasse für ein Business Objekt. */

import js_base.bo.JSBS_BO;
/* Package mit der Klasse für das DBA- (DataBase-Access-) Objekt. */
import js_projassist.dba.*;
/* */
public class JS_ProjAssist_ProjectLanguage_BO extends JSBS_BO {
/*
 * VARIABLE dieses Business-Object.
 * --------------------- */

/* Projekt-Code; das ist die eindeutige Identifikation für ein Projekt. */
    
public String ProjectCode;
/* Sprach-Code; das ist der gewählte ISO-Sprach-Code für die sprachabhängigen Texte. */
    
public String LanguageCode;
/* Name des Ziel-Verzeichnisses in dessen Unterverzeichnisse die
 * generierten XML-Dateien gespeichert werden. */

    
public String TargetDirectory;
/*
 * METHODEN */

/* ---------------------
 * METHODE zum Kopieren der Attribute eines anderen Objekts dieser Klasse. */

    
public void copyFromJS_ProjAssist_ProjectLanguage_BO(
                  JS_ProjAssist_ProjectLanguage_BO parmJS_ProjAssist_ProjectLanguage_BO)
{
/*
 * Aufruf der Methode der Superklasse um die 'Common Attributes', den Status-Code
 * und die (eventuelle) Fehler-Meldung zu kopieren. */

      
super.getJSBS_BO(parmJS_ProjAssist_ProjectLanguage_BO);
/* 
 * Spezifische Werte für dieses BO übertragen. */
      this.ProjectCode = parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode;
      this.LanguageCode = parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode;
      this.TargetDirectory = parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory;
    }

/* ---------------------
 * METHODE zum Vergleichen der Werte der speziellen Variablen
 * zweier Business-Object dieser Klasse.
 * Die Methode liefert 'true' zurück wenn mindestens die Werte einer Variablen
 * verschieden sind. */

    
public boolean isDifferent(
                    JS_ProjAssist_ProjectLanguage_BO parmJS_ProjAssist_ProjectLanguage_BO)
{
/* 
 * Werte der spezifischen Variablen dieser BO-Klasse vergleichen. */

/* Zuerst prüfen, ob eine der beiden Variablen 'null' ist. */
      
if ((this.ProjectCode == null) || (parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode == null)) {
/* Prüfen, ob beide Variablen 'null' sind. Dann wäre der Vergleich erfüllt. */
        
if ((this.ProjectCode == null) && (parmJS_ProjAssist_ProjectLanguage_BO.ProjectCode == null)) {
/* Beide Variablen 'null'; Vergleich erfüllt. */
        }
        
else {
/* Es kann logischerweise nur eine Variable 'null' sein; der Vergleich ist nicht erfüllt. */
          
return true;
        }
      }
      
else {
/* Keiner der beiden Variablen ist 'null'; Werte der Variablen vergleichen. */
        
if (this.ProjectCode.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.ProjectCode) != 0) return true;
      }
/* *** */
      
if ((this.LanguageCode == null) || (parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode == null)) {
        
if ((this.LanguageCode == null) && (parmJS_ProjAssist_ProjectLanguage_BO.LanguageCode == null)) { }
        
else return true;
      }
      
else {
        
if (this.LanguageCode.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.LanguageCode) != 0) return true;
      }
/* *** */
      
if ((this.TargetDirectory == null) || (parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory == null)) {
        
if ((this.TargetDirectory == null) && (parmJS_ProjAssist_ProjectLanguage_BO.TargetDirectory == null)) { }
        
else return true;
      }
      
else {
        
if (this.TargetDirectory.compareTo(
              parmJS_ProjAssist_ProjectLanguage_BO
.TargetDirectory) != 0) return true;
      }
/* Alle Variablen haben gleiche Werte – BO sind nicht verschieden. */
      
return false;
    }

/* ---------------------
 * METHODE zum Übertragen der Werte der Variablen des zugehörigen DBA-Objekts. */

    
public void getDBAAttributes(JS_ProjAssist_ProjLang_DBA parmJS_ProjAssist_ProjLang_DBA) {
/*
 * Aufruf der Methode der Superklasse um die 'Common Attributes'
 * und die (eventuelle) Fehler-Meldung zu kopieren. */

      
super.getCommonDBAAttributes(parmJS_ProjAssist_ProjLang_DBA);
/* 
 * Spezifische Werte für dieses BO übertragen. */
      this.ProjectCode = parmJS_ProjAssist_ProjLang_DBA.ProjectCode;
      this.LanguageCode = parmJS_ProjAssist_ProjLang_DBA.LanguageCode;
      this.TargetDirectory = parmJS_ProjAssist_ProjLang_DBA.TargetDirectory;
    }
}

zum Inhaltsverzeichnis

Weitere Schritte und verwandte Dokumentation

Dokument

Inhalt

Tutorial: JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – Server-Side BO (Business-Object) Klasse für 'ProjectLanguage'  

Im nächsten Schritt des Tutorials wird die Server-Side Klasse des BO (Business-Object) für Projekt und Sprache implementiert.
Die Server-Side Klasse 'verwaltet' die Daten auf der DB-Tabelle durch das Ausführen der Methoden, die in der DBA-Klasse implementiert sind

Muster-Code für ein BO (Generelle Klasse für ein Business-Object) 

In diesem Dokument wird ein Muster-Code für ein BO vorgestellt und die durchzuführenden Adaptierungen beschrieben.

zum Inhaltsverzeichnis