mpxj - 基线日期未使用 MPXJ 库导出到 PMXML 文件中
问题描述
我正在尝试使用 MPXJ 9.3.1 库编写 PMXML 文件。在生成 PMXML 文件时,我正在使用MPXJ Task 类的setBaselineStart和setBaselineFinish方法为所有任务设置基线日期。但是生成的 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 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 可接受。这不是我投入任何时间调查的领域。
推荐阅读
- ruby - ArgumentError:缺少必需的选项:key
- unity3d - SetActive(true) 在协程中不起作用
- r - 基于 R 中具有 p 值的多列值创建相关矩阵
- angular - 在 Angular 中使用 IdentityServer4 + oidc-client-js 在空闲时注销用户
- rust - 相当于#[cfg(test)] 的基准测试?
- python - matplotlib 的日期时间问题
- google-analytics - 事件跟踪之前的页面浏览量
- java - 斜线的SpringBoot路径变量问题
- android - React Native - 在包'android'(:app:processDebugResources)中找不到属性'appComponentFactory'的资源标识符
- if-statement - 在 csh if 语句中给出错误为“如果:格式错误的数字”。