【问题标题】:SharePoint JavaScript API for Workflow throws an error用于工作流的 SharePoint JavaScript API 引发错误
【发布时间】:2019-03-01 06:35:40
【问题描述】:

我正在尝试访问有关在 SharePoint 列表中运行工作流的信息,但我遇到了工作流服务 JSOM 库的问题。我正在使用工作流服务,就像我能找到的每个示例一样,请参见下面的代码:

var context = SP.ClientContext.get_current();
var web = context.get_web();
var servicesManager = SP.WorkflowServices.WorkflowServicesManager.newObject(context, web);
var instanceService = servicesManager.getWorkflowInstanceService();

在执行代码时,上面sn -p的最后一行抛出异常

TypeError:this.get_context 不是函数。

【问题讨论】:

    标签: javascript sharepoint workflow sharepoint-jsom


    【解决方案1】:

    可能由于 SharePoint JavaScript 库中的指定文件之一尚未加载而发生此错误。

    • SP.js
    • SP.Runtime.js
    • SP.WorkflowServices.js

    为确保已加载指定的文件,您可以考虑以下方法:

    SP.SOD.registerSod('SP.ClientContext', SP.Utilities.Utility.getLayoutsPageUrl('sp.js'));
    SP.SOD.registerSod('SP.WorkflowServices.WorkflowServicesManager', SP.Utilities.Utility.getLayoutsPageUrl('SP.WorkflowServices.js'));
    SP.SOD.loadMultiple(['SP.ClientContext', 'SP.WorkflowServices.WorkflowServicesManager'], function(){
    
        var ctx = SP.ClientContext.get_current();
        var workflowServicesManager = SP.WorkflowServices.WorkflowServicesManager.newObject(ctx, ctx.get_web()); 
        var workflowSubscriptionService = workflowServicesManager.getWorkflowSubscriptionService();                
        //...    
    
    });
    

    SP.SOD.loadMultiple 函数用于加载按需脚本 它又是 SharePoint JavaScript 库的一部分。 或者,您可以使用 jQuery 中的 jQuery.getScript() 图书馆。

    【讨论】:

    • 我也想过这个问题,但不相信会是这样。我通过使用 ExecuteOrDelayUntilScriptLoaded 方法采取了不同的方法,因此上面的代码已被包装: ExecuteOrDelayUntilScriptLoaded(function () { ExecuteOrDelayUntilScriptLoaded(function () { ExecuteOrDelayUntilScriptLoaded(function () { }, "sp.workflowservices .js"); }, "sp.runtime.js"); }, "sp.js");我将修改代码以尝试 SOD 方法,看看是否有所作为。
    【解决方案2】:

    @VadimGremyachev,我尝试使用您的代码示例,然后得到与 SP.Utilities 相关的 TypeError。我猜 SP.Utilities 是 sp.js 的一部分,所以它不能用来加载自己。我能够使其正常工作的唯一方法是同时使用 SOD 和 ExecuteOrDelayUntilScriptLoaded 方法。我不知道这是否是使用客户端渲染来覆盖列表视图的细微差别,或者只是脚本加载的错误时机。有效的代码如下:

    ExecuteOrDelayUntilScriptLoaded(function () {
        ExecuteOrDelayUntilScriptLoaded(function () {
            SP.SOD.registerSod('SP.ClientContext', SP.Utilities.Utility.getLayoutsPageUrl('sp.js'));
            SP.SOD.registerSod('SP.WorkflowServices.WorkflowServicesManager', SP.Utilities.Utility.getLayoutsPageUrl('SP.WorkflowServices.js'));
            SP.SOD.loadMultiple(['SP.ClientContext', 'SP.WorkflowServices.WorkflowServicesManager'], function () {
                var context = SP.ClientContext.get_current();
                var web = context.get_web();
                var servicesManager = SP.WorkflowServices.WorkflowServicesManager.newObject(context, web);
                var instanceService = servicesManager.getWorkflowInstanceService();
            });
        }, "sp.js");
    }, "sp.runtime.js");`
    

    【讨论】:

    • 这对我有用。我没有尝试@vadim-gremyachev 的回答,因为我已经与这个 2013 年脚本按需废话作斗争了三天。另一个答案可能有效,但我是如此,如此,如此,如此,如此完成。谢谢特拉维斯-l
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2023-03-21
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多