Порядок задач экспорта MPXJ смущает MS Project 2010

Я пишу утилиту для нашей местной команды разработчиков, чтобы экспортировать информацию о проектах (истории, ресурсы и т. Д.) Из нашей гибкой системы управления в Microsoft Project 2010 и использовать MPXJ и C# для достижения этой цели. Было очень просто использовать примеры, чтобы собрать код для генерации выходного файла MPX или MSPDI, который успешно импортируется в MS Project. Однако... формат, который мы хотим, многоуровневый, например:

Project -> TaskA -> TaskASubtask1
                 -> TaskASubtask2
        -> TaskB -> TaskBSubtask1
                 -> TaskBSubtask2 -> TaskBSubSubtask1

и когда я наивно добавляю дочерние задачи в случайном порядке (входной поток сортируется неправильно), значения уровня СПП для задач выглядят корректно, но задача после импорта находится под непосредственно предыдущей задачей в сгенерированном файле.

Я прочитал, что правильное упорядочение файла было ошибкой, исправленной в 4.3.0 (насколько я помню), поэтому я не думал, что мне нужно добавлять задачи в "правильном" порядке. Я обнаружил, что если бы я использовал пример MpxCreate.cs и переместил создание задачи "не по порядку", то увидел бы такое же поведение, когда иерархия задач не была представлена, как вы могли ожидать в MS Project.

Этот простой фрагмент кода приводит к "не в порядке презентации" в MS Project (вторая подзадача вложена в следующую задачу):

Task task1 = file.AddTask();
task1.Name = "Summary Task";

Task task2 = task1.AddTask();
task2.Name = "First Sub Task";

Task task4 = file.AddTask();
task4.Name = "Next Task";

Task task3 = task1.AddTask();
task3.Name = "Second Sub Task";

Должно ли это работать? Или я должен изменить порядок создания моей задачи так, чтобы каждая иерархия была полностью заполнена сразу?

Я собираюсь продолжать играть с этим, но я приветствую любые идеи.

Спасибо Оуэн

1 ответ

У меня была точно такая же проблема. Экспортированный XML-файл будет правильно импортирован в MS Project 2010, если я вызываю следующую функцию перед экспортом:

projectFile.getTasks().synchronizeTaskIDToHierarchy();

(Ответ Джона Илнеса был хорошим намеком, но не на 100% правильным, потому что getTasks() отсутствовал посередине.)

По памяти я думаю, если вы позвоните

file.synchronizeTaskIDToHierarchy();

После того как вы добавили свои задачи, порядок будет правильным в MS Project.

Из Javadoc для этого метода:

Microsoft Project основывает порядок задач, отображаемых на их значении идентификатора. Этот метод берет иерархическую структуру задач, представленных в MPXJ, и перенумеровывает значения идентификаторов, чтобы гарантировать, что эта структура отображается так, как ожидается в Microsoft Project. Обычно это используется для случая, когда иерархическая структура задач была создана программно в MPXJ.

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