Migrar a Aspose.Tasks para .NET 8.0+
Aspose.Tasks para .NET 8.0.0 es una versión renovada de la API que incluye cambios considerables desde el punto de vista del uso. Entre las principales diferencias de ambas implementaciones se incluyen:
- La API heredada permitía establecer campos públicos de varias clases de datos de proyectos como Project, Tasks, Resource, etc., mientras que la nueva implementación introduce métodos Set y Get para conseguir lo mismo
- En la API anterior, los métodos de recálculo debían ser invocados manualmente por el usuario tras determinadas operaciones, como la asignación de recursos. La nueva API Aspose.Tasks for .NET realiza la mayoría de estos cálculos automáticamente sin que sea necesaria la intervención del usuario.
- La nueva API ofrece modos de recálculo manuales y automáticos similares a los de Microsoft Project (MSP). El modo manual sólo calcula los campos necesarios, mientras que el modo automático lo recalcula todo. Esto elimina la necesidad de llamar manualmente a los métodos de recálculo y mejora el uso general de la API.
Esta nueva API es incompatible con la API heredada y el objetivo de este artículo es ayudarle a migrar su código a la nueva API. El artículo muestra ejemplos de código comparativos de la implementación de la API heredada y la nueva, e incluye:
Configuración de las propiedades por defecto del proyecto
La API heredada de Aspose.Tasks permitía establecer propiedades predeterminadas de un proyecto estableciendo directamente los atributos públicos de la clase Project. En la nueva implementación de la API, sin embargo, se exponen los métodos Set y Get para lograr lo mismo.
**Ejemplo de código API de Legacy
1 Project prj = new Project();
2 prj.StartDate = DateTime.Now;
3 prj.DefaultStartTime = prj.StartDate;
4 prj.DefaultTaskType = TaskType.FixedDuration;
5 prj.DefaultStandardRate = 15;
6 prj.DefaultOvertimeRate = 12;
7 prj.DefaultTaskEVMethod = EarnedValueMethodType.PercentComplete;
8 prj.DefaultFixedCostAccrual = CostAccrualType.Prorated;
9 prj.Save( "Project4.xml" , Aspose.Tasks.Saving.SaveFileFormat.XML);
1'Create a project instance
2 Dim prj As New Project()
3 prj.IsScheduleFromStart = True
4 prj.DefaultStartTime = prj.StartDate
5 prj.DefaultTaskType = TaskType.FixedDuration
6 prj.DefaultStandardRate = 15
7 prj.DefaultOvertimeRate = 12
8 prj.DefaultTaskEVMethod = EarnedValueMethodType.PercentComplete
9 prj.DefaultFixedCostAccrual = CostAccrualType.Prorated
10 prj.Save("Project4.xml", Aspose.Tasks.Saving.SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1 Project project = new Project();
2 project.Set(Prj.ScheduleFromStart,true);
3 project.Set(Prj.StartDate, DateTime.Now);
4 project.Set(Prj.DefaultStartTime,project.Get(Prj.StartDate));
5 project.Task(TaskType, TaskType.FixedDuration);
6 project.Set(Prj.DefaultStandardRate, 15);
7 project.Set(Prj.DefaultOvertimeRate, 12);
8 project.Set(Prj.DefaultTaskEVMethod, EarnedValueMethodType.PercentComplete);
9 project.Set(Prj.DefaultFixedCostAccrual, CostAccrualType.Prorated);
10 project.Save("ProjectDefaultProps.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 project.[Set](Prj.ScheduleFromStart, True)
3 project.Task(TaskType, DateTime.Now)
4 project.[Set](Prj.DefaultStartTime, project.[Get](Prj.StartDate))
5 project.[Set](Prj.DefaultTaskType, TaskType.FixedDuration)
6 project.[Set](Prj.DefaultStandardRate, 15)
7 project.[Set](Prj.DefaultOvertimeRate, 12)
8 project.[Set](Prj.DefaultTaskEVMethod, EarnedValueMethodType.PercentComplete)
9 project.[Set](Prj.DefaultFixedCostAccrual, CostAccrualType.Prorated)
10 project.Save("ProjectDefaultProps.xml", SaveFileFormat.XML)
Creación y adición de calendario a un proyecto
Para que los elementos del calendario añadidos al proyecto funcionen correctamente, la API heredada requería recalcular los UID del calendario. Sin embargo, en la nueva API, el recálculo de los UID se realiza automáticamente y no es necesario realizar los cálculos manualmente.
Ejemplo de código de la API heredada
1 Project prj = new Project();
2 Aspose.Tasks.Calendar cal1 = new Aspose.Tasks.Calendar();
3 cal1.Name ="no info";
4 Aspose.Tasks.Calendar cal2 = new Aspose.Tasks.Calendar(1);
5 cal2.Name = "no name";
6 Aspose.Tasks.Calendar cal3 = new Aspose.Tasks.Calendar( "cal3" );
7 prj.Calendars.Add(cal1);
8 prj.Calendars.Add(cal2);
9 prj.Calendars.Add(cal3);
10 prj.Save( "Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML);
1 'Create a project instance
2 Dim prj As New Project()
3 'Define Calendar
4 Dim cal1 As New Aspose.Tasks.Calendar()
5 cal1.Name = "no info"
6 Dim cal2 As New Aspose.Tasks.Calendar(1)
7 cal2.Name = "no name"
8 Dim cal3 As New Aspose.Tasks.Calendar("cal3")
9 prj.Calendars.Add(cal2)
10 prj.Calendars.Add(cal3)
11 prj.CalcCalendarUids()
12 'Save the Project
13 prj.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1
2
3 Project prj = new Project();
4 Aspose.Tasks.Calendar cal1 = prj.Calendars.Add("no info");
5 Aspose.Tasks.Calendar cal2 = prj.Calendars.Add("no name");
6 Aspose.Tasks.Calendar cal3 = prj.Calendars.Add("cal3");
7 prj.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML);
1 'Create a project instance
2 Dim prj As New Project()
3 Dim cal1 As Aspose.Tasks.Calendar = prj.Cal
4 Dim cal2 As Aspose.Tasks.Calendar = prj.Calendars.Add("no name")
5 Dim cal3 As Aspose.Tasks.Calendar = prj.Calendars.Add("cal3")
6 prj.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML)
Creación de un calendario estándar
En la nueva API de ASpose.Tasks, ya no es necesario recálculo de los UID del calendario, a diferencia de la API anterior.
Legacy API Code Sample
1 //Create a project instance
2 Project prj = new Project();
3 //Define Calendar and make it standard
4 Aspose.Tasks.Calendar cal1 = new Aspose.Tasks.Calendar("My Cal");
5 Aspose.Tasks.Calendar.MakeStandardCalendar(cal1);
6 prj.Calendars.Add(cal1);
7 prj.CalcCalendarUids();
8 prj.Save( "Project.Xml" , Aspose.Tasks.Saving.SaveFileFormat.XML);
1 'Create a project instance
2 Dim prj As New Project()
3 'Define Calendar and make it standard
4 Dim cal1 As New Aspose.Tasks.Calendar("My Cal")
5 Aspose.Tasks.Calendar.MakeStandardCalendar(cal1)
6 prj.Calendars.Add(cal1)
7 prj.CalcCalendarUids()
8 prj.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1 // Create a project instance
2 Project project = new Project();
3
4 // Define Calendar and make it standard
5 Aspose.Tasks.Calendar cal1 = project.Calendars.Add("My Cal");
6 Aspose.Tasks.Calendar.MakeStandardCalendar(cal1);
7 project.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML);
1 'Create a project instance
2 Dim project As New Project()
3
4 'Define Calendar and make it standard
5 Dim cal1 As Aspose.Tasks.Calendar = project.Calendars.Add("My Cal")
6 Aspose.Tasks.Calendar.MakeStandardCalendar(cal1)
7
8 'Save the Project
9 project.Save("Project.Xml", Aspose.Tasks.Saving.SaveFileFormat.XML)
Crear y añadir una tarea al proyecto
Para crear una nueva tarea en la API heredada, era necesario definir una tarea raíz, añadirla al proyecto como tarea raíz y, a continuación, añadir una nueva tarea a esta tarea raíz como tarea secundaria. Sin embargo, la nueva API no requiere que se defina la tarea raíz y se encarga de ello automáticamente al añadir la primera tarea al proyecto.
Ejemplo de código de la API heredada
1 Project project = new Project();
2 Task rootTask = new Task();
3 Task tskGen = new Task("Task1");
4 tskGen.Id = 1;
5 tskGen.Uid = 1;
6 tskGen.Start = DateTime.Parse("17-Aug-2009 8:00 AM" );
7 tskGen.Finish = DateTime.Parse( "17-Aug-2009 5:00 PM" );
8 project.RootTask = rootTask;
9 project.RootTask.Children.Add(tskGen);
10 project.Save("Project.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim tskGen As New Task("Task1")
3 tskGen.Id = 1
4 tskGen.Uid = 1
5 tskGen.Start = DateTime.Parse("17-Aug-2009 8:00 AM")
6 tskGen.Finish = DateTime.Parse("17-Aug-2009 5:00 PM")
7 project.RootTask = rootTask
8 project.RootTask.Children.Add(tskGen)
9 project.Save("Project.xml", SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1 Project project = new Project();
2 Task task = project.RootTask.Children.Add("Task 1");
3 task.Set(Tsk.Start, project.RootTask.Get(Tsk.Start).AddDays(1));
4 // set task start day
5 project.Save("CreateTasks.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim task As Task = project.RootTask.Children.Add("Task 1")
3 task.[Set](Tsk.Start, project.RootTask.[Get](Tsk.Start).AddDays(1))
4 'set task start day
5 project.Save("CreateTasks.xml", SaveFileFormat.XML)
Create and Add Resource to Project
Set and Get methods have been added to the Resource class of the API for manipulating attributes related to a project’s Resource.
Legacy API Code Sample
1 Project project = new Project();
2 Resource res = Resource(new "Res1");
3 res.Id = 1;
4 res.Uid = 1;
5 res.Start = DateTime.Parse("19-Aug-2009 8:00 AM");
6 res.Finish = DateTime.Parse("19-Aug-2009 5:00 PM");
7 project.Resources.Add(res);
8 project.Save("Project.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim res As New Resource("Res1")
3 res.Id = 1
4 res.Uid = 1
5 res.Start = DateTime.Parse("19-Aug-2009 8:00 AM")
6 res.Finish = DateTime.Parse("19-Aug-2009 5:00 PM")
7 project.Resources.Add(res)
8 project.Save("Project.xml", SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1 Project project = new Project();
2 Resource rsc = project.Resources.Add("R1");
3 rsc.Set(Rsc.Start, DateTime.Parse("31-Aug-2014 8:00 AM"));
4 rsc.Set(Rsc.Finish, DateTime.Parse("31-Aug-2014 5:00 PM"));
5 project.Save("CreateResource.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim rsc As Resource = project.Resources.Add("R1")
3 rsc.[Set](Rsc.Start, DateTime.Parse("31-Aug-2014 8:00 AM"))
4 rsc.[Set](Rsc.Finish, DateTime.Parse("31-Aug-2014 5:00 PM"))
5 project.Save("CreateResource.xml", SaveFileFormat.XML)
Crear y añadir una asignación de recursos al proyecto
La clase ResourceAssignment también introduce los métodos Set y Get, similares a otras colecciones de datos de la API, como Tareas, Recursos y Enlaces de Tareas.
Ejemplo de código de la API heredada
1 Project project = new Project();
2 Task tskRoot = new Task();
3 Task task = new Task("Task");
4 Resource rsc = new Resource();
5 rsc.StandardRate = 10;
6 rsc.OvertimeRate = 15;
7 ResourceAssignment assignment = new ResourceAssignment(task, rsc);
8 assignment.Uid = 1;
9 assignment.Start = DateTime.Parse("18-Aug-2009 8:00 AM" );
10 assignment.Finish = DateTime.Parse("18-Aug-2009 5:00 PM" );
11 project.RootTask = tskRoot;
12 project.RootTask.Children.Add(task);
13 project.Resources.Add(res);
14 project.ResourceAssignments.Add(assignment);
15 project.Save("project.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim tskRoot As New Task()
3 Dim task As New Task("Task")
4 Dim rsc As New Resource()
5 rsc.StandardRate = 10
6 rsc.OvertimeRate = 15
7 Dim assignment As New ResourceAssignment(task, rsc)
8 assignment.Start = DateTime.Parse("18-Aug-2009 8:00 AM" )
9 assignment.Finish = DateTime.Parse("18-Aug-2009 5:00 PM" )
10 assignment.Uid = 1
11 project.RootTask = tskRoot
12 project.RootTask.Children.Add(task)
13 project.Resources.Add(res)
14 project.ResourceAssignments.Add(assignment)
15 project.Save("project.xml", SaveFileFormat.XML)
New Aspose.Tasks for .NET 8.x Approach
1 Project project = new Project();
2 Task task = project.RootTask.Children.Add("Task");
3 Resource rsc = project.Resources.Add("Rsc");
4 rsc.Set(Rsc.StandardRate, 10);
5 rsc.Set(Rsc.OvertimeRate, 15);
6 ResourceAssignment assignment = project.ResourceAssignments.Add(task, rsc);
7 assignment.Set(Assn.Start,DateTime.Parse("18-Aug-2009 8:00 AM" ));
8 assignment.Set(Assn.Finish, DateTime.Parse("18-Aug-2009 5:00 PM" ));
9 project.Save("ResourceAssignments.xml", SaveFileFormat.XML);
1 Dim project As New Project()
2 Dim task As Task = project.RootTask.Children.Add("Task")
3 Dim rsc As Resource = project.Resources.Add("Rsc")
4 rsc.[Set](Rsc.StandardRate, 10)
5 rsc.[Set](Rsc.OvertimeRate, 15)
6 Dim assignment As ResourceAssignment = project.ResourceAssignments.Add(task, rsc)
7 assignment.Set(Assn.Start,DateTime.Parse("18-Aug-2009 8:00 AM"))
8 assignment.Set(Assn.Finish, DateTime.Parse("18-Aug-2009 5:00 PM" ) project.Save("ResourceAssignments.xml", SaveFileFormat.XML))
Conclusión
Migrar a Aspose.Tasks para .NET 8.0.0+ implica:
- Reemplazar las asignaciones de estilo de propiedad con el método
Set
. - Usar constructores para crear objetos
Task
,Resource
yCalendar
. - Agregar estos objetos a las colecciones correspondientes explícitamente.
- Eliminar el uso de API obsoletas como
project.Tasks.Add()
oproject.Resources.NewResource()
.
Al seguir estos patrones actualizados, su proyecto será compatible con la última versión de Aspose.Tasks, beneficiándose de una mayor consistencia y flexibilidad.