Rozwiązania tymczasowe

Chyba każdy (nie tylko programista) w Swojej pracy stosował rozwiązania tymczasowe. Powody mogły być różne, brak czasu na zrobienie tego dokładniej, brak pomysłu a czasami wręcz brak możliwości. Takie rozwiązania bardzo często zostają na dłużej niż się to planuje. Mnie również zdażały się takie sytuacje.

Dostałem zadanie zautomatyzowania i udostępnienia bezpośrednim przełożonym zmian uprawnień ich pracowników. Problem polegał na tym, że system, który tymi uprawnieniami nadzorował był mocno ograniczony licencjami, dawał zbyt wiele możliwości zmian a do tego jeszcze był nieintuicyjny. Przełożeni mieli po kilkunastu pracowników z różnymi uprawnieniami i zdażały się sytuacje, że część z nich nie miała akurat co robić bo do zadań które trzeba było wykonywać nie byli przypisani. Aby ich przypisać trzeba było zgłosić to do Nas (działu wsparcia). Takie zmiany były dość czasochłonne, polegały na przeklikiwaniu okien jedno po drugim i ustawianiu w nich odpowiednich wartości. Przepisanie uprawnień dla jednego użytkownika trwało 2-3 minuty. Do tego jak ktoś zgłaszał nam takie zmiany a później o tym zapomniał to na drugi dzień mogło się okazać, że wszyscy jego pracownicy realizują te same zadania a pozostałe leżą nieruszone.

W wolnym czasie tworzyłem automat, który na podstawie przekazanych mu danych sam przeklikiwał te wszystkie okna i wpisywał do nich to co trzeba. Miało to być narzędzie dla mnie, ewentualnie jeszcze kogoś z naszego działu. Działało bardzo prymitywnie. Dzięki interface-owi winapi stworzyłem w Delphi program który uruchamiał aplikację do zarządzania uprawnieniami, wpisywał login, hasło i klikał zaloguj. Następnie oczekiwał aż na ekranie pojawi sie okno główne aplikacji. Przenosił to okno w lewy górny róg ekranu i ustawiał mu odpowiednią wielkość. Po co? Po to żeby później ustawić kursor myszy w odpowiednim miejscu na tym oknie, kliknąć dwukrotnie i poczekać aż otworzy się okno wyszukiwania. W oknie wyszukiwania zasymulować dwukrotne wciśnięcie tabulatora tak aby kursor ustawił się w polu „Login”. Wkleić login użytkownika i wcisnąć enter. Jeśli otworzyło się okno z danymi pracownika tzn. że wszystko się powiodło i można było przejsć do kolejnych kroków. Jeśli nie, to mogło to oznaczać, że albo aplikacja nie złapała odpowiedniego okna albo coś zakłóciło jej pracę lub po prostu ktoś podał mi zły login. Aby mieć pewność, że to zły login a nie błąd aplikacji program zamykał aplikację do zarządzania uprawnieniami i uruchamiał opisany powyżej scenariusz jeszcze raz. Jeśli próba nie powiodła się trzykrotnie to można było przyjąć że taki login nie istnieje.

Akcja opisana powyżej to był dopiero początek. Kolejne kroki wyglądały podobnie. Otwieranie okien, ustawianie ich w konkretnym miejscu ekranu, symulowanie dwukliku itp. Tak działał ten program. Ale odziwo wbrew wszelkiej logice działał bardzo dobrze. Na tyle dobrze, że postanowiłem go wykorzystać w realizacji mojego zadania. Przełożeni otrzymali prosty w obsłudze interfejs w którym wykonywali zmiany uprawnień swoich pracowników. Zlecenia zmian trafiały do bazy danych a stamtąd były pobierane przez mój program który rozpoczynał swoje żonglowanie okienkami. Gdy zmiana się powiodła przełożony dostawał komunikat zwrotny. Dodatkowo widział też na bieżąco, którzy pracownicy, jakie realizują zadania.

Aplikacja otrzymała swój „serwer” w postaci komputera PC z zainstalowanym windowsem na którym sesja nigdy nie wygasała, nie włączał się żaden wygaszacz ekranu ani nic takiego. Po podłączeniu do niego monitora można było obserwować otwierąjace, zamykające lub samoczynnie przenoszące się okienka, w których coś się klikało, coś się wpisywało itp. Przez kilka lat ta aplikacja obsługiwała zmiany zlecane przez działy z różnych, dzięki niej kilka osób w całej polsce z działów takich jak nasz miało o jedno zadanie mniej. Tak własnie udało mi się zrealizować zadanie, które w pierwszej chwili wydawało się niewykonalne 🙂

1 myśl na “Rozwiązania tymczasowe”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *