如何更改 mpxj 中的任务持续时间?
How to change Task duration in mpxj?
我在使用 mpxj 库更改 java 中的任务耗时时遇到问题。
我在 MS Project 2016 中创建了这样的简单项目结构:
Project structure
这就是我在 Java 中尝试更改持续时间的方式:
for (int i = 0; i < allTasks.size(); i++){
if (allTasks.get(i).getID() == 3){
allTasks.get(i).setDuration(Duration.getInstance(3, TimeUnit.DAYS));
}
}
我最后将文件保存为 XML,但是当我在 MS Project 2016 中打开它时,没有任何改变。对此有什么建议吗?
P.S 我试过更改剩余工期,但在创建任务期间甚至没有在 MS Project 中设置工时。
这是一个很有趣的问题。问题的核心是 Microsoft Project 实际上确实为每个任务分配了至少一个资源,只是当您没有 "real" 资源分配时,该任务的所有工作都分配给 "nobody" 资源。如果查看 Microsoft Project 生成的 XML,您将看到 <Assignment>
标记,资源显示为 <ResourceUID>-65535</ResourceUID>
,这是 "null" 资源(真实资源这里将有一个正整数值)。
为了修改文件使任务的持续时间增加到 3 天,您需要更改此分配的“剩余工时”属性。
这是为您完成的代码片段:
// Read the sample project
ProjectFile project = new UniversalProjectReader().read("so-duration-question.xml");
// Find the task we want to update
Task task = project.getTaskByID(Integer.valueOf(3));
// With this sample data we know we only have one resource assignment
ResourceAssignment assignment = task.getResourceAssignments().get(0);
// Set remaining work seems to be the driver for MS Project
assignment.setRemainingWork(Duration.getInstance(3, TimeUnit.DAYS));
// Write our modified file
new MSPDIWriter().write(project, "so-duration-answer.xml");
显然,您的实际代码需要检查您正在修改的任务实际存在哪些资源分配。
我在使用 mpxj 库更改 java 中的任务耗时时遇到问题。 我在 MS Project 2016 中创建了这样的简单项目结构:
Project structure
这就是我在 Java 中尝试更改持续时间的方式:
for (int i = 0; i < allTasks.size(); i++){
if (allTasks.get(i).getID() == 3){
allTasks.get(i).setDuration(Duration.getInstance(3, TimeUnit.DAYS));
}
}
我最后将文件保存为 XML,但是当我在 MS Project 2016 中打开它时,没有任何改变。对此有什么建议吗?
P.S 我试过更改剩余工期,但在创建任务期间甚至没有在 MS Project 中设置工时。
这是一个很有趣的问题。问题的核心是 Microsoft Project 实际上确实为每个任务分配了至少一个资源,只是当您没有 "real" 资源分配时,该任务的所有工作都分配给 "nobody" 资源。如果查看 Microsoft Project 生成的 XML,您将看到 <Assignment>
标记,资源显示为 <ResourceUID>-65535</ResourceUID>
,这是 "null" 资源(真实资源这里将有一个正整数值)。
为了修改文件使任务的持续时间增加到 3 天,您需要更改此分配的“剩余工时”属性。
这是为您完成的代码片段:
// Read the sample project
ProjectFile project = new UniversalProjectReader().read("so-duration-question.xml");
// Find the task we want to update
Task task = project.getTaskByID(Integer.valueOf(3));
// With this sample data we know we only have one resource assignment
ResourceAssignment assignment = task.getResourceAssignments().get(0);
// Set remaining work seems to be the driver for MS Project
assignment.setRemainingWork(Duration.getInstance(3, TimeUnit.DAYS));
// Write our modified file
new MSPDIWriter().write(project, "so-duration-answer.xml");
显然,您的实际代码需要检查您正在修改的任务实际存在哪些资源分配。