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