Einen SharePoint-Site Workflow für mehrere Elemente gleichzeitig starten

Datum

16.12.2014

Dieser Beitrag wurde verfasst von:

Julian Jung

Grundsätzlich startet ein Listenworkflow in Microsoft SharePoint für neue oder geänderte Elemente im Kontext dieses Elements. Um einen Workflow für m​ehrere Elemente zu starten, gibt es vorerst keine Funktion.

Um dennoch einen Workflow für mehrere Elemente zugleich starten zu können, haben wir einen Ribbon Button implementiert. Dieser übergibt per JSOM (JavaScript Object Model) die selektierten Elemente in einem Ajax Aufruf an den Nintex WebService und startet somit einen oder mehrere Site Workflows.

Im Ribbon wird folgende JavaScript Funktion aufgerufen:

<CommandUIHandler Command="SharePoint.DoSmth" CommandAction="javascript:SharePoint.DoSmth.Execute('{SiteUrl}');"EnabledScript="javascript:SharePoint.DoSmth.IsEnabled();" />

Im JavaScript wird folgendes ausgeführt um den Site Workflow zu starten und die ausgewählten Elemente an den Workflow zu übergeben:

ExecuteSingle: function (webUrl, itemId) {
 
    var item = {
        id: itemId
    };
 
    var items = new Array(item);
    SharePoint.Common.RunNintexSiteWorkflow("DoSmth", items, webUrl);
},​​
 
RunNintexSiteWorkflow: function (workflowName, selectedItems, webUrl) {
 
    var selectedItemsString = '';
    var i;
 
    for (i in selectedItems) {
        selectedItemsString += selectedItems[i].id + ';';
    }
 
    selectedItemsString = selectedItemsString.substr(0, selectedItemsString.length - 1);
 
    SP.UI.Notify.addNotification("Working..."false);
 
    var associationData = '\' + selectedItemsString + ']]\>';
    var webMethod = webUrl + '/_vti_bin/nintexworkflow/workflow.asmx';
    var soap = "" +
    "" +
    "" +
    "" +
    "" + workflowName + "" +
    "" + associationData + "" +
    "" +
    "" +
    "";
 
    $.ajax({
        type: "POST",
        url: webMethod,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("SOAPAction""http://nintex.com/StartSiteWorkflow");
        },
        data: soap,
        contentType: "text/xml; charset=utf-8",
        dataType: "xml",
        success: function (data) {
 
            SP.UI.Notify.addNotification(selectedItems.length + ' item' 's' ' processed.'false);
 
        },
        error: function (e) {
            SP.UI.Notify.addNotification("Error"false);
            alert(e.responseText);
        }
    });
}

Der Nintex Workflow empfängt anschließend die associationData und verarbeitet diese als Nintex Variable weiter:

Im nächsten Blogbeitrag wird dann beschreiben, wie der Workflow mit administrativen Berechtigungen gestartet werden kann und somit auch von Benutzern, die z. B. nur Read Permissions auf die Seite haben.​