dotyczy wersji: 8.2.x, autor: Kamil Nędza
W pewnych konkretnych etapach workflow mogą zdarzyć się sytuację, że przejście ścieżką przejścia trwa dłuższy niż zazwyczaj okres czasu. Czasami czas ten jest niemożliwy do skrócenia. Przyczyn może być wiele: duża ilość akcji na ścieżce przejścia, rozbudowane zapytanie SQL lub komunikacja z innym systemem zewnętrznym. Ważne jest, aby dać użytkownikowi jasny komunikat, że czas oczekiwania w danym momencie może być wydłużony. W tym celu z pomocą przychodzi JavaScript.
Opis konfiguracji:
Należy przejść do zakładki Zachowanie w konfiguracji obiegu. Umieść w sekcji Javascript do zarejestrowania na stronie poniższą funkcję, która jest odpowiedzialna za zablokowanie formularza i wyświetlenie komunikatu na stronie:
function DisableRootPanelWithMessage(msg) {
var data = $(window).data();
var isUnblocked = (typeof data["blockUI.onUnblock"] === 'undefined');
if (!isUnblocked ) {
// is blocked
EnableRootPanel();
$.blockUI({ message: '<h1>' + msg + '</h1></br><img src="/_layouts/images/webcon/wait.gif" />', css: { border: 'none', backgroundColor: 'transparent' }, overlayCSS: { opacity: '0.1' } });
}
}
Rys. 1. Dodanie skryptu do zarejestrowania na stronie
Następnie na wybranej ścieżce przejścia umieść timeout, wywołujący funkcję, którą przed chwilą zarejestrowałeś:
setTimeout(function(){DisableRootPanelWithMessage(‘Trwa przetwarzanie. Proszę czekać.’)},2500);
W tym celu należy przejść do konfiguracji ścieżki przejścia. W zakładce Parametry w sekcji Skrypt dodatkowej walidacji przy wyborze tej ścieżki i dodać skrypt, ustawiający timeout:
Rys. 2. Dodanie skryptu przy przejściu ścieżką przejścia
Weryfikacja funkcjonalności:
W efekcie kiedy użytkownik przejdzie ścieżką przejścia i akcje będą się wykonywały dłużej niż 2,5 sekundy, użytkownikowi pokaże się komunikat, aby wykazał jeszcze odrobinę cierpliwości 🙂
Rys. 3. Przykład komunikatu przy przejściu ścieżką przejścia
Czy jest możliwość zrobić ekran oczekiwania na akcji globalnej przycisku w menu typu odsyłacz zanim się strona otworzy?