3

我正在尝试访问有关在 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();

执行代码时,上述代码段的最后一行抛出异常

TypeError:this.get_context 不是函数。

4

2 回答 2

2

可能会发生此错误,因为尚未加载 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()

于 2015-06-19T18:19:50.240 回答
1

@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");`
于 2015-06-19T21:08:25.540 回答