public void CanDeploy_Job_UnderWebApplication() { WithExpectedUnsupportedCSOMnO365RunnerExceptions(() => { // OOTB job with 2 parameters for the constructor var webAppJobDefinition = new JobDefinition { Name = Rnd.String(), Title = Rnd.String(), ScheduleString = "yearly at jan 1 09:00:00", JobType = "Microsoft.SharePoint.Administration.SPDeadSiteDeleteJobDefinition, Microsoft.SharePoint", ConstructorParams = new Collection<JobDefinitionCtorParams>() { JobDefinitionCtorParams.JobName, JobDefinitionCtorParams.WebApplication } }; var model = SPMeta2Model .NewWebApplicationModel(webApp => { webApp.AddJob(webAppJobDefinition); }); TestModel(model); }); }
private void DeployTimerJob(object modelHost, JobDefinition jobDefinition) { if (modelHost is WebApplicationModelHost) { var webAppModelHost = modelHost as WebApplicationModelHost; DeployWebApplicationJob(modelHost, webAppModelHost.HostWebApplication, jobDefinition); } else { throw new SPMeta2NotImplementedException(string.Format("JobDefiniton deployment is not supported under host of type:[{0}]", modelHost.GetType())); } }
protected virtual void MapProperties(SPJobDefinition currentJobInstance, JobDefinition jobDefinition) { if (!string.IsNullOrEmpty(jobDefinition.ScheduleString)) { currentJobInstance.Schedule = SPSchedule.FromString(jobDefinition.ScheduleString); } if (!string.IsNullOrEmpty(jobDefinition.Title)) currentJobInstance.Title = jobDefinition.Title; foreach (var prop in jobDefinition.Properties) { var key = prop.Key; var value = prop.Value; if (currentJobInstance.Properties.ContainsKey(key)) currentJobInstance.Properties[key] = value; else currentJobInstance.Properties.Add(key, value); } }
protected Type ResolveJobType(JobDefinition jobDefinition) { Type jobType = null; var subType = jobDefinition.JobType.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); if (subType.Length == 2) { var typeName = subType[0].Trim(); var assemblyName = subType[1].Trim(); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); var targetAssembly = assemblies.FirstOrDefault(a => a.FullName.Split(',')[0].ToUpper() == assemblyName.ToUpper()); jobType = targetAssembly.GetType(typeName); } else { jobType = Type.GetType(jobDefinition.JobType); } return jobType; }
protected SPJobDefinition FindWebApplicationJob(object modelHost, SPWebApplication webApp, JobDefinition jobDefinition) { var jobNameInUpperCase = jobDefinition.Name.ToUpper(); return webApp.JobDefinitions.FirstOrDefault(j => !string.IsNullOrEmpty(j.Name) && j.Name.ToUpper() == jobNameInUpperCase); }
private void DeployWebApplicationJob(object modelHost, SPWebApplication webApp, JobDefinition jobDefinition) { var currentJobInstance = FindWebApplicationJob(modelHost, webApp, jobDefinition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentJobInstance, ObjectType = typeof(SPJobDefinition), ObjectDefinition = jobDefinition, ModelHost = modelHost }); if (currentJobInstance == null) { // install one var jobType = ResolveJobType(jobDefinition); // expecting only as timerjob is under web application //public cstr(string jobName, SPWebApplication webapp) if (jobDefinition.ConstructorParams.Count() == 0) { currentJobInstance = (SPJobDefinition)Activator.CreateInstance(jobType); } else { var parameters = new List<object>(); foreach (var param in jobDefinition.ConstructorParams) { switch (param) { case JobDefinitionCtorParams.JobName: parameters.Add(jobDefinition.Name); break; case JobDefinitionCtorParams.WebApplication: parameters.Add(webApp); break; default: throw new SPMeta2NotImplementedException(string.Format("Job cstr parameter [{0}] is not supported yet.", param)); } } currentJobInstance = (SPJobDefinition)Activator.CreateInstance(jobType, parameters.ToArray()); } MapProperties(currentJobInstance, jobDefinition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentJobInstance, ObjectType = typeof(SPJobDefinition), ObjectDefinition = jobDefinition, ModelHost = modelHost }); currentJobInstance.Update(); } else { MapProperties(currentJobInstance, jobDefinition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentJobInstance, ObjectType = typeof(SPJobDefinition), ObjectDefinition = jobDefinition, ModelHost = modelHost }); currentJobInstance.Update(); } }
public static ModelNode AddJob(this ModelNode model, JobDefinition definition, Action<ModelNode> action) { return model.AddDefinitionNode(definition, action); }
public static ModelNode AddJob(this ModelNode model, JobDefinition definition) { return AddJob(model, definition, null); }