2017-10-16 20 views
0

J'ai un package SSIS je travaille. Le nom du fichier est: ap_alpha100_p1_20171013_123456.txtComment valider un nom de fichier en fonction d'une plage de dates spécifique?

Je veux que le paquet pour récupérer ce fichier si la date est dans les deux derniers jours. Par exemple.

ap_alpha100_p1_20171013_123456.txt est correct parce que 20171013 = 2017/10/13

ap_alpha100_p1_20170613_123456.txt est incorrect parce 20170613 = 2017/06/13

Je suis très nouveau pour SSIS et a essayé de google pour des problèmes similaires, mais ma recherche me laisse court.

Répondre

1

Essayez cette approche:

  1. Créer une var_fileName variable pour stocker le nom de fichier pour chaque conteneur-boucle .
  2. Créer une variable var_flag qui sera définie sur true si la date se trouve dans cette semaine (configurable), sinon false.

  3. Créez un conteneur pour chaque boucle avec ForEach file enumerator et le mappage variable défini sur var_fileName. u1

  4. Créer un script task dans le conteneur. Lire la variable: var_fileName. Variable en lecture-écriture: var_flag.

  5. Mettre en place le code suivant dans la tâche de script (C#).

     Dts.Variables["User::var_flag"].Value = false; 
    
         String a; 
         a = Dts.Variables["User::var_fileName"].Value.ToString(); //output: ap_alpha100_p1_20171010_123456 
         String b; 
         b = a.Substring(15, 8); //output: 20171010 
    
    
         string result = DateTime.ParseExact(b, "yyyyMMdd", 
             CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); //output: 2017-10-10 
    
         DateTime oDate = Convert.ToDateTime(result); //convert string to datetime 
         DateTime Today = DateTime.Today; 
         DateTime StartDate = Today.AddDays(-((int)Today.DayOfWeek)); 
         DateTime EndDate = StartDate.AddDays(7).AddSeconds(-1); 
    
         if (oDate > StartDate && oDate < EndDate) 
         { 
          Dts.Variables["User::var_flag"].Value = true; 
         } 
         else 
         { 
          Dts.Variables["User::var_flag"].Value = false; 
         } 
    

Il devrait ressembler à ceci (les commentaires indiqués pour une meilleure compréhension):

i2

  1. Maintenant, utilisez simplement une contrainte entre script task et Data Flow Task avec condition de contrainte @[User::var_flag] == TRUE.

Logique est: Si la date est entre cette semaine, alors le drapeau est passé à vrai, sinon faux. En condition réelle, la tâche de flux de données s'exécute.