One of my side projects is a project migration toolkit for Project Server. Have you ever wanted to move a project from one Project Server instance to another, including resources, custom fields, and lookup tables? Yeah, me too!
- Migrate a project from one Project Server instance to another, including:
- Project custom field values
- Task custom field values
- Resource custom field values
- Custom field definitions
- Lookup table definitions
- Allow for Project Server to Project Server migration
- Allow for MPP export to Project Server import
The driving reason behind my working up this toolkit was testing. Our newest product, EVMS forProject, has a Project Server synchronization engine that syncs Project Server data with our system. I needed a way to get projects from one environment (test, dev, production, etc.) to another for testing and debugging purposes.
The toolkit user experience begins with a switchboard:
The options are to:
- Migrate Project – This option allows the user to either choose an MPP that has been exported to MPP by using the toolkit or to choose a source and target Project Server instance. The source project is then migrated to the target Project Server instance
- Migrate Server Settings – Coming Soon
- Migrate System – Coming soon
- Create Custom Fields Description File – This option allows the user to create a file that contains the custom field and lookup table definitions for the source Project Server instance. This can be used in conjunction with the final option to migrate custom field and lookup table definitions to the target Project Server instance.
- Export MPP for Migration – In the case where the user doesn’t have access to the source Project Server instance at the time that the project is to be migrated to the target Project Server instance, this option provides an MPP export mechanism. As we shall see later, it even provides a mechanism by which a self-extracting executable is created that when run against the target Project Server instance essentially “installs” the project into the new environment—including custom field and lookup table definitions.
Lets walk through some use cases
Use Case: Project Server-To-Project Server Migration
Note: I happen to be using Project Server 2007 in these demos but the tool is designed for 2007 and 2010.
Suppose you have a project in Project Server A and you want to create a copy of it in Project Server B. Using the toolkit, this is extremely easy. Choosing the first option described above displays a migration details form:
Clicking on the ellipsis in the “Select Project Server” in the Source group control displays a Project Server login dialog:
Once logged in, the project selector edit button is enabled. When clicked, the source project can be selected:
And the target Project Server instance and project name are specified:
Notice that I have “Create Missing Custom Fields” and “Create and Populate Missing Lookup Tables” checked. Here is the source Project Server custom field definitions:
Here is the target Project Server custom field definitions:
Also, I have resource migration selected as well. Here is the source resource pool:
Here is the target resource pool:
Click Migrate and we are off and running… A short while later, we go to the target system and see the migrated project, including custom field definitions, lookup table definitions, resources, and the project itself!
Use Case: Export/Import MPP
Suppose you have a project you want to send to a colleague that is working in a different instance of Project Server. The toolkit provides two ways to do this. First, you can export and MPP (and supporting files, which includes custom field information) to a directory—which then you could zip up and send to your colleague. Or you can use the toolkit to create a self-extracting “project setup” file when run against the target Project Serer instance will “install” the project, including custom field information and resources, into the server.
After running the migration tool, an executable is created (using my sfx technology—see the sfx section in this post):
Let’s run it…First thing is the files are extracted, then I am prompted to login to the target Project Server instance:
Provide a name for the project:
And wham, the project is imported with custom fields, lookups, and resources
Back to work. This was supposed to be my lunch break!