This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

--Automatische Auswahllisten aufgrund des DB Modells

Dokumente für die Entwicklung von und mit JVx.

--Automatische Auswahllisten aufgrund des DB Modells

Postby Development@SIB » Tue Dec 01, 2009 2:55 pm



Dieser Artikel ist veraltet - Bitte verwenden Sie unser neues System

https://doc.sibvisions.com





Eine der aufwändigsten Aufgaben bei der Erstellung von Applikationen ist die Definition von Auswahllisten. Diese verursachen sehr viel Source Code und der Entwickler verschwendet wertvolle Zeit die er bei komplexeren Aufgaben gut gebrauchen könnte.

Im Prinzip können Auswahllisten für Datenbankapplikationen größtenteils automatisch erstellt werden, sofern das zugrundeliegende Datenmodell sauber designed wurde, sprich PKs, UKs, FKs vorhanden sind.

Aufgrund der Beziehungen zwischen den Tabellen übernimmt JVx, auf Wunsch, die Erstellung der Auswahllisten.


Anwendungsbeispiel

Als Anwendungsbeispiel nehmen wir die Kontaktverwaltung aus dem Showcase. Zu jedem Kontakt werden Anrede, Titel, Ort und Versicherung erfasst. Das Datenmodell sieht wie folgt aus:

contacts.png
contacts.png (8.18 KiB) Viewed 4639 times

Als Auswahllisten sollen Ort, Anrede, Titel und Versicherung angeboten werden.

Für gewöhnlich würden wir pro Tabelle in der Datenbank auch eine DBStorage benötigen. Wir benötigen jedoch nur eine einzige! In unserem Lifecycle Objekt am Server definieren wir also nur noch:

Code: Select all
/**
 * Returns the contacts storage.
 *
 * @return the Contacts storage
 * @throws Exception if the initialization throws an error
 */
public DBStorage getContacts() throws Exception
{
   if (dbsContacts == null)
   {
      dbsContacts = new DBStorage();
      dbsContacts.setDBAccess(getDBAccess());
      dbsContacts.setWritebackTable("CONTACTS");
      dbsContacts.setAutoLinkReference(true);
      dbsContacts.open();      
   }
   
   return dbsContacts;
}

Der Befehl

Code: Select all
setAutoLinkReference(true);

aktiviert die automatische Erkennung von Auswahllisten. Hierbei ist anzumerken das mit dem Befehl:

Code: Select all
DBStorage.setDefaultAutoLinkReference(false);

die automatische Erkennung generell akt-/deaktiviert werden kann.
Die Option ist bereits Standardmässig aktiviert!


Am Client benötigen wir folglich auch nur noch ein einziges RemoteDataBook:

Code: Select all
RemoteDataBook rdbContacts = new RemoteDataBook();

rdbContacts.setDataSource(dataSource);
rdbContacts.setName("contacts");
rdbContacts.open();


Die Auswahllisten werden automatisch erstellt und zugewiesen. Der Entwickler muss nur mehr eingreifen, wenn die Spalten die in den Auswahllisten angeboten werden, nicht den gewünschten entsprechen.


Auswahllisten konfigurieren

Die Spalten, die in den automatisch erstellten Auswahllisten angezeigt werden unterliegen folgenden Regeln:

Angezeigt werden PK und UK Spalten bzw. wenn keine UKs vorhanden sind, werden alle Spalten der Tabelle angezeigt.

Im Ausgangs DBStorage wird automatisch eine neue Spalte eingefügt. Diese Spalte wird aus der Auswahl-Tabelle ermittelt und entspricht der ersten Text Spalte.

Um die Spalten der Auswahllisten einzuschränken ist es also ausreichend einen UK in der Auswahl-Tabelle zu definieren. Sollte dies nicht ausreichen, besteht weiters die Möglichkeit die Auswahlliste manuell zu hinterlegen:

Code: Select all
/**
 * Returns the contacts storage.
 *
 * @return the Contacts storage
 * @throws Exception if the initialization throws an error
 */
public DBStorage getContacts() throws Exception
{
   if (dbsContacts == null)
   {
      dbsContacts = new DBStorage();
      dbsContacts.setDBAccess(getDBAccess());
      dbsContacts.setFromClause("V_CONTACTS");
      dbsContacts.setWritebackTable("CONTACTS");
      dbsContacts.setAutoLinkReference(true);
      dbsContacts.open();
      
      dbsContacts.getMetaData().getColumnMetaData("COUNTRY").setLinkReference(
         new StorageReferenceDefinition(new String[] {"CTRY_ID", "COUNTRY"},
                                        "countries",
                                        new String[] {"ID", "COUNTRY"}));

      //another way to set a link reference, for more than one column: CTRY_ID, COUNTRY
      dbsContacts.createAutomaticLinkReference(new String[] {"CTRY_ID", "COUNTRY"},
                                               getCountries(),
                                               new String[] {"ID", "COUNTRY"});
   }
   
   return dbsContacts;
}

/**
 * Returns the countries storage.
 *
 * @return the Countries storage
 * @throws Exception if the initialization throws an error
 */
public DBStorage getCountries() throws Exception
{
...
}


Bei der manuellen Definition von Auswahllisten muss beachtet werden, daß die Referenzspalten ebenfalls manuell definiert werden müssen. Aus diesem Grund verwenden wir eine Datenbank-View für die Selektion der Daten. Diese View beinhaltet das Feld COUNTRY. Das Feld ist in unserer Ausgangstabelle nicht enthalten, soll aber am Client als Auswahlliste angeboten werden!


Hinweis

Die Verwendung von automatischen Auswahllisten ist nur bei direktem Gebrauch von Tabellen zu empfehlen, da mit Datenbank-Views die Erkennung der Beziehungen (noch) nicht möglich ist. Verwendet man dennoch die manuelle Definition der Auswahllisten, so entfällt zumindest die Definition der Auswahllisten am Client und spart etwas Zeit.
User avatar
Development@SIB
 
Posts: 325
Joined: Mon Sep 28, 2009 1:54 pm

Return to Documentation (DE)