タスクのリンクを追加します
リンクリンクは、Microsoft Project(MPP/XML)ファイルのプロジェクト依存関係をモデリングする際の基本的な操作です。この記事では、.NETのVSTOとAspose.tasksの両方を使用して、タスクの依存関係をプログラム的に追加および視覚化する方法を示しています。
導入
プロジェクト管理では、タスクリンクは、アクティビティが互いにどのように依存するかを定義します。これらの依存関係( * finish-to-start *または * start-to-start *など)など、タスクが論理実行シーケンスに従うことを確認します。
Microsoft Projectでプログラムマイケルで作業する場合、次のいずれかを使用してこれらのリンクを確立できます。
- VSTOおよびCOM Interop:Microsoft Project Desktopアプリケーションとしっかりと結合しています。
- .netのaspose.tasks:プロジェクトファイルを操作するためのプラットフォームに依存しないサーバーセーフAPI。
以下は、タスクをリンクするための両方のアプローチの例です。
VSTOを使用してタスクをリンクします
次の例は、microsoft.office.interop.msprojectを使用して * finish-to-start *依存関係のチェーンを作成する方法を示しています。
⚠ Requires Microsoft Project to be installed and accessible on the machine.
1Microsoft.Office.Interop.MSProject.Application projectApplication = new Application();
2object missingValue = System.Reflection.Missing.Value;
3
4projectApplication.FileOpenEx(@"D:\Aspose\Migration\SampleProject.mpp",
5 missingValue, missingValue, missingValue, missingValue,
6 missingValue, missingValue, missingValue, missingValue,
7 missingValue, missingValue, PjPoolOpen.pjPoolReadOnly,
8 missingValue, missingValue, missingValue, missingValue,
9 missingValue);
10
11Microsoft.Office.Interop.MSProject.Project project = projectApplication.ActiveProject;
12
13// Add task dependencies using Finish-to-Start links
14project.Tasks.get_UniqueID(2).TaskDependencies.Add(project.Tasks.get_UniqueID(1), PjTaskLinkType.pjFinishToStart);
15project.Tasks.get_UniqueID(3).TaskDependencies.Add(project.Tasks.get_UniqueID(2), PjTaskLinkType.pjFinishToStart);
16project.Tasks.get_UniqueID(4).TaskDependencies.Add(project.Tasks.get_UniqueID(3), PjTaskLinkType.pjFinishToStart);
17project.Tasks.get_UniqueID(5).TaskDependencies.Add(project.Tasks.get_UniqueID(4), PjTaskLinkType.pjFinishToStart);
18project.Tasks.get_UniqueID(5).TaskDependencies.Add(project.Tasks.get_UniqueID(2), PjTaskLinkType.pjFinishToStart);
19
20// Print dependencies to console
21foreach (Task tsk in project.Tasks)
22{
23 foreach (TaskDependency dep in project.Tasks.get_UniqueID(tsk.ID).TaskDependencies)
24 {
25 Console.WriteLine("From ID = " + dep.From.ID + " => To ID = " + dep.To.ID);
26 }
27 Console.WriteLine("____________________________________________________________");
28}
29
30// Save and close the project
31projectApplication.FileCloseAll(Microsoft.Office.Interop.MSProject.PjSaveType.pjSave);
Key Notes:
TaskDependencies.Add()
links a predecessor and successor using a definedPjTaskLinkType
.- Interop requires verbose code and careful handling of COM objects.
- The
get_UniqueID(taskID)
method is used to access specific tasks for linking.
Link Tasks Using Aspose.Tasks for .NET
Aspose.Tasks offers a modern and streamlined way to define task dependencies programmatically without relying on Microsoft Project or COM components.
1Project project = new Project("New Project.mpp");
2
3Task task1 = project.RootTask.Children.GetById(1);
4Task task2 = project.RootTask.Children.GetById(2);
5Task task3 = project.RootTask.Children.GetById(3);
6Task task4 = project.RootTask.Children.GetById(4);
7Task task5 = project.RootTask.Children.GetById(5);
8
9// Link the tasks
10TaskLink taskLink = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);
11taskLink = project.TaskLinks.Add(task2, task3, TaskLinkType.FinishToStart);
12taskLink = project.TaskLinks.Add(task3, task4, TaskLinkType.FinishToStart);
13taskLink = project.TaskLinks.Add(task4, task5, TaskLinkType.FinishToStart);
14taskLink = project.TaskLinks.Add(task2, task5, TaskLinkType.FinishToStart);
15
16// Display links among the tasks
17TaskLinkCollection allinks = project.TaskLinks;
18foreach (TaskLink link in allinks)
19{
20 Console.WriteLine("From ID = " + link.PredTask.Get(Tsk.Id) + " => To ID = " + link.SuccTask.Get(Tsk.Id));
21 Console.WriteLine("________________________________________");
22}
23
24project.Save("LinkTasks_out.mpp", SaveFileFormat.MPP);
ハイライト:
project.tasklinks.add(task1、task2、tasklinktype.finishtostart)
任意の2つのタスク間に直接リンクを追加します。- すべてのタスク関係は、「taskLinkCollection」に保存されます。
- 各リンクは、「PredTask」、「Succtask」、
LinkType
、および「Lag」などのプロパティを公開します。
APIは、直感的で簡潔で、ASP.NET、Azure関数、またはバックグラウンドサービスでサーバー側を使用する準備ができています。
比較表
Feature | VSTO / Interop | Aspose.Tasks for .NET |
---|---|---|
Requires MS Project | ✅ Yes | ❌ No |
Supported Environments | 🖥 Desktop only | ☁ Desktop, Web, Cloud, Containers |
Dependency Type | COM Interop | Pure .NET assembly |
API Simplicity | ⚠ Verbose and boilerplate-heavy | ✅ Clean and object-oriented |
Task Link Management | TaskDependencies collection | TaskLinks collection |
Cross-platform support | ❌ No | ✅ Yes |
結論
リンクタスクは、プロジェクトロジックを維持するために重要です。 VSTOはMicrosoft Projectへのネイティブアクセスを提供していますが、デスクトップ環境とCOM Interopへの依存により、最新のアプリケーションには適していません。
.NETのAspose.Tasksは、タスク関係管理を簡素化するクリーンでスケーラブルな代替品を提供します。柔軟性とプラットフォームの独立性により、CI/CDパイプライン、サーバーアプリ、およびWebプラットフォームに統合するのに最適です。
タスク関係やスケジューリングロジックの詳細については、以下をご覧ください。