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

Tutorial: Programmierung mit dem JS-FCF 

Tutorial:
JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01)) –
Client-Side BO-Set Klasse für eine Liste mit 'ProjectLanguage' Business-Objects

* 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-05-28


Voraussetzungen für das Verständnis dieses Dokuments:

Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen).
Grundkenntnisse der SQL-Kommandos für relationale Datenbanksysteme.

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 Client-Seitige Klasse für eine Liste mit Business-Objects (BO) der Klasse 'ProjectLanguage' implementiert.
Sie wird auf der Client-Seite einer Geschäftsanwendung implementiert.
Diese Klasse wird allgemein als BOC (Business-Object-Client) bezeichnet.
Sie transferiert die Werte aus den Variablen des BO von/zu GUI-Elementen für die Anzeige und steuert das Selektieren von Daten durch den Aufruf von Methoden eines Objektes der zugeordneten Server-Side 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.
Eine detailliertere Beschreibung der Aufgabe einer Client-Side BO Klasse finden Sie im Dokument
Business-Object – Client-Side Class (Klasse für die Client-Programme).

Als Besonderheit der Klasse sind Methoden implementiert, die die 'rohen' Daten aus den BO in der Liste formatieren und in eine Matrix übertragen.
Die 'Spalten' der Matrix sind mit symbolischen Namen versehen und über diese symbolischen Namen kann die Anzeige der Liste der Daten über die SML-Struktur in der Datei 'DisplayStrings.xml' gesteuert werden.

Inhaltsverzeichnis:

Voriger Schritt: Server-Side BO-Set Klasse für eine Liste mit 'ProjectLanguage' Business-Objects 

Vorbemerkung 
Vorbedingungen 

BOC-Set-Klasse eröffnen 
Code für die BOC-Set-Klasse 
* Von Basisklasse erben 
* Importieren der Bibliotheken 
* Konstante Werte für die symbolischen Namen der formatierten Daten 
* Variablen der Klasse 
* Constructor-Methode 
* Methode zum Selektieren der Daten 
* Methode zum Aufbau der Matrix mit den formatierten Daten 
* Methode zum Anzeigen der formatierten Daten 

Gesamter Code am Ende des Schrittes 
Klasse
JS_ProjAssist_ProjectLanguage_BOC_Set 

Weitere Schritte und verwandte Dokumentation 

Nächster Schritt: Liste der Daten anzeigen und zur Bearbeitung auswählen 

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.



zum Inhaltsverzeichnis

Vorbedingungen:

Überblicks-Kenntnisse über die theoretschen Grundlagen aus den Dokumenten Business-Object – Überblick über die Funktion zum Abfragen und Speichern von Daten, Business-Object – Realisierung mit Java-Klassen und Business-Object – Client-Side Class (Klasse für die Client-Programme).

zum Inhaltsverzeichnis

BOC-Set-Klasse eröffnen

Diese Klasse wird im gleichen Java-Package erstellt wie die Client-Seitige BO-Klasse.

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 BOC-Set-Klasse

Der Code für die BOC-Klasse folgt dem Schema wie es unter Business-Object – Server-Side Class (Klasse für die Programme auf dem Server) vorgestellt wurde.

Der gesamte Code ist unter Klasse JS_ProjAssist_ProjectLanguage_BOC_Set 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.boc;
. . . . . . . .
. . . . . . . .

/*
 * Package mit gerbten Generellen Klassen für BO und BO-Set. */

import js_projassist.bo.*;
. . . . . . . .
. . . . . . . .

