我正在尝试使用MPXJ 9.3.1库编写PMXML文件。在生成PMXML文件时,我使用setBaselineStart为所有任务设置基线日期和setBaselineFinishMPXJ Task类的。但是生成的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文件中。我怎么让它工作呢?
MPXJ是按照Microsoft Project表示时间表的方式建模的。对于MS项目,基线是在进度本身中使用"并行"来捕获的。属性集(例如,成本属性也可能具有基线1成本,基线2成本属性,表示两个不同的基线)。P6采用一种不同的方法,允许获取整个计划的快照,并将其链接为基线。
目前MPXJ在读取P6计划时可以理解这一点:您可以分别读取主计划和基线计划,然后使用ProjectFile.setBaseline()
方法将基线计划附加到主计划。这将自动为您在主要计划中填充基线属性(例如,现在将填充主要计划中的基线1成本)。在读取PMXML文件时,MPXJ也会为您自动执行此操作:如果在导出PMXML文件时选择了相关选项,以便基线时间表作为文件的一部分包含,MPXJ将识别这一点,并在主时间表中为您设置基线属性。
在编写PMXML文件时,情况更加复杂。如果您有一个主调度文件作为ProjectFile
对象,并且您也有一个基线调度表示为另一个ProjectFile
对象,您可以使用ProjectFile.setBaseline()
方法附加基线,然后写入PMXML文件。MPXJ将适当地解释这一点,并将主调度和基线写入PMXML文件。不幸的是,MPXJ目前不支持翻译包含"并行"的单个时间表。将上面描述的一组基线属性(例如基线成本1、基线成本2)纳入一个主要计划和一个适合写入PMXML文件的基线计划。
您可以自己执行此操作,但是需要注意确保生成的基线计划在导入时对P6有效且可接受。这不是我投入任何时间去调查的领域。