Zum Inhalt

Konfiguration

Aufrufparameter

Durch manuelle Anpassungen der Import-Konfigurationen können Sie auf erweiterte Funktionen und Einstellungen zugreifen.

  • Die Konfiguration erfolgt über XML-Dateien, die vom Implex gelesen und verarbeitet werden.
  • Der Aufruf erfolgt über die Aufrufparameter des Implex.
  • Für jede Quelle (CSV-, XML-Datei, Cortex-Cortex oder andere) müssen Sie eine separate Import-Konfigurationsdatei erstellen.
  • Innerhalb einer Konfiguration können mehrere Datensatztypen als Ziel definiert werden, so dass aus einer Quelle mehrere Datensätze entstehen können.

Import ohne Datenmodell

Ein Datenimport, ohne vorher ein Datenmodell zu konfigurieren, ist möglich. Die Nutzung im Uniplex wird dadurch allerdings erschwert, da keine Felder oder Datensatztypen definiert wurden. Die Konfiguration eines Datenmodells für den Uniplex wird daher empfohlen. Für individuelle Entwicklungen, ohne den Uniplex, kann darauf möglicherweise verzichtet werden. Die importierten Daten können dann nur mit eigenen Entwicklungen oder mit Hilfe der Anwendung CtxBrowser gefunden werden.

Aufrufparameter Implex.jar

Der Implex ist eine CLI-basierte Java-Anwendung, die manuell und über zeitgesteuerte Systemdienste aufgerufen werden kann. Nachfolgende Aufrufparameter stehen zur Verfügung.

Wichtig

Unter Windows-Systemen müssen innerhalb der Umgebungsvariablen die Einträge für das installierte Java angegeben sein.

Aufruf

java -jar Implex.jar [OPTIONEN] ... [DEFINITIONS_DATEI] ...

Optionen

Aufruf Beschreibung
-i, --import Nachfolgende Importdefinitionsdateien (XML) verwenden.
-l, --link Link-Definition auflösen.
-s, --simulate Aktion simulieren. Es werden keine Schreibvorgänge im Server ausgeführt.
-v, --verbose Alle Logmeldungen zusätzlich auf Konsole ausgeben.
-h, --help Diese Hilfe aufrufen.

Optionen für Experten

Aufruf Beschreibung
-e, --emulate schreibt bei einer Definition für den Modus Import, die interne Repräsentation des ersten gelesenen Datensatzes in eine Datei an und beendet dann das Programm (nur zur Entwicklung von Reader Modulen)
-d, --delay [ZAHL] Anzahl Datensätze, nach den immer eine Logmeldung ausgegeben werden soll (Standard: 200)
--server [IP:PORT] hier kann eine CortexEngine angegeben werden (Bsp.: 127.0.0.1:29000)
--source [DATEI] wenn das Lesemodul es zulässt, kann hier ein Quelldateiname angegeben werden (abhängig vom Lesemodul)
--getinfo [DATEI] liefert gefolgt von einem JSON-Dateinamen eine modulspezifische Information (Abhängig von Lesemodul)
--start [ZAHL] beginnt mit dem Import ab dem angegebenen Datensatz
--end [ZAHL] liest so viele Datensätze, wie angegeben

Es können beliebig viele Definitions-Dateien hintereinander angegeben werden und es können in beliebiger Reihenfolge mehrere Optionen angegeben werden (siehe Beispiel unter Aufruf)

Hinweis

  • Der Parameter -s (Simulation) wirkt sich global auf alle im Aufruf übergebenen Modi aus!
  • Die Parameter --start und --end funktionieren nur für CSV- und XML-Importe.

Java Aufrufparameter

Erfolgt der Aufruf manuell oder über ein Script, sollten Sie landesspezifische Parameter an Java übergeben. Zahlen, Währungen, Datums- und Zeitformate und Ähnliches können Sie damit korrekt importieren.

Der Java-Aufruf wird um folgende Angaben erweitert:

-Duser.country=DE -Duser.language=de

Der Aufruf umfasst vollständig die Jar-Datei des Implex und weitere Parameter. So können auch die Import- und Quelldatei übergeben werden:

java -jar -Duser.country=DE -Duser.language=de Implex.jar -i --server localhost:29000 --source www/Implex/sourceFile XML ./www/implex/Import-Config XML

Das Beispiel zeigt den Aufruf der Implex.jar mit zusätzlichen, landesspezifischen Java-Parametern und den Implex-Parametern für die Quell- und Import-Konfigurationsdatei.

Allgemeine Definitionen

