MPXJ导出任务订单混淆了MS Project 2010

时间:2014-01-16 18:21:33

标签: c# mpxj

我正在为我们的本地开发团队编写一个实用程序,用于将项目信息(故事,资源等)从我们的敏捷管理系统导出到Microsoft Project 2010,并使用MPXJ和C#来完成此任务。使用这些示例将代码放在一起以生成成功导入MS Project的MPX或MSPDI输出文件非常简单。但是......我们想要的格式是多层次的,如下所示:

Project -> TaskA -> TaskASubtask1
                 -> TaskASubtask2
        -> TaskB -> TaskBSubtask1
                 -> TaskBSubtask2 -> TaskBSubSubtask1

当我以随机顺序天真地添加子任务时(输入流没有很好地排序),任务的WBS级别值看起来正确,但导入后的任务位于生成的文件中的前一个任务之下。 / p>

我已经读过正确订购文件是4.3.0中修复的错误(我记得),所以我认为我不需要以“正确”的顺序添加任务。我发现,如果我使用MpxCreate.cs示例并将任务创建“乱序”,我看到了在MS Project中没有呈现任务层次结构的相同行为。

这个简单的代码片段导致MS Project中的“乱序显示”(第二个子任务嵌套在下一个任务下):

Task task1 = file.AddTask();
task1.Name = "Summary Task";

Task task2 = task1.AddTask();
task2.Name = "First Sub Task";

Task task4 = file.AddTask();
task4.Name = "Next Task";

Task task3 = task1.AddTask();
task3.Name = "Second Sub Task";

这应该有用吗?或者我应该重新安排我的任务创建,以便每个层次结构完全填满所有?

我将继续玩它,但我欢迎任何见解。

谢谢, 欧文

2 个答案:

答案 0 :(得分:2)

我有完全相同的问题。如果我在导出之前调用以下函数,则导出的XML文件将正确导入到MS Project 2010中:

projectFile.getTasks().synchronizeTaskIDToHierarchy();

(乔恩·伊尔内斯的回答是一个很好的提示,但并非100%正确,因为中间没有getTasks()。)

答案 1 :(得分:0)

从记忆中,我想如果你打电话

file.synchronizeTaskIDToHierarchy();

添加完任务后,MS Project中的排序将正确无误。

从这个方法的Javadoc:

  

Microsoft Project基于其ID上显示的任务顺序   值。该方法采用任务的层次结构   在MPXJ中表示并重新编号ID值以确保这一点   结构在Microsoft Project中按预期显示。这是   通常用于处理分层任务的情况   结构已在MPXJ中以编程方式创建。