【问题标题】:SharePoint Workflow Subscription Service failedSharePoint 工作流订阅服务失败
【发布时间】:2016-01-06 12:21:08
【问题描述】:

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

<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() 函数。但当时,我收到以下错误。

加载订阅失败

无效请求

未定义

谁能帮我解决这个问题。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    根据脚本和错误信息,

    我建议您检查“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

    如果有任何进展,请随时回复测试结果。

    【讨论】:

    • itemId 和 is 返回正确的值,订阅返回非空值。
    • 我会回复你的。我正在调查这件事。
    • 我们可以做 Skype 文本吗?
    • 您好,您对此有什么解决方案吗?我仍在为此苦苦挣扎。抱歉给您添麻烦
    • 不,我还在做这个,我不能得到任何可靠的点。我会回复你的。让我们继续聊天吧。
    【解决方案2】:

    基于其他人提供的解决方案,这是我能够使用的代码。注意:您需要将工作流程设置为“允许手动启动此工作流程”。

    /**
    *   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)
                    });
                }
            );
        });         
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2020-06-24
      相关资源
      最近更新 更多