Die Import-Konfiguration besteht aus drei Hauptbereichen: Global, ReaderModule und ImportSection, in denen die Sie die jeweiligen Einstellungen vornehmen.

  • Global:definiert den Zugriff auf die CortexEngine, in der Daten verändert werden sollen und generelle Arbeitsparameter für den Import
  • ReaderModule: definiert den Zugriff auf die Quelldaten
  • ImportSection: definiert die Feldzuweisung von Quell- zu Zielfeldern

Änderungen bei Implex-Versionen ab Version 4.0 und höher

Mit der Version 4.0 ändern sich die Bezeichner für die Parameter in den Import-Konfigurationen. Ab dieser Version ist eine Konfiguration und der Aufruf nur mit englischen Bezeichnern möglich. Alte Konfigurationen müssen daher zwingend angepasst werden!

Konfiguration
<XML version="1.0" encoding="UTF-8"?>
<CtxImport>
 <Global>
    <LoginIP>[.....]</LoginIP>              <!-- IP or server name -->
    <LoginPort>[.....]</LoginPort>          <!-- database port; also via parameter for implex available -->
    <LoginUser>[.....]</LoginUser>          <!-- user -->
    <LoginPW>[.....]</LoginPW>              <!-- password -->
    <ImportMode>[.....]</ImportMode>        <!-- import mode; n, u, nu/un for new and/or update-->
    <DeltaList>[.....]</DeltaList>          <!-- optional - DeltaListe means that all data records with no change will be deleted ("l") -->
 </Global>

  <ReaderModule type="[.....]">             <!-- e.g.: CSV, XML, ctx or own type by using abstract class -->
    <Filename>[.....]</Filename>            <!-- relative path to implex in bin directory -->
    <Separator>[.....]</Separator>          <!-- field separator -->
    <Enclosure>[.....]</Enclosure>          <!-- field delimiter -->
    <RepSeparator>[.....]</RepSeparator>    <!-- seperator for repeated content in one field; e.g.: "email 1; email 2; email 3; ..." -->
    <ColumnMode>[.....]</ColumnMode>        <!-- column mode HEADER, NUMERIC, ABC -->
    <Charset>[.....]</Charset>
  </ReaderModule>

  <ImportSection recordtype="[....]">
<FilterFunction>getChar('...') != ''</FilterFunction>   <!-- write data record only, if filter function returns true -->
    <IId>getChar('...')<IId>                <!-- internal database ID, if update exactly this data record -->
    <HashFilter>[.....]</HashFilter>        <!-- build hash value on all imported values and write it to this field -->

    <Reference>PID</Reference>              <!-- reference to find data record if update is necessary -->

    <Field>... = getChar('...')</Field>
    <Field>... = getChar('...')</Field>
    <Field>... = getChar('...')</Field>

    <RepGroup reference="1">                                <!-- for update of group reference is needed -->
      <Field deltalist="d">... = getChar('...')</Field> <!-- deltalist means that all data records without will be deleted -->
      <Field>... = getChar('...')</Field>
    </RepGroup>

  </ImportSection>
</CtxImport>

Im Bereich Global konfigurieren Sie die Zugangsdaten zu Ihrem Datenbestand und geben dort den gewünschten ImportModus an. Wählen Sie zwischen n (neu), u (update) oder nu bzw. un (für update, sonst neu).

Beispiel für eine globale Konfiguration
<CtxImport>
 <Global>
    <LoginIP>127.0.0.1</LoginIP>
    <LoginPort>29001</LoginPort>
    <LoginUser>admin</LoginUser>
    <LoginPW>adm#13qzy2!</LoginPW>
    <ImportMode>nu</ImportMode>
 </Global>

Die Bereiche ReaderModule und ImportSection sind von der jeweiligen Datenquelle abhängig.

Hinweis

Aus einer Datenquelle können Sie mehrere Datensätze unterschiedlicher Datensatztypen erstellen (z.B. aus einer Person ein Personen- und ein Adressdatensatz). Dafür müssen Sie die ImportSection mehrfach anlegen.

Konvertierung von Inhalten

Quelldaten wie Zahlenwerte (ganzzahlige oder Dezimalwerte) und Datumsfelder müssen in andere Formate konvertiert werden. Hierfür stehen entsprechende Importfunktionen bereit.

Datumsfelder

Quellsysteme liefern unterschiedliche Datumsformate, daher müssen diese vor dem Import in das von der CortexEngine verwendete Format konvertiert werden. Das Quellformat muss bekannt sein.

Beispiele von Datumsangaben aus verschiedenen Quellen

  • 111012
  • 12-10-11
  • 11-10-12
  • 2012-10-11
  • 2012-10

Es ist nicht eindeutig, ob die Zahlen den Tag, den Monat oder das Jahr repräsentieren. Daher müssen Datumsangaben immer mit dieser Zeile konvertiert werden: date('yyMMdd',getChar('Quelldatum'));

