Ajout de liens pour les tâches
La liaison des tâches est une opération fondamentale lors de la modélisation des dépendances du projet dans les fichiers Microsoft Project (MPP / XML). Cet article montre comment ajouter et visualiser les dépendances de tâches par programmation en utilisant à la fois VSTO et ASPOSE.Tasks pour .NET.
Introduction
Dans la gestion de projet, les liens de tâches définissent comment les activités dépendent les unes des autres. Ces dépendances - telles que * finition-to-start * ou * start-to-start * - s’assurent que les tâches suivent une séquence d’exécution logique.
Lorsque vous travaillez avec le projet Microsoft par programme, vous pouvez établir ces liens en utilisant soit:
- VSTO et COM Interop: étroitement couplé à l’application de bureau Microsoft Project.
- Aspose.tasks pour .NET: une API indépendante de la plate-forme et en sécurité pour la manipulation des fichiers de projet.
Vous trouverez ci-dessous des exemples des deux approches pour lier les tâches.
Tâches de liaison à l’aide de VSTO
L’exemple suivant montre comment créer une chaîne de dépendances * finis-to-start * à l’aide de 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);
Points forts:
project.tasklinks.add (tâche1, tâche2, taskinktype.finishtostart)
ajoute un lien direct entre deux tâches.- Toutes les relations de tâche sont stockées dans le «TasklinkCollection».
- Chaque lien expose des propriétés comme
PredTask
,« succtask »,« linkType »et« Lag ».
L’API est intuitive, concise et prête pour une utilisation côté serveur dans ASP.NET, les fonctions Azure ou les services d’arrière-plan.
Table de comparaison
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 |
Conclusion
La liaison des tâches est essentielle pour maintenir la logique du projet. Alors que VSTO offre un accès natif au projet Microsoft, sa dépendance à l’environnement de bureau et à l’interopt COM le rend moins adapté aux applications modernes.
Aspose.tasks pour .NET fournit une alternative propre et évolutive qui simplifie la gestion des relations de tâche. Sa flexibilité et son indépendance de la plate-forme le rendent idéal pour l’intégration dans les pipelines CI / CD, les applications de serveur et les plates-formes Web.
Pour en savoir plus sur les relations de tâche ou la logique de planification, explorez: