我正在使用 C# 编写项目加载项 (VSTO),以编程方式生成挣值图表(计划工作量与实际工作量与实际完成工时),并且我想将每周实际工作量数据存储在 Microsoft Project 2016 (MSP) 文件 (.mpp) 中。
在MSP中:我们不需要知道在每个活动上花费了多少精力。对于此图表,我只需要每周整个项目的实际工作量。我们使用不同的系统来衡量每个开发活动的计划工作量与实际工作量。
我要存储的示例数据集:
Week# Hrs per week
2018-W16 900.00
2018-W17 1038.50
2018-W18 811.25
我有用于派生/存储">计划工作量"和"实际已完成工作"的解决方案。 如果我可以将此">每周实际工作量"数据存储在 MSP 文件中,则解决最后一块。
AFAIK,并避免XY问题:下面列出的限制阻止我使用内置的MSP功能(生成图形)或数据存储(存储我的自定义数据)。
约束
-
在每个项目计划中,我无法更改现有任务的这些值:
Resource Names
、Duration
、Start
、Finish
、Predecessor
、Successor
。这样做会改变计划,并招致建筑师和项目经理对我的愤怒。 -
我们团队的实际工作时间在多个外部系统(例如:VSTS,Basecamp,自定义应用程序)中进行跟踪,并且不会更改以支持我的需求。
- 从 MSP 和时间跟踪系统中提取此数据,然后手动创建数据集以生成挣值图表(在 Excel 中)需要很长时间,想要自动化此操作。
- 将按时间分段的实际小时数分配给任务(通过
View > Task Usage
)会导致 MSP 自动调整该任务的Duration
,这违反了上述约束。 - MSP 中的任务和外部时间跟踪系统中的项目不是一对一映射的。手动决定哪些时间用于哪些 MSP 任务既繁重又耗时。在 MSP 任务上存储带有日期的小时数会遭受上一期中提到的后果(自动调整
Duration
)。
-
Arch 和 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 = 0
、Start = last day of week
、Finish = last day of week
,并将每周实际小时数存储在自定义字段中(以避免 MSP 自动调整Duration
)。对项目执行的每一周重复此操作。- 从技术上讲,这是有效的,但需要用户应用过滤器(通过
View > Data > Filter
)以避免看到项目中出现所有这些额外的虚拟任务(每周一个)。我希望有一个更好的解决方案来存储这些数据,或者更好的方法来向用户隐藏这些数据。
- 从技术上讲,这是有效的,但需要用户应用过滤器(通过
-
检查 .mpp 文件。 存储为二进制数据,我无法解码。尝试通过项目数据交换XML元素结构文档和MSP导出到XML来学习数据存储的可能性:我没有看到任何我可以使用的字段不会违反上面列出的约束。
- Google-fu:我对
custom data storage ms project
的搜索返回有关使用自定义字段的信息,这不足以解决。
听起来你的核心问题是:我想将项目级(所以不是任务/资源/分配数据)存储在 .mpp ffly 中的某个地方。看看类似的讨论 在哪里可以保存用户输入的设置? ;有关于自定义字段的扩展信息,我认为这可能会解决您的问题。