Logo.CortexAG

Anmelden +

Anbindung fremder Datenquellen

Im Auslieferungszustand unterstüzt der ImPlex bereits die Quell Formate CSV, XML und CortexDB. In einigen Fällen ist es allerdings erforderlich eine völlig neue, fremde Datenquelle an den Implex anzubinden und so für den Datenimport zur Verfügung zu stellen. Zu diesem Zweck stellt der Implex ein abstrakte JAVA Klasse bereit, die implentiert werden muss. 

Diese abstrakte JAVA-Klasse bietet im Rahmen der Datenintegration den erheblichen Vorteil, dass keinerlei API-Kenntnisse der CortexDB notwendig sind. Dadurch sind JAVA-Kenntnisse ausreichend, um die formale Import-Syntax und die abstrakten Klassen anwenden zu können. Softwareentwickler können so eine "Standard-Konfiguration" erstellen und proprietäre Schnittstellen, wie auch SQL-Quellen anbinden.

Die Klasse besitzt den folgenden, grundlegenden Aufbau:

package de.cortexserver.refimp.reader;

[...]

public abstract class ReaderModul
{
[...]

abstract public void SetInternValue(String sType, String sValue) throws HREModuleException;
abstract public void Init() throws HREModuleException;
abstract public boolean first() throws HREModuleException;
abstract public boolean next() throws HREModuleException;

// Spezial
abstract public boolean jump(int iPos) throws HREModuleException;
abstract public void handleUnwrittenSet() throws HREModuleException;
abstract public String getRawLine();
abstract public long getInputDate();
abstract public int getProgress();

[...]
}

Die oben angegebene abstrakten Methoden müssen implentiert werden; allerdings sind nur die ersten vier von essenzieller Bedeutung. Die letzten fünf dienen hauptsächlich für Debugzwecke und werden zum reinen Datenimport nicht benötigt.

 

Hier eine kurze Beschreibung der Arbeitsweise der erforderlichen Methoden:

void SetInternValue(String sType, String sValue)

Über diese Methode übergibt der Implex die Steuerparameter aus dem "ReaderModul" Block der XML-Konfigurationsdatei. So können Sie ihrem Modul evtl. nötige Arbeitsparameter wie z.B. IP Adresse und Port einer Datenbank oder Dateinamen einer Quelldatei übergeben.

Dabei wird als Typ (String sType) der Bezeichner des XML Knotens und als Wert (String sValue) der Textinhalt des Knotens übergeben.

void Init()

Nachdem der Implex, alle Parameter aus der "ReaderModul" Konfiguration an die Methode SetInternValue übergeben hat, wird einmalig diese Init Methode aufgerufen. Hier besteht die möglichkeit einmalig notwendige Initialisierungen vorzunehmen, z.B. einen Datenbank Login herstellen oder eine Quelldatei öffnen

boolean first()

Nachdem die Initialisierung durchgeführt wurde, fordert der Implex ein einziges Mal über diese Methode einen Datensatz an. Häufig reicht es aus, wenn diese Methode nur die Methode next() aufruft, da selten eine Unterscheidung zwischen dem ersten Datensatz und den darauf folgenden Quelldatensätzen erforderlich ist.

Deshalb finden sie die Details zur übergabe eines Quelldatensatzes unter der Methode next().

 

boolean next()

Jeder weitere Datensatz, wird vom Reader über diese Methode angefordert. So lange diese Methode "true" als Wert zurückgibt, gibt es noch weitere Datensätze die eingelesen werden sollen. Wenn keine Datensätze mehr geladen werden können, muss hier "false" zurück gegeben werden.

 

Um einen Quelldatensatz für den Implex aufzubereiten, müssen die Daten in ein Objekt vom Typ Dataset geladen werden. Die erforderliche Instanz die befüllt werden muss, steht bereits unter dem Bezeichner "DATASET" in der abstrakten Klasse zur Verfügung.

 

In diesem Objekt kann eine XML ähnliche verschachtelte Struktur abgebildet werden. In dieser kann ein "Knoten" wie im XML Attribute und Subknoten haben. 

Details zur Befüllung diese Objektes finden Sie in dem folgenden Beispiel oder in der Beschreibung der "Beispiel Modul" Implentierung.

 

Um die Befüllung des DATASET Objektes zu veranschaulichen, dient unten aufgezeigtes Beispiel. In das Objekt wird ein Personendatensatz geladen werden, der aus dem Namen, Vornamen und  Adressdaten besteht. Dazu wird folgendes in der next() Methode implentiert.

@Override
public boolean next() throws HREModuleException
{
// erst den Namen eifügen
// -> in der Importdefinition ansprechbar über: getChar('NAME')
DatasetNode node = DATASET.addSubElement();
node.setName("NAME");
node.setValue("Mustermann", false);

// wir ergänzen den Knoten noch um ein Attribut
// -> in der Importdefinition ansprechbar über: getChar('NAME#id')
node.addAttribute("Id", "0815");

// Nun noch ein Knoten für den Vornamen
node = DATASET.addSubElement();
node.setName("Vorname");
node.setValue("Max", false);

// Die Adresse wollen wir hier zusammengefasst unter einem
// extra Knoten aufnhemen

// -> in der Importdefinition ansprechbar z.B.: getChar('Addresse.Ort')
node = DATASET.addSubElement();
node.setName("Adresse");
DatasetNode subNode = node.addSubElement();
subNode.setName("Strasse");
subNode.setValue("Tischlerstr.", false);
subNode = node.addSubElement();
subNode.setName("Plz");
subNode.setValue("30916", false);
subNode = node.addSubElement();
subNode.setName("Hausnummer");
subNode.setValue("1a", false);

return true;
}

 

Natürlich ist es nicht sinnvoll, immer wieder das Datensatz-Objekt mit dem gleichen festen Inhalt zu befüllen. An dieser Stelle ist von der Datenquelle abhängig, die geladenen Werte dynamisch in dieses Objekt zu laden.

 

 Hinweise zur Online-Hilfe
 

© 2017 Cortex AG
(letzte Aktualisierung: 12.04.2017)

 Haftungsausschluss 

Impressum    AGB