Calcular proyecto programáticamente usando C#

Podemos calcular cronogramas o costos de proyectos usando modos de cálculo definidos en Opciones de proyecto para Microsoft Project. Un cronograma de proyecto muestra la fecha de inicio y finalización de todas las tareas del proyecto. Microsoft Project permite el cálculo del proyecto de forma manual o automática. Como desarrollador de C#, podemos configurar fácilmente el modo de cálculo del proyecto en aplicaciones .NET y calcular las propiedades del proyecto. En este artículo, aprenderemos cómo calcular un proyecto mediante programación usando C#.

En este artículo se tratarán los siguientes temas:

API de C# para calcular el proyecto programáticamente

Para configurar los modos de cálculo del proyecto, utilizaremos la API Aspose.Tasks for .NET. Proporciona tres modos de cálculo de proyectos, para calcular los valores de las propiedades dependientes. Estos modos de cálculo son:

  • Ninguno: establece solo las propiedades necesarias y no vuelve a calcular las fechas y los costos del proyecto.
  • Manual: establece solo propiedades de objetos dependientes sin volver a calcular las fechas y los costos del proyecto.
  • Automático: recalcula las fechas del proyecto y las propiedades de costo automáticamente.

La API define los modos de cálculo mencionados anteriormente en la enumeración CalculationMode. La propiedad CalculationMode de la clase Project permite establecer u obtener el valor de CalculationMode. La API también permite manipular un proyecto existente para agregar algunas modificaciones. Además, facilita la realización de operaciones de gestión de proyectos básicas y avanzadas sin problemas. Descargue la DLL de la API o instálela usando NuGet.

PM> Install-Package Aspose.Tasks

Cálculo manual de proyectos usando C#

Podemos establecer el modo de cálculo en manual y verificarlo siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una instancia de la clase Project.
  2. A continuación, establezca el modo de cálculo en Manual.
  3. Luego, especifique la fecha de inicio del proyecto.
  4. A continuación, agregue nuevas tareas, por ejemplo, Tarea 1 y Tarea 2.
  5. Luego, lea las propiedades de la tarea configuradas en modo manual.
  6. Después de eso, inicialice un objeto de la clase TaskLinks y vincule tareas.
  7. Finalmente, verifique la fecha de inicio y finalización de la Tarea 2.

El siguiente ejemplo de código muestra cómo calcular manualmente un proyecto mediante C#.

// Este ejemplo de código demuestra cómo configurar el modo de cálculo de proyecto manual.
// Crear una instancia del Proyecto
Project project = new Project();

// Establecer el modo de cálculo en Manual
project.CalculationMode = CalculationMode.Manual;

// Establecer la fecha de inicio del proyecto
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// Agregar nuevas tareas
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// Las propiedades necesarias se configuran en modo manual.
Console.WriteLine("Task1.Id Equals 1 : {0} ", task1.Get(Tsk.Id).Equals(1));
Console.WriteLine("Task1 OutlineLevel Equals 1 : {0} ", task1.Get(Tsk.OutlineLevel).Equals(1));
Console.WriteLine("Task1 Start Equals 15/04/2015 08:00 AM : {0} ", task1.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task1 Finish Equals 15/04/2015 05:00 PM : {0} ", task1.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task1 Duration Equals 1 day : {0} ", task1.Get(Tsk.Duration).ToString().Equals("1 day"));
Console.WriteLine("Task2 Start Equals 15/04/2015 08:00 AM : {0} ", task2.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task2 Finish Equals 15/04/2015 05:00 PM : {0} ", task2.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task2 Duration Equals 1 day : {0} ", task2.Get(Tsk.Duration).ToString().Equals("1 day"));

// Vincule dos tareas, sus fechas no se volverán a calcular en modo manual
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// Sin cambios en las fechas de la Tarea 2
Console.WriteLine("Task1 Start Equals Task2 Start : {0} ", task1.Get(Tsk.Start).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).Equals(task2.Get(Tsk.Finish)));
Task1.Id Equals 1 : True
Task1 OutlineLevel Equals 1 : True
Task1 Start Equals 15/04/2015 08:00 AM : True
Task1 Finish Equals 15/04/2015 05:00 PM : True
Task1 Duration Equals 1 day : True
Task2 Start Equals 15/04/2015 08:00 AM : True
Task2 Finish Equals 15/04/2015 05:00 PM : True
Task2 Duration Equals 1 day : True
Task1 Start Equals Task2 Start : True
Task1 Finish Equals Task2 Finish : True

