Додавання посилань для завдань
Завдання, що пов’язують, є основною операцією при моделюванні залежності проекту у файлах Microsoft Project (MPP/XML). Ця стаття демонструє, як програмно додавати та візуалізувати залежності завдань, використовуючи як VSTO, так і Aspose.Tasks для .NET.
Вступ
У управлінні проектами посилання на завдання визначають, як діяльність залежить один від одного. Ці залежності-такі як * закінчення до початку * або * початок-старт *-забезпечують, щоб завдання дотримувались логічної послідовності виконання.
Програмно працюючи з Microsoft Project, ви можете встановити ці посилання за допомогою:
- VSTO та COM Interop: щільно поєднаний з програмою Microsoft Project Desktop.
- aspose.tasks для .net: незалежна від платформи, Saffe Safe API для маніпулювання файлами проектів.
Нижче наведено приклади обох підходів для зв’язку завдань.
Посилання завдань за допомогою VSTO
Наступний приклад демонструє, як створити ланцюжок залежностей * до початку * за допомогою microsoft.office.interop.msproject.
⚠ 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)
додає прямий зв’язок між будь -якими двома завданнями.- Усі відносини завдань зберігаються в
TaskLinkCollection
. - Кожне посилання розкриває властивості, такі як
predtask
,sucktask
,linktype
таlag
.
API є інтуїтивно зрозумілим, стислим та готовим до використання сервера в ASP.NET, Azure Functions або фонових службах.
Таблиця порівняння
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, його залежність від настільного середовища та COM Interop робить його менш придатним для сучасних додатків.
Aspose.tasks для .NET забезпечує чисту та масштабовану альтернативу, яка спрощує управління відносинами завдань. Його гнучкість та незалежність платформи роблять її ідеальною для інтеграції в трубопроводи CI/CD, додатки для серверів та веб -платформ.
Щоб дізнатися більше про відносини завдань або планування логіки, вивчіть: