Pode usar a classe Java com.idsscheer.ppm.xmlextractortools.extractor.jdbc2ppm.ZSortWithTimestamp_jdbc2ppm para extrair dados pelo carimbo de data/hora (por exemplo, tipo de dados Oracle TIMESTAMP) de uma maneira classificada. O primeiro ou último registro extraído é gravado em um evento. A classe é especificada no elemento XML table do atributo XML classtouse. Os dois parâmetros obrigatórios são especificados nos elementos XML correspondentes:
O exemplo seguinte mostra um extrato desse tipo de configuração de tabela.
<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>
O critério de classificação especificado é automaticamente adicionado à saída do evento.
Exemplo
Os campos do último estado da etapa de processo em cada etapa de processo devem ser extraídos da tabela DBO.WMPROCESSSTEP (histórico de estado das etapas de processo). Dependendo do valor do campo AUDITTIMESTAMP (tipo de dados Oracle TIMESTAMP), a última entrada (MAX) tem de ser transferida.
<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>
Um evento extraído com essa configuração poderia ter a seguinte aparência:
<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>
Os dados extraídos incluem milissegundos ou nanossegundos
Por padrão, os carimbos de data/hora são extraídos e classificados ao segundo. Se existirem vários registros com valor de carimbo de data/hora idêntico, um deles será selecionado aleatoriamente e usado para determinação do valor.
Se os carimbos de data/hora forem salvos ao milissegundo ou ao nanossegundo no banco de dados, eles poderão ser extraídos e classificados em milissegundos, e respectivamente, em nanossegundos. Para implementar isso, pode especificar o valor MILLISECOND ou NANOSECOND no atributo precisionoftime do elemento XML databasesettings do arquivo de configuração JDBC. O valor padrão é SECOND.
Com o valor SECOND, todos os carimbos de data/hora ou horas são extraídos no formato MM/dd/aaaa HH:mm:ss ou HH:mm:ss e gravados no arquivo de evento. Os dados são classificados ao segundo, de acordo com o carimbo de data/hora.
Com o valor MILLISECOND, os carimbos de data/hora ou horas são extraídos no formato MM/dd/aaaa HH:mm:ss ou HH:mm:ss.SSS e gravados no arquivo de evento. Os dados são classificados ao milissegundo, de acordo com o carimbo de data/hora.
Com o valor NANOSECOND, os carimbos de data/hora ou horas são extraídos no formato MM/dd/aaaa HH:mm:ss ou HH:mm:ss.SSS e gravados no arquivo de evento. Os dados são classificados ao nanossegundo, de acordo com o carimbo de data/hora.
O valor padrão é SECOND, ou seja, as horas são extraídas ao segundo após a atualização de uma configuração do cliente existente.
O seguinte exemplo mostra um extrato do arquivo de configuração XML do JDBC:
<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>