Das Muster 'yyMMdd' definiert das Format der Quelle. Die Tabelle zeigt die möglichen Muster auf, die aus einer Quelle konvertiert werden können. Sie können umfangreiche Datums- und Uhrzeitangaben, auch in Kombination, in das interne Format übertragen.

Tabelle für Datumsangaben
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a am/pm marker Text PM
H Hour in day (0 - 23) Number 0
k Hour in day (1 - 24) Number 24
K Hour in am/pm (0 - 11) Number 0
h Hour in am/pm (1 - 12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800

Muster

Date and Time pattern Result
yyyy.MM.dd G 'at' HH:mm:ss z 2001.07.04 AD at 12:08:56 PDT
EEE, MMM d, ''yy Wed, Jul 4, '01
h:mm a 12:08 PM
hh 'o''clock' a, zzzz 12 o'clock PM, Pacific Daylight Time
k:mm a, z 0:08 PM, PDT
yyyyy.MMMMM.dd GGG h:mm aaa 02001.July.04 AD 12:08 PM
EEE, d MMM yyyy HH:mm:ss Z Wed, 4 Jul 2001 12:08:56 -0700
yyMMddHHmmssZ 010704120856-0700

Zum Überprüfen dient dieser Online-Test (externer Link).

Für Entwickler

Die Funktionalität der Datumskonvertierung beruht auf der in Java implementierten SimpleDateFormat Klasse.

Werte mit Gültigkeitsdatum

  • Ein Wert in einem Datensatz kann ein Gültigkeitsdatum haben und bleibt gültig, bis ein neuer Wert mit einem neuen Datum eingetragen wird.
  • Der alte Wert bleibt einsehbar, auch in Listen und Pivotlisten.
  • Eine Selektion ist nur möglich, wenn das Feld bei der Feldkonfiguration mit der Option mit Liste für Verlaufsinformation angelegt wurde.
  • Um Werte mit Gültigkeitsdatum zu importieren, wird die entsprechende Importzeile ergänzt.
Beispiel für eine Datenquelle mit Werten im zeitlichen Verlauf
AcctNumber;Date;Value
DE123456789;01.01.2018;150
DE123456789;02.01.2018;200
DE123456789;03.01.2018;95
DE123456789;04.01.2018;80
DE123456789;05.01.2018;110
Importsection für Beispiel einer Datenquelle mit Werten im zeitlichen Verlauf
<ImportSection recordtype="ACCT">
    <Reference>AccNr</Reference>
    <Field>AccNr=getChar('AcctNumber')</Field>
    <Field>Value[time(date('dd.MM.yyyy',getChar('Date')))]=getChar('Value')</Field>
</ImportSection>

Update-Modus für den Datenimport

Um Werte im zeitlichen Verlauf zu speichern, müssen die Datensätze aktualisiert werden können. Das kann nur durchgeführt werden, wenn der ImportModus auf u (update) oder nu (neu und update) gesetzt wird.

Import ohne Datenmodell

Beim Import von Daten ohne Datenmodell für den Uniplex müssen Sie zusätzliche Attribute für jedes Feld verwenden. Diese Attribute definieren den Feldtyp im Uniplex oder in benutzerdefinierten Anwendungen und den Basisfeldtyp für die Datenverwaltung. Beide Attribute sind erforderlich.

<Field fieldType="[.....]" baseType="[.....]">

Beispiel für einen Import ohne Datenmodell
<Field fieldType="C" baseType="0">[.....] = [.....]</Field>
<Field fieldType="M" baseType="2">[.....] = [.....]</Field>

Werte für Feldtypen

Tabelle für gültige Kombinationen im Uniplex Datenmodell

Feldtyp Bedeutung Basisfeldtyp Bedeutung Basisfeldtyp
C Zeichen 0 Felder mit Feldinhaltsliste
N positive Ganzzahlen (Integer) 0 Felder mit Feldinhaltsliste
F Gleitkommazahlen (Float/Double) 0 Felder mit Feldinhaltsliste
D Datum 0 Felder mit Feldinhaltsliste
T Timestamp (zwingend Konvertierung mit der Funktion time() ) 0 Felder mit Feldinhaltsliste
I interner Verweis 0 Felder mit Feldinhaltsliste
J JSON-Feld 1 Daten-Container / JSON Felder
B Datei 1 Daten-Container / JSON Felder
M Mehrzeiliges Textfeld 2 Felder ohne Feldinhaltsliste (mehrzeilige, kurze binärdaten o.ä.)
-- -- 3 Felder mit Feldinhaltsliste, die auch die Zeitscheibeninformationen umfasst

Nur erlaubte Kombinationen verwenden!

Die erlaubten Kombinationen müssen beachtet werden, da einige Feldtypen nur mit bestimmten Basis-Feldtypen kompatibel sind.