public class JS_ProjAssist_ProjectLanguage_BOC_Set extends JS_ProjAssist_ProjectLanguage_BO_Set {
/*

Der 'Vector' für die Liste der BO und eine Methode zum Kopieren der Liste sind in der General BO-Set Klasse mit einer Liste für 'ProjectLanguage' Business-Objects 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

Die zu importierenden Bibliotheken sind weitest gehend identisch mit den Bibliotheken für die Klasse JS_ProjAssist_ProjectLanguage_BOC.
Bitte lesen sie in der dortigen Beschreibung
Importieren der Bibliotheken nach oder beachten Sie den Kommentar beim betreffenden Code.

zum Inhaltsverzeichnis

Konstante Werte für die symbolischen Namen der formatierten Daten

/* */
public class JS_ProjAssist_ProjectLanguage_BOC_Set extends JS_ProjAssist_ProjectLanguage_BO_Set {
/* ---------------------
 * KONSTANTE für die symbolischen Namen der 'Spalten' in der Matrix der formatierten Daten.
 * ---------------------
 * Diese symbolischen Namen werden in der Methode 'buildRawDataVector' verwendet.
 * Über XML-Parameter in der Datei 'DisplayStrings.xml' wird damit die Anordnung der
 * Spalten für die Auswahl-Tabelle gesteuert. */

    
public static final String CONST_ColumnName_LanguageCode = "LanguageCode";
    
public static final String CONST_ColumnName_ProjectCode = "ProjectCode";
    
public static final String CONST_ColumnName_TargetDirectory = "TargetDirectory";
/* ---------------------

Als Vorbereitung für eine variable Anzeige verschiedener Werte in einer Tabelle wird für jede anzuzeigende Variable des BO ein symbolischer Wert festgelegt.

Diese symbolischen Namen werden verwendet, um beim Aufbau der Matrix mit den formatierten Daten (siehe Methode zum Aufbau der Matrix mit den formatierten Daten) die Werte der einzelnen Spalten zu kennzeichnen.

In der Methode zur Anzeige der Daten in einem GUI-Element vom Typ 'JTable' (siehe Methode zum Anzeigen der formatierten Daten) wird dann die passende Methode der Basisklasse JSBS_XML_DisplayStrings aufgerufen. Diese liest die Formatierungsinformation aus der XML-Struktur in der sprach-abhängigen Datei 'DisplayStrings.xml' (Beschreibung im Dokument Datei 'DisplayStrings.xml' mit sprachabhängigen Texten für die Anzeige auf der GUI) und ordnet die Spalten entsprechend der Formatierungsinformation an.

zum Inhaltsverzeichnis

Variablen der Klasse

Neben dem Vector für die Liste mit den BO aus der Basisklasse JSBS_BO, die über die Generelle Klasse für eine Liste mit BO geerbt wurde (siehe Tutorial: JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – General BO-Set Klasse für eine Liste mit 'ProjectLanguage' Business-Objects > Von Basisklasse erben), wird nur eine Variable definiert, die die Referenz auf das Task-Frame enthält, die diese BOC-Klasse 'konstruiert' hat.
Im referenzierten Task-Frame ist festgelegt, ob der Zugriff auf die persistenten Daten 'lokal' ober über einen EJB-Mechanismus über den Java-Application-Server (JAS) erfolgen soll.

Für diesen Schritt des Tutorial ist der 'lokale' Zugriff beschrieben.

zum Inhaltsverzeichnis

Constructor-Methode

Die Methode ist gleich wie bei der Client-Side Klasse für das BO und wurde schon im Dokument Tutorial: JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – Client-Side BO (Business-Object) Klasse für 'ProjectLanguage' > Constructor-Methoden beschrieben.

Bitte lesen Sie die Kommentare im Code für eine genauere Erklärung des Zwecks der jeweiligen Methode.

zum Inhaltsverzeichnis

Methode zum Selektieren der Daten

Diese Methode wurde schon im Dokument Tutorial: JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – Client-Side BO (Business-Object) Klasse für 'ProjectLanguage' > Methoden zum Speichern und Selektieren der Daten beschrieben.

Dieser Mechanismus ist aber wesentlich für das Verständnis des JavaScout Fat-Client-Frameworks (JS-FCF) und wird deswegen noch einmal detailliert beschrieben.

zum Inhaltsverzeichnis

Methode zum Aufbau der Matrix mit den formatierten Daten

Um die Anordnung der Spalten nicht fix bei der Programmierung festlegen zu müssen ist in der Basisklasse JSBS_XML_DisplayStrings die Methode processJTable(...) enthalten.
Ein Parameter für diese Methode ist eine Matrix, die aus Variablen des Java-Typs 'Vector' besteht und die anzuzeigenden Daten als Java-Typ 'String' formatiert enthält.
Die Anordnung der Spalten wird von der Methode
processJTable(...) aus der Datei 'DisplayStrings.xml' ausgelesen.

zum Inhaltsverzeichnis

Methode zum Anzeigen der formatierten Daten

In dieser Methode werden die Daten in einer 'JTable' angezeigt.
Die Anordnung der Spalten ist in der sprach-abhängigen Datei 'DisplayStrings.xml' (Beschreibung im Dokument
Datei 'DisplayStrings.xml' mit sprachabhängigen Texten für die Anzeige auf der GUI) festgelegt. Die XML-Struktur aus dieser Datei wurde beim Starten des Programms in das Start-Frame übernommen und die Informationen über die Anordnung der Spalten wird von der Methode processJTable(...) abgerufen.

zum Inhaltsverzeichnis

Gesamter Code am Ende des Schrittes

Klasse JS_ProjAssist_ProjectLanguage_BOC_Set

package js_projassist.boc;
/*
 * Package mit der Bibliothek für den Vector, der für den Aufbau der Liste mit den formatierten
 * Daten benötigt wird. */

import java.util.*;
/*
 * Package mit der Bibliothek der GUI-Elemente. */

import javax.swing.*;
/*
 * Package mit der Basisklasse für Start- und Task-Frame. */

import js_base.frame.*;
/*
 * Package mit der Basisklasse für die Formattierung von Werten. */

import js_base.utilities.JSBS_Formatter;
/*
 * Packages mit den zugehörigen Klassen (Generelle Klasse und Server-Side-Klasse) dieses BO. */

import js_projassist.bo.*;
import js_projassist.bos.JS_ProjAssist_ProjectLanguage_BOS_Set;
/* */
public class JS_ProjAssist_ProjectLanguage_BOC_Set extends JS_ProjAssist_ProjectLanguage_BO_Set {
/* ---------------------
 * KONSTANTE für die symbolischen Namen der 'Spalten' in der Matrix der formatierten Daten.
 * ---------------------
 * Diese symbolischen Namen werden in der Methode 'buildRawDataVector' verwendet.
 * Über XML-Parameter in der Datei 'DisplayStrings.xml' wird damit die Anordnung der
 * Spalten für die Auswahl-Tabelle gesteuert. */

    
public static final String CONST_ColumnName_LanguageCode = "LanguageCode";
    
public static final String CONST_ColumnName_ProjectCode = "ProjectCode";
    
public static final String CONST_ColumnName_TargetDirectory = "TargetDirectory";
/* ---------------------
 * VARIABLE dieser Klasse.
 * ---------------------
 * Einzige Variable ist eine Referenz auf das Task-Frame, das das Objekt dieser Klasse
 * 'konstruiert' hat.
 * Über diese Referenz werden jene Parameter abgefragt, die bestimmen, ob der zugehörige
 * Server-Side Teil des BO direkt 'konstruiert' werden soll (bei einer StandAlone / Einzelplatz-
 * Version) oder ein EJB (Enterprise-Java_Bean) aufgerufen werden muß (bei einer
 * Client/Server-Version). */

    
private JSBS_TaskFrame frmTask = null;
/* ---------------------
 * CONSTRUCTOR-METHODE */

/* ---------------------
 * Als Parameter des 'Constructors' ist das aufrufende Task-Frame erforderlich. */

    
public JS_ProjAssist_ProjectLanguage_BOC_Set(JSBS_TaskFrame parmfrmTask) {
/*
 * Das im Parameter übergebenen JSBS_TaskFrame wird in der Variablen dieser Klasse
 * 'aufgehoben'. */
      frmTask = parmfrmTask;
    }

/* ---------------------
 * METHODEN zum Aufrufen der Geschäfts-spezifischen Datenbank-Operationen.
 * Für dieses Tutorial wird nur jener Code impementiert, der den Server-Side-Teil des BO
 * direkt in diesem Client-Side-Teil verwendet.
 * 
 * Die Client/Server-Version mit der Verwendung von EJB (Enterprise Java Beans) auf einem
 * JAS (Java Application Server) folgt in einem späteren Schritt des Tutorials. */

/* ---------------------
 * METHODE zum Selektieren aller BO die zum aktuellen Zeitpunkt gültig sind. */

    
public void selectAllProjectLanguageCombinations() {
/*
 * Entscheiden, ob diese Application als Einzelplatz-Version (StandAlone) oder
 * Client/Server-Version (FatClient) implementiert ist. */

      
switch (frmTask.frmCC.RunVersion) {
      case JSBS_StartFrame.CONST_StandAlone:
/*
 * Einzelplatz-Version bzw. Datenbank-Zugriff über TCP/IP-Netzwerk.
 * Server-Side-BO-Set 'konstruieren'. */

        JS_ProjAssist_ProjectLanguage_BOS_Set bos_BO_Set =
          
new JS_ProjAssist_ProjectLanguage_BOS_Set(frmTask.structMinParm,
                                                
frmTask.frmCC.structJSBS_DB_ConnectionManager);
/*
 * Methode zum Selektieren der Werte aufrufen. */

        bos_BO_Set.
selectAllProjectLanguageCombinations();
/*
 * Neue Werte des BOS wieder in dieses BOC übertragen.
 * Damit sind geschäfts-spezifiesche Attribute, Common-Attributes, Status-Code
 * und Status-Message in diesem BOC verfügbar. */

        copyFromJS_ProjAssist_ProjectLanguage_BO_Set(bos_BO_Set);
        
break;
/* */
      
case JSBS_StartFrame.CONST_FatClient:
/*
 * Client-Server-Version mit Aufruf des EJB wird in einem späteren Schritt implementiert. */

        
break;
      }

/*
 * Methode aufrufen, die die Matrix mit den formatierten Daten erstellt. */

      buildRawDataVector();
    }

/* ---------------------
 * METHODE zum Aufbau der Matrix mit den formatierten Daten.
 * ---------------------
 * In dieser Matrix sind in der ersten Zeile die symbolischen Spalten-Namen enthalten.
 * Über XML-Parameter in der Datei 'DisplayStrings.xml' wird damit die Anordnung der
 * Spalten für die Auswahl-Tabelle gesteuert.
 * Die 'Matrix' besteht aus einem 'Vector' der für jede Zeile wieder einen 'Vector'
 * mit den Daten für die Spalten enthält.
 * In der ersten 'Reihe' der Matrix sind die symbolischen Spaltennamen enthalten. */

    
public void buildRawDataVector() {
/*
 * Vector für die Zeilen leeren; dieser Vector ist in der geerbten Basisklasse definiert. */

      
vecRawDisplayData.removeAllElements();
/*
 * Neuen 'Vector' für die erste Zeile 'konstruieren'; diese Zeile enthält die
 * symbolischen Namen für die Spalten. */

      
Vector vecHeader = new Vector();
/* Die Konstante für die Zeilen-Nummer ist in der geerbten Basisklasse definiert. */
      vecHeader.addElement(CONST_ColumnName_RowNr);
      vecHeader.addElement(CONST_ColumnName_ProjectCode);
      vecHeader.addElement(CONST_ColumnName_LanguageCode);
      vecHeader.addElement(CONST_ColumnName_TargetDirectory);
/* Die gerade erstellte 'Zeile' einfügen. */
      
vecRawDisplayData.addElement(vecHeader);
/*
 * In einer for-Schleife die Daten dieses BO-Set in die Matrix einfügen. */

      
int locintVectorIndex;
      
int locintVectorSize = vecRecordSet.size();
      
for (locintVectorIndex = 0; locintVectorIndex < locintVectorSize; locintVectorIndex++) {
/*
 * Neuen 'Vector' für die Zeile 'konstruieren'. */

        
Vector vecData = new Vector();
/* Die Zeilennummer formatieren und als Spalte einfügen. */
        String locstrRowNumber = JSBS_Formatter.toFormattedString(locintVectorIndex + 1, 3);
        vecData.addElement(locstrRowNumber);

/*
 * Das indizierte BO aus der Liste mit den (von der Datenbank gelesenen) BO 'herauslösen'.
 * Die Werte werden auf ein neu 'konstruiertes' BO kopiert weil innerhalb des Vector
 * nur mit Referenzen gearbeitet wird und deswegen ein Objekt, auf das der Vector 'zeigen'
 * kann, notwendig ist. */

        
JS_ProjAssist_ProjectLanguage_BO tmpJS_ProjAssist_ProjectLanguage_BO =
            
new JS_ProjAssist_ProjectLanguage_BO();
        
tmpJS_ProjAssist_ProjectLanguage_BO.copyFromJS_ProjAssist_ProjectLanguage_BO(
            (JS_ProjAssist_ProjectLanguage_BO)
vecRecordSet.elementAt(locintVectorIndex));
/*
 * Werte der Variablen aus dem 'herausgelösten' BO in den 'Matrix'-Vector einfügen.
 * Weil in diesem Tutorial nur mit 'Strings' gearbeitet wird ist keine Formatierung notwendig. */

        vecData.addElement(tmpJS_ProjAssist_ProjectLanguage_BO.
ProjectCode);
        vecData.addElement(tmpJS_ProjAssist_ProjectLanguage_BO.
LanguageCode);
        vecData.addElement(tmpJS_ProjAssist_ProjectLanguage_BO.
TargetDirectory);
/* 
 * Die gerade erstellte 'Zeile' einfügen. */

        
vecRawDisplayData.addElement(vecData);
      }
    }

/* ---------------------
 * METHODE zum Anzeigen der Werte aus diesem BO in einem GUI-Element vom Typ JTable. */

/* ---------------------
 * Diese Methode verwendet eine Methode der Basisklasse 'JSBS_XML_DisplayStrings'
 * um ein GUI-Element vom Typ 'JTable' mit den Daten zu füllen.
 * Im Parameter 'parmArrayColumnWidth' wird eine Information über die Spaltenbreite
 * übergeben. */

    
public void setToGUI(JTable parmJTable,
                         String[] parmArrayColumnWidth)
{
/*
 * Namen der Klasse des Task-Frames ermitteln. */

      
String strFrameClassName = frmTask.getClass().getName();
/*
 * Methode, die in der Klasse für die DisplayStrings implementiert ist aufrufen. */

      
frmTask.frmCC.structJSBS_XML_DisplayStrings.processJTable(
            parmJTable,
            strFrameClassName,
            
vecRawDisplayData,
            parmArrayColumnWidth
);
    }

}

zum Inhaltsverzeichnis

Weitere Schritte und verwandte Dokumentation

Dokument

Inhalt

Tutorial: JavaScout ProjectAssist, Task-Frame Grundlagen (Java_Fatclient_01) – Liste der Daten anzeigen und zur Bearbeitung auswählen  

Im nächsten Schritt des Tutorials wird vorgestellt, wie die bereits erfaßten Datensätze in einer Liste angezeigt werden. Aus dieser Liste kann ein Datensatz ausgewählt und weiter bearbeitet werden.

zum Inhaltsverzeichnis