This blog focuses on customizations and programming for Project Web App, Project Server, Project Professional and Project Standard. Includes User Interface (UI) customizations, Project Server Interface (PSI) and Visual Basic for Applications (VBA) Programming. It also covers Business Intelligence.
It has been a while since I have done a blog post, so I figured I would share with you something that I am currently working on. We have run into the scenario where users are updating information on Project Workspaces and Project Manager wants to report on the data that the users are entering in the Workspaces. That information does not make it into the RDB until after a project publishes. To keep the RDB in sync with the Project Workspace, I wrote the following app that we run as a scheduled job:
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Data;using System.Web.Services.Protocols;using System.Diagnostics;using PSLibrary = Microsoft.Office.Project.Server.Library;
ws_Project.Url = ls_projURL + PROJECT_SERVICE_PATH; ws_Project.Credentials =
This application is fairly straightforward. It reads all the projects and checks if a workspace exists. If one exists, it forces the RDB to be updated by calling QueueSynchronizeProjectWorkspace(…). It logges events to the event log, which makes troubleshooting easy if administrator decide to run it as a scheduled job.
I have been asked many times how to get the task time phased data from the PSI. Unfortunately there is no way to get this through the PSI. I suggest that you either go to the RDB for this information or the cubes. Here is a quick example.
I created a project with one task and broke the work down over a week:
I saved and published the project so that it would make its way into the reporting database. Here is the query I wrote to retrieve this data:
INNER JOIN MSP_EpmTask_UserView ON MSP_EpmAssignmentByDay_UserView.TaskUID = MSP_EpmTask_UserView.TaskUID
(MSP_EpmTask_UserView.TaskName = 'Task 1')
Here is the result of the query: