用于工作流的SharePoint JavaScript API引发错误

时间:2015-06-19 14:13:51

标签: javascript sharepoint workflow sharepoint-jsom

我正在尝试访问有关在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不是函数。

2 个答案:

答案 0 :(得分:2)

Propbaly发生此错误,因为尚未加载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()   库。

答案 1 :(得分: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");`