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:
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:
Jest to zwykła enumeracja po plikach z wybranego katalogu
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)
Zaś constraint dla porażki wygląda tak:
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
3. Mając wybrane z listy Copy file oraz OnError kliknij
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
6. Odszukaj zmiennej „Propagate” i wybierz wartość „False”
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.