Funciones utilitarias en Aspose.Tasks for .NET

Al trabajar con archivos de Microsoft Project, los desarrolladores a menudo necesitan más que simplemente crear tareas y recursos. Requieren acceso a datos complementarios del proyecto como filtros, tablas, grupos, objetos incrustados e incluso herramientas de diagnóstico para el manejo de errores. Aspose.Tasks for .NET proporciona un conjunto de funciones utilitarias que hacen que los flujos de trabajo de gestión de proyectos sean más potentes y flexibles. Estas incluyen capacidades como calcular la ruta crítica de un proyecto, manejar excepciones al escribir tareas, recuperar definiciones de filtros y grupos, extraer objetos incrustados y más. En conjunto, estas utilidades ayudan a los desarrolladores a ampliar la funcionalidad del proyecto, mejorar la precisión de los informes e integrar los archivos de Microsoft Project de forma fluida con otros sistemas.

Calcular la ruta crítica

La ruta crítica son las tareas, o la tarea, que en última instancia determinan cuándo terminará su proyecto. Mantener el seguimiento de la ruta crítica y de los recursos asignados a la misma ayuda a que el proyecto se mantenga en el tiempo. Microsoft Project calcula la ruta crítica basándose en tareas que no tienen holgura, que tienen restricciones de fecha específicas (must start on, must finish on, as soon as possible o as late as possible) o que tienen la misma, o una posterior, fecha de finalización que el proyecto. Aspose.Tasks permite calcular la ruta crítica.

La Project clase proporciona la CriticalPath propiedad que se utiliza para obtener la colección de tareas que conforman la ruta crítica del proyecto. El siguiente fragmento de código calcula y muestra las tareas en la ruta crítica.

 1Project project = new Project("New Project.mpp");
 2project.CalculationMode = CalculationMode.Automatic;
 3
 4Task subtask1 = project.RootTask.Children.Add("1");
 5Task subtask2 = project.RootTask.Children.Add("2");
 6Task subtask3 = project.RootTask.Children.Add("3");
 7project.TaskLinks.Add(subtask1, subtask2, TaskLinkType.FinishToStart);
 8
 9// Display the critical path now
10foreach (Task task in project.CriticalPath)
11{
12    Console.WriteLine(task.Get(Tsk.Name));
13}

Imprimiendo la TaskWritingException

Un proyecto consiste en varias tareas y Aspose.Tasks for .NET API permite agregar, eliminar y actualizar información de tareas. Si hay un problema al escribir tareas, utilice TasksWritingException para capturarlas.

Aspose.Tasks for .NET admite imprimir un mensaje cuando hay una excepción al escribir una tarea. Esto se hace con TaskWritingException, de forma similar a cómo se utiliza TaskReadingException.

