这是一个非常有趣的问题。问题的核心在于,Microsoft Project 实际上确实为每个任务分配了至少一个资源分配,只是当您没有“真正的”资源分配时,该任务的所有工作都分配给了“无人”资源。如果您查看 Microsoft Project 生成的 XML,您将看到<Assignment>
标记,资源显示为<ResourceUID>-65535</ResourceUID>
,这是“空”资源(此处的实际资源将具有正整数值)。
为了修改文件以使任务的持续时间增加到 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");
显然,您的真实代码将需要检查您正在修改的任务实际存在哪些资源分配。