Открытый .NET API для управления проектами, позволяющий работать с проектами в Redmine
Ведущая библиотека управления проектами C# .NET позволяет разработчикам создавать, читать, манипулировать и конвертировать файлы проектов в другие форматы, такие как MPP, MPT, XML, XER, PMXML и многие другие.
Что такое MPXJ.NET?
Управление данными проекта часто означает борьбу с множеством форматов файлов из таких инструментов, как Microsoft Project, Primavera P6 и других. Если вы разработчик .NET и хотите программно читать, записывать и манипулировать данными проекта, не будучи привязанным к одной платформе, MPXJ.NET — мощная открытая библиотека, которую вы искали. Библиотека включает несколько важных функций для работы с файлами управления проектами, таких как создание новых проектов, чтение существующих файлов проектов, конвертация между форматами, манипулирование данными расписания, работа с ресурсами и назначениями программно.
MPXJ.NET — это открытый .NET-обертка вокруг Java-библиотеки MPXJ (разработана Джоном Айлесом). Она позволяет .NET‑разработчикам — C#, VB.NET и т.д. — читать, записывать и манипулировать файлами расписаний проектов, используя идиоматические типы и соглашения C#. Библиотека MPXJ поддерживает множество форматов расписаний и проектов, таких как MPP, MPX, MSPDI XML, XER, базы данных P6, Planner XML и др. Хотя MPXJ изначально написана на Java, MPXJ.Net оборачивает её и представляет C#‑конвенции (свойства вместо Java‑геттеров/сеттеров; .NET‑наименования), поэтому она естественно вписывается в код .NET. Независимо от того, собираете ли вы данные для корпоративного портфеля, проводите проверку качества расписаний или создаёте мост между вашей CRM и инструментами PMO, MPXJ.Net предоставляет надёжную, высокопроизводительную основу, необходимую вам.
Начало работы с MPXJ.NET
Рекомендуемый способ установки MPXJ.NET — через NuGet. Пожалуйста, используйте следующие команды для беспроблемной установки.
Установить MPXJ.NET через NuGet
NuGet\Install-Package MPXJ.Net -Version 14.5.2
Вы можете скачать напрямую с страницы GitHub
Создание и манипулирование проектами через .NET
Открытый исходный код MPXJ.NET предоставляет несколько важных функций для работы с файловыми проектами в приложениях .NET. Помимо чтения, вы можете создавать новые файлы проектов с нуля: определять свойства проекта (название, автор, дата начала), добавлять календари и исключения, добавлять задачи (с длительностями, датами начала, числовыми полями), добавлять ресурсы и назначения, создавать зависимости (задача A предшествует задаче B), а затем сохранять в формат файла (например, MSPDI или MPX), который может быть открыт MS Project или другими инструментами. Ниже приведён простой пример, демонстрирующий, как создать новый проект в приложениях .NET.
Как создать новый проект и записать его в формате XML с помощью библиотеки .NET?
using Net.Sf.Mpxj;
using Net.Sf.Mpxj.Write;
using System;
// Create a new, empty project file
ProjectFile project = new ProjectFile();
// Set basic project properties
project.Name = "My New MPXJ-Generated Project";
project.StartDate = DateTime.Now;
// Add tasks
Task task1 = project.AddTask();
task1.Name = "Task 1";
task1.Duration = project.GetDuration(8, TimeUnit.Hours); // 1 day
task1.Start = DateTime.Now;
Task task2 = project.AddTask();
task2.Name = "Task 2 (Child of Task 1)";
task2.Duration = project.GetDuration(16, TimeUnit.Hours); // 2 days
task2.Start = DateTime.Now.AddDays(1);
// Make task2 a child of task1 by setting the outline level
task2.OutlineLevel = 1;
// Create a writer for the desired output format
ProjectWriter writer = new MicrosoftProjectWriter();
try
{
// Write the project to an XML file (compatible with MS Project)
writer.Write(project, "C:\\Projects\\MyNewProject.xml");
Console.WriteLine("Project file written successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Failed to write file: {ex.Message}");
}
Универсальное чтение файлов проектов с помощью C#
Основное преимущество библиотеки MPXJ.NET — её способность загружать и читать огромное количество форматов с помощью простого, единообразного API. Библиотека включает поддержку автоматического определения формата файла на основе его расширения и содержимого. Метод Read возвращает объект ProjectFile, который является корневым контейнером для всех остальных сущностей проекта, таких как задачи, ресурсы и назначения. Этот простой шаблон работает одинаково для файлов XER, XML или любого другого поддерживаемого формата. Следующий пример показывает, как выполнить это с лёгкостью.
Как загрузить и прочитать файл проекта MPP с помощью .NET API?
using Net.Sf.Mpxj;
using Net.Sf.Mpxj.Read;
// Create a ProjectReader instance.
// The UniversalProjectReader intelligently determines the file type.
ProjectReader reader = new UniversalProjectReader();
try
{
// Read the project file. This one line of code is all you need.
ProjectFile project = reader.Read("C:\\Projects\\MySchedule.mpp");
// Now you have access to all project data!
Console.WriteLine($"Project Name: {project.Name}");
Console.WriteLine($"Start Date: {project.StartDate}");
}
catch (Exception ex)
{
Console.WriteLine($"Failed to read file: {ex.Message}");
}
Конвертация файлов проектов через .NET API
Открытый исходный код MPXJ.NET включает полную поддержку преобразования файлов проектов в другие поддерживаемые форматы внутри приложений .NET. Благодаря своей многоформатной способности MPXJ.NET часто используется для конвертации файлов проектов из одного формата в другой внутри приложений .NET. Например: чтение файла .MPP, затем запись в .MPX или .MSPDI или даже XER/PMXML (в зависимости от поддержки). В README приведён пример конвертации.
Как прочитать и конвертировать файл проекта в приложениях .NET?
using System;
using MPXJ.Net;
namespace ConvertProject
{
class Program
{
static void Main(string[] args)
{
string input = "LegacyProject.mpp";
string output = "ConvertedProject.mpx";
// Read using universal reader
var proj = new UniversalProjectReader().Read(input);
// Write using universal writer to MPX format
new UniversalProjectWriter(FileFormat.MPX).Write(proj, output);
Console.WriteLine($"Converted {input} → {output}");
}
}
}
Доступ к задачам проекта и иерархии
Проекты состоят из задач, и MPXJ.NET позволяет обходить всю структуру декомпозиции работ (WBS). Библиотека поддерживает различные функции работы с задачами и данными проекта, такие как перечисление всех задач в проекте, просмотр сводки задач, продолжительность задач, начало и завершение задачи, процент выполнения задачи и многое другое. Следующий пример демонстрирует, как разработчики могут перебрать все задачи, используя команды .NET.
Как перебрать все задачи проекта с помощью C# API?
using Net.Sf.Mpxj;
// ... (Assume 'project' is a loaded ProjectFile object)
Console.WriteLine("Tasks in the project:");
foreach (Task task in project.Tasks)
{
// Calculate the indentation for a hierarchical view
string indent = new string(' ', task.OutlineLevel * 2);
Console.WriteLine($"{indent}ID: {task.ID}, Name: {task.Name}, " +
$"Duration: {task.Duration}, " +
$"Start: {task.Start}, Finish: {task.Finish}");
// Access specific properties
if (task.PercentageComplete != null && task.PercentageComplete > 0)
{
Console.WriteLine($"{indent} -> % Complete: {task.PercentageComplete}");
}
}