SharePoint-Site Workflow für mehrere Elemente starten

​​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:

090114_0942_SiteWorkflo1.png 090114_0942_SiteWorkflo2.png 090114_0942_SiteWorkflo3.png

​In​ meinem nächsten Blogbeitrag werde ich 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.

Viele Grüße

Julian


Comments