2013-05-29 2 views
2

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

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

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

Просьба сообщить, что нужно сделать, чтобы использовать значения тегов для даты запуска и окончания задания MS Project без каких-либо «интеллектуальных» вычислений?

+0

Можете ли вы поделиться образцом XML, который вы генерируете? –

ответ

0

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

По-видимому, недостаточно указать начало и конец, вам также потребуется длительность.

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

0

Начиная с версии 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())); 

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