Cykliczne uruchamianie przepływów w Sharepoint za pomocą PowerShell

Czasem przychodzi taka chwila, że w witrynie Sharepoint chcemy cyklicznie uruchamiać jakiś workflow, np z mailowymi „przypominajkami” o zadaniach. W tym wpisie zaprezentuję jak w prosty sposób to uczynić.

W Sharepoint Designer jest taka akcja jak „Wstrzymaj na jakiś czas” i „Wstrzymaj do daty”, lecz z doświadczenia wiem że różnie z tymi akcjami bywa – bardzo często się nie uruchamiają. Winą za ten stan rzeczy obwiniam Sharepoint Timer Service, więc aby pominąć ten serwis zazwyczaj korzystam z windowsowego Task Schedulera i skryptu napisanego w PowerShell-u, a także z prostego workflowu napisanego za pomocą dowolnego narzędzia.

Workflow

Tutaj nie będę się zagłębiać, jak utworzyć workflow. Możesz go utworzyć w Sharepoint Designerze lub w Visual Studio. Workflow powinien wykonywać prostą akcję np. wysłanie e-maila.

Skrypt:

Skrypt zapisujemy do pliku skrypt.ps1:

# SharePoint.Workflow.Start-SPSiteWorkflow
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

$workflowName="Reminder";
$webName = "http://SharepointWeb"
$listName = "My List";
$dateColumn = "Task Date"
$days =-8;

$web = Get-SPWeb -Identity $webName
$manager = $web.Site.WorkFlowManager
$list = $web.Lists[$listName]
$culture = [System.Globalization.CultureInfo]::InvariantCulture
$assoc = $list.WorkflowAssociations.GetAssociationByName($workflowName,$culture)
$data = $assoc.AssociationData
$now=Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0
$items = $list.Items | where {$_[$dateColumn] -eq $now.AddDays($days)}
foreach($item in $items)
{
 $wf = $manager.StartWorkFlow($item,$assoc,$data,$true)
}

Od linii @5 zaczynają się parametry potrzebne do prawidłowego uruchomienia skryptu, czyli: nazwa przepływu, nazwa strony web, nazwa listy, z którą powiązany jest przepływ, kolumna, wg. której będziemy filtrować elementy i na końcu interwał dni: w tym przypadku 8 dni przed datą określoną w kolumnie Task Date.

Scheduler

W szedulerze dodajemy zadanie z cyklem codziennym, a jako akcję wybieramy Start Program:

  • Program/script: Powershell.exe
  • Add arguments: "c:\skrypty\skrypt.ps1"

Trzeba jeszcze sprawdzić czy użytkownik który będzie uruchamiał powyższe zadanie ma odpowiednie uprawnienia do witryny Sharepoint.

Task Scheduler będzie cyklicznie uruchamiał nasz skrypt, który natomiast będzie wykonywał określony workflow na elementach listy. Elementy listy będą natomiast odfiltrowane wg. odpowiedniej kolumny.

Oczywiście zasady filtrowania w skrypcie można zmienić na inne, nie filtrować wg. dat, a np. wg. pola typu bool albo innego, inwencja należy do Was.

Dodaj komentarz

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