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)