SharePoint Workflow订阅服务失败

时间:2016-01-06 12:21:09

标签: javascript sharepoint sharepoint-2013 undefined sharepoint-workflow

我有一个要求通过JavaScript启动SP工作流程。为此,我已经编写了一些代码行来启动工作流。但是由于未定义的对象,我收到了订阅失败错误。这是在ExcecuteasyncQuery方法中发生的。所以我没有得到哪个对象返回未定义的值。我的代码如下所示。

<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.core.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.workflowservices.js">      </script>
<script type="text/javascript">
var subID = "3debdbad-db52-4586-87e1-40e4db581da5";

function GetCurrentItemID()
{
var ctx = SP.ClientContext.get_current();
var selectedItems = SP.ListOperation.Selection.getSelectedItems(ctx);

for (item in selectedItems)
{
var itemId = selectedItems[item].id;
startWorkflow(itemId, subID);
}
}

function startWorkflow(itemID, subID) {    
var context = SP.ClientContext.get_current();
var web = context.get_web();
 var wfServiceManager = SP.WorkflowServices.WorkflowServicesManager.newObject(context, web);
var subscription = wfServiceManager.getWorkflowSubscriptionService().getSubscription(subID);

context.load(subscription);

context.executeQueryAsync(
    function(sender, args){
        alert("Subscription load success. Attempting to start workflow.");        
        var inputParameters = {};
        wfServiceManager.getWorkflowInstanceService().startWorkflowOnListItem
        (subscription, itemID, inputParameters);

        context.executeQueryAsync(
            function(sender, args){ alert("Successfully starting workflow."); },
            function(sender, args){ 
                alert("Failed to start workflow.");
                alert("Error: " + args.get_message() + "\n" + args.get_stackTrace());
            }
        );
    },
    function(sender,args){
        alert("Failed to load subscription.");
        alert("Error: " + args.get_message() + "\n" + args.get_stackTrace());
    }
);
}
</script>

我在单击按钮时调用GetCurrentItemID()函数。但那时,我收到了以下错误。

  

无法加载订阅

     

无效请求

     

未定义

任何人都可以帮我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:2)

根据脚本和错误消息,

我建议您检查“subscription”和“itemId”对象是否包含正确的值。

此外,您可以查看以下两个链接,了解如何使用JavaScript客户端对象模型启动工作流程:

http://usamawahabkhan.blogspot.com/2013/07/start-workflow-sharepoint-2010.html

https://sharepoint.stackexchange.com/questions/87015/solved-start-a-workflow-of-the-host-web-via-sharepoint-app-and-jsom

随意回复测试结果或是否有任何进展。

答案 1 :(得分:0)

在其他人提供的解决方案的基础上,这里是我能够使用的代码。注意:您需要将工作流程设置为&#34;允许手动启动此工作流程。&#34;

/**
*   Starts a SharePoint 2013 Workflow on a particular list item.
*   Params:
*       workflowName: The name of the Workflow
*       listGUID: the GUID of the list
*       itemId: the ID of the list item
*/  
function startListWorkflow(workflowName, listGUID, itemId){
    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", 
            function(){
                var ctx = new SP.ClientContext.get_current(),
                wfsManager = SP.WorkflowServices.WorkflowServicesManager.newObject(ctx, ctx.get_web()),
                wfSubs = wfsManager.getWorkflowSubscriptionService().enumerateSubscriptionsByList(listGUID);
                ctx.load(wfSubs);
                ctx.executeQueryAsync(function () {
                    wfsEnum = wfSubs.getEnumerator();
                    while (wfsEnum.moveNext()) {
                        var wfSub = wfsEnum.get_current();
                        if (wfSub.get_name() === workflowName) {
                            var initiationParams = {}; 
                            wfsManager.getWorkflowInstanceService().startWorkflowOnListItem(wfSub, itemId, initiationParams);
                            ctx.executeQueryAsync(
                               function (sender, args) {
                                    console.log("Successfully started workflow.");
                               },
                               function (sender, args) {
                                    console.log("Failed to start the workflow.");
                                    console.log("Error: " + args.get_message() + "\n" + args.get_stackTrace());
                               }
                           );
                        }
                    }
                },function(e){
                    console.error(e)
                });
            }
        );
    });         
}