SSIS: Co zrobić, aby błąd w ForEach nie powodował zakończenia pakietu

1-Mar-2015

W kontenerze ForEach odbywa się kopiowanie plików, które jest narażone na błędy. Chciałbyś zapisać gdzieś informację o błędzie, ale nie przerywać kopiowania. Jak to zrobić, poza globalną zmianą wyłączającą wszelkie śledzenie plików. Sytuacja wejściowa wygląda następująco:

ssis01

 

Pętla (count and copy files) wykonywana jest dla każdego pliku, a po jej zakończeniu może być wyświetlone podsumowanie (Summary). W ramach pętli najpierw zliczamy ilość plików (Count files) do specjalnie w tym celu zadeklarowanej zmiennej, następnie próbujemy skopiować plik (Copy file), potem w zależności od tego czy się udało, czy nie wykonujemy pewne czynności: Script on success, gdy się udało lub Script on failure, gdy doszło do błędu.

Zajrzyjmy na Copy file:

ssis02

Jest to zwykła enumeracja po plikach z wybranego katalogu

ssis03

W zmiennej User:filename znajduje się nazwa aktualnie kopiowanego pliku.

Constraint dla akcji sukcesu został zdefiniowany jak na ilustracji poniżej. (Aby wyświetlić odpowiednie okno dialogowe kliknij prawym przyciskiem myszy na strzałce i wybierz properties)

ssis04

 

Zaś constraint dla porażki wygląda tak:

ssis05

Sęk w tym, że gdy dojdzie do pierwszego błędu przy kopiowaniu, wywoła się „Script on failure”, ale zaraz po tem przerwie się wykonanie pakietu, bo błąd jest przesłany z Copy file do Cound and copy files… Żeby zadanie się nie przerwało wykonaj następujące kroki:

1. Kliknij CopyFile

2. U góry ekranu kliknij Event Handles

ssis06c

3. Mając wybrane z listy Copy file oraz OnError kliknij

ssis06a

4. Kliknij prawym przyciskiem myszy na szare tło panelu i wybierz Variables.

5. Jeśli nie widać wszystkich zmiennych kliknij przycisk „Variable Grid Options” w oknie zmiennych (ostatni przycisk) i zaznacz Show system variables

ssis06b

6. Odszukaj zmiennej „Propagate” i wybierz wartość „False”

ssis06

Gotowe! Gdy copy file napotka błąd, wywoła skrypt „Script on failure” ale nie będzie propagować błędu do rodzicielskiego kontenera, więc pętla Count and copy files będzie kontynuować kopiowanie.

 

Dodaj komentarz:

Autor: Rafał Kraik