Ejemplo n.º 1
0
        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);
            });
        }
Ejemplo n.º 2
0
 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()));
     }
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
        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();
            }
        }
Ejemplo n.º 7
0
 public static ModelNode AddJob(this ModelNode model, JobDefinition definition, Action<ModelNode> action)
 {
     return model.AddDefinitionNode(definition, action);
 }
Ejemplo n.º 8
0
 public static ModelNode AddJob(this ModelNode model, JobDefinition definition)
 {
     return AddJob(model, definition, null);
 }