如何在MS-Project文件中存储自定义(非任务)数据?

时间:2018-04-20 19:32:26

标签: c# vsto project-management ms-project

我正在使用C#编写项目附加组件(VSTO),以编程方式生成挣值图表(计划工作量与实际工作量与实际工时完成时间),我想存储 < em>每周实际工作 Microsoft Project 2016(MSP)文件(.mpp)中的数据。

在MSP中:我们不需要知道每项活动花费了多少精力。对于此图表,我只需要每周整个项目的实际工作量。我们使用不同的系统来衡量每个开发活动的计划工作量实际工作量

我要存储的示例数据集: Week# Hrs per week 2018-W16 900.00 2018-W17 1038.50 2018-W18 811.25

我已经获得了用于导出/存储&#34; 计划工作&#34;的解决方案。和&#34; 实际工作已完成&#34;。如果我可以存储这个&#34; 每周实际努力&#34;最后一块将被解决。 MSP文件中的数据。

AFAIK,并避免XY problem:下面列出的限制因素阻止我使用内置MSP功能(生成图形)或数据存储(存储我的自定义数据)。

约束

  • 在每个项目计划中,我无法在现有任务上更改这些值:Resource NamesDurationStartFinishPredecessorSuccessor。这样做会改变计划并引起建筑师和项目经理的愤怒。

  • 我们的团队&#39;在多个外部系统中跟踪实际小时数(例如:VSTS,Basecamp,自定义应用程序),并且不得更改以支持我的需求。

    • 从MSP和时间跟踪系统中提取此数据,然后手动创建数据集以生成挣值图表(在Excel中)需要太长时间,希望自动执行此操作。
    • 将时间分段的实际小时数分配给任务(通过View > Task Usage)会导致MSP自动调整该任务的Duration,这违反了上述限制。
    • MSP中的任务和外部时间跟踪系统中的项目不是一对一映射的。手动确定哪些时间进入哪些MSP任务是繁重且耗时的。在MSP任务上存储日期的小时数会受到上一期中提到的后果(Duration的自动调整)。
  • Arch&amp; PM要求启用项目设置Auto-scheduling。允许手动计划的任务,只要它们以这种方式单独手动设置(例如:手动覆盖Start)。我可以在操作期间暂时禁用Auto-scheduling(通过Microsoft.Office.Interop.MSProject.Application.Calculation = PjCalculation.pjManual),只要我之后恢复它。

我尝试了什么

  • 使用Duration = 0 days创建虚拟任务,并通过View > Task Usage记录小时数。为此任务分配任何小时时,MSP会相应地自动调整Duration。由于此任务现在出现在项目计划中,我怀疑Arch / PM不会批准,因为他们根据项目中的Duration值进行计算。

  • 创建一个未分配给任何任务的虚拟用户,并尝试通过View > Resource Usage为其分配小时数。 MSP阻止了这个(灰色),直到我将用户分配给任务。将此虚拟用户分配给任何任务,然后分配任何小时数据,将导致MSP自动调整Duration

  • 创建虚拟里程碑任务。设置字段:Duration = 0Start = last day of weekFinish = last day of week,并将每周实际小时数存储在自定义字段中(以避免MSP自动调整Duration)。对项目执行的每周重复一次。

    • 从技术上讲,这可行,但要求用户应用过滤器(通过View > Data > Filter)以避免在项目中出现所有这些额外的虚拟任务(每周一次)。我希望有更好的解决方案来存储这些数据,或者更好的方法来隐藏用户的这些数据。
  • 检查.mpp文件。存储为二进制数据,我无法解码。尝试通过Project Data Interchange XML Element Structure文档和MSP导出到XML来学习数据存储的可能性:我没有看到任何我可以使用的字段,它们不会违反上面列出的约束。

  • Google-fu:我对custom data storage ms project的搜索会返回有关使用自定义字段的信息,但这还不足以解决。

1 个答案:

答案 0 :(得分:1)

听起来你的核心问题是:我想在.mpp flie中的某个地方存储项目级别(因此不是任务/资源/分配数据)。看看类似的讨论Where can I save the settings entered by the user?;有关自定义字段的扩展信息,我认为可以解决您的问题。