/// <summary> /// Called internally, except for JobLauncher module /// </summary> /// <param name="oJobDetail"></param> /// <returns></returns> public ErrorCode ExecuteJobNew(JobDetails jobDetail, ref IJobWrapper ijobWrapper) { if (jobDetail.Xml.Equals(String.Empty)) { jobDetail.Xml = globalConfig.Hierarchy.GetValueAtLevel("app\\BITS_JOB_SPEC", jobDetail.Name.Replace("_Job", ""), ""); if (jobDetail.Xml.Equals(String.Empty)) { log.ErrorFormat("No job spec found for {0}. Skipping request to build job.", jobDetail.Name); return ErrorCode.JOB_SPEC_NOT_FOUND; } } if (jobWrappers.ContainsKey(jobDetail.Name) && jobDetail.Name.Contains("ADHOC") == false) { return ErrorCode.JOB_CODE_NOT_UNIQUE; } // Set up job spec for "Run Once." This means that the start time will be set to *IMMEDIATELY*, the // weekly schedule will be set to SMTWTFS. if (jobDetail.RunOnce) { XmlDocument xdocAdhoc = Job.SetRunOnceAttributes(jobDetail.Xml, true); jobDetail.Xml = xdocAdhoc.InnerXml; } #endregion // Obtain a new PropertyBag for the job's metatags (ie the job's Dynamic Parameters). In this PropertyBag, // the parameters that were identified as Environmental will have been set. Those that are not Environmental, // (ie Runtime) will have a value of null; PropertyBag jobMetaTags = MetaTagReplacer.GetJobParametersPB(jobDetail.Name, jobDetail.Xml); MetaTagReplacer.SetParametersValuesPB(ref jobMetaTags, ConfigUtils.MetatagMode.Environment, null, null); // Use the Dynamic Parameters PropertyBag to define the job spec at Enable-time. Only Environment parameters // will be determined at this time. jobDetail.Xml = MetaTagReplacer.InlineMetatagSubstitution(jobDetail.Xml, jobMetaTags); // Create the job. This step instantiates the job's modules and sets up the job's dependencies Job job = (Job)JobImpl.BuildJobFromXml(jobDetail); if (job == null) { log.ErrorFormat("Unable to build job from job spec for {0}. Skipping request to build job.", jobDetail.Name); return ErrorCode.UNABLE_TO_BUILD_JOB_FROM_SPEC; } job.Config.RunInstance = globalConfig.RunInstance; job.Config.SuppressEmail = globalConfig.SuppressEmail; job.JobState.CurrentParameters.CurrentParameters = jobMetaTags; foreach (JobDetailsData jdd in jobDetail.Data) { ((IModule)job.Modules[jdd.ModuleName]).OutputData.Add(jdd.DataName, jdd.Data); } // Create JobWrapper JobExeWrapper jobWrapper = null; if (jobWrappers.ContainsKey(job.JobName)) { jobWrapper = jobWrappers[job.JobName]; job.Key = DateTime.Now; jobWrapper.Job = job; jobWrapper.ResetState(); } else { job.Key = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); jobWrapper = new JobExeWrapper(job); } ijobWrapper = jobWrapper; // Job will be enabled after this... lock (jobWrappers) { jobWrappers[job.JobName] = jobWrapper; } return ProcessJob(jobWrapper); }
public int FileReceived(string fullfilename, ref IJobWrapper jobWrapper) { string path = fullfilename.IndexOf("\\") > -1 ? fullfilename.Substring(0, fullfilename.Length - fullfilename.LastIndexOf("\\")) : ""; string filename = fullfilename.IndexOf("\\") > -1 ? fullfilename.Substring(fullfilename.LastIndexOf("\\") + 1, fullfilename.Length - fullfilename.LastIndexOf("\\") - 1) : fullfilename; return FileReceived(0, String.Format("{0}\\{1}"), path, filename); }