Manejo de limitaciones de tareas
Las restricciones de tareas se utilizan para definir el horario de un proyecto de Microsoft Project y definir cuándo deben iniciarse o terminarse las tareas. Las restricciones pueden ser flexibles: comenzar o terminar lo antes posible o lo más tarde posible, o inflexible. Las restricciones inflexibles están vinculadas a fechas específicas.
Trabajar con restricciones
Las propiedades restricticDate y restrictType están expuestas por la clase estática TSK para manejar restricciones:
- RestrictDate acepta y devuelve el tipo de datos DateTime.
- RestraintType acepta y devuelve uno de los valores de la enumeración de la restricción.
Configuración de restricciones en Microsoft Project
Para establecer restricciones en el proyecto Microsoft:
- En el menú Ver, seleccione más vistas y luego Formulario de entrada de tarea.
- Haga doble clic en una tarea en el formulario de entrada de tareas.
- Seleccione la pestaña avanzada.
- Establezca una restricción seleccionando una opción en la lista Tipo de restricción y una fecha para la lista Fecha de restricción.
Configuración de restricciones con Aspose.Tasks
La fecha de restricción es NA cuando el tipo de restricción es lo antes posible o lo más tarde posible. Para valores de fecha iguales a NA, Aspose.Tasks usa el valor “1/1/2000” en la versión de evaluación y DateTime.MinValue para el producto con licencia. En el siguiente caso, tomamos un archivo de proyecto fuente como una entrada y aplicamos diferentes tipos de restricciones en varias tareas en cada caso. Las siguientes muestras de código muestran la aplicación de diferentes tipos de restricciones.
Las muestras de código a continuación establecen el tipo de restricción establecido en inicio no antes.
1Project project = new Project("New Project.mpp");
2
3// Set constraint Start No Earlier Than on task with Id 1
4Task summary = project.RootTask.Children.GetById(1);
5summary.Set(Tsk.ConstraintType, ConstraintType.StartNoEarlierThan);
6summary.Set(Tsk.ConstraintDate, new DateTime(2016, 12, 1, 9, 0, 0));
7
8SaveOptions o = new PdfSaveOptions();
9o.StartDate = project.Get(Prj.StartDate);
10o.Timescale = Timescale.ThirdsOfMonths;
11project.Save("StartNoEarlierThan_out.pdf", o);
The code samples below set the constraint type set to Finish No Earlier Than.
1// Set constraint Finish No Earlier Than on task with Id 2
2Task first = project.RootTask.Children.GetById(2);
3first.Set(Tsk.ConstraintType, ConstraintType.FinishNoEarlierThan);
4first.Set(Tsk.ConstraintDate, new DateTime(2016, 12, 1, 18, 0, 0));
5SaveOptions options = new PdfSaveOptions();
6options.StartDate = project.Get(Prj.StartDate);
7options.Timescale = Timescale.ThirdsOfMonths;
8project.Save("FinishNoEarlierThan_out.pdf", options);
The code samples below set the constraint type set to Must Start On.
1// Set constraint Must Start On for task with Id 5
2Task roof = project.RootTask.Children.GetById(5);
3roof.Set(Tsk.ConstraintType, ConstraintType.MustStartOn);
4roof.Set(Tsk.ConstraintDate, new DateTime(2017, 1, 1, 9, 0, 0));
5
6SaveOptions options = new PdfSaveOptions();
7options.StartDate = project.Get(Prj.StartDate);
8options.Timescale = Timescale.ThirdsOfMonths;
9project.Save("MustStartOn_out.pdf", options);
The code samples below set the constraint type set to As Late As Possible.
1// Set constraint As Late As Possible for task with Id 11
2Task wallBoard = project.RootTask.Children.GetById(11);
3wallBoard.Set(Tsk.ConstraintType, ConstraintType.AsLateAsPossible);
4
5SaveOptions options = new PdfSaveOptions();
6options.StartDate = project.Get(Prj.StartDate);
7options.Timescale = Timescale.ThirdsOfMonths;
8project.Save("AsLateAsPossible_out.pdf", options);
The code sample below shows the constraint type set to Must Finish On.
1// Set constraint Must Finish On for task with Id 15
2Task task = project.RootTask.Children.GetById(15);
3task.Set(Tsk.ConstraintType, ConstraintType.MustFinishOn);
4task.Set(Tsk.ConstraintDate, new DateTime(2017, 3, 1, 18, 0, 0));
5
6SaveOptions options = new PdfSaveOptions();
7options.StartDate = project.Get(Prj.StartDate);
8options.Timescale = Timescale.ThirdsOfMonths;
9project.Save("MustFinishOn_out.pdf", options);
Getting Constraints
This code sample displays any constraints found when traversing the tasks in the project to a command window.
1Project project = new Project("New Project.mpp");
2
3// Create a ChildTasksCollector instance
4ChildTasksCollector collector = new ChildTasksCollector();
5
6// Collect all the tasks from RootTask using TaskUtils
7TaskUtils.Apply(project.RootTask, collector, 0);
8
9// Parse through all the collected tasks
10foreach (Task task in collector.Tasks)
11{
12 if (task.Get(Tsk.ConstraintDate).ToShortDateString() == "1/1/2000")
13 Console.WriteLine("NA");
14 else
15 Console.WriteLine(task.Get(Tsk.ConstraintDate).ToShortDateString());
16
17 Console.WriteLine(task.Get(Tsk.ConstraintType).ToString());
18}