API de gestión de proyectos .NET de código abierto para manejar proyectos en Redmine
La biblioteca líder de gestión de proyectos C# .NET permite a los desarrolladores crear, leer, manipular y convertir archivos de proyecto a otros formatos como MPP, MPT, XML, XER, PMXML y muchos más.
¿Qué es MPXJ.NET?
Gestionar datos de proyectos a menudo implica lidiar con una multitud de formatos de archivo de herramientas como Microsoft Project, Primavera P6 y otras. Si eres un desarrollador .NET que busca leer, escribir y manipular datos de proyectos programáticamente sin estar atado a una única plataforma, MPXJ.NET es la poderosa biblioteca de código abierto que has estado buscando. La biblioteca incluye varias características importantes para trabajar con archivos de gestión de proyectos, como crear nuevos proyectos, leer archivos de proyecto existentes, convertir entre formatos, manipular datos de programación, trabajar con recursos y asignaciones, de forma programática.
MPXJ.NET es un contenedor de código abierto para .NET alrededor de la biblioteca Java MPXJ (gestionada por Jon Iles). Permite a los desarrolladores .NET —C#, VB.NET, etc.— leer, escribir y manipular archivos de programación de proyectos usando tipos y convenciones idiomáticas de C#. La biblioteca MPXJ soporta muchos formatos de programación y proyecto como MPP, MPX, MSPDI XML, XER, bases de datos P6, Planner XML, etc. Aunque MPXJ es originalmente basada en Java, MPXJ.Net la envuelve y presenta convenciones de C# (propiedades en lugar de getters/setters de Java; convenciones de nombres .NET) de modo que se siente natural en código .NET. Ya sea que estés agregando datos para una cartera empresarial, realizando verificaciones de calidad en los cronogramas, o construyendo un puente entre tu CRM y las herramientas de tu PMO, MPXJ.Net proporciona la base fiable y de alto rendimiento que necesitas.
Comenzando con MPXJ.NET
La forma recomendada de instalar MPXJ.NET es a través de NuGet. Por favor, usa los siguientes comandos para una instalación sin problemas.
Instalar MPXJ.NET mediante NuGet
NuGet\Install-Package MPXJ.Net -Version 14.5.2
Puedes descargarlo directamente desde página de GitHub
Crear y manipular proyectos mediante .NET
El proyecto de código abierto MPXJ.NET ha proporcionado varias características importantes para manejar archivos de proyecto dentro de aplicaciones .NET. Más allá de la lectura, puedes crear nuevos archivos de proyecto desde cero: definir propiedades del proyecto (título, autor, fecha de inicio), agregar calendarios y excepciones, añadir tareas (con duraciones, fechas de inicio, campos numéricos), agregar recursos y asignaciones, crear dependencias (la tarea A precede a la tarea B), y luego guardar en un formato de archivo (p. ej., MSPDI o MPX) que pueda ser abierto por MS Project u otras herramientas. Aquí tienes un ejemplo sencillo que muestra cómo crear un nuevo proyecto dentro de aplicaciones .NET.
¿Cómo crear un nuevo proyecto y escribirlo en formato XML mediante la biblioteca .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}");
}
Lectura universal de archivos de proyecto mediante C#
La principal fortaleza de la biblioteca MPXJ.NET es su capacidad para cargar y leer una gran cantidad de formatos con una API simple y coherente. La biblioteca incluye soporte para detectar automáticamente el formato del archivo basándose en la extensión y el contenido del mismo. El método Read devuelve un objeto ProjectFile, que es el contenedor raíz de todas las demás entidades del proyecto, como tareas, recursos y asignaciones. Este patrón simple funciona de manera idéntica para un archivo XER, un archivo XML o cualquier otro formato compatible. El siguiente ejemplo muestra cómo hacerlo con facilidad.
¿Cómo cargar y leer un archivo de proyecto MPP mediante la API .NET?
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}");
}
Conversión de archivos de proyecto mediante la API .NET
El proyecto de código abierto MPXJ.NET incluye soporte completo para convertir archivos de proyecto a otros formatos compatibles dentro de aplicaciones .NET. Debido a su capacidad multiformato, MPXJ.NET se usa a menudo para convertir archivos de proyecto de un formato a otro dentro de aplicaciones .NET. Por ejemplo: leer un archivo .MPP, luego escribir a .MPX o .MSPDI o incluso XER/PMXML (según el soporte). El README proporciona un ejemplo de conversión.
¿Cómo leer y convertir un archivo de proyecto dentro de aplicaciones .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}");
}
}
}
Accediendo a tareas y jerarquía del proyecto
Los proyectos están compuestos por tareas, y MPXJ.NET le permite recorrer toda la Estructura de Desglose del Trabajo (WBS). La biblioteca admite diversas funciones para manejar tareas y datos de proyectos, como listar todas las tareas del proyecto, ver el resumen de tareas, la duración de las tareas, el inicio y fin de una tarea, el porcentaje de completado de una tarea, y mucho más. El siguiente ejemplo muestra cómo los desarrolladores pueden iterar a través de todas las tareas usando comandos .NET.
¿Cómo iterar a través de todas las tareas del proyecto mediante la API C#?
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}");
}
}