上一主题: 适配器日志

下一主题: 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>