Excute Timerjob
public class TriggerLoadCacheTimerJob : SPJobDefinition { string ExceptionFlag = string.Empty; public TriggerLoadCacheTimerJob() : base() { } // Overriding the parameterized constructor public TriggerLoadCacheTimerJob(string jobName, SPService service, SPServer server, SPJobLockType targetType) : base(jobName, service, server, targetType) { } public TriggerLoadCacheTimerJob(string jobName, SPWebApplication webApp) : base(jobName, webApp, null, SPJobLockType.Job) { // create the timer job with the name passed in Constructor and assign title this.Title = Constants.TIMERJOB_NAME; } public override void Execute(Guid targetInstanceId) { TriggerLoadCacheWebService(); } }
private void TriggerLoadCacheWebService() { try { SPWebApplication webApp = this.Parent as SPWebApplication; Configuration config = WebConfigurationManager.OpenWebConfiguration("/", webApp.Name); string CustomWebServiceURLs = config.AppSettings.Settings["CustomWebServiceUrls"].Value; string AccountName = config.AppSettings.Settings["AccountName"].Value; string Password = config.AppSettings.Settings["Password"].Value; string Domain = config.AppSettings.Settings["Domain"].Value; ExceptionFlag = config.AppSettings.Settings[Constants.LogExceptionFlag].Value; string[] customWSURLs = CustomWebServiceURLs.Split(‘;‘); for (int i = 0; i < customWSURLs.Length; i++) { AEnhancement.PSWebService mywebService = new AEnhancement.PSWebService(); mywebService.Url = customWSURLs[i].ToString(); NetworkCredential credential = new NetworkCredential(AccountName, Password, Domain); //mywebService.Timeout=300000; mywebService.Credentials = credential; mywebService.LoadCacheAsync(); } } catch (Exception ex) { if (ExceptionFlag.ToLower() == "true") { TraceLog.Error("Message:" + ex.Message + "Source:" + ex.Source + "TargetSite:" + Convert.ToString(ex.TargetSite), "TriggerLoadCacheWebService Method in Timer Job"); } } }
Timerjob inherited SPJobDefinition, it is based on webapplication(CA). You are able to debug timerjob via OWSTimer.exe.
Install TimerJob-Feature Active
class TimerJobFeatureReceiver : SPFeatureReceiver { string ExceptionFlag = string.Empty; string InfoFlag = string.Empty; public override void FeatureActivated(SPFeatureReceiverProperties properties) { try { TraceLog.Information("Activate Feature Start", "Activate Feature"); SPSite CurrentSite = properties.Feature.Parent as SPSite; if (CurrentSite == null) { TraceLog.Information("Current Site is NULL", "Activate Feature"); return; } else { TraceLog.Information("Current Site " + CurrentSite.Url, "Activate Feature"); } SPWebApplication webapp = CurrentSite.WebApplication; if (webapp == null) { TraceLog.Information("Web APP is NULL", "Activate Feature"); return; } else { TraceLog.Information("WebAPP "+webapp.Name, "Activate Feature"); } // deletes the timer job if already exists foreach (SPJobDefinition job in webapp.JobDefinitions) { if (job.Name == Constants.TIMERJOB_NAME) { job.Delete(); TraceLog.Information("Timer Job Delete Firstly", "Activate Feature"); break; } } // install the job SPSecurity.RunWithElevatedPrivileges(() => { TraceLog.Information("Install Timer Job Begin", "Activate Feature"); TriggerLoadCacheTimerJob customTimerjob = new TriggerLoadCacheTimerJob(Constants.TIMERJOB_NAME, webapp); TraceLog.Information("111", "Activate Feature"); Configuration config = WebConfigurationManager.OpenWebConfiguration("/", CurrentSite.WebApplication.Name); TraceLog.Information("config created", "Activate Feature"); string TimerJobSchedule = config.AppSettings.Settings["TimerJobSchedule"].Value; TraceLog.Information(TimerJobSchedule, "Activate Feature"); ExceptionFlag = config.AppSettings.Settings[Constants.LogExceptionFlag].Value; SPSchedule schedule = SPSchedule.FromString("daily at " + TimerJobSchedule); //SPMinuteSchedule schedule = new SPMinuteSchedule(); //schedule.BeginSecond = 0; //schedule.EndSecond = 59; //schedule.Interval = 5; customTimerjob.Schedule = schedule; TraceLog.Information("Timer Job UPdate Method Start", "Activate Feature"); customTimerjob.Update(); TraceLog.Information("Timer Job UPdate Method End", "Activate Feature"); TraceLog.Information("Install Timer Job End", "Activate Feature"); }); } catch (Exception ex) { if (ExceptionFlag.ToLower() == "true") { TraceLog.Error("Message:" + ex.Message + "Source:" + ex.Source + "TargetSite:" + Convert.ToString(ex.TargetSite), "TriggerLoadCacheWebService Method in Timer Job"); } } } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { try { SPSite CurrentSite = properties.Feature.Parent as SPSite; if (CurrentSite == null) return; SPWebApplication webapp = CurrentSite.WebApplication; if (webapp == null) return; // deletes the timer job if already exists foreach (SPJobDefinition job in webapp.JobDefinitions) { if (job.Name == Constants.TIMERJOB_NAME) { job.Delete(); break; } } } catch (Exception ex) { if (ExceptionFlag.ToLower() == "true") { TraceLog.Error("Message:" + ex.Message + "Source:" + ex.Source + "TargetSite:" + Convert.ToString(ex.TargetSite), "TriggerLoadCacheWebService Method in Timer Job"); } } } }
Feature base on site
Create Config file in bin Folder
- Create OWSTimer.EXE.Config file in bin folder C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin
- Add these infomation in the file or you can put the file in bin folder.
<configuration> <appSettings> <add key="AccountName" value="Jenny" /> <add key="Password" value="c003#" /> <add key="Domain" value="abc" /> <add key="CustomWebServiceUrls" value="http://sp2007:11908/_vti_bin/AWebService/PSWebService.asmx;http://sp2007:11909/_vti_bin/AWebService/PSWebService.asmx" /> <add key="Detail_PeopleSearch_Debug" value="True" /> <add key="PeopleSearch_Exception" value="True" /> </appSettings> </configuration>
Explanation of Key, Value in Configuration files
- AccountName, Password and Domain keys
Account should be the same as account which is used to run Windows SharePoint Services Timer service
- CustomWebServiceUrls key
It means customwebServiceUrls which you will use in several WFE, you have to configure these several links which is split by " ; ".
- MaxRecords key
It means how many records will get back when user keys in characters.
- TimerJobSchedule key
It stands for when timer job runs
- Detail_PeopleSearch_Debug and PeopleSearch_Exception keys
They are used to enable to note down log when they are set as “True”.
时间: 2024-10-10 12:09:28