Добавление ссылок для задач

Связывание задач является фундаментальной операцией при моделировании зависимостей проекта в файлах Microsoft Project (MPP/XML). Эта статья демонстрирует, как программно добавлять и визуализировать зависимости задачи, используя как vsto, так и aspose.tasks для .net.

Введение

В управлении проектами ссылки задач определяют, как действия зависят друг от друга. Эти зависимости, такие как * Finish-to-Fart * или * Start-To-Start *-убедитесь, что задачи следуют за логической последовательности выполнения.

При разработке с программной работой Microsoft Project вы можете установить эти ссылки, используя либо:

Ниже приведены примеры обоих подходов для связывания задач.

Ссылка задач с использованием VSTO

В следующем примере демонстрируется, как создать цепочку * Finish-to-Start * зависимости с использованием 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);

Основные примечания:

Связывание задач с помощью Aspose.Tasks для .NET

Aspose.Tasks предлагает современный и оптимизированный способ определения зависимостей задач программным способом, не полагаясь на компоненты Microsoft Project или COM.

 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);

Основные моменты:

API интуитивно понятный, краткий и готов к использованию на стороне сервера в ASP.NET, функциях Azure или фоновых службах.

Сравнение таблицы

FeatureVSTO / InteropAspose.Tasks for .NET
Requires MS Project✅ Yes❌ No
Supported Environments🖥 Desktop only☁ Desktop, Web, Cloud, Containers
Dependency TypeCOM InteropPure .NET assembly
API Simplicity⚠ Verbose and boilerplate-heavy✅ Clean and object-oriented
Task Link ManagementTaskDependencies collectionTaskLinks collection
Cross-platform support❌ No✅ Yes

Заключение

Связывание задач имеет решающее значение для поддержания логики проекта. В то время как VSTO предлагает натуральный доступ к Microsoft Project, его зависимость от настольной среды и Com Interop делает его менее подходящим для современных приложений.

Aspose.tasks для .net предоставляет чистую и масштабируемую альтернативу, которая упрощает управление отношениями задач. Его гибкость и независимость платформы делают его идеальным для интеграции в трубопроводы CI/CD, серверные приложения и веб -платформы.

Чтобы узнать больше об отношениях с заданиями или логикой планирования, изучите:

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.