El mensaje del registro se encuentra en la propiedad pública TasksWritingException.LogText, como se muestra en el siguiente ejemplo de código.

 1try
 2{
 3    Project project = new Project("New Project.mpp");
 4    Console.Write("This example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
 5    project.Save("output.mpp", SaveFileFormat.MPP);
 6}
 7catch (TasksWritingException ex)
 8{
 9    Console.WriteLine(ex.LogText);
10}
11catch (NotSupportedException ex)
12{
13    Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
14}

Trabajar con datos de filtros desde archivos MPP

Aspose.Tasks permite a los desarrolladores leer información sobre los filtros aplicados a los datos de archivos MPP. Este artículo muestra cómo recuperar la definición de filtros y los datos de criterios de filtro desde un archivo MPP de Microsoft Project.

Lectura de datos de definición de filtro

Las definiciones de filtro en Microsoft Project describen la estructura de los filtros —como sus nombres, tipos y los campos a los que se aplican. Usando Aspose.Tasks for .NET, pueden acceder a estas definiciones de filtro de forma programática y explorar cómo están configurados los filtros en un archivo MPP.

 1// Instantiate project and access task filters
 2Project project = new Project("ReadFilterDefinitionData.mpp");
 3List<Filter> taskFilters = project.TaskFilters.ToList();
 4Console.WriteLine("Task Filters Count: " + taskFilters.Count);
 5Console.WriteLine("All Tasks: " + taskFilters[0].Name);
 6Console.WriteLine("Task Item: " + taskFilters[0].FilterType);
 7Console.WriteLine("Task Filters Show In Menu: " + taskFilters[0].ShowInMenu);
 8Console.WriteLine("Task filter ShowRelatedSummaryRows: " + taskFilters[0].ShowRelatedSummaryRows);
 9
10// Access resource filters
11List<Filter> filters = project.ResourceFilters.ToList();
12Console.WriteLine("Project.ResourceFilters count: " + filters.Count);
13Console.WriteLine("Resource Filter Item Type: Item.ResourceType: " + filters[0].FilterType);
14Console.WriteLine("Resource filter ShowInMenu" + filters[0].ShowInMenu);
15Console.WriteLine("Resource filter ShowRelatedSummaryRows: " + filters[0].ShowRelatedSummaryRows);

Lectura de datos de criterios de filtro

Mientras las definiciones describen la estructura de un filtro, los criterios de filtro determinan las condiciones exactas aplicadas a los datos del proyecto (por ejemplo, tareas con fechas o recursos específicos). Aspose.Tasks permite leer estos criterios desde un archivo MPP, lo cual puede ser especialmente útil para replicar o analizar vistas personalizadas usadas en Microsoft Project.

 1Project project = new Project("New Project.mpp");
 2
 3Filter filter = project.TaskFilters.ToList()[1];
 4Console.WriteLine(filter.Criteria.CriteriaRows.Count);
 5Console.WriteLine(filter.Criteria.Operation.ToString());
 6
 7FilterCriteria criteria1 = filter.Criteria.CriteriaRows[0];
 8Console.WriteLine(criteria1.Test.ToString());
 9Console.WriteLine(criteria1.Field.ToString());
10Console.WriteLine(criteria1.Values[0].ToString());
11
12FilterCriteria criteria2 = filter.Criteria.CriteriaRows[1];
13Console.WriteLine(criteria2.Operation.ToString());
14Console.WriteLine(criteria2.CriteriaRows.Count);
15
16FilterCriteria criteria21 = criteria2.CriteriaRows[0];
17Console.WriteLine(criteria21.Test.ToString());
18Console.WriteLine(criteria21.Field.ToString());
19Console.WriteLine(criteria21.Values[0].ToString());
20
21FilterCriteria criteria22 = criteria2.CriteriaRows[1];
22Console.WriteLine(criteria22.Test.ToString());
23Console.WriteLine(criteria22.Field.ToString());
24Console.WriteLine(criteria22.Values[0].ToString());
25Console.WriteLine(filter.Criteria);

Lectura de datos de definición de grupo

Un archivo de datos de Microsoft Project puede contener datos en grupos. Aspose.Tasks for .NET proporciona la capacidad para leer los datos de definición de grupo como se muestra en el ejemplo siguiente.

 1Project project = new Project("New Project.mpp"); 
 2
 3Console.WriteLine("Task Groups Count: " + project.TaskGroups.Count);
 4
 5Group taskGroup = project.TaskGroups.ToList()[1];
 6Console.WriteLine("Group Name:", taskGroup.Name);
 7Console.WriteLine("Group Criteria count: " + taskGroup.GroupCriteria.Count);
 8Console.WriteLine("************* Retrieving Task Group's Criterion information *************");
 9
10GroupCriterion criterion = taskGroup.GroupCriteria.ToList()[0];
11Console.WriteLine("Criterion Field: " + criterion.Field.ToString());
12Console.WriteLine("Criterion GroupOn: " + criterion.GroupOn.ToString());
13Console.WriteLine("Criterion Cell Color: " + criterion.CellColor);
14Console.WriteLine("Criterion Pattern: " + criterion.Pattern.ToString());
15
16if (taskGroup == criterion.ParentGroup)
17{
18    Console.WriteLine("Parent Group is equal to task Group.");
19}
20
21Console.WriteLine("*********** Retrieving Criterion's Font Information ***********");
22Console.WriteLine("Font Name: " + criterion.Font.Name);
23Console.WriteLine("Font Size: " + criterion.Font.Size);
24Console.WriteLine("Font Style: " + criterion.Font.Style);
25Console.WriteLine("Ascending/Descending: " + criterion.Ascending);

Lectura de datos de tabla desde un archivo MPP

La API de Aspose.Tasks for .NET admite la lectura de datos de tabla de archivos de datos de Microsoft Project. Project.Tables implementa la interfaz ICollection para proporcionar acceso a los datos de tabla de un archivo MPP. La función es compatible con todas las versiones de archivos de datos de Microsoft Project, incluyendo MPP 2003, 2007, 2010 y 2013.

El ejemplo siguiente muestra cómo recuperar datos de tabla de un archivo MPP de Microsoft Project. Aquí se muestran, a modo de demostración, los valores de propiedades de la tabla como ancho, título, alineación del título y alineación de datos.

 1Project project = new Project("New Project.mpp");
 2
 3// Access table
 4Table task1 = project.Tables.ToList()[0];
 5Console.WriteLine("Table Fields Count" + task1.TableFields.Count);
 6
 7// Display all table fields information
 8foreach (TableField tableField in task1.TableFields)
 9{
10    Console.WriteLine("Field width: " + tableField.Width);
11    Console.WriteLine("Field Title: " + tableField.Title);
12    Console.WriteLine("Field Title Alignment: " + tableField.AlignTitle.ToString());
13    Console.WriteLine("Field Align Data: " + tableField.AlignData.ToString());
14}

Extracción de objetos incrustados desde el formulario de tarea o de revisión

Los archivos de datos de Microsoft Project (MPP/XML) pueden contener objetos incrustados, como documentos, hojas de Excel, PDF, imágenes, etc., en las vistas de Tarea o Recurso. La API de Aspose.Tasks for .NET proporciona la capacidad de extraer estos objetos desde la vista de Tareas o Recursos de un proyecto, como se muestra en los temas siguientes.

Extracción de objetos incrustados

Los objetos incrustados (aquellos que se crearon a partir de un archivo seleccionando una ruta de archivo) se empaquetan en un OLE Package dentro del archivo MPP. Para extraer el archivo original puede usar las propiedades Content y FullPath de una instancia de la clase OleObject.

 1Project project = new Project("ExtractEmbeddedObjects.mpp");
 2OleObject ole = project.OleObjects.ToList()[0];
 3// We have to check this property because it can be null if the embedded object was created inside the ms project application Or, alternatively, you can use this check: if (ole.FileFormat == "Package")
 4if (!string.IsNullOrEmpty(ole.FullPath))
 5{
 6    using (FileStream stream = new FileStream("out.ole", FileMode.Create))
 7    {
 8        stream.Write(ole.Content, 0, ole.Content.Length);
 9    }
10}

Los objetos incrustados que se crearon dentro de la aplicación Microsoft Project pueden extraerse de esta manera:

 1IDictionary<string, string> fileFormatExt = new Dictionary<string, string>();
 2fileFormatExt.Add("RTF", "_rtfFile_out.rtf");
 3fileFormatExt.Add("MSWordDoc", "_wordFile_out.docx");
 4fileFormatExt.Add("ExcelML12", "_excelFile_out.xlsx");
 5Project project = new Project("New Project.mpp"); 
 6foreach (OleObject oleObject in project.OleObjects)
 7{
 8    if (!string.IsNullOrEmpty(oleObject.FileFormat) && fileFormatExt.ContainsKey(oleObject.FileFormat))
 9    {
10        using (FileStream stream = new FileStream("EmbeddedContent_" + fileFormatExt[oleObject.FileFormat], FileMode.Create))
11        {
12            stream.Write(oleObject.Content, 0, oleObject.Content.Length);
13        }
14    }
15}

Las funciones utilitarias en Aspose.Tasks for .NET proporcionan a los desarrolladores un conjunto completo de herramientas para manejar detalles del proyecto que van más allá de la simple manipulación de tareas o recursos. Desde identificar la ruta crítica y solucionar problemas en las operaciones con tareas, hasta recuperar filtros, grupos y tablas, e incluso extraer contenido incrustado —estas capacidades garantizan que los desarrolladores tengan control total sobre el ciclo de vida de los datos del proyecto. Al integrar estas utilidades en los flujos de trabajo, los equipos pueden lograr mejor supervisión, un intercambio de datos más limpio y una automatización más profunda, lo que, en última instancia, aumenta la eficiencia en la gestión de proyectos.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.