Reputation: 137
I'm writing a Project add-on (VSTO) using C#, to programatically generate an Earned Value Chart (Planned effort vs. Actual effort vs. Actual work completed), and I want to store weekly actual effort data within the Microsoft Project 2016 (MSP) file (.mpp).
In MSP: we don't need to know how much effort was spent on each activity. For this chart, I only require the actual effort for entire project for each week. We use different systems for measuring planned effort versus actual effort for each dev activity.
Sample dataset that I want to store:
Week# Hrs per week
2018-W16 900.00
2018-W17 1038.50
2018-W18 811.25
I've got solutions for deriving/storing "Planned effort" and "Actual work completed". The final piece would be solved if I could store this "Weekly actual effort" data in the MSP file.
AFAIK, and to avoid XY problem: the contraints listed below are preventing me from using built-in MSP features (to generate graph) or datastore (to store my custom data).
Within each project plan, I cannot alter these values on existing tasks: Resource Names
, Duration
, Start
, Finish
, Predecessor
, Successor
. Doing so would alter the plan and incur wrath of Architect and Project Manager upon me.
Our teams' actual hours are tracked in multiple external systems (eg: VSTS, Basecamp, custom app), and isn't subject to change to support my needs.
View > Task Usage
) has consequence of MSP automatically adjusting Duration
on that task, which violates constraint above.Duration
).Arch & PM require project setting Auto-scheduling
to be enabled. Manually-scheduled tasks are allowed, provided they are individually manually set this way (eg: manually override Start
). I can temporarily disable Auto-scheduling
during operations (via Microsoft.Office.Interop.MSProject.Application.Calculation = PjCalculation.pjManual
), as long as I restore it afterwards.
Create dummy task with Duration = 0 days
, and record hours via View > Task Usage
. When assigning any hours to this task, MSP automatically adjusts Duration
accordingly. Since this task now appears within the project plan, I suspect Arch/PM won't approve, since they make calculations from Duration
values in the project.
Create a dummy user that isn't assigned to any tasks, and attempt to assign hours to it via View > Resource Usage
. MSP prevents this (greyed-out), until I assign user to a task. Assigning this dummy user to any task, and then assigning any hours data, will result in MSP auto-adjusting Duration
.
Create a dummy milestone task. Set fields: Duration = 0
, Start = last day of week
, Finish = last day of week
, and store the weekly actual hours in a custom field (to avoid MSP auto-adjustment of Duration
). Repeat for each week of project execution.
View > Data > Filter
) to avoid seeing all these extra dummy tasks (one per week) appearing within the project. I'm hoping for a better solution to store this data, or a better way to hide this data from user.Examine .mpp file. Stored as binary data, which I can't decode. Attempt to learn datastore possibilities via Project Data Interchange XML Element Structure docs and MSP export to XML: I'm not seeing any fields I can use that wouldn't violate constraints listed above.
custom data storage ms project
returns info about using custom-fields, which isn't enough to solve.Upvotes: 1
Views: 431
Reputation: 376
Sounds like your core problem is: I want to store project-level (so not task/resource/assignment data) somewhere in the .mpp flie. Take a look at a similar discussion Where can I save the settings entered by the user? ; there's expanded information about custom fields which I think may solve your problem.
Upvotes: 1