Cálculo automático de proyectos usando C#

Podemos configurar el modo de cálculo en automático y verificarlo siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una instancia de la clase Project.
  2. A continuación, establezca el modo de cálculo en Automático.
  3. Luego, establezca la fecha de inicio del proyecto.
  4. Ahora, agregue nuevas tareas, por ejemplo, Tarea 1 y Tarea 2.
  5. Después de eso, inicialice un objeto de la clase TaskLinks y vincule tareas.
  6. Finalmente, verifique las fechas recalculadas.

El siguiente ejemplo de código muestra cómo calcular el proyecto automáticamente usando C#.

// Este ejemplo de código demuestra cómo configurar el modo de cálculo de proyecto automático.
// Crear una instancia del Proyecto
Project project = new Project();

// Establecer el modo de cálculo en Automático
project.CalculationMode = CalculationMode.Automatic;

// Establecer la fecha de inicio del proyecto
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// Agregar nuevas tareas
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// Vincular tareas
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// Verificar las fechas recalculadas
Console.WriteLine("Task1 Start + 1 Equals Task2 Start : {0} ", task1.Get(Tsk.Start).AddDays(1).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish + 1 Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).AddDays(1).Equals(task2.Get(Tsk.Finish)));
Console.WriteLine("RootTask Finish Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.RootTask.Get(Tsk.Finish)));
Console.WriteLine("Project Finish Date Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.Get(Prj.FinishDate)));
Task1 Start + 1 Equals Task2 Start : True
Task1 Finish + 1 Equals Task2 Finish : True
RootTask Finish Equals Task2 Finish : True
Project Finish Date Equals Task2 Finish : True

Sin modo de cálculo de proyecto en C#

Podemos configurar el modo de cálculo en automático y verificarlo siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una instancia de la clase Project.
  2. A continuación, establezca el modo de cálculo en Ninguno.
  3. Luego, especifique la fecha de inicio del proyecto.
  4. A continuación, agregue una nueva tarea, por ejemplo, Tarea 1.
  5. Luego, lea las propiedades de la tarea.
  6. Después de eso, establezca la duración de la tarea en días.
  7. Finalmente, verifique la fecha de inicio y finalización de la Tarea.

El siguiente ejemplo de código muestra cómo establecer el cálculo del proyecto en ninguno mediante C#.

// Este ejemplo de código demuestra cómo configurar el Modo de cálculo del proyecto en Ninguno.
// Crear una instancia del Proyecto
Project project = new Project();

// Establezca el modo de cálculo en Ninguno
project.CalculationMode = CalculationMode.None;

// Agregar una nueva tarea
Aspose.Tasks.Task task = project.RootTask.Children.Add("Task");

// Tenga en cuenta que incluso las identificaciones no se calcularon
Console.WriteLine("Task.Id Equals 0 : {0} ", task.Get(Tsk.Id).Equals(0));
Console.WriteLine("Task.OutlineLevel Equals 0 : {0} ", task.Get(Tsk.OutlineLevel).Equals(0));
Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Console.WriteLine("Task Duration Equals 0 mins : {0} ", task.Get(Tsk.Duration).ToString().Equals("0 mins"));

// Establecer propiedad de duración
task.Set(Tsk.Duration, project.GetDuration(2, TimeUnitType.Day));
Console.WriteLine("Task Duration Equals 2 days : {0} ", task.Get(Tsk.Duration).ToString().Equals("2 days"));
Console.WriteLine("Task Start Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Task.Id Equals 0 : True
Task.OutlineLevel Equals 0 : False
Task Start Equals DateTime.MinValue : True
Task Finish Equals DateTime.MinValue : True
Task Duration Equals 0 mins : True
Task Duration Equals 2 days : True
Task Start Equals DateTime.MinValue  : True
Task Finish Equals DateTime.MinValue  : True

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido cómo configurar los modos de cálculo del proyecto mediante programación. También hemos visto cómo se calculan los valores de las propiedades dependientes en cada modo de cálculo usando C#. Además, puede obtener más información sobre Aspose.Tasks for .NET API utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en el foro.

Ver también