Робота з проєктами
Aspose.Tasks for .NET дозволяє працювати з Microsoft Project (MPP/XML) файлами без встановлення Microsoft Project або залежності від Microsoft Office Automation. Він надає потужний та гнучкий API який допомагає розробникам заощаджувати час та зусилля, пропонуючи послідовний спосіб оперувати даними проєкту в різних форматах.
З Aspose.Tasks ви можете:
- Створювати нові файли проєктів з нуля або на основі шаблонів
- Відкривати існуючі файли у різних форматах (MPP, MPT, MPX, XML, XER, P6 XML)
- Зберігати проєкти в кількох форматах, включаючи MPP, XML, PDF, HTML та інші
У цій статті пояснюється, як створювати, читати та зберігати файли проєктів використовуючи Project
class.
Створення порожнього файлу проєкту
Клас Project class є основним класом в Aspose.Tasks, який використовується для встановлення та отримання властивостей, пов’язаних із проєктом, а також для керування його поведінкою. Метод Save цього класу дозволяє вивести Project у різні вихідні формати, такі як XML, MPP, PDF, HTML тощо, одним викликом API. Цей метод приймає файловий потік або ім’я файлу, а також одне зі значень, які надає SaveFileFormat enumeration type.
Наступні рядки коду створюють простий файл проєкту у форматі XML.
Створення порожнього проєкту та збереження у форматі XML
У цьому прикладі показано, як створити новий проєкт і зберегти його як XML-файл, який можна відкрити в Microsoft Project.
1Project project = new Project();
2project.Save("EmptyProjectSaveXML_out.xml", SaveFileFormat.XML);
Отриманий XML-файл проєкту можна відкрити в Microsoft Project, виконавши такі кроки:
- У меню ‘Файл’ виберіть ‘Відкрити’.
- Виберіть формат XML (*.xml) із списку типів файлів і знайдіть вихідний XML-файл.
- У меню ‘Проєкт’ виберіть ‘Відомості про проєкт’
Створення порожнього проєкту та збереження в потік
Якщо вам потрібно працювати з проєктами в пам’яті (наприклад, у веб-застосунках або хмарних середовищах), ви можете зберегти безпосередньо в потік MemoryStream
замість запису у файл.
1// Create a project instance
2Project newProject = new Project();
3
4// Create a file stream
5using (FileStream stream = new FileStream("EmptyProjectSaveStream_out.xml", FileMode.Create, FileAccess.Write))
6{
7 // Write the stream into XML format
8 newProject.Save(stream, SaveFileFormat.XML);
9}
Створення порожнього проєкту та збереження у форматі MPP
У цьому прикладі показано, як згенерувати рідний Microsoft Project MPP файл програмно.
1// there is no more need to load MPP template to save it into MPP
2// add tasks, resources, etc.
3Project project = new Project();
4
5// !The project will be saved into MPP by using internal MPP template.
6project.Save("New Project.mpp", SaveFileFormat.MPP);
Читання файлу проєкту
Aspose.Tasks for .NET дозволяє читати існуючі проєкти у різних форматах: XML, MPP, MPT, MPX, XER, Primavera P6 XML тощо та зберегти їх назад у MPP або інший формат після оновлення. Наведені нижче фрагменти коду показують, як файл проєкту можна прочитати за допомогою конструктора класу Project.
Читання файлів проєкту як шаблону
У цьому прикладі показано, як завантажити проєкт, використовуючи Project
конструктор і використовувати його як шаблон для подальшої роботи.
1// Read existing project template file
2Project project = new Project("New Project.mpp");
Читання файлу проєкту з потоку
У випадках, коли проєкти завантажуються або зберігаються в потоках, їх можна завантажувати безпосередньо з відповідних об’єктів Stream
objects.
1// Read the project xml into file stream
2using (FileStream stream = new FileStream("ReadProjectFileFromStream.xml", FileMode.Open))
3{
4 // Create project using file stream
5 Project project = new Project(stream);
6}
Імпорт даних проєкту з бази даних Microsoft Project Server
Ми плануємо припинити підтримку імпорту даних проєкту з бази даних Microsoft Project Server у майбутньому випуску. Натомість ви можете використовувати імпорт/експорт даних проєкту за допомогою PWA API Microsoft Project Server.
Дивіться документацію для ProjectServerManager класу для детальнішої інформації.
1 // Create connection string
2 SqlConnectionStringBuilder sqlConnectionString = new SqlConnectionStringBuilder();
3 sqlConnectionString.DataSource = "192.168.56.2,1433";
4 sqlConnectionString.Encrypt = true;
5 sqlConnectionString.TrustServerCertificate = true;
6 sqlConnectionString.InitialCatalog = "ProjectServer_Published";
7 sqlConnectionString.NetworkLibrary = "DBMSSOCN";
8 sqlConnectionString.UserID = "sa";
9 sqlConnectionString.Password = "*****";
10
11 // Use Aspose.Tasks.Connectivity namespace
12 MspDbSettings settings = new MspDbSettings(sqlConnectionString.ConnectionString, new Guid("E6426C44-D6CB-4B9C-AF16-48910ACE0F54"));
13 Project project = new Project(settings);
Імпорт даних проєкту з файлу MPD (Microsoft Project Database)
Старіші бази даних проєктів, збережені у форматі .mpd
MPD, також можна прочитати.
1 DbSettings settings = new MpdSettings("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + "MpdFileToRead.mpd", 1);
2 Project project = new Project(settings);
Ігнорування недійсних символів під час завантаження проєкту
У деяких файлах у користувацьких полях можуть бути недійсні символи. Microsoft Project не дозволяє недійсні символи, тож файли могли бути створені або змінені за допомогою автоматизації чи інших інструментів. Якщо ці файли завантажити за допомогою API, це може призвести до винятку. Щоб ігнорувати такі недійсні символи, можна використовувати перевантажений конструктор класу Project з делегатом ParseErrorCallBack.
1static void Run()
2{
3 // Open modified xml stream
4 using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(GetModifiedXml())))
5 {
6 Project project = new Project(stream, new ParseErrorCallback(CustomDurationHandler));
7 }
8}
9
10static string GetModifiedXml()
11{
12 // Open valid xml file and modify it
13 using (TextReader reader = new StreamReader("IgnoreInvalidCharacters.xml"))
14 {
15 string xml = reader.ReadToEnd();
16 Regex regex = new Regex("PT(\\d+)H(\\d+)M(\\d+)S");
17 return regex.Replace(xml, "**$1Hrs$2Mins$3Secs**");
18 }
19}
20
21static object CustomDurationHandler(object sender, ParseErrorArgs args)
22{
23 Regex regex = new Regex("[*]{2}(\\d+)Hrs(\\d+)Mins(\\d+)Secs[*]{2}");
24 if (args.FieldType == typeof(TimeSpan))
25 {
26 Debug.Print("Object field : {0}, Invalid value : {1}", args.FieldName, args.InvalidValue);
27 string duration = regex.Replace(args.InvalidValue, "PT$1H$2M$3S");
28 TimeSpan newValue = Duration.ParseTimeSpan(duration);
29 Debug.Print("New value : {0}", newValue);
30 return newValue;
31 }
32 // Here we handle only TimeSpan instances, so rethrow original exception with other types
33 throw args.Exception;
34}
Робота з кодуваннями
При роботі з файлами MPX може знадобитися вказати правильне кодування файлу. Це гарантує, що текстові дані будуть правильно прочитані та відображені. Aspose.Tasks for .NET підтримує кодування файлів MPX. Наведений нижче приклад коду показує налаштування кодування.
1// Specify Encodings
2using (StreamReader streamReader = new StreamReader("Project.mpx", System.Text.Encoding.GetEncoding("ISO-8859-1")))
3{
4 Project project = new Project(streamReader.BaseStream);
5}
Aspose.Tasks for .NET дає розробникам повний контроль над файлами Microsoft Project без необхідності в самому MS Project.
За допомогою Project
class, ви можете:
- Створювати нові проєкти (XML, MPP) та зберігати їх у файл або потік
- Читати існуючі проєкти у кількох форматах
- Працювати з Project Server та інтеграціями баз даних (підтримка застарілих функцій)
- Обробляти проблеми кодування та недійсні символи коректно
Незалежно від того, чи створюєте ви настільне рішення чи веб-застосунок, Aspose.Tasks надає послідовний та надійний API для програмного керування даними проєкту.