CU4 introduces a couple of new events which have been deemed necessary to accomodate customer requests. This post will update the previous post on the subject, with additional definitions and a code sample.
First, the 2 new events are:
Event Name | Event Type | PFSEventID value | Description |
---|---|---|---|
FinancialValuesRead | Filter event | PFSEventID.FinancialValuesRead (10) | The event fires after the data has been read and before it will be displayed in the grids |
ReportingCompleted | Post-event | PFSEventID.ReportingCompleted (11) | The event fires to notify that relevant data was copied to the reporting database |
The signatures for the two events are:
FinancialValuesEventsReceiver.OnFinancialValuesRead(PSContextInfo context, ReadValuesEventArgs e);
FinancialValuesEventsReceiver.OnReportingCompleted(PSContextInfo context, ReportingEventArgs e);
A sample to demonstrate the new Read event is below. In this scenario, we display the values in thousand dollars instead of dollars for the resources in the Executive group.
class CU4EventsReceiver : FinancialValuesEventsReceiver { public override void OnFinancialValuesRead(PSContextInfo context, ReadValuesEventArgs e) { Guid projectUid = e.ProjectUid; if (IsSummaryResource(context)) { // if summary resource, display all the values in K$ (thousands dollars) foreach (ValueInfo.cmFinancialValuesRow valueRow in e.Values.cmFinancialValues) { valueRow.Value = valueRow.Value / 1000; } e.Currency = "K$"; e.IsGridReadOnly = true; // this view is readonly e.Values.AcceptChanges(); // commit changes to the dataset. } } private bool IsSummaryResource(PSContextInfo context) { // call PSI to find out the security groups the current user is part of // the current user is in the context (UserGuid / UserName) PSI psi = new PSI(PSContextInfo.SerializeToString(context)); ResourceAuthorizationDataSet rsds = psi.ResourceWebService.ReadResourceAuthorization(context.UserGuid); if (rsds.GroupMemberships.FindByRES_UIDWSEC_GRP_UID(context.UserGuid, PSSecurityGroup.Executives) != null) return true; return false; } }
What do you think?