在我的网站(SP2010)中,我创建了一个触发器,通过SPSite.AddWorkItem方法将一个工作项添加到队列中。这似乎做得很好,因为ScheduledWorkItems表正在填充正确的数据。时间以UTC为单位,是当前时间或过去时间。 ID也都设置好了。因此该表具有所有正确的数据。
但是,永远不会触发从SPWorkItemJobDefinition派生的具有正确ID的自定义创建的Work Item处理器。 添加工作项的AppPool用户也是服务器场管理员。 事件日志或共享点日志文件中没有关于此过程的条目,因此甚至没有被触发。
成功部署和解雇工作项作业的更多先决条件是什么?
答案 0 :(得分:1)
您需要为工作项作业定义创建正在运行的作业实例。工作项作业被安排为任何其他工作。见SPWorkItemJobDefinition Class:
用作派生工作项计时器作业定义的基类。此类使用计时器作业(SPTimerService)来处理工作项(SPWorkItem实例)。 [...] 此类与SPWorkItem和SPWorkItemCollection类紧密配合。您应该使用SPSite对象可以访问的集合类,将工作项添加到处理队列。 当您的工作项目计时器作业执行时,[...]
我建议创建一个功能事件接收器,并在功能激活的“事件”中创建作业实例:
SPWebApplication webApp = // ..;
SomeWorkItemJob = new SomeWorkItemJob("TheName", webApp);
job.Schedule = new SPMinuteSchedule { Interval = 2}; // every two minutes
job.Update(false);