Trabajar con proyectos

Aspose.Tasks for .NET le permite trabajar con archivos de Microsoft Project (MPP/XML) sin necesidad de tener Microsoft Project instalado ni depender de Microsoft Office Automation. Ofrece un API potente y flexible que ayuda a los desarrolladores a ahorrar tiempo y esfuerzo al ofrecer una forma coherente de manipular los datos de los proyectos en distintos formatos.

Con Aspose.Tasks, puede:

Este artículo explica cómo crear, leer y guardar archivos de proyecto usando la Project clase.

Crear un archivo de proyecto vacío

La Project clase es la clase principal en Aspose.Tasks utilizada para establecer y obtener propiedades asociadas con un proyecto, así como su comportamiento. El método Save que ofrece esta clase permite representar el Project en varios formatos de salida como XML, MPP, PDF, HTML, etc., con una sola llamada a la API. Este método acepta un flujo de archivo o el nombre de archivo, y uno de los valores proporcionados por la SaveFileFormat tipo de enumeración.

Las siguientes líneas de código crean un archivo de proyecto sencillo en formato XML.

Crear un proyecto vacío y guardarlo como archivo XML

Este ejemplo demuestra cómo crear un proyecto nuevo y guardarlo como un archivo XML que se puede abrir en Microsoft Project.

1Project project = new Project();
2project.Save("EmptyProjectSaveXML_out.xml", SaveFileFormat.XML);

El archivo de proyecto XML resultante se puede abrir en Microsoft Project utilizando los siguientes pasos:

  1. En el Archivo menú, seleccione Abrir.
  2. Seleccione el formato XML (*.xml) en los tipos de archivo y busque el archivo XML de salida.
  3. En el Proyecto menú, seleccione Información del proyecto

Crear un proyecto vacío y guardar en un flujo

Si necesita trabajar con proyectos en memoria (p. ej., en aplicaciones web o entornos en la nube), puede guardar directamente en un MemoryStream en lugar de escribir en un archivo.

1// Create a project instance
2Project newProject = new Project();
3
4// Create a file stream
5using (FileStream stream = new FileStream("EmptyProjectSaveStream_out.xml", FileMode.Create, FileAccess.Write))
6{
7    // Write the stream into XML format
8    newProject.Save(stream, SaveFileFormat.XML);
9}

Crear un proyecto vacío y guardar en MPP

Este ejemplo muestra cómo generar un archivo nativo de Microsoft Project MPP de forma programática.

1// there is no more need to load MPP template to save it into MPP
2// add tasks, resources, etc.
3Project project = new Project();
4
5// !The project will be saved into MPP by using internal MPP template.
6project.Save("New Project.mpp", SaveFileFormat.MPP);

Leer un archivo de Microsoft Project

Aspose.Tasks for .NET le permite leer proyectos existentes en diferentes formatos: XML, MPP, MPT, MPX, XER, Primavera P6 XML, etc. y guardarlos de nuevo en MPP u otro formato después de actualizarlos. Los siguientes fragmentos muestran cómo se puede leer un archivo de proyecto usando el constructor de la clase Project.

Leer archivos de proyecto como plantilla

Este ejemplo muestra cómo cargar un proyecto usando el Project constructor y tratarlo como plantilla para trabajo posterior.

1// Read existing project template file
2Project project = new Project("New Project.mpp");

Leer archivo de proyecto desde un flujo

Para escenarios en los que los proyectos se cargan o almacenan en flujos, puede cargarlos directamente desde Stream objetos.

1// Read the project xml into file stream
2using (FileStream stream = new FileStream("ReadProjectFileFromStream.xml", FileMode.Open))
3{
4    // Create project using file stream
5    Project project = new Project(stream);
6}

Importar datos de proyecto desde la base de datos de Microsoft Project Server

Planeamos eliminar la importación de datos de proyecto desde Microsoft Project Server Database en una versión futura. En su lugar, puede usar la importación/exportación de datos de proyecto utilizando la PWA API de Microsoft Project Server.

Consulte la documentación de ProjectServerManager para más detalles.

 1    // Create connection string
 2    SqlConnectionStringBuilder sqlConnectionString = new SqlConnectionStringBuilder();
 3    sqlConnectionString.DataSource = "192.168.56.2,1433";
 4    sqlConnectionString.Encrypt = true;
 5    sqlConnectionString.TrustServerCertificate = true;
 6    sqlConnectionString.InitialCatalog = "ProjectServer_Published";
 7    sqlConnectionString.NetworkLibrary = "DBMSSOCN";
 8    sqlConnectionString.UserID = "sa";
 9    sqlConnectionString.Password = "*****";
10
11    // Use Aspose.Tasks.Connectivity namespace
12    MspDbSettings settings = new MspDbSettings(sqlConnectionString.ConnectionString, new Guid("E6426C44-D6CB-4B9C-AF16-48910ACE0F54"));
13    Project project = new Project(settings);

Importar datos de proyecto desde un archivo MPD (Microsoft Project Database)

Las bases de datos de proyectos antiguas almacenadas en .mpd formato también se pueden leer.

1    DbSettings settings = new MpdSettings("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + "MpdFileToRead.mpd", 1);
2    Project project = new Project(settings);

Ignorar caracteres inválidos durante la carga del proyecto

Algunos archivos pueden tener caracteres inválidos en los campos personalizados. Microsoft Project no permite caracteres inválidos, por lo que los archivos se han creado o manipulado con automatización u otras herramientas. Si se cargan mediante la API, pueden provocar una excepción. Para ignorar dichos caracteres inválidos, se puede usar el constructor sobrecargado de la clase Project con el método delegado ParseErrorCallBack.

 1static void Run()
 2{
 3    // Open modified xml stream
 4    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(GetModifiedXml())))
 5    {
 6        Project project = new Project(stream, new ParseErrorCallback(CustomDurationHandler));
 7    }
 8}
 9
10static string GetModifiedXml()
11{
12    // Open valid xml file and modify it
13    using (TextReader reader = new StreamReader("IgnoreInvalidCharacters.xml"))
14    {
15        string xml = reader.ReadToEnd();
16        Regex regex = new Regex("PT(\\d+)H(\\d+)M(\\d+)S");
17        return regex.Replace(xml, "**$1Hrs$2Mins$3Secs**");
18    }
19}
20
21static object CustomDurationHandler(object sender, ParseErrorArgs args)
22{
23    Regex regex = new Regex("[*]{2}(\\d+)Hrs(\\d+)Mins(\\d+)Secs[*]{2}");
24    if (args.FieldType == typeof(TimeSpan))
25    {
26        Debug.Print("Object field : {0}, Invalid value : {1}", args.FieldName, args.InvalidValue);
27        string duration = regex.Replace(args.InvalidValue, "PT$1H$2M$3S");
28        TimeSpan newValue = Duration.ParseTimeSpan(duration);
29        Debug.Print("New value : {0}", newValue);
30        return newValue;
31    }
32    // Here we handle only TimeSpan instances, so rethrow original exception with other types
33    throw args.Exception;
34}

Trabajar con codificaciones

Al trabajar con archivos MPX, puede ser necesario especificar la codificación de archivo correcta. Esto asegura que los datos de texto se lean y muestren correctamente. Aspose.Tasks for .NET ofrece soporte para la codificación de archivos MPX. El siguiente ejemplo de código muestra la configuración de codificación.

1// Specify Encodings
2using (StreamReader streamReader = new StreamReader("Project.mpx", System.Text.Encoding.GetEncoding("ISO-8859-1")))
3{
4    Project project = new Project(streamReader.BaseStream);
5}

Aspose.Tasks for .NET ofrece a los desarrolladores control total sobre los archivos de Microsoft Project sin requerir MS Project.
Con la Project clase, puede:

Ya sea que esté creando una solución de escritorio o una aplicación web, Aspose.Tasks proporciona una API coherente y fiable para gestionar los datos de proyectos de forma programática.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.