Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

A Generic Library For Accessing And Creating Microsoft Project Plan File

4.86/5 (3 votes)
18 Mar 2014CPOL3 min read 16.9K   220  
Generic Library for Accessing and Creating Microsoft Project Plan File

Introduction

In a project, if you need to extract data from Excel, you have a lot of options irrespective of technology. But if you have a requirement to retrieve data from a MPP (Microsoft Project Plan) file, you have a limited number of options.

Firstly, you can use MPXJ (Microsoft Project Exchange) open source Library to retrieve data from MPP file. But the problem is that it is coded in Java and the .NET version just embeds a virtual Java processor and then calls the Java-native version. It involves performance overhead.

Secondly, you can use Interop library provided in .NET Using this library, you can access an MPP file but is very complex and is low-level. Programming directly against Interop has been an issue with developers.

We came up with a generalized library keeping in mind the structure and fields of a MPP file. It provides you a direct mapping with inbuilt fields of a MPP file in an exact manner. For example, tasks in a project may have subtasks, but when you directly read it using Interop, even subtasks will be considered as separate tasks. Then the essence of a MPP file gets lost and rather it looks like an Excel file.

Image 1

Fig 1.0 Structure of MILE

We have kept intact the extensibility of Interop library and allowed the user to access and create a MPP file in a generalized manner keeping the essence of a project file intact.

Image 2

Fig 1.1 Class Specifications

Extensions

  • Disconnected architecture
  • LINQ extensibility
  • Generate MPP file in a generalized manner
  • Accessing data from project file in its essence
  • Refinement- Child tasks
  • Secure for web application

Prerequisites

Microsoft Project should be installed on your machine.

In order to use this library, you can use the following steps:

  1. Add reference of the provided DLL
  2. Import Abhi.MILE
  3. Create a List object of type MppTask and a reference variable of type MPPProject:
    C#
    // Creating a List variable of type MppTask
    List<MppTask> lsMppTasks;
    // Creating a reference variable of type MPPProject
    MPPProject project;
  4. Declare a string variable ‘path’ to store the location of MPP file and store the path in it
    C#
    // Creating a string variable to store the path of Mpp file
    String path;
    path="Your path here"; 
  5. After storing the path, just instantiate an object of MPPProject class as per the class definition:
    C#
    // Creating an object of  type MPPProject
    project = new MPPProject(path);
  6. Retrieve all tasks present in the mpp file through the object created in the last step. Invoke GetAllTasks method and store all tasks present in a list variable created in Step 3:
    C#
    // Invoking GetAllTasks() Method to retrieve all tasks present in MPP file
    lsMppTasks = project.GetAllTasks();
  7. Now you have a project object that contains all Tasks, subtasks and resources present in the Mpp file. With the help of List variable, we can access subtasks and all other fields or properties of a particular task as shown below:
    C#
    // Retrieving Name of first task    
    Firsttask.text=lsMpptasks[0].Name;
      
    // Retrieving the name of First child of first task
    FirstChildOfFirstTask.text= lsMpptasks[0].ChildTasks[0].Name;
    
    // Retrieving the start date of First child of first task
    ChildTaskStartDate.Text = lsMpptasks [0].ChildTasks[0].StartDate.ToString();
    
    // Retrieving the name of second child of first task
    SecondChildOfFirstTask.Text = lsMpptasks [0].ChildTasks[1].Name;

    Now the lsMppTask object can be used to access entire information present in MPP file with the help of methods as shown in the Class specification. In this way, library can be used for accessing all information present in a MPP file.

  8. Similarly, we can create a MPP File by creating List of MppTasks and pass them into CreateMppFile method of MppProject class.
    C#
    // Creating a List variable of type MppTask to store task information
        List<MppTask> lsMppTasks;
    
    //Creating a MppTask object and initializing some properties
        MppTask task1=new MppTask();
         task1.Name="Task1";
         task1.StartDate="30/09/2012";
         task1.FinishDate="10/11/2012";
    //Creating another MppTask object and initializing some properties
        MppTask task2=new MppTask();
         task2.Name="Task2";
         task2.StartDate="12/09/2012";
         task2.FinishDate="01/11/2012";
    //Adding both Mpptask objects to List object
        lsMppTasks.Add(task1);
        lsMppTasks.Add(task2);
     
    /*Invoking CreateMppFile Method of project class to create a Mpp file with all 
    information present in List object */
        project .CreateMppFile(lsMppTasks,"D:/My_MppFile.mpp");

For all remaining properties and methods, kindly refer to the class specification given above.

Reference(s)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)