SharePoint JavaScript API for Workflow 引发错误

SharePoint JavaScript API for Workflow throws an error

我正在尝试访问有关 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 is not a function.

可能会发生此错误,因为尚未加载 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 function is intended for loading on demand scripts which in turn is a part of SharePoint JavaScript Library. Alternatively you could utilize jQuery.getScript() from jQuery library.

@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");`