MS Project показывает неправильные даты начала и окончания после импорта MSPDI, созданного MPXJ

Я создал приложение на основе примера MpxjCreate из дистрибутива MPXJ. Я создаю несколько задач, некоторые из них с дочерними задачами, и использую Task.setStart() / Task.setFinish() для установки даты начала / окончания задачи. После того, как я напишу полученный файл, используя MSPDIWriterСледующие теги можно увидеть в результирующем файле XML внутри <Task> тег:

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

Но когда я открываю файл с помощью MS Project 2007, он, кажется, игнорирует данные значения и использует <StartDate> значение от <Project> тег, который приводит к серии задач с продолжительностью 1 день.

Скажите, пожалуйста, что нужно сделать, чтобы использовать <Task>-><Start>/<Finish> значения тегов для даты начала / окончания задачи MS Project без каких-либо "интеллектуальных" вычислений?

2 ответа

Начиная с версии 2003 я всегда боролся с импортом XML-файлов MS-Project.

Теперь я должен разобраться с проблемами MSP 2013 (Почему Microsoft? Почему это так непредсказуемо?)

Мне кажется, что для правильного импорта нужных значений необходима некоторая базовая информация.

Вот что я делаю:

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()));

Ну, я считаю, что этого достаточно.

У меня была похожая проблема, которая была решена путем добавления продолжительности с setManualDuration(...),

Видимо недостаточно указать начало и конец, вам также нужна длительность.

Я не уверен, если это необходимо, но я также уточняю setTaskMode(TaskMode.MANUALLY_SCHEDULED)

Другие вопросы по тегам