Aspose.Tasks for .NET の便利機能
Microsoft Project ファイルを扱う際、開発者はしばしばタスクやリソースの作成だけでは足りません。彼らは プロジェクトに付随するデータ のようなフィルター、テーブル、グループ、埋め込みオブジェクト、さらにはエラー処理のための診断ツールなどを必要とします。Aspose.Tasks for .NET は 便利機能 を提供し、プロジェクト管理のワークフローをより強力かつ柔軟にします。これらには、プロジェクトのクリティカルパスの算出、タスク書き込み時の例外処理、フィルターやグループ定義の取得、埋め込みオブジェクトの抽出などの機能が含まれます。これらの機能により、開発者はプロジェクトの機能性を拡張し、レポートの精度を向上させ、Microsoft Project ファイルを他のシステムとシームレスに統合できます。
クリティカルパスの計算
クリティカルパスは、最終的にプロジェクトの終了時刻を決定するタスク群(または単一のタスク)です。クリティカルパスとそれに割り当てられたリソースを把握することで、プロジェクトを予定通りに進行させる助けになります。Microsoft Project はフロートがないタスク、特定の日付制約(必ず開始、必ず終了、可能な限り早く、可能な限り遅く)を持つタスク、またはプロジェクトと同じ、もしくはそれより遅い終了日を持つタスクに基づいてクリティカルパスを算出します。Aspose.Tasks を使用すると、クリティカルパスを算出できます。
その Project class provides the CriticalPath property which is used to retrieve the collection of tasks that comprise the project’s critical path. The following piece of code calculates and displays the tasks in the critical path.
1Project project = new Project("New Project.mpp");
2project.CalculationMode = CalculationMode.Automatic;
3
4Task subtask1 = project.RootTask.Children.Add("1");
5Task subtask2 = project.RootTask.Children.Add("2");
6Task subtask3 = project.RootTask.Children.Add("3");
7project.TaskLinks.Add(subtask1, subtask2, TaskLinkType.FinishToStart);
8
9// Display the critical path now
10foreach (Task task in project.CriticalPath)
11{
12 Console.WriteLine(task.Get(Tsk.Name));
13}
TaskWritingException の出力
プロジェクトは多数のタスクで構成されており、Aspose.Tasks for .NET API はタスク情報の追加、削除、更新を可能にします。タスクの書き込み時に問題が発生した場合は、 TasksWritingException を捕捉するために使用します。
Aspose.Tasks for .NET は、タスク書き込み時に例外が発生した場合にメッセージを出力することをサポートします。これは TaskWritingException を用いて行われ、TaskReadingException と同様の方法です。
ログメッセージは公開プロパティ TasksWritingException.LogTextに含まれます。以下のコード例に示します。
1try
2{
3 Project project = new Project("New Project.mpp");
4 Console.Write("This example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
5 project.Save("output.mpp", SaveFileFormat.MPP);
6}
7catch (TasksWritingException ex)
8{
9 Console.WriteLine(ex.LogText);
10}
11catch (NotSupportedException ex)
12{
13 Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
14}
MPP ファイルのフィルタデータの操作
Aspose.Tasks により、開発者は MPP ファイルのデータに適用されたフィルターに関する情報を読み取ることができます。この記事では、Microsoft Project の MPP ファイルからフィルター定義およびフィルター条件データを取得する方法を示します。
フィルター定義データの読み取り
Microsoft Project のフィルター定義は、フィルターの構造、例えば名前、種類、適用されるフィールドなどを記述します。Aspose.Tasks for .NET を使用すると、これらのフィルター定義にプログラムからアクセスし、MPP ファイル内でフィルターがどのように構成されているかを確認できます。
1// Instantiate project and access task filters
2Project project = new Project("ReadFilterDefinitionData.mpp");
3List<Filter> taskFilters = project.TaskFilters.ToList();
4Console.WriteLine("Task Filters Count: " + taskFilters.Count);
5Console.WriteLine("All Tasks: " + taskFilters[0].Name);
6Console.WriteLine("Task Item: " + taskFilters[0].FilterType);
7Console.WriteLine("Task Filters Show In Menu: " + taskFilters[0].ShowInMenu);
8Console.WriteLine("Task filter ShowRelatedSummaryRows: " + taskFilters[0].ShowRelatedSummaryRows);
9
10// Access resource filters
11List<Filter> filters = project.ResourceFilters.ToList();
12Console.WriteLine("Project.ResourceFilters count: " + filters.Count);
13Console.WriteLine("Resource Filter Item Type: Item.ResourceType: " + filters[0].FilterType);
14Console.WriteLine("Resource filter ShowInMenu" + filters[0].ShowInMenu);
15Console.WriteLine("Resource filter ShowRelatedSummaryRows: " + filters[0].ShowRelatedSummaryRows);
フィルター条件データの読み取り
定義がフィルターの構造を記述するのに対し、フィルター条件はプロジェクトデータに適用される正確な条件(例えば特定の日付やリソースを持つタスク)を決定します。Aspose.Tasks はこれらの条件を MPP ファイルから読み取ることを可能にし、Microsoft Project で使用されるカスタムビューを再現したり分析したりする際に特に有用です。
1Project project = new Project("New Project.mpp");
2
3Filter filter = project.TaskFilters.ToList()[1];
4Console.WriteLine(filter.Criteria.CriteriaRows.Count);
5Console.WriteLine(filter.Criteria.Operation.ToString());
6
7FilterCriteria criteria1 = filter.Criteria.CriteriaRows[0];
8Console.WriteLine(criteria1.Test.ToString());
9Console.WriteLine(criteria1.Field.ToString());
10Console.WriteLine(criteria1.Values[0].ToString());
11
12FilterCriteria criteria2 = filter.Criteria.CriteriaRows[1];
13Console.WriteLine(criteria2.Operation.ToString());
14Console.WriteLine(criteria2.CriteriaRows.Count);
15
16FilterCriteria criteria21 = criteria2.CriteriaRows[0];
17Console.WriteLine(criteria21.Test.ToString());
18Console.WriteLine(criteria21.Field.ToString());
19Console.WriteLine(criteria21.Values[0].ToString());
20
21FilterCriteria criteria22 = criteria2.CriteriaRows[1];
22Console.WriteLine(criteria22.Test.ToString());
23Console.WriteLine(criteria22.Field.ToString());
24Console.WriteLine(criteria22.Values[0].ToString());
25Console.WriteLine(filter.Criteria);
グループ定義データの読み取り
Microsoft Project のデータファイルはグループ単位のデータを含む場合があります。Aspose.Tasks for .NET は、以下の例に示すようにグループ定義データを読み取る機能を提供します。
1Project project = new Project("New Project.mpp");
2
3Console.WriteLine("Task Groups Count: " + project.TaskGroups.Count);
4
5Group taskGroup = project.TaskGroups.ToList()[1];
6Console.WriteLine("Group Name:", taskGroup.Name);
7Console.WriteLine("Group Criteria count: " + taskGroup.GroupCriteria.Count);
8Console.WriteLine("************* Retrieving Task Group's Criterion information *************");
9
10GroupCriterion criterion = taskGroup.GroupCriteria.ToList()[0];
11Console.WriteLine("Criterion Field: " + criterion.Field.ToString());
12Console.WriteLine("Criterion GroupOn: " + criterion.GroupOn.ToString());
13Console.WriteLine("Criterion Cell Color: " + criterion.CellColor);
14Console.WriteLine("Criterion Pattern: " + criterion.Pattern.ToString());
15
16if (taskGroup == criterion.ParentGroup)
17{
18 Console.WriteLine("Parent Group is equal to task Group.");
19}
20
21Console.WriteLine("*********** Retrieving Criterion's Font Information ***********");
22Console.WriteLine("Font Name: " + criterion.Font.Name);
23Console.WriteLine("Font Size: " + criterion.Font.Size);
24Console.WriteLine("Font Style: " + criterion.Font.Style);
25Console.WriteLine("Ascending/Descending: " + criterion.Ascending);
MPP ファイルからのテーブルデータの読み取り
Aspose.Tasks for .NET API は Microsoft Project のデータファイルからテーブルデータを読み取ることをサポートします。Project.Tables は ICollection インターフェースを実装しており、MPP ファイルのテーブルデータへのアクセスを提供します。この機能は MPP 2003、2007、2010、2013 を含むすべてのバージョンの Microsoft Project データファイルでサポートされています。
以下の例は、Microsoft Project の MPP ファイルからテーブルデータを取得する方法を示します。幅、タイトル、タイトルの配置、データの配置などのテーブルプロパティの値がデモ用に表示されます。
1Project project = new Project("New Project.mpp");
2
3// Access table
4Table task1 = project.Tables.ToList()[0];
5Console.WriteLine("Table Fields Count" + task1.TableFields.Count);
6
7// Display all table fields information
8foreach (TableField tableField in task1.TableFields)
9{
10 Console.WriteLine("Field width: " + tableField.Width);
11 Console.WriteLine("Field Title: " + tableField.Title);
12 Console.WriteLine("Field Title Alignment: " + tableField.AlignTitle.ToString());
13 Console.WriteLine("Field Align Data: " + tableField.AlignData.ToString());
14}
タスクまたはレビューフォームからの埋め込みオブジェクトの抽出
Microsoft Project のデータファイル(MPP/XML)は、タスクやリソースのビュー内に文書、Excel シート、PDF、画像などの埋め込みオブジェクトを含むことがあります。Aspose.Tasks for .NET API は、以下のトピックに示すように、プロジェクトのタスクまたはリソースビューからこれらを抽出する機能を提供します。
埋め込みオブジェクトの抽出
埋め込みオブジェクト(ファイルパスを選択してファイルから作成されたもの)は、MPP ファイル内の OLE Package に格納されます。元のファイルを抽出するには、OleObject クラスのインスタンスの Content および FullPath プロパティを使用できます。
1Project project = new Project("ExtractEmbeddedObjects.mpp");
2OleObject ole = project.OleObjects.ToList()[0];
3// We have to check this property because it can be null if the embedded object was created inside the ms project application Or, alternatively, you can use this check: if (ole.FileFormat == "Package")
4if (!string.IsNullOrEmpty(ole.FullPath))
5{
6 using (FileStream stream = new FileStream("out.ole", FileMode.Create))
7 {
8 stream.Write(ole.Content, 0, ole.Content.Length);
9 }
10}
Microsoft Project アプリケーション内で作成された埋め込みオブジェクトは、次の方法で抽出できます:
1IDictionary<string, string> fileFormatExt = new Dictionary<string, string>();
2fileFormatExt.Add("RTF", "_rtfFile_out.rtf");
3fileFormatExt.Add("MSWordDoc", "_wordFile_out.docx");
4fileFormatExt.Add("ExcelML12", "_excelFile_out.xlsx");
5Project project = new Project("New Project.mpp");
6foreach (OleObject oleObject in project.OleObjects)
7{
8 if (!string.IsNullOrEmpty(oleObject.FileFormat) && fileFormatExt.ContainsKey(oleObject.FileFormat))
9 {
10 using (FileStream stream = new FileStream("EmbeddedContent_" + fileFormatExt[oleObject.FileFormat], FileMode.Create))
11 {
12 stream.Write(oleObject.Content, 0, oleObject.Content.Length);
13 }
14 }
15}
Aspose.Tasks for .NET の便利機能は、開発者に 包括的なツール群 を提供し、単純なタスクやリソース操作を超えたプロジェクトの詳細を扱うことができます。クリティカルパスの特定やタスク操作のトラブルシューティング、フィルター、グループ、テーブルの取得、さらには埋め込みコンテンツの抽出に至るまで、これらの機能により開発者はプロジェクトデータのライフサイクルを完全に制御できます。これらの機能をワークフローに統合することで、チームは より適切な監視、より整然としたデータ交換、より深い自動化、最終的にプロジェクト管理の効率を高めることができます。