如何在mpxj中更改任务持续时间?

时间:2018-03-20 20:38:33

标签: 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中设置工作。

1 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题。问题的核心是Microsoft Project实际上每个任务至少有一个资源分配,只是当你没有“真正的”资源分配时,任务的所有工作都被分配给“nobody”资源。如果查看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");

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