Opis wyzwania
Jakiś czas temu klient poprosił o rozwiązanie umożliwiające częste tworzenie kopii zapasowych SAP kluczowych danych transakcyjnych jako dodatkowego środka bezpieczeństwa. Pomysł był prosty – co kilka godzin bot miał uruchamiać niektóre transakcje w SAP, eksportować dane do określonego formatu i przechowywać je w zabezpieczonej lokalizacji SharePoint, gdzie pliki byłyby wersjonowane i stanowiły część dalszego przetwarzania kopii zapasowych przy użyciu dedykowanego narzędzia.
Rozwiązanie
Na pierwszy rzut oka proces jest prosty, jak pokazano na uproszczonym diagramie BPMN poniżej:

Oczywiście każda z powyższych czynności może zakończyć się niepowodzeniem i wyjątki te powinny być obsługiwane. Dodajmy więc obsługę wyjątków:

Voilà! Teraz, w przypadku gdy podczas wykonywania coś pójdzie nie tak, nasz bot pobierze szczegóły, wykona zrzuty ekranu i zamknie SAP przed zgłoszeniem wyjątku do nadrzędnego przepływu. Zanim wpadniemy w entuzjazm i zaczniemy implementować nasze rozwiązanie z zapałem, weźmy głęboki oddech i wróćmy do początku. Jaki jest cel tego procesu? Celem jest tworzenie kopii zapasowych danych. A co by się stało, gdyby przetwarzanie którejś z transakcji zakończyło się niepowodzeniem? Pozostałe zostałyby porzucone do następnego wykonania, ponieważ każdy błąd w przetwarzaniu grupowym przekierowuje przetwarzanie do bloku obsługi wyjątków, który obsługuje bezpieczne wyjście. Możemy wyobrazić sobie scenariusz, w którym jedna z transakcji przy danej konfiguracji generuje zbyt dużo danych i stale kończy się niepowodzeniem, skutecznie uniemożliwiając tworzenie kopii zapasowych innych transakcji. Jak więc możemy rozwiązać ten problem?
Po pierwsze, kluczowe jest, aby wszystkie transakcje były uwzględnione w kopii zapasowej – jeśli jest to niemożliwe, bot powinien pominąć wadliwe i kontynuować przetwarzanie pozostałych. Po drugie, gdy wystąpi wyjątek, zespół odpowiedzialny powinien zostać poinformowany, które kopie zapasowe nie zostały utworzone. Biorąc pod uwagę powyższe warunki, możemy dodać dodatkowy blok obsługi wyjątków, który działa wewnątrz przetwarzania grupowego, zatrzymując tylko przetwarzanie nieudanej kopii zapasowej:

W ten sposób bot obsługuje każdy element przetwarzania indywidualnie, nie przerywając całego przepływu. Z drugiej strony, wyjątki krytyczne – takie jak te podczas logowania do SAP i jego restartu – są obsługiwane przez „zewnętrzny” blok obsługi, który zatrzymuje dalsze przetwarzanie przepływu.

