首页 > 解决方案 > 基线日期未使用 MPXJ 库导出到 PMXML 文件中

问题描述

我正在尝试使用 MPXJ 9.3.1 库编写 PMXML 文件。在生成 PMXML 文件时,我正在使用MPXJ Task 类的setBaselineStartsetBaselineFinish方法为所有任务设置基线日期。但是生成的 PMXML 文件使用每个任务的开始和完成日期作为其相应的基线日期(PlannedStartDate 和 PlannedFinishDate)。

 ProjectFile file = new ProjectFile();
      :
      :
 file.setBaseline(file, Task::getCanonicalActivityID);
      :
      :
 Task t = file.addTask()
 t.setBaselineStart(1, BASELINE_START_DATE)
 t.setBaselineFinish(1, BASELINE_FINISH_DATE)
     :
     :
 ProjectFile baseline = file.getBaselines().get(0);
 if(baseline != null) {
       ProjectProperties prop = file.getProjectProperties();   
        prop.setBaselineProjectUniqueID(baseline.getProjectProperties().getUniqueID()); 
      file.setBaseline(baseline, 1, t -> t.getCanonicalActivityID());
        
 }

writer.write(file,"path to file")

上面的代码无助于将正确的基线日期放入 PMXML 文件中。我如何让它工作?

标签: mpxjprimavera

解决方案


MPXJ 以 Microsoft Project 表示计划的方式为模型。对于 MS Project,基线是使用一组“平行”属性在计划本身内捕获的(例如,成本属性可能还具有基线 1 成本、基线 2 成本属性,代表两个不同的基线)。P6 采用不同的方法,允许拍摄整个计划的快照并将其链接为基线。

目前 MPXJ 在读取 P6 进度表时可以理解这一点:您可以分别读取主进度表和基线进度表,然后使用ProjectFile.setBaseline()将基线进度表附加到主要进度表的方法。这将自动为您在主要计划中填充基准属性(例如,现在将填充主要计划中的基准 1 成本)。MPXJ 在读取 PMXML 文件时也会为您自动执行此操作:如果在导出 PMXML 文件时选择了相关选项,以便基线计划包含在文件中,MPXJ 将识别这一点并在主文件中为您设置基线属性日程。

编写 PMXML 文件时情况更为复杂。如果您有一个主要计划文件作为ProjectFile对象,并且您还有一个基准计划表示为另一个ProjectFile对象,您可以使用该ProjectFile.setBaseline()方法附加基准,然后编写 PMXML 文件。MPXJ 将对此进行适当解释,并将主要计划和基线都写入 PMXML 文件。不幸的是,MPXJ 目前不支持将包含上述“平行”基线属性集(例如基线成本 1、基线成本 2)的单个时间表转换为适合写入 PMXML 文件的主要时间表和基线时间表.

您可以自己执行此操作,但需要注意确保生成的基线计划在导入时有效且为 P6 可接受。这不是我投入任何时间调查的领域。


推荐阅读