U bent vast wel eens op zoek naar een script waarmee u dagen vooruit kunt tellen waarbij rekening moet worden gehouden met weekends en eventuele vakantiedagen. Weekends zijn bekend, vakantiedagen willen nog wel eens wisselen per bedrijf en per situatie. Deze wilt u dan natuurlijk het liefst configurabel vastleggen.
Het volgende script (scheduled agent) controleert de status van een document in een bepaald proces. Dit proces voorziet in een aantal opeenvolgende stappen (verschillende afdelingen) waarbij voor elke stap bepaald is hoe lang het document in die fase kan blijven. Wederom wordt de duur van een fase via een configuratiedocument vastgelegd. Na afronding van elke fase wordt er een “fase datum” gezet met de datum van dat moment.
De scheduled agent is zo ingesteld dat deze elke nacht draait en door alle documenten heenloopt. In de applicatie vinden een drietal processen plaats waarbij elk proces zijn eigen configuratie heeft. Wanneer blijkt dat een bepaalde fase uitloopt dan wordt de procesverantwoordelijke contactpersoon hier via een e-mailnotificatie op geattendeerd.
Een dergelijk configuratiedocument ziet er als volgt uit: (klik om een grotere afbeelding te tonen)
In dit document wordt vastgelegd hoe lang een afdeling in een bepaalde fase mag blijven en welke vakantiedagen er allemaal zijn in het bedrijf. In alle drie de processen zijn de processtappen zowel sequentieel als parallel. Bijvoorbeeld de Change Request Procedure kent eerst 2 sequentiële stappen: fase 1 en fase 2 en vervolgens in fase 3 in totaal 4 parallelle stappen alvorens de sequentiële stap naar fase 4 wordt gemaakt.
Nadat het starten van de agent wordt eerst per proces per fase bepaald wat het aantal dagen is:
Vervolgens wordt door alle documenten heengegaan en wordt per document bepaald in welke fase deze zich bevindt:
Per fase wordt dan een functie aangeroepen “checkOverdue” welke per document per fase controleert of die fase uitloopt. In dit script bevindt zich ook de controle of dat één van de komende dagen in een weekend valt of dat het een vakantiedag is.
Initieel wordt de checkdatum ingesteld, dit is de datum die ingesteld wordt na afronding van een bepaalde fase. Vervolgens loopt een For Next loop door het aantal dagen heen, zoals deze bepaald is in de setDaysFases procedure. Ook wordt per dag bekeken of die dag in een weekend valt. Daarna volgt nog de controle of die dag een vakantiedag is.
De vakantiedagen worden opgehaald uit het configuratiedocument. Via de ArrayGetIndex functie is het eenvoudig te achterhalen of de checkDate voorkomt in het lijstje met
vakantiedagen.
Na elke nieuwe For wordt de checkDate opnieuw ingesteld met de FaseDate en deze corrigeert via AdjustDay de nieuwe dag (x=1 to aantalDagen).
Mocht de nieuwe dag een zaterdag zijn dan wordt het aantal doorloopdagen met 2 dagen verlengd, mocht deze dag een vakantiedag zijn dan wordt het aantal doorloopdagen met
1 dag verlengd.
Vervolgens is het noodzakelijk om te bepalen of de eventuele nieuwe dag wederom geen weekenddag of vakantiedag is:
Om dit te controleren wordt de checkDate “AdjustDay-ed” met het aantal correctiedagen zoals die in het vorige loop bepaald is. Mocht deze nieuwe dag een zaterdag, zondag of vakantiedag zijn dan wordt de check op false gezet en het aantal doorloopdagen met 1 verhoogt. Dit herhaalt zich totdat de check True is.
De laatste stap in het proces is bepalen of de huidige date voorbij de checkDate is:
Indien dit het geval is dan wordt er een sendMail procedure aangeroepen welke de proces eigenaar attendeert op het feit dat een bepaalde fase over tijd is en wie op dat moment de verantwoordelijke is voor die fase.