PSI Extensions are custom web services which tightly integrate with Project Server.  From the SDK:

The Project Server Interface (PSI) for Microsoft Office Project Server 2007 can be extended with custom Web services. PSI extensions tightly integrate with Project Server, can call other PSI methods, and can use the same security infrastructure that the rest of the PSI uses.

Following are some scenarios that can benefit from PSI extensions:

  • Pulling data from the Reporting database (RDB). A PSI extension can directly query the RDB from the server. For example, third-party applications that are deployed outside a firewall cannot do a direct query of the RDB on Project Server, but can use a Web service that is a PSI extension to query the RDB.

  • Consolidating information from several PSI calls or manipulating and formatting data for a third-party application. A PSI extension can save bandwidth and client-side processing by doing work on the server and returning exactly what the application needs.

  • Performing impersonation for specific jobs more easily by running in the correct security context. For example, the existing Calendar.UpdateCalendars PSI method requires the application user to have ManageEnterpriseCalendars permission. A PSI extension could impersonate a fictitious user who has the necessary permissions. Team members could use an application to update their own calendar exceptions, without requiring a project manager to use Microsoft Office Project Professional 2007.

  • Integrate better with third-party and line-of-business (LOB) applications. You can extend the functionality of Project Server with PSI extensions for client applications and middleware components for LOB applications such as human resources, finance, or CRM.

The walkthrough is here:

http://msdn.microsoft.com/en-us/library/bb428837.aspx

Introducing PSI Extension Generator 1.0

The problem is creating an extension and configuring it is a bit of hassle, so I have invented a PSI Extension Generator.  See the screenshots below. 

image

After running the generator, I can browse to the web service:

image

Now, the problem is when I change the web service (like add a new method).   I have to go through all the steps again!

Not any longer…

Let me add a new method called HelloWorld2.

Run the generator again.

15 seconds later:

image

Oh thank goodness.  I was going crazy going through each of those steps over and over again.

I will get this up on CodePlex at some point.

HAPPY NEW YEAR