How to track EPM Resource field changes in your Reporting Database

Christophe Fiessinger's Blog

The latest news you need to know about Microsoft Project

How to track EPM Resource field changes in your Reporting Database

  • Comments 0

Leveraging the EPM 2007 Eventing service as well as the Reporting database here is a way of tracking all changes made to a Resource's fields. A common request I heard from customers is the ability to track when a Resource changes from one node to another node in the RBS.

Steps to do it (code download below!!!):

  • Created a custom table in the Reporting database called: MCS_EpmResource_UserView_Tracking
  • Created a custom stored procedure in the Reporting database called: MCS_EPM_InsertResourceChange that takes the RES_UID as a parameter
DECLARE @ResourceTimesheetManagerUID uniqueidentifier
DECLARE @ResourceModifiedDate datetime 

SELECT    @ResourceModifiedDate = ResourceModifiedDate,
        @ResourceTimesheetManagerUID = ResourceTimesheetManagerUID
FROM MSP_EpmResource
WHERE ResourceUID = @ResourceUID 

IF NOT EXISTS(SELECT * FROM dbo.MCS_EpmResource_UserView_Tracking WHERE ResourceUID = @ResourceUID AND ResourceModifiedDate = @ResourceModifiedDate) 

Note that I only INSERT a new row in my history table if the Modified Date has changed.

  • Created a custom event handler that gets called every time a Resource is changed (OnResourceChanged)
        public override void OnResourceChanged(PSContextInfo contextInfo, ReportingPostResourceChangedEventArgs e)
        {
            // Standard processing
            base.OnResourceChanged(contextInfo, e);

            // Load settings from Microsoft.Office.Project.Server.Eventing.exe.config
            LoadSettings();

            // Build T-SQL command
            string cmdText = string.Format("EXEC MCS_EPM_InsertResourceChange '{0}'",e.ResourceUid.ToString());

            // Store Resource field update
            ConnectAndExecuteNonQuery(connectionString, cmdText);
        }
  • Deploy event handler in GAC and define an entry in the PWA configuration (refer to SDK for more details)
  • and voila!

From now on, every time a Resource's field is changed (for instance it's name, RBS tec ...) and entry will be inserted in the tracking table mentioned above.

Eventually you will want to build a report that leverages that historical data to show you a view before and after the change was made for instance.

Attachment: ResourceFieldTracking.zip
Leave a Comment
  • Please add 8 and 2 and type the answer here:
  • Post