前のトピック: アダプタ ログ

次のトピック: send.txt

DataSourceControl.xml

DataSourceControl.xml ファイルはアダプタによってデータ ソースへのアクセス制御に使用され、実行時に常に最終地点からの読み取りを続行するようにします。

ファイル アダプタは、最後に読み取りを行ったファイルの名前、最終行、およびアクセスしたファイル内の位置を保持します。 次にアダプタが実行されるときには、アダプタが DataSourceControl.xml ファイルの情報を使用して、その場所からファイルにアクセスします。 このメカニズムを使用すると、アダプタは実行時ごとに新規レコードのみを読み取ることができます。

アダプタは、ソース ファイル上で直接作業せず、最初に現在のファイルをワーク ファイルにコピーします。 したがって、同じ情報がワーク ファイルとソース ファイルで維持されます。 ソース ファイルに追加があった場合は、新規レコードのみがワーク ファイルにコピーされます。

設定ファイルのパラメータ DeleteAfterProcessing を「yes」に設定して、アダプタを一度処理したソース ファイルを削除する設定にした場合、アダプタはソース ファイルの情報を保存しません。 完了すると、アダプタは設定ファイル内で定義されたファイル パターンと一致する作業フォルダ内の新しいファイルを読み取ります。

DeleteAfterProcessing を「no」に設定した場合のみ、前回のファイルの新規レコードをチェックします。 何もない場合は、辞書式順序に従って次のファイルに移動します。 そのため、ソース データ ファイルを命名するときは、正しい順序で読み取られるように順番に文字を増やす命名パターンになるようにします。 これを実現するためには、たとえば逆の日付値(yyyymmdd-hhmmss)をファイルに付加します。 例:

ファイル アダプタ用の DataSourceControl.xml の例を以下に示します。

<AdapterControl Save="end" LastSaveTime="2005/05/20 13:06:39">
<Data><WorkData><LineNumber>0</LineNumber>
<FilePattern>c:\adapters\callsadapter\*adapterpca.csv</FilePattern>
<file name></FileName>
<BasicPosition>0</BasicPosition>
</WorkData>	
<NonDeletedFiles>
<File NamePattern="c:\adapters\callsadapter\*adapterpca.csv">
<file name>2005adapterpca.csv</FileName>
<LastLine>25/04/2005,5925,NN4B,12,12,0,10,0,11</LastLine>
<LastPosition>15427</LastPosition></File>
</NonDeletedFiles>
</Data>
</AdapterControl>

SQL アダプタは、各クエリが実行されるたびにクエリ キー フィールドの前回の値を保持します。 キー フィールドは、送信先のデータベース テーブル内のレコードに使用する一意の識別子です。 アダプタは、次回のクエリを構築する場合にこれらの値を使用します。 これにより、アダプタは新規レコードのみを読み取ることができます。

たとえば、以下の SQL ステートメントを、あるトラブル チケット データの取得に使用するとします。

Select ticket_id, status, organization, open_date, respond_date, resolved_date, record_modified_date from t_ticket_data;

この例では、データ ソースから最新のレコードをすべてキャプチャするためにクエリ キー フィールド record_modified_date が選択されており、確実に最新情報を取得します。これは、このフィールドが前回のアダプタ実行時以降に発生した新規チケットを生成し、また既存のチケットを更新するためです。 クエリ キー フィールドとしてこのフィールドを選択することにより、アダプタは実行時に次のセクションをクエリの最後に自動で付加します。

where record_modified_date > :previous_value order by record_modified_date asc

したがって、新規レコードのみが取得されます。 クエリ キー フィールドを選択する際には考慮すべき事項が多くあり、これは常にデータ ソースの動作および取得したデータで何を行うかに依拠しています。 また、前述の例で選択されているフィールドが必ずしもすべての状況に対する最適な選択だとは限らないことに注意してください。

SQL アダプタ用の DataSourceControl.xml ファイルの例を以下に示します。

<AdapterControl Save="end" LastSaveTime="2005/05/20 15:59:02">
<Data><QueryCollection>

<Query QueryName="ChangeManagementOpenQuery">
<KeyField Name="Incident Ref"><LastValue>32357</LastValue></KeyField>
<KeyField Name="Date Logged"><LastValue>18/04/2005 16:56:26</LastValue></KeyField>
<LastFileName/>
</Query>

<Query QueryName="ChangeManagementPendingQuery">

<KeyField Name="Incident Ref"><LastValue>0</LastValue></KeyField>
<KeyField Name="Date Resolved"><LastValue>1900-01-01</LastValue></KeyField><LastFileName/>

</Query>