Mit Hilfe der Java-Klasse com.idsscheer.ppm.xmlextractortools.extractor.jdbc2ppm.ZSortWithTimestamp_jdbc2ppm können Daten nach Zeitstempel (z. B. Oracle-Datentyp TIMESTAMP) sortiert aus Tabellen ausgelesen. Der erste bzw. letzte gelesene Datensatz wird in ein Event geschrieben. Die Klasse wird im XML-Element table des XML-Attributs classtouse angegeben. Die beiden erforderlichen Parameter werden in entsprechenden XML-Elementen angegeben:
Parameter name="SORTCRITERION" mit einem XML-Element value, dessen Wert den Feldnamen der auszulesenden Tabelle bestimmt.
Parameter name="USE" mit einem XML-Element value, das als Wert entweder MAX (Datensatz mit dem spätesten Wert wird übernommen) oder MIN (Datensatz mit dem frühesten Wert wird übernommen) haben muss.
Das folgende Beispiel zeigt den Auszug aus einer solchen Tabellenkonfiguration.
<table ... classtouse="com.idsscheer.ppm.xmlextractortools.extractor.jdbc2ppm.ZSortWithTimestamp_jdbc2ppm">
<parameter name="SORTCRITERION">
<value>...</value>
</parameter>
<parameter name="USE">
<value>...</value>
</parameter>
... conditions ...
... pkfields ...
... fieldstoread ...
</table>
Das angegebene Sortierkriterium wird automatisch zur Event-Ausgabe hinzugefügt.
Beispiel
Aus der Tabelle DBO.WMPROCESSSTEP (Statushistorie der Prozessschritte) sollen Felder des letzten Prozessschrittstatus zu jedem Prozessschritt ausgelesen werden. Abhängig vom Wert des Feldes AUDITTIMESTAMP (Oracle-Datentyp TIMESTAMP) soll der späteste Eintrag (MAX) übenommen werden.
<configuration name="AUFK_JCDS_AUFK">
...
<table name="WMPROCESSSTEP_END" tablename="DBO.WMPROCESSSTEP" classtouse="com.idsscheer.ppm.xmlextractortools.extractor.jdbc2ppm.ZSortWithTimestamp_jdbc2ppm">
<parameter name="USE">
<value>MAX</value>
</parameter>
<parameter name="SORTCRITERION">
<value>AUDITTIMESTAMP</value>
</parameter>
<pkfield name="INSTANCEID" fktablename="WMPROCESSSTEP" fkfieldname="INSTANCEID" />
<pkfield name="INSTANCEITERATION" fktablename="WMPROCESSSTEP" fkfieldname="INSTANCEITERATION" />
<pkfield name="STEPID" fktablename="WMPROCESSSTEP" fkfieldname="STEPID" />
<pkfield name="STEPITERATION" fktablename="WMPROCESSSTEP" fkfieldname="STEPITERATION" />
<fieldtoread name="AUDITTIMESTAMP" />
<fieldtoread name="INSERTTIMESTAMP" />
<fieldtoread name="STATUS" />
</table>
...
</configuration>
Ein Event, das mit dieser Konfiguration ausgelesen wird, sieht bspw. folgendermaßen aus:
<event>
...
<attribute type="WMPROCESSSTEP_END-AUDITTIMESTAMP">24.08.2010 09:51:13.477</attribute>
<attribute type="WMPROCESSSTEP_END-INSERTTIMESTAMP">24.08.2010 09:51:13.550</attribute>
<attribute type="WMPROCESSSTEP_END-STATUS">2</attribute>
...
</event>
Auslesen der Daten inkl. Millisekunden oder Nanosekunden
Zeitstempel werden standardmäßig sekundengenau ausgelesen und sortiert. Gibt es mehrere Datensätze mit identischem Zeitstempelwert, wird zufällig einer dieser Datensätze zur Wertermittlung verwendet.
Sind Zeitstempel milli- oder nanosekundengenau in der Datenbank gespeichert, können die Zeitstempel milli- oder nanosekundengenau ausgelesen und sortiert werden. Hierfür können Sie im Attribut precisionoftime des XML-Elementes databasesettings der JDBC-Konfigurationsdatei den Wert MILLISECOND oder NANOSECOND angeben. Der Standardwert ist SECOND.
Mit dem Wert SECOND werden alle Zeitstempel bzw. Zeiten im Format dd.MM.yyyy HH:mm:ss oder HH:mm:ss ausgelesen und in die Event-Datei geschrieben. Die Daten werden nach Zeitstempel sekundengenau sortiert.
Mit dem Wert MILLISECOND werden Zeitstempel bzw. Zeiten im Format dd.MM.yyyy HH:mm:ss.SSS oder HH:mm:ss.SSS extrahiert und in die Event-Datei geschrieben. Die Daten werden nach Zeitstempel millisekundengenau sortiert.
Mit dem Wert NANOSECOND werden Zeitstempel bzw. Zeiten im Format dd.MM.yyyy HH:mm:ss.SSS.nnnnnnnnn oder HH:mm:ss.SSS extrahiert und in die Event-Datei geschrieben. Die Daten werden nach Zeitstempel nanosekundengenau sortiert.
Der Standardwert ist SECOND, so dass bei einem Upgrade einer bereits existierenden Mandantenkonfiguration die Zeiten in der ursprünglich Genauigkeit ausgelesen werden.
Das folgende Beispiel zeigt einen Auszug aus der XML-JDBC-Konfigurationsdatei:
<jdbcconf>
<databasesettings name="jdbc_oracle" dbtype="ORACLE" precisionoftime="MILLISECOND">
<driverclass>oracle.jdbc.driver.OracleDriver</driverclass>
<maxconditionlength>2000</maxconditionlength>
<fetchsize>1000</fetchsize>
</databasesettings>
<databaseconnection name="jdbc_oracle10_connection">
<dbsettings>jdbc_oracle</dbsettings>
<url>...</url>
<user>...</user>
...
</databaseconnection>
</jdbcconf>