Добавление ссылок для задач
Связывание задач является фундаментальной операцией при моделировании зависимостей проекта в файлах Microsoft Project (MPP/XML). Эта статья демонстрирует, как программно добавлять и визуализировать зависимости задачи, используя как vsto, так и aspose.tasks для .net.
Введение
В управлении проектами ссылки задач определяют, как действия зависят друг от друга. Эти зависимости, такие как * Finish-to-Fart * или * Start-To-Start *-убедитесь, что задачи следуют за логической последовательности выполнения.
При разработке с программной работой Microsoft Project вы можете установить эти ссылки, используя либо:
- Vsto и Com Interop: тесно связано с настольным приложением Microsoft Project.
- aspose.tasks для .net: независимый от платформы API, защищенного от сервера для манипулирования файлами проекта.
Ниже приведены примеры обоих подходов для связывания задач.
Ссылка задач с использованием 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);
Основные примечания:
TaskDependencies.Add()
связывает предшественника и последователя с помощью определенногоPjTaskLinkType
.- Interop требует подробного кода и осторожной обработки объектов COM.
- Метод
get_UniqueID(taskID)
используется для доступа к определенным задачам для связывания.
Связывание задач с помощью 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);
Основные моменты:
project.tasklinks.add (task1, task2, tasklinktype.finishtostart)
добавляет прямую связь между любыми двумя задачами.- Все отношения задач хранятся в `tasklinkcollection ‘.
- Каждая ссылка раскрывает такие свойства, как
predtask
,sactsk
,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 делает его менее подходящим для современных приложений.
Aspose.tasks для .net предоставляет чистую и масштабируемую альтернативу, которая упрощает управление отношениями задач. Его гибкость и независимость платформы делают его идеальным для интеграции в трубопроводы CI/CD, серверные приложения и веб -платформы.
Чтобы узнать больше об отношениях с заданиями или логикой планирования, изучите: