API การจัดการโครงการ .NET แบบเปิดแหล่งที่มาสำหรับจัดการโครงการใน Redmine
ไลบรารีการจัดการโครงการ C# .NET ชั้นนำช่วยให้นักพัฒนาสามารถสร้าง, อ่าน, จัดการและแปลงไฟล์โครงการเป็นรูปแบบอื่น ๆ เช่น MPP, MPT, XML, XER, PMXML และอื่น ๆ อีกมากมาย
MPXJ.NET คืออะไร?
การจัดการข้อมูลโครงการมักหมายถึงการต่อสู้กับรูปแบบไฟล์หลายประเภทจากเครื่องมือต่าง ๆ เช่น Microsoft Project, Primavera P6 และอื่น ๆ หากคุณเป็นนักพัฒนา .NET ที่ต้องการอ่าน เขียน และจัดการข้อมูลโครงการโดยโปรแกรมโดยไม่ต้องผูกติดกับแพลตฟอร์มเดียว MPXJ.NET คือไลบรารีโอเพ่นซอร์สที่ทรงพลังซึ่งคุณกำลังมองหา ไลบรารีนี้ได้รวมคุณลักษณะสำคัญหลายอย่างสำหรับการทำงานกับไฟล์การจัดการโครงการ เช่น การสร้างโครงการใหม่ การอ่านไฟล์โครงการที่มีอยู่ การแปลงระหว่างรูปแบบ การจัดการข้อมูลกำหนดเวลา การทำงานกับทรัพยากรและการมอบหมายงานโดยโปรแกรม
MPXJ.NET เป็น wrapper แบบโอเพนซอร์สสำหรับ .NET ที่ห่อหุ้มไลบรารี Java MPXJ (จัดการโดย Jon Iles) มันช่วยให้นักพัฒนา .NET—C#, VB.NET ฯลฯ—สามารถอ่าน เขียน และจัดการไฟล์ตารางโครงการโดยใช้ประเภทและแนวปฏิบัติของ C# อย่างเป็นธรรมชาติ ไลบรารี MPXJ รองรับรูปแบบตารางและโครงการหลายประเภท เช่น MPP, MPX, MSPDI XML, XER, ฐานข้อมูล P6, Planner XML ฯลฯ แม้ว่า MPXJ จะเป็น Java ดั้งเดิม MPXJ.Net ห่อหุ้มและนำเสนอแนวปฏิบัติของ C# (properties แทน getter/setter ของ 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 ให้คุณเดินทางผ่านโครงสร้างการแบ่งงาน (Work Breakdown Structure - WBS) ทั้งหมด ไลบรารีสนับสนุนฟีเจอร์ต่าง ๆ สำหรับการจัดการงานและข้อมูลของโครงการ เช่น การแสดงรายการงานทั้งหมดในโครงการ, ดูสรุปงาน, ระยะเวลา (Duration) ของงาน, วันเริ่มต้นและสิ้นสุดของงาน, เปอร์เซ็นต์การเสร็จสมบูรณ์ของงาน, และอื่น ๆ อีกมาก ตัวอย่างต่อไปนี้แสดงให้เห็นว่าผู้พัฒนาสามารถวนลูปผ่านงานทั้งหมดโดยใช้คำสั่ง .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}");
}
}