Microsoft Project es un popular software de administración de proyectos que facilita a los administradores de proyectos la administración eficiente de los proyectos. Permite a los administradores crear tareas y recursos, asignar tareas a recursos, realizar un seguimiento del progreso del proyecto, administrar el presupuesto y realizar otras operaciones relacionadas con el proyecto. Para crear y administrar archivos de MS Project mediante programación, Microsoft proporciona MS Office Automation. Sin embargo, junto con otras deficiencias, requiere que instales MS Office. Para llenar este vacío, Aspose salta para brindarle una solución de automatización de MS Project para aplicaciones .NET como Aspose.Tasks for .NET.

Aspose.Tasks for .NET es una API rica en funciones que le permite crear archivos de MS Project (.mpp/.xml) mediante programación usando C# o VB.NET. Además, ofrece varias funciones para trabajar con tareas, recursos y calendarios. En este artículo, le mostraré cómo usar Aspose.Tasks for .NET para crear archivos de MS Project y trabajar con tareas y recursos usando C#. El resto del artículo se divide en las siguientes secciones.

Crear archivos de MS Project usando C#

MPP es el formato de archivo propietario de Microsoft que se utiliza para los archivos de MS Project. Sin embargo, también puede guardar los datos del proyecto en archivos XML para compartirlos entre diferentes aplicaciones. Crear un nuevo proyecto desde cero es una tarea sencilla y se puede realizar siguiendo los siguientes pasos:

Los siguientes ejemplos de código muestran cómo crear archivos de MS Project usando C#.

Guardar archivos de MS Project como MPP

// Crear un nuevo proyecto
Project project = new Project();

// Guárdelo como archivo .mpp
project.Save("New Project.mpp", SaveFileFormat.MPP);

Guardar archivos de MS Project como XML

// Crear un nuevo proyecto
Project project = new Project();

// Guárdelo como archivo .xml
project.Save("EmptyProjectSaveXML_out.xml", SaveFileFormat.XML);

Agregar tareas a archivos de MS Project usando C#

El archivo vacío de MS Project es inútil sin tareas y recursos. Entonces, veamos cómo crear y agregar tareas a un proyecto. Una tarea puede ser una sola tarea o una tarea de resumen que contenga un grupo de subtareas. Los siguientes son los pasos para agregar tareas a un archivo de MS Project.

  • Cree e inicialice el objeto Proyecto.
  • Agregue una nueva tarea de resumen a la colección Tasks del proyecto mediante el método Project.RootTask.Children.Add(string).
  • Agregue una subtarea a la tarea de resumen usando el método Task.Children.Add(string).
  • Guarde el proyecto usando el método Project.Save().

El siguiente ejemplo de código muestra cómo crear y agregar tareas a archivos de MS Project usando C#.

// Crear un nuevo proyecto
Project project = new Project();

// Agregar tarea y subtarea
Task task = project.RootTask.Children.Add("Summary1");
Task subtask = task.Children.Add("Subtask1");

// Guardar el archivo
project.Save("CreateTasks_out.xml", SaveFileFormat.XML);

El siguiente ejemplo de código muestra cómo establecer diferentes propiedades de las tareas, como la duración, la fecha/hora de inicio, etc.

// Crear proyecto
Project project = new Project();

// Agregar tarea y establecer propiedades de tarea
Task task = project.RootTask.Children.Add("Task1");
task.Set(Tsk.Start, project.RootTask.Get(Tsk.Start).AddDays(1));
task.Set(Tsk.Name, "new name");

Agregue recursos a los archivos de MS Project usando C#

Los recursos son las entidades que se supone que deben realizar las tareas en un proyecto. Por lo tanto, un proyecto no sería posible sin los recursos para trabajar en él. Veamos cómo crear y agregar recursos a un proyecto. Los siguientes son los pasos para agregar recursos a un archivo de MS Project.

  • Cree un nuevo proyecto utilizando la clase Proyecto.
  • Agregue un nuevo recurso a la colección Resources del proyecto mediante el método Project.Resources.Add(string).
  • Guarde el proyecto usando el método Project.Save().

El siguiente ejemplo de código muestra cómo agregar recursos a un archivo de MS Project usando C#.

// Crear proyecto
Project project = new Project();

// Agregar recursos
Resource resource = project.Resources.Add("Rsc");

// Guardar proyecto
project.Save("CreateResources_out.xml", SaveFileFormat.XML);

El siguiente ejemplo de código establece las propiedades de un recurso, como la fecha/hora de inicio, el tipo, etc.

// Crear proyecto
Project project = new Project();

// Agregar recursos
Resource resource = project.Resources.Add("Rsc");

// Guardar proyecto
project.Save("CreateResources_out.xml", SaveFileFormat.XML);

Asignar tareas a recursos en un proyecto usando C#

Una vez que haya terminado de agregar tareas y recursos en el proyecto, puede especificar qué tarea debe realizar qué recurso. Por lo tanto, asignará la(s) tarea(s) a cada recurso. Los siguientes son los pasos para asignar tareas a recursos en un Proyecto.

  • Cree o cargue un proyecto usando la clase Proyecto.
  • Agregue nuevos recursos al proyecto y establezca sus propiedades, como formato de fecha, fecha de inicio, etc.
  • Agregue nuevas tareas al proyecto y establezca sus propiedades, como fecha/hora de inicio, duración, etc.
  • Realice la asignación de tareas agregando la tarea y su recurso respectivo a la colección Project.ResourceAssignments.
  • Guarde el proyecto usando el método Project.Save().

El siguiente es el ejemplo de código completo de cómo crear y asignar tareas a los recursos en un archivo de MS Project.

