java - 如何更改 mpxj 中的任务持续时间?

标签 java ms-project 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 实际上为每项任务至少分配了一个资源,只是当您没有“真正的”资源分配时,该任务的所有工作都会分配给“无人”资源。如果您查看 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");

显然,您的实际代码需要检查您正在修改的任务实际存在哪些资源分配。

关于java - 如何更改 mpxj 中的任务持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393694/

相关文章:

c# - 使用 Microsoft Print to PDF 打印机打印为 PDF

java - 如果附加了图像/文本,如何从 MS 项目文件 (.mpp) 中获取任务注释

java - 如何在 java 中创建 .mpp 文件?

java - Android 崩溃到帖子中的上一个屏幕调试

c# - ms 项目中的 Task.Duration 属性

project-management - MPXJ Api 在写入 .MPX 文件之前会自动计算 endDate 吗?

java - 如何将 HttpPostedFileBase 文件转换为 Java.Io.InputStream?

java - 在数组索引处打印值返回哈希码

java - 我在 java 中的构造函数有什么问题?

java - react 堆: Expand a ParallelFlux