Bueno lo primero que vamos a realizar es crear una tabla.
CREATE TABLE [dbo].[FilesToProcess]
(
[Id] [int] NOT NULL,
[FileFullName] [varchar](255) NOT NULL,
[LastModifiedDate] [datetime] NOT NULL,
[ProcessDate] AS (getdate())
en esta vamos a guardar el path del archivo y las fechas de modificación.
Vamos a terner lo siguiente, lo que vendria a ser nuestro entorno.
El primero es un execute sql task
el segundo un script task
el tercero un data flow task
y por ultimo un send mail task.
Creamos las variables globales en el control flow.
La primera hace referencia al nombre del archivo.
La segunda hace referencia a la fecha de ultima modificación del archivo.
La tercera hace referencia a la ultima modificaión que se encuentra en la tabla de la base de datos
En el execute sql task lo que vamos a realizar es:
- en result set lo ponemos a single row
- configuramos el connection type, connection.
- escogemos la opcion de Direct input y añadimos la sentencia sql q vamos usar: SELECT [FileFullName], [LastModifiedDate] FROM [dbo].[FilesToProcess]
where [Id]=1;
en la opción del result set hacemos referencia a los datos que nos devuelve el sql, ya que el sql esta sin un as que es asignacion de nombres los resultados nos lo devuelve con 0 y 1 respectivamente a cada campo del select, y asi procedemos a estableces a que variable corresponde cada resultado.
En el script vamos a establecer que variables son de escritura y cuales son de solo lectura.
En el scrip vamos a poner el siguiente codigo(c#)
try {
System.IO.
FileInfo mFileInfo = new System.IO.FileInfo(Dts.Variables["vFileFullName"].Value.ToString());if (mFileInfo != null) {
Dts.Variables[
"vFileModifiedDate"].Value = mFileInfo.LastWriteTime;Dts.TaskResult = (int)ScriptResults.Success; }
else {
Dts.TaskResult = (
int)ScriptResults.Failure; }
Con esto obtenemos la fecha de ultima modificación del archivo que especificamos en el path.
El siguiente paso es verificar si la fehca que nos devolvio el script es diferente de la que tenemos almacena en la base de datos y para eso en la union de nuestro script task y data flow task establecemos una precedencia de condicion.
con esto decimos que si son diferentes va a pasar a ejeutar el data flow task caso contrario nos diria que el archivo ya fue cargado.
Pero aqui viene lo interesante que tenemos que actualizar la fecha de ultima modificaión en la base de datos para que asi que constancia del ultimo que cargo.
Y para eso lo que hacemos es despues de que ya cargo el data flow task añadimos otro execute sql task en el cual lo que vamos a hacer es reemplazar nuestro registro de ultima fecha de modificaion de la base de datos por el que obtuvimos en el script.
una vez puesto el sql de update temos que enviar el dato de la variable que tiene la ultima feha, es decir la del script, y para eso tenemos que mapiarlo de la siguiente manera.
en donde el 0 hace referencia a ? del sql .
Lo otro de enviar mensajes de correo ya es cuention de uno si lo queremos realizar pero la parte importante de saber si un archivo ya fue cargado o no lo hacemos con lo anterior mente dicho.
espero sea de su ayuda.
Saludos,
vgv







