Agregar enlaces para tareas
La vinculación de tareas es una operación fundamental al modelar las dependencias del proyecto en los archivos del Proyecto Microsoft (MPP/XML). Este artículo demuestra cómo agregar y visualizar programáticamente las dependencias de tareas utilizando VSTO y Aspose.Tasks para .NET.
Introducción
En la gestión de proyectos, los enlaces de tareas definen cómo las actividades dependen entre sí. Estas dependencias, como * finalizar * o * inicio de inicio *, aseguran que las tareas sigan una secuencia de ejecución lógica.
Al trabajar con Microsoft Project programáticamente, puede establecer estos enlaces utilizando:
- VSTO y COM INETOP: Aplicada bien con la aplicación de escritorio de Microsoft Project.
- Aspose.Tasks para .NET: una API segura al servidor independiente de la plataforma para manipular archivos de proyecto.
A continuación se presentan ejemplos de ambos enfoques para vincular tareas.
Enlace de tareas usando VSTO
El siguiente ejemplo demuestra cómo crear una cadena de dependencias de * acabado a iniciar * usando 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);Reflejos:
Project.Tasklinks.Add (Tarea1, Task2, TasklinkType.FinishTostart)Agrega un enlace directo entre dos tareas.- Todas las relaciones de tareas se almacenan en la
TasklinkCollection. - Cada enlace expone propiedades como ‘Predtask
,SuccTask,LinkTypeyLag`.
La API es intuitiva, concisa y lista para su uso en el lado del servidor en ASP.NET, funciones de Azure o servicios de fondo.
Tabla de comparación
| 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 |
Conclusión
La vinculación de las tareas es fundamental para mantener la lógica del proyecto. Si bien VSTO ofrece acceso nativo al Proyecto Microsoft, su dependencia del entorno de escritorio y la interoperación COM lo hace menos adecuado para aplicaciones modernas.
Aspose.Tasks para .NET proporciona una alternativa limpia y escalable que simplifica la gestión de relaciones de tareas. Su flexibilidad e independencia de la plataforma lo hacen ideal para integrarse en tuberías CI/CD, aplicaciones de servidor y plataformas web.
Para obtener más información sobre las relaciones de tareas o la lógica de programación, explore: