Работа с проектами

Aspose.Tasks для .NET позволяет работать с файлами Microsoft Project (MPP/XML) без установки Microsoft Project и без использования Microsoft Office Automation. Он предоставляет мощный и гибкий API который помогает разработчикам экономить время и силы, предлагая единый способ управления данными проекта в различных форматах.

С помощью Aspose.Tasks вы можете:

В этой статье объясняется, как создавать, читать и сохранять файлы проектов используя 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, выполнив следующие шаги:

  1. В меню Файл выберите Открыть.
  2. Выберите формат XML (*.xml) в списке типов файлов и перейдите к выходному XML-файлу.
  3. В меню Проект выберите Сведения о проекте

Создание пустого проекта и сохранение в поток

Если вам нужно работать с проектами в памяти (например, в веб-приложениях или облачных средах), вы можете сохранять напрямую в 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 класса, вы можете:

Будь вы создаете настольное решение или веб-приложение, Aspose.Tasks предоставляет последовательный и надежный API для программного управления данными проекта.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.