public static DeviceExportTaskContext ScheduleNow(DeviceExportOptions Options) { // Build Context var context = new DeviceExportTaskContext(Options); // Build Data Map var task = new DeviceExportTask(); JobDataMap taskData = new JobDataMap() { { JobDataMapContext, context} }; // Schedule Task context.TaskStatus = task.ScheduleTask(taskData); return context; }
public DeviceExportTaskContext(DeviceExportOptions Options) { this.Options = Options; }
public static DeviceExportResult GenerateExport(DiscoDataContext Database, DeviceExportOptions Options) { return GenerateExport(Database, Options, ScheduledTaskMockStatus.Create("Device Export")); }
public static DeviceExportResult GenerateExport(DiscoDataContext Database, IQueryable<Device> Devices, DeviceExportOptions Options, IScheduledTaskStatus TaskStatus) { TaskStatus.UpdateStatus(15, "Building metadata and database query"); var metadata = Options.BuildMetadata(); if (metadata.Count == 0) throw new ArgumentException("At least one export field must be specified", "Options"); // Update Users if (Options.AssignedUserDisplayName || Options.AssignedUserSurname || Options.AssignedUserGivenName || Options.AssignedUserPhoneNumber || Options.AssignedUserEmailAddress) { TaskStatus.UpdateStatus(20, "Updating Assigned User details"); var users = Devices.Where(d => d.AssignedUserId != null).Select(d => d.AssignedUserId).Distinct().ToList(); users.Select((userId, index) => { TaskStatus.UpdateStatus(20 + (((double)20 / users.Count) * index), string.Format("Updating Assigned User details: {0}", userId)); try { return UserService.GetUser(userId, Database); } catch (Exception) { return null; } // Ignore Errors }).ToList(); } // Update Last Network Logon Date if (Options.DeviceLastNetworkLogon) { TaskStatus.UpdateStatus(40, "Updating device last network logon dates"); try { TaskStatus.IgnoreCurrentProcessChanges = true; TaskStatus.ProgressMultiplier = 20 / 100; TaskStatus.ProgressOffset = 40; Interop.ActiveDirectory.ADNetworkLogonDatesUpdateTask.UpdateLastNetworkLogonDates(Database, TaskStatus); Database.SaveChanges(); TaskStatus.IgnoreCurrentProcessChanges = false; TaskStatus.ProgressMultiplier = 1; TaskStatus.ProgressOffset = 0; } catch (Exception) { } // Ignore Errors } TaskStatus.UpdateStatus(60, "Extracting records from the database"); var records = BuildRecords(Devices).ToList(); var stream = new MemoryStream(); TaskStatus.UpdateStatus(80, string.Format("Formatting {0} records for export", records.Count)); using (StreamWriter writer = new StreamWriter(stream, Encoding.Default, 0x400, true)) { // Header writer.Write('"'); writer.Write(string.Join("\",\"", metadata.Select(m => m.Item2))); writer.Write('"'); // Records foreach (var record in records) { writer.WriteLine(); writer.Write(string.Join(",", metadata.Select(m => { var value = m.Item3(record); var isString = m.Item4; if (value == null) return null; else if (!isString) return value; else if (Options.ExcelCsvFormat) return string.Concat("=\"", value, "\""); else return string.Concat("\"", value, "\""); }))); } } stream.Position = 0; return new DeviceExportResult() { CsvResult = stream, RecordCount = records.Count }; }
public static DeviceExportResult GenerateExport(DiscoDataContext Database, DeviceExportOptions Options, IScheduledTaskStatus TaskStatus) { switch (Options.ExportType) { case DeviceExportTypes.All: return GenerateExport(Database, Database.Devices, Options, TaskStatus); case DeviceExportTypes.Batch: if (Options.ExportTypeTargetId.HasValue && Options.ExportTypeTargetId.Value > 0) return GenerateExport(Database, Database.Devices.Where(d => d.DeviceBatchId == Options.ExportTypeTargetId), Options, TaskStatus); else return GenerateExport(Database, Database.Devices.Where(d => d.DeviceBatchId == null), Options, TaskStatus); case DeviceExportTypes.Model: return GenerateExport(Database, Database.Devices.Where(d => d.DeviceModelId == Options.ExportTypeTargetId), Options, TaskStatus); case DeviceExportTypes.Profile: return GenerateExport(Database, Database.Devices.Where(d => d.DeviceProfileId == Options.ExportTypeTargetId), Options, TaskStatus); default: throw new ArgumentException(string.Format("Unknown Device Export Type", Options.ExportType.ToString()), "Options"); } }