How to track EPM Resource field changes in your Reporting Database

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

// 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.

Skip to main content