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 de restricción y de restricción están expuestas por la clase de clase estática TSK para manejar las restricciones:

Configuración de restricciones en Microsoft Project

Para establecer restricciones en el proyecto Microsoft:

  1. En el menú Ver, seleccione más vistas y luego Formulario de entrada de tarea.
  2. Haga doble clic en una tarea en el formulario de entrada de tareas.
  3. Seleccione la pestaña avanzada.
  4. 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 for C ++ API utiliza 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. El siguiente ejemplo de código demuestra 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.

 1// The path to the documents directory.
 2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
 3    
 4// Create project instance
 5System::SharedPtr<Project> project = System::MakeObject<Project>(dataDir + u"ConstraintStartNoEarlierThan.mpp");
 6    
 7// Set constraint Start No Earlier Than on task with Id 1
 8System::SharedPtr<Task> summary = project->get_RootTask()->get_Children()->GetById(1);
 9summary->Set<ConstraintType>(Tsk::ConstraintType(), Aspose::Tasks::ConstraintType::StartNoEarlierThan);
10summary->Set(Tsk::ConstraintDate(), System::DateTime(2016, 12, 1, 9, 0, 0));
11    
12// Save project as pdf
13System::SharedPtr<SaveOptions> o = System::MakeObject<PdfSaveOptions>();
14o->set_StartDate(project->Get<System::DateTime>(Prj::StartDate()));
15o->set_Timescale(Aspose::Tasks::Visualization::Timescale::ThirdsOfMonths);
16project->Save(dataDir + u"project_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
 2System::SharedPtr<Task> first = project1->get_RootTask()->get_Children()->GetById(2);
 3first->Set<ConstraintType>(Tsk::ConstraintType(), Aspose::Tasks::ConstraintType::FinishNoEarlierThan);
 4first->Set(Tsk::ConstraintDate(), System::DateTime(2016, 12, 1, 18, 0, 0));
 5    
 6// Save project as pdf
 7System::SharedPtr<SaveOptions> options = System::MakeObject<PdfSaveOptions>();
 8options->set_StartDate(project1->Get<System::DateTime>(Prj::StartDate()));
 9options->set_Timescale(Aspose::Tasks::Visualization::Timescale::ThirdsOfMonths);
10project1->Save(dataDir + u"project_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
 2System::SharedPtr<Task> roof = project1->get_RootTask()->get_Children()->GetById(5);
 3roof->Set<ConstraintType>(Tsk::ConstraintType(), Aspose::Tasks::ConstraintType::MustStartOn);
 4roof->Set(Tsk::ConstraintDate(), System::DateTime(2017, 1, 1, 9, 0, 0));
 5    
 6// Save project as pdf
 7System::SharedPtr<SaveOptions> options = System::MakeObject<PdfSaveOptions>();
 8options->set_StartDate(project1->Get<System::DateTime>(Prj::StartDate()));
 9options->set_Timescale(Aspose::Tasks::Visualization::Timescale::ThirdsOfMonths);
10project1->Save(dataDir + u"project_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
2System::SharedPtr<Task> wallBoard = project1->get_RootTask()->get_Children()->GetById(11);
3wallBoard->Set<ConstraintType>(Tsk::ConstraintType(), Aspose::Tasks::ConstraintType::AsLateAsPossible);
4    
5// Save project as pdf
6System::SharedPtr<SaveOptions> options = System::MakeObject<PdfSaveOptions>();
7options->set_StartDate(project1->Get<System::DateTime>(Prj::StartDate()));
8options->set_Timescale(Aspose::Tasks::Visualization::Timescale::ThirdsOfMonths);
9project1->Save(dataDir + u"project_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
 2System::SharedPtr<Task> interiorFixtures = project1->get_RootTask()->get_Children()->GetById(15);
 3interiorFixtures->Set<ConstraintType>(Tsk::ConstraintType(), Aspose::Tasks::ConstraintType::MustFinishOn);
 4interiorFixtures->Set(Tsk::ConstraintDate(), System::DateTime(2017, 3, 1, 18, 0, 0));
 5    
 6// Save project as pdf
 7System::SharedPtr<SaveOptions> options = System::MakeObject<PdfSaveOptions>();
 8options->set_StartDate(project1->Get<System::DateTime>(Prj::StartDate()));
 9options->set_Timescale(Aspose::Tasks::Visualization::Timescale::ThirdsOfMonths);
10project1->Save(dataDir + u"project_MustFinishOn_out.pdf", options);

Getting Constraints

This code sample displays any constraints found when traversing the tasks in the project to a command window.

 1System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
 2System::SharedPtr<Project> project1 = System::MakeObject<Project>(dataDir + u"Project2.mpp");
 3    
 4// Create a ChildTasksCollector instance
 5System::SharedPtr<ChildTasksCollector> collector = System::MakeObject<ChildTasksCollector>();
 6    
 7// Collect all the tasks from RootTask using TaskUtils
 8TaskUtils::Apply(project1->get_RootTask(), collector, 0);
 9    
10// Parse through all the collected tasks
11    
12{
13    auto tsk1_enumerator = (collector->get_Tasks())->GetEnumerator();
14    decltype(tsk1_enumerator->get_Current()) tsk1;
15    while (tsk1_enumerator->MoveNext() && (tsk1 = tsk1_enumerator->get_Current(), true))
16    {
17        if (tsk1->Get<System::DateTime>(Tsk::ConstraintDate()).ToShortDateString() == u"1/1/2000")
18        {
19            System::Console::WriteLine(u"NA");
20        }
21        else
22        {
23            System::Console::WriteLine(tsk1->Get<System::DateTime>(Tsk::ConstraintDate()).ToShortDateString());
24        }
25        
26        System::Console::WriteLine(System::ObjectExt::ToString(tsk1->Get<ConstraintType>(Tsk::ConstraintType())));
27    }
28}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.