Odczyt MessageType statusu SAP używając Power Automate Desktop
Kiedy budujesz RPA do obsługi procesów w SAP, dobrą praktyką jest sprawdzanie, jaka wiadomość wyświetla się na pasku stanu/ statusu za każdym razem, gdy bot potwierdza wstawione dane na ekranie lub próbuje z niego przejść na inny. Powinno się to robić w celu weryfikacji, czy nie wyświetla się żadne ostrzeżenie ani komunikat o błędzie, który powinien obsłużyć bot.
Komunikaty paska stanu w ABAP są zwykłym tekstem uzupełnionym ikoną wskazującą jego typ. Po dwukrotnym kliknięciu pokażą się szczegóły. Wiadomość zawsze ma swoją klasę i numer (jak w przykładzie poniżej: F i 2164). Istnieją setki takich wiadomości: https://www.sapdatasheet.org/abap/msag/.
Zasadniczo SAP UI nie dostarcza żadnych informacji, które pozwoliłyby precyzyjnie stwierdzić, czy wystąpił błąd, czy nie. Na początku więc próbowałem sprawdzać, czy pasek stanu zawiera ikonę, która jest błędem lub ostrzeżeniem, używając warunku „If image” i przechwyconych obrazów:
Jednak to podejście w nie zadziałało. Próbowałem ustawić różne Tolerancje, ale jeśli była za wysoka – reguła była zawsze prawdziwa. Jeśli za mała – nigdy nie była prawdą. Dla Twojej wiadomości – wartość może być ustawiona pomiędzy 1 i 256. Utknąłem.
Visual Basic Script na pomoc!
Zacząłem szukać, jak odczytać typ komunikatu dla wyświetlanego statusu. W ten sposób dowiedziałem się, że tak naprawdę ta zwykła wiadomość tekstowa ma swoje typy:
- A: (Pokazuje błędy bez wznawiania wykonywania programu)
- E: Komunikaty o błędach (Pokazuje błędy i bieżące wykonanie programu zostanie zakończone)
- I: Komunikaty informacyjne (tylko wyświetlają informacje i można ich uniknąć)
- S: Komunikaty o sukcesie (na następnym ekranie pokazującym komunikat o pomyślnym zakończeniu procesu)
- W: Komunikaty ostrzegawcze (wyświetlanie błędów, które można zignorować)
- X: komunikaty o wyjściu (natychmiastowe zakończenie programu i wyświetla komunikaty o błędach zrzutu systemu)
Za ABAP MESSAGE Statement and types – SAP Stack
Kiedy to odkryłem, zacząłem szukać możliwych sposobów ich odczytania. Jedynym sposobem, jaki znalazłem, było użycie skryptu Visual Basic Script. Ponieważ nie jestem programistą, poświęciłem trochę czasu na zastanowienie się, jak napisać ten skrypt, ale z przyjemnością się nim z Tobą podzielę. Po prostu skopiuj i wklej go do akcji „Run VBScript” w Power Automate Desktop:
Set SapGuiAuto = GetObject ("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine Set connection = application.Children(0) Set session = connection.Children(0) WScript.Echo session.findById("wnd[0]/sbar").MessageType
Możesz użyć atrybutu „MessageType” by uzyskać literę A, E, I, S, W lub X. Albo możesz użyć atrybutu „Text” by po prostu uzyskać tekst, jaki jest wyświetlany na pasku statusu.
Użyłem też wtedy akcji Trim, ponieważ VBS Trim jakoś u mnie nie działał i zwracana wartość była zawsze uzupełniana białymi znakami i pustą linią. Tak to wygląda po mojej stronie:
Czy uważasz to za przydatne? Zostaw komentarz! 🙂
krystian
O: (Pokazuje błędy bez wznawiania wykonywania programu)
raczej powinno być 'A’ zamiast 'O’
Tomasz Poszytek
Rzeczywiście, jakiś chochlik się wkradł. Dziękuję 🙂