Redmine のプロジェクトを扱うオープンソース .NET プロジェクト管理 API

先進的な C# .NET プロジェクト管理ライブラリは、開発者がプロジェクトファイルを作成、読み取り、操作、そして MPP、MPT、XML、XER、PMXML などの他の形式に変換できるようにします。

MPXJ.NET とは何ですか?

プロジェクト データの管理は、Microsoft Project や Primavera P6 などのツールからの多数のファイル形式と格闘することを意味することが多いです。単一のプラットフォームにロックされずに、プログラムでプロジェクト データを読み取り、書き込み、操作したい .NET 開発者であれば、MPXJ.NET は探し求めていた強力なオープンソース ライブラリです。このライブラリには、プロジェクト管理ファイルを扱うための重要な機能が多数含まれており、例えば新規プロジェクトの作成、既存プロジェクト ファイルの読み取り、フォーマット間の変換、スケジュール データの操作、リソースや割り当ての操作などをプログラム的に行うことができます。

MPXJ.NET は、Java ライブラリ MPXJ(Jon Iles が管理)をラップしたオープンソースの .NET ラッパーです。C#、VB.NET などの .NET 開発者が、慣用的な C# の型と慣習を使用してプロジェクトスケジュールファイルを読み書きおよび操作できます。MPXJ ライブラリは、MPP、MPX、MSPDI XML、XER、P6 データベース、Planner XML など、多くのスケジュールおよびプロジェクト形式をサポートしています。元々は Java ベースですが、MPXJ.Net がラップし、C# の慣習(プロパティは Java の getter/setter ではなく、.NET の命名規則)を提供するため、.NET コードで自然に扱えます。エンタープライズポートフォリオのデータ集約、スケジュールの品質チェック、CRM と PMO ツール間のブリッジ構築など、MPXJ.Net は信頼性が高く高性能な基盤を提供します。

Previous Next

MPXJ.NET の開始方法

MPXJ.NET の推奨インストール方法は NuGet を使用することです。スムーズなインストールのために、以下のコマンドを使用してください。

NuGet で MPXJ.NET をインストール

NuGet\Install-Package MPXJ.Net -Version 14.5.2

直接 GitHub ページ からダウンロードできます。

.NET を使用したプロジェクトの作成と操作

オープンソースの MPXJ.NET は、.NET アプリケーション内でプロジェクトファイルを扱うための重要な機能をいくつか提供しています。読み取りだけでなく、ゼロから新しいプロジェクトファイルを作成できます:プロジェクトプロパティ(タイトル、作成者、開始日)を定義し、カレンダーと例外を追加し、タスク(期間、開始日、数値フィールド付き)を追加し、リソースと割り当てを追加し、依存関係(タスク A がタスク B に先行)を作成し、そして MS Project や他のツールで開くことができるファイル形式(例:MSPDI や MPX)に保存します。以下は、.NET アプリケーション内で新しいプロジェクトを作成する方法を示すシンプルな例です。

.NET ライブラリを使用して新しいプロジェクトを作成し、XML 形式で書き出す方法は?

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 ファイル、またはその他のサポートされているフォーマットでも同様に機能します。以下の例は、これを簡単に実行する方法を示しています。

.NET API を使用して MPP プロジェクト ファイルをロードおよび読み取る方法は?

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)をたどることができます。このライブラリは、プロジェクトのタスクやデータを扱うさまざまな機能をサポートしており、プロジェクト内のすべてのタスクの一覧表示、タスクのサマリー表示、タスクの期間、開始日と終了日、タスクの完了率(Percentage Complete)などが可能です。以下の例は、開発者が .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}");
    }
}
           
 日本