// Crear proyecto
Project project = new Project("New Project.mpp")
{
    CalculationMode = CalculationMode.Automatic
};

// Establecer propiedades
project.Set(Prj.DateFormat, DateFormat.DateDddMmDdYy);
project.Set(Prj.StartDate, new DateTime(2019, 9, 16, 9, 0, 0));
project.Set(Prj.NewTasksAreManual, false);
project.Set(Prj.ActualsInSync, false);

// Agregar recursos
Resource workResource = project.Resources.Add("Servente (Work)");
workResource.Set(Rsc.Name, "Servente (Work)");
workResource.Set(Rsc.Initials, "S");
workResource.Set(Rsc.Type, ResourceType.Work);
workResource.Set(Rsc.StandardRateFormat, RateFormatType.Hour);
workResource.Set(Rsc.Code, "1503");

Resource materialResource = project.Resources.Add("Tijolo (Material)");
materialResource.Set(Rsc.Name, "Tijolo (Material)");
materialResource.Set(Rsc.Initials, "T");
materialResource.Set(Rsc.Type, ResourceType.Material);
materialResource.Set(Rsc.StandardRateFormat, RateFormatType.MaterialResourceRate);
materialResource.Set(Rsc.Code, "21341");

// Agregar tareas
Task task1 = project.RootTask.Children.Add("Task - 01");
task1.Set(Tsk.IsRollup, new NullableBool(true));
task1.Set(Tsk.IsPublished, new NullableBool(false));
Task task2 = task1.Children.Add("Task - 01.01");
task2.Set(Tsk.IsRollup, new NullableBool(true));
task2.Set(Tsk.IsPublished, new NullableBool(false));
Task task3 = task2.Children.Add("Task - 01.01.001");
task3.Set(Tsk.IsEstimated, new NullableBool(false));
task3.Set(Tsk.Start, new DateTime(2019, 9, 16, 9, 0, 0));
task3.Set(Tsk.Duration, project.GetDuration(10, TimeUnitType.Day));
task3.Set(Tsk.Work, project.GetDuration(10, TimeUnitType.Day));
task3.Set(Tsk.IsRollup, new NullableBool(true));
task3.Set(Tsk.IsPublished, new NullableBool(false));

// Asignar tareas
ResourceAssignment assignment1 = project.ResourceAssignments.Add(task3, materialResource);
assignment1.Set(Asn.Delay, project.GetDuration(40, TimeUnitType.Hour));
assignment1.Set(Asn.Start, new DateTime(2019, 9, 23, 9, 0, 0));
assignment1.Set(Asn.Finish, new DateTime(2019, 9, 27, 18, 0, 0));
ResourceAssignment assignment2 = project.ResourceAssignments.Add(task3, workResource);
assignment2.Set(Asn.Work, project.GetDuration(56, TimeUnitType.Hour));
assignment2.Set(Asn.Start, new DateTime(2019, 9, 16, 9, 0, 0));
assignment2.Set(Asn.Finish, new DateTime(2019, 9, 24, 18, 0, 0));

// para coincidir completamente con el MPP esperado
assignment2.Set(Asn.WorkContour, WorkContourType.Contoured);
task3.Set(Tsk.IsManual, new NullableBool(true));
task1.Set(Tsk.IsManual, new NullableBool(true));

// Guardar proyecto
project.Save("Assignment_Dates.mpp", SaveFileFormat.MPP);

Agregar calendario a un proyecto usando C#

Los calendarios también son una de las principales entidades de los proyectos que se utilizan para definir el cronograma del proyecto. El calendario hace posible que los gerentes de proyecto creen una línea de tiempo para un proyecto. Los siguientes son los pasos para agregar un calendario a un proyecto.

  • Cree o cargue un proyecto usando la clase Proyecto.
  • Agregue el nuevo Calendar a la colección Project.Calendars.
  • Cree la programación utilizando el objeto Calendario.
  • Guarde el proyecto.

El siguiente ejemplo de código muestra cómo agregar un calendario a un proyecto usando C#.

// Crear una instancia de proyecto
Project project = new Project();

// Definir calendario
Calendar cal = project.Calendars.Add("Calendar1");

// Agregue días hábiles de lunes a jueves con horarios predeterminados
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Monday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Tuesday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Wednesday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Thursday));
cal.WeekDays.Add(new WeekDay(DayType.Saturday));
cal.WeekDays.Add(new WeekDay(DayType.Sunday));

// Establecer el viernes como día laborable corto
WeekDay myWeekDay = new WeekDay(DayType.Friday);

// Establece el tiempo de trabajo. Solo la parte de tiempo de DateTime es importante
WorkingTime wt1 = new WorkingTime();
wt1.FromTime = new DateTime(1, 1, 1, 9, 0, 0, 0);
wt1.ToTime = new DateTime(1, 1, 1, 12, 0, 0, 0);
WorkingTime wt2 = new WorkingTime();
wt2.FromTime = new DateTime(1, 1, 1, 13, 0, 0, 0);
wt2.ToTime = new DateTime(1, 1, 1, 16, 0, 0, 0);
myWeekDay.WorkingTimes.Add(wt1);
myWeekDay.WorkingTimes.Add(wt2);
myWeekDay.DayWorking = true;
cal.WeekDays.Add(myWeekDay);

// Guardar proyecto
project.Save("Project_DefineCalendarWeekdays_out.xml", SaveFileFormat.XML);

Descargar o Instalar

Puede descargar Aspose.Tasks for .NET DLL o instalarlo en su proyecto usando NuGet.

Pruebe Aspose.Tasks for .NET gratis

Aspose ofrece una licencia temporal gratuita para probar sus productos sin limitaciones de prueba. Puede obtener uno de aquí.

Ver también