SharePoint 通过各种对象触发工作流

Posted 霖雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SharePoint 通过各种对象触发工作流相关的知识,希望对你有一定的参考价值。

  前言

  真的是好久好久之前存的草稿了,当时只保存了代码,大家看看还有用不,哈哈

  正文

  通过javascript去触发列表工作流,代码如下:

function startWF(itemID, listId) 
    var context = SP.ClientContext.get_current();
    var web = context.get_web();
    var workflowServiceManager = SP.WorkflowServices.WorkflowServicesManager.newObject(context, web);
    var workflowSubscriptionService = workflowServiceManager.GetWorkflowSubscriptionService();
    var subscriptions = workflowSubscriptionService.EnumerateSubscriptionsByList(listId);
    //run all workflows associated with the list
    context.load(subscription);
    context.executeQueryAsync(function(sender, args) 
        foreach(var workflowSubscription in subscriptions) 
            var inputParameters = ;
            workflowServiceManager.GetWorkflowInstanceService().StartWorkflowOnListItem(workflowSubscription, itemId, inputParameters);
        
        context.executeQueryAsync(Function.createDelegate(this, this.onStartSucceeded), Function.createDelegate(this, this.onStartFailed));
    ,
    Function.createDelegate(this, this.onLoadFailed));



function onStartSucceeded(sender, args) 
    alert("Workflow Started Successfully.");


function onStartFailed(sender, args) 
    alert('Workflow Initiation Failed  ' + args.get_message() + '\\n' + args.get_stackTrace());


function onLoadFailed(sender, args) 
    alert('Request failed. ' + args.get_message() + '\\n' + args.get_stackTrace());

  代码二,启动站点工作流,如下:

function LoadScripts() 
    SP.SOD.executeFunc("sp.js", "SP.ClientContext",
    function() 
        SP.SOD.registerSod('sp.workflowservices.js', SP.Utilities.Utility.getLayoutsPageUrl('sp.workflowservices.js'));
        SP.SOD.executeFunc('sp.workflowservices.js', "SP.WorkflowServices.WorkflowServicesManager", StartSiteWorkflow);
    )


function StartSiteWorkflow() 

    var context = SP.ClientContext.get_current();

    var web = context.get_web();

    //Workflow Services Manager
    var wfServicesManager = new SP.WorkflowServices.WorkflowServicesManager(context, web);

    //Workflow Interop Service used to interact with SharePoint 2010 Engine Workflows
    var interopService = wfServicesManager.getWorkflowInteropService()

    //Initiation Parameters have to be in a plain JS Object.
    var initiationParameters = 
        FirstName: "Vardhaman",
        LastName: "Deshpande"
    ;

    //Start the Site Workflow by Passing the name of the Workflow and the initiation Parameters.
    interopService.startWorkflow("My Workflow", null, null, null, initiationParameters);

    context.executeQueryAsync(function() 
        console.log("workflow started");
    ,
    function(sender, args) 
        console.log(args.get_message());
    );


jQuery(document).ready(function() 
    LoadScripts();
);

  代码三,通过PowerShell去启动列表工作流

Add-PSSnapin "Microsoft.SharePoint.PowerShell"
$sourceWebURL = 'http://devserver'
$TargetWorkflow = 'AutoUpdateAppointmentStatus'
$spSourceWeb = Get-SPWeb $sourceWebURL
$spSourceList = $spSourceWeb.Lists['ServiceAppointments']
$wfm = New-object Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager($spSourceweb)
$sub = $wfm.GetWorkflowSubscriptionService()
$WF = $sub.EnumerateSubscriptionsByList($spSourcelist.ID) | Where-Object $_.Name -eq "$TargetWorkflow"
$wfis = $wfm.GetWorkflowInstanceService()
$object = New-Object 'system.collections.generic.dictionary[string,object]'
$object.Add("itemId", 42);
$object.Add("WorkflowStart", "StartWorkflow");
$wfis.StartWorkflowOnListItem($WF, 42, $object)

  第四部分,通过CSOM操作工作流,自己只收藏了文档连接,大家看一看吧

https://docs.microsoft.com/en-us/sharepoint/dev/general-development/working-with-the-sharepoint-workflow-services-client-side-object-model

  结束语

  真的是好久之前的代码了,应该是之前研究工作流,保存的。

  大家可以试试,自己肯定也是觉得靠谱,才保存在博客草稿的~

以上是关于SharePoint 通过各种对象触发工作流的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint 通过各种对象触发工作流

通过 List Webservice 更新列表项来触发 SharePoint 工作流

SharePoint Online 触发的Automate工作流的调试

SharePoint Online 触发的Automate工作流的调试

SharePoint Online 触发的Automate工作流的调试

SharePoint Online 触发Teams审批