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:
- Crear nuevos archivos de proyecto desde cero o basados en plantillas
- Abrir archivos existentes en una variedad de formatos (MPP, MPT, MPX, XML, XER, P6 XML)
- Guardar proyectos en múltiples formatos, incluidos MPP, XML, PDF, HTML y más
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:
- En el Archivo menú, seleccione Abrir.
- Seleccione el formato XML (*.xml) en los tipos de archivo y busque el archivo XML de salida.
- 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:
- Crear nuevos proyectos (XML, MPP) y guardarlos en archivo o en flujo
- Leer proyectos existentes en múltiples formatos
- Trabajar con Project Server e integraciones de bases de datos (compatibilidad heredada)
- Manejar problemas de codificación y caracteres inválidos de forma adecuada
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.