Umzug von Nintex in der Cloud (Teil 3) – oder wo sind denn hier die Workflows?

Inzwischen haben wir mit dem letzten Blogpost ja eine Übersicht alle Webs, in denen Nintex Workflow for Office365 aktiviert worden ist. Nun geht es also um die Frage: was für Workflows gibt es in der jeweiligen Site und welche Workflows sind mit Nintex erstellt und welche ggf. nicht?

Auch hier hilft PowerShell wieder weiter.

Add-Type -Path "d:\Microsoft.SharePoint.Client.WorkflowServices.dll"
$clientId = "client_id=" + [System.Web.HttpUtility]::UrlEncode($appPrincipalId)
$wfmgr = New-Object Microsoft.SharePoint.Client.WorkflowServices.WorkflowServicesManager($ctx, $web)
$wfdpl = $wfmgr.GetWorkflowDeploymentService()
$wfdefs = $wfdpl.EnumerateDefinitions($false)
$ctx.Load($wfdefs)
$ctx.Load($web)
$ctx.ExecuteQuery()

$webUrl = $web.Url
$items = @()
$wfdefs | % {
    $item = @{
        Name = $_.DisplayName
        Region = $_.Properties["NWConfig.Region"]
        Designer = $_.Properties["NWConfig.Designer"]
        Entitlement = $_.Properties["NWConfig.WorkflowEntitlementType"]
        Author = $_.Properties["AppAuthor"]
        LastModified = $_.Properties["ModifiedBy"]
        LastEditor = $_.Properties["SMLastModifiedDate"]
        Type = $_.RestrictToType
        ScopeId = $_.RestrictToScope
        Published = $_.Published
        
        $lauchUrl = $webUrl + "/_layouts/15/appredirect.aspx?"
        $lauchUrl += $clientId
        $lauchUrl += "&redirect_uri=" + [System.Web.HttpUtility]::UrlEncode("https://workflowo365.nintex.com/Hub.aspx?{StandardTokens}&ListId={" + $_.RestrictToScope + "}&AppVersion=1.0.3.0")
        
        Link = $lauchUrl
    }
    $items += $item
}

$items | Export-Csv -Path "workflow_inventory.csv" -NoTypeInformation -Delimiter ";" -Append

Zunächst brauchen wir eine weiter DLL aus dem CSOM-Paket um auf die Workflows zuzugreifen. Gucken wir uns den Code mal wieder genauer an:

  1. Im vorherigen Teil hatten wir in der Funktion Execute-NintexAddFinder bereits die AppPrincipalId der jeweiligen App-Instanz von Nintex Workflow for Office365 ermittelt – diese brauchen wir nun in Zeile 2
  2. Anschließend können wir alle Workflow-Definitionen aus dem WorkflowServicesManager auslesen
  3. Wenn wir jede Workflow-Definition betrachten, interessieren uns insbesondere die Attribute, die von Nintex gesetzt werden. Damit kann erkannt werden aus welcher Region der Workflow stammt, mit welcher Designer-Version der Workflow erstellt wurde und vieles mehr
  4. Anschließend erstellen wir uns eine URL, die auf die Workflow-Gallery der Liste zeigt, wozu der Workflow gehört

Am Ende können wir diese Informationen in eine CSV-Datei schreiben. Diese kann dann mit Excel geöffnet werden und es können alle Workflows gefiltert werden, die von Nintex stammen (z.b. die eine Designer-Version haben). Dazu kann dann die URL aufgerufen werden und der Workflow kann neu veröffentlicht werden.

Fazit

Dank PowerShell dauert nun das durchsuchen meiner 250 Site-Collections nur wenige Minuten und ich erhalten eine Liste aller Workflows. Diese muss ich dann zwar noch immer manuell veröffentlichen, aber immerhin kann direkt an die jeweiligen Galleries springen!

Nach oben scrollen