MS Project显示错误的启动&导入MPXJ创建的MSPDI后完成日期

时间:2013-05-29 07:11:10

标签: java mpxj

我基于MPXJ库分发的MpxjCreate样本创建了一个应用程序。 我创建了几个任务,其中一些有子任务,&amp;使用Task.setStart() / Task.setFinish()设置任务开始/结束日期。 在使用MSPDIWriter编写生成的文件后,可以在<Task>标记内的结果xml文件中看到以下标记:

<Start>2013-01-01T00:00:00</Start>
<Finish>2016-12-31T00:00:00</Finish>

但是当我使用MS Project 2007打开文件时,似乎忽略了给定的值&amp;使用<StartDate>代码中的<Project>值,这会导致一系列任务持续1天。

请告诉我,在没有任何“智能”计算的情况下,如何使用<Task>-><Start>/<Finish>标记值来表示MS Project任务开始/结束日期?

2 个答案:

答案 0 :(得分:1)

自2003版以来,我一直在努力使用MS-Project XML文件导入。

现在我必须处理MSP 2013问题(为何微软?为什么它如此难以预测?)

在我看来,需要一些基本信息才能正确导入所需的值。

以下是我的工作:

task.setEstimated(false); //to get rid of the percentage in the duration value

task.setPercentageComplete(50d); //50% for example
task.setPercentageWorkComplete(50d);
task.setPhysicalPercentComplete(50d);

task.setStart(<start date>);
task.setFinish(<finish date>);
task.setActualStart(<actual start date>);
task.setActualFinish(<actual finish date>); //only necessary if the task is 100%

task.setDuration(Duration.getInstance(4d, TimeUnit.DAYS)); //4d for example
task.setActualDuration(Duration.getInstance(2d, TimeUnit.DAYS));

double remainingDuration = task.getDuration().getDuration() - task.getActualDuration().getDuration();
task.setRemainingDuration(Duration.getInstance(remainingDuration, task.getDuration().getUnits()));

//if your task has resources assigned, you should set the work values
//suppose you have 2 resources assigned with 3 units each
double work = task.getDuration().getDuration() * 6;
task.setWork(Duration.getInstance(work, task.getDuration().getUnits()));
task.setRegularWork(work);

double actualWork = work * task.getPercentageComplete() / 100d;
task.setActualWork(Duration.getInstance(actualWork, task.getWork().getUnits()));

double remaining = task.getWork().getDuration() - task.getActualWork().getDuration();
task.setRemainingWork(Duration.getInstance(remaining, task.getWork().getUnits()));

嗯,我相信这已经足够了。

答案 1 :(得分:0)

我遇到了类似的问题,可以通过setManualDuration(...)添加持续时间来解决。

显然,仅指定开始和结束还不够,还需要持续时间。

我不确定是否有必要,但我也指定setTaskMode(TaskMode.MANUALLY_SCHEDULED)