API לניהול פרויקטים ב‑.NET בקוד פתוח לטיפול בפרויקטים ב‑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# (מאפיינים במקום getters/setters של 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 באמצעות 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}");
}
המרת קבצי פרויקט באמצעות API של .NET
קוד המקור הפתוח 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.
איך לעבור על כל המשימות של הפרויקט באמצעות 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}");
}
}