从处理列表项更改的事件接收器执行TimerJob

时间:2015-12-10 20:23:50

标签: c# sharepoint-2013 timer-jobs event-receiver

我有Event Receiver附加到项目列表中的某些更改。这个事件接收器做的事情消耗了很多程序。我想在流程OWSTIMER.EXE而非W3WP.EXE下运行它,似乎在Sharepoint 2013中,事件接收器在W3WP.EXE下运行。我发现this question因为我想做同样的事,但没有人回答。 由于我想要运行的不同进程存在这个问题,我创建了一个TimerJob this way来查看列表中的项目并执行与第一个事件接收器之前相同的操作。这是有效的,并且按照我想要的方式在OWSTIMER.EXE下运行。 现在,我想要做的是,从我的旧事件接收器(不是我创建的那个运行这个timerJob,就像在示例中)执行TimerJob,只是因为这个列表不会经常更改,我想要进程运行,当它发生变化时。 (我想要的是黑客SharePointEvent Receiver中运行OWSTIME.EXE

我能这样做吗?

提前致谢。

在示例中,事件接收者:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    SPWebApplication parentWebApp = (SPWebApplication)properties.Feature.Parent;
                    SPSite site = properties.Feature.Parent as SPSite;
                    DeleteExistingJob(JobName, parentWebApp);
                    CreateJob(parentWebApp);
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

我的Event Receiver(运行于w3wp.exe):

    public override void ItemUpdated(SPItemEventProperties properties)
            {
                base.ItemAdded(properties);
                //here it does the same that do the Timer Job(but with that item)
                //here I want to execute my TimerJob. This is possible?

            }

2 个答案:

答案 0 :(得分:1)

答案是是,否,是,因为从语法上可以使用以下代码运行计时器作业

var yourjob = (from jobDefinition in WebApp.JobDefinitions
                                where jobDefinition.DisplayName == "oyu job name"
                                select jobDefinition).SingleOrDefault();
if (yourjob != null)
{
   yourjob.RunNow();
}

否,因为使用RunNow(),您需要服务器场管理员权限。

并且您不能使用RunWithElevatedPrivilages,因为当您使用RunWithElevatedPrivileges方法时,代码在应用程序池帐户的上下文中运行,该帐户通常没有服务器场管理员权限。

答案 1 :(得分:0)

SharePoint工作项计时器作业可以帮助您。 在这里你可以找到一个例子: http://sharepintblog.com/2011/12/12/spworkitemjobdefinition-a-different-kind-of-sharepoint-timer-job/