Работа с проектами
Aspose.Tasks для .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 типа перечисления.
Следующие строки кода создают простой файл проекта в формате 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 для .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
объектов.
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
формате, также можно прочитать.
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 для .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 для .NET предоставляет разработчикам полный контроль над файлами Microsoft Project без необходимости наличия самого MS Project.
С помощью Project
класса, вы можете:
- Создавать новые проекты (XML, MPP) и сохранять их в файл или поток
- Чтитать существующие проекты в нескольких форматах
- Работать с интеграциями Project Server и баз данных (устаревшая поддержка)
- Корректно обрабатывать проблемы с кодировками и недопустимые символы
Будь вы создаете настольное решение или веб-приложение, Aspose.Tasks предоставляет последовательный и надежный API для программного управления данными проекта.