С библиотекой dhtmlxGantt вы можете легко экспортировать данные из вашей диаграммы Ганта в Primavera P6 или импортировать данные из Primavera P6 в диаграмму Ганта.
Сервис экспорта бесплатен, но если вы используете библиотеку по лицензии GPL, в полученном файле будет водяной знак. Если у вас есть действующая лицензия PRO, экспорт будет без водяного знака в течение периода вашей поддержки (12 месяцев для всех PRO лицензий).
Существует несколько сервисов экспорта, которые вы можете настроить на вашем компьютере для локальной обработки экспорта диаграмм Ганта в Primavera P6. Обратите внимание, что эти сервисы экспорта не входят в пакет Gantt. Для получения подробной информации о том, как использовать каждый сервис, ознакомьтесь с соответствующей статьей.
Онлайн-сервис экспорта имеет некоторые ограничения по времени и размеру запроса.
Если процесс экспорта занимает более 20 секунд, он будет отменен, и вы увидите сообщение об ошибке следующего содержания:
Ошибка: Тайм-аут 20 секунд
Когда несколько пользователей одновременно экспортируют диаграммы Ганта, процесс может занять немного больше времени. Однако время, затраченное на каждый запрос экспорта пользователя, рассчитывается индивидуально.
Общий API-эндпоинт https://export.dhtmlx.com/gantt используется для всех методов экспорта (exportToPDF, exportToPNG, exportToMSProject и т.д.). Максимальный размер запроса здесь составляет 10 MB.
Для экспортных/импортных сервисов MS Project и Primavera P6 (exportToMSProject, importFromMSProject, exportToPrimaveraP6, importFromPrimaveraP6) доступен выделенный API-эндпоинт: https://export.dhtmlx.com/gantt/project. Этот эндпоинт позволяет больший размер запроса — 40 MB.
Если вам нужно обрабатывать более крупные диаграммы, рассмотрите возможность использования стендэлон модуля экспорта. Этот модуль предоставляется бесплатно, если у вас есть Commercial, Enterprise или Ultimate лицензия. Альтернативно, вы можете приобрести его отдельно.
Для получения более подробной информации о использовании модуля экспорта для MS Project, обратитесь к документации. Этот модуль поддерживает как экспорт, так и импорт для MS Project и Primavera P6.
Компонент Gantt позволяет экспортировать задачи, связи и ресурсы в Primavera P6.
Чтобы экспортировать данные из диаграммы Ганта в Primavera P6, выполните следующие шаги:
gantt.plugins({
export_api: true
});
Для версий Gantt старше 8.0, вам нужно включить https://export.dhtmlx.com/gantt/api.js на вашей странице, чтобы использовать онлайн-сервис экспорта. Например:
<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>
gantt.exportToPrimaveraP6();
Этот метод отправляет запрос на удаленный сервис, который либо генерирует XML файл проекта, либо предоставляет ссылку для скачивания файла.
Related sample: Export data : MS Project, PrimaveraP6, Excel & iCal
При экспорте данных в Primavera убедитесь, что свойство Summary для проектных задач установлено в true для корректной работы:
gantt.exportToPrimaveraP6({
tasks: {
Summary: function (task) {
return !!gantt.hasChild(task.id);
},
CustomProperty: function (task) {
return task.custom_property;
},
SlateId: function (task) {
return task.id + "";
},
}
});
Related sample: Пользовательские свойства для WBS задач (Summary задачи PrimaveraP6)
Ответ включает JSON объект следующей структуры:
{
data: {},
config: {},
resources: [],
worktime: {}
}
Метод exportToPrimaveraP6() позволяет экспортировать данные, передавая объект с несколькими необязательными свойствами:
gantt.exportToPrimaveraP6({
name: 'custom.xml'
});
gantt.exportToPrimaveraP6({
auto_scheduling: false
});
gantt.exportToPrimaveraP6({
skip_circular_links: false
});
gantt.exportToPrimaveraP6({
project: {
'Author': 'I am!',
'MinutesPerDay': function () {
return gantt.config.hours_per_day * 60;
}
}
});
Свойства в этом объекте соответствуют соответствующим свойствам сущности проекта. Вы можете найти список поддерживаемых свойств здесь. Эти свойства могут иметь фиксированные значения или функции, которые выполняются во время экспорта.
gantt.exportToPrimaveraP6({
tasks: {
'StartVariance': function (task) {
return task.startVariance || 0;
},
'PercentWorkComplete': function (task) {
return task.progress + 0.1;
},
'Custom': function (task) {
return 'Custom value';
},
'Custom 2': 'My Custom value'
}
});
Свойства в этом объекте соответствуют соответствующим свойствам сущности задачи. Проверьте список поддерживаемых свойств. Эти свойства могут быть фиксированными значениями или функциями, выполняемыми для каждой задачи во время экспорта.
Убедитесь, что start_date и end_date отформатированы так, чтобы включать как дату, так и время (%d-%m-%Y %H:%i).
const customData = {
"data": [
{ "id": "10", "text": "Project #5", "start_date": "01-04-2025 00:00",
"duration": 3, "order": 10, "progress": 0.4, "open": true,
"end_date": "04-04-2025 00:00", "parent": 0
},
{ "id": "1", "text": "Task #67", "start_date": "02-04-2025 00:00",
"duration": 2, "order": 10, "progress": 0.6, "parent": "10",
"end_date": "04-04-2025 00:00"
},
{ "id": "2", "text": "Task #89", "start_date": "01-04-2025 00:00",
"duration": 2, "order": 20, "progress": 0.6, "parent": "10",
"end_date": "03-04-2025 00:00"
},
],
"links": [
{ "id": 1, "source": 1, "target": 2, "type": "1" },
]
}
gantt.exportToPrimaveraP6({
data: customData
});
Related sample: Gantt. Экспорт пользовательских данных
gantt.exportToPrimaveraP6({
callback: function(res){
alert(res.url);
}
});
gantt.exportToPrimaveraP6({
resources: [
{"id":"1","name":"John","type":"work"},
{"id":"2","name":"Mike","type":"work"},
{"id":"3","name":"Anna","type":"work"}
]
});
Типы ресурсов могут быть "work", "cost" или "material". Вы можете указать назначения ресурсов через свойство ResourceAssignments в конфигурации задачи:
var users = [// ресурсы
{key:'0', label: "N/A"},
{key:'1', label: "John"},
{key:'2', label: "Mike"},
{key:'3', label: "Anna"}
];
gantt.exportToPrimaveraP6({
resources: users
.filter(function(u){
return u.key !== '0'; // пропустить опцию по умолчанию
})
.map(function(u){
return {
id: u.key,
name: u.label,
type: "work"
};
}),
tasks: {
ResourceAssignments: function(task){ return task.user; } }
});
Свойство ResourceAssignments должно быть функцией, которая принимает объект задачи и возвращает строку/число или массив из них.
tasks: {
ResourceAssignments: function(task){
return [task.user, task.office];
}
}
Related sample: Экспорт Gantt с ресурсами в Primavera P6
gantt.exportToPrimaveraP6({
server: "https://myapp.com/myexport/gantt"
});
Чтобы конвертировать XML или XER файл, отправьте следующий запрос на сервис экспорта:
Параметры включают:
Пример:
<form action="https://export.dhtmlx.com/gantt" method="POST"
enctype="multipart/form-data">
<input type="file" name="file" />
<input type="hidden" name="type" value="primaveraP6-parse">
<button type="submit">Получить</button>
</form>
Альтернативно, вы можете использовать API на стороне клиента:
gantt.importFromPrimaveraP6({
data: file,
taskProperties: ["Notes", "Name"],
callback: function (project) {
if (project) {
gantt.clearAll();
if (project.config.duration_unit) {
gantt.config.duration_unit = project.config.duration_unit;
}
gantt.parse(project.data);
}
}
});
Related sample: Import Primavera P6 file
Здесь file — это экземпляр File, содержащий XML или XER файл проекта.
gantt.importFromPrimaveraP6 требует поддержки HTML5 File API.
Ответ включает JSON объект со следующей структурой:
{
data: {},
config: {},
resources: [],
worktime: {}
}
Вы можете определить ожидаемую единицу измерения длительности, используя свойство durationUnit ("minute", "hour", "day", "week", "month", "year").
<form action="https://export.dhtmlx.com/gantt" method="POST"
enctype="multipart/form-data">
<input type="file" name="file" />
<input type="hidden" name="type" value="primaveraP6-parse">
<input type="hidden" name="data"
value="{ \"durationUnit\": \"hour\" }" />
<button type="submit">Получить</button>
</form>
или
gantt.importFromPrimaveraP6({
data: file,
durationUnit: "hour",
callback: function(project){}
});
Чтобы получить поля проекта, включите параметр projectProperties с массивом желаемых полей. Эти поля извлекаются в свойство config ответа. Список поддерживаемых свойств находится здесь.
<form action="https://export.dhtmlx.com/gantt" method="POST"
enctype="multipart/form-data">
<input type="file" name="file" />
<input type="hidden" name="type" value="primaveraP6-parse">
<input type="hidden" name="data"
value="{ \"projectProperties\": [\"Author\", \"Title\"] }" />
<button type="submit">Получить</button>
</form>
или
gantt.importFromPrimaveraP6({
data: file,
durationUnit: "hour",
projectProperties: ["Author", "Title"],
callback: function(project){
var config = project.config;
alert(config.$custom_properties.Author);
}
});
Чтобы получить поля задач, используйте параметр taskProperties с массивом необходимых полей. Эти поля извлекаются в свойство data ответа. Поддерживаемые свойства перечислены здесь.
<form action="https://export.dhtmlx.com/gantt" method="POST"
enctype="multipart/form-data">
<input type="file" name="file" />
<input type="hidden" name="type" value="primaveraP6-parse">
<input type="hidden" name="data"
value="{ \"taskProperties\": [\"Contact\", \"Priority\"] }" />
<button type="submit">Получить</button>
</form>
или
gantt.importFromPrimaveraP6({
data: file,
durationUnit: "hour",
taskProperties: ["Contact", "Priority"],
callback: function(project){
var config = project.config;
alert(config.$custom_properties.Author);
gantt.parse(project.data);
}
});
gantt.attachEvent("onTaskLoading", function(task) {
if (task.$custom_data) {
task.contact = task.$custom_data["Contact"];
task.priority = task.$custom_data["priority"];
delete task.$custom_data;
}
return true;
});
Чтобы определить тип задачи, логика проста: задачи, отмеченные как Project, имеют свойство Summary: "1"
, а те, что отмечены как Milestone, имеют свойство Milestone: "1"
. Идея заключается в том, чтобы импортировать данные, содержащие эти свойства, и затем установить соответствующий тип задачи.
Вот как будет выглядеть вызов функции импорта:
gantt.importFromPrimaveraP6({
data: file,
taskProperties: [
"Summary",
"Milestone",
],
callback: function (project) {
if (project) {
console.log(project)
gantt.clearAll();
if (project.config.duration_unit) {
gantt.config.duration_unit = project.config.duration_unit;
}
console.log('import: ', project.data);
gantt.parse(project.data);
}
}
});
После импорта данных вы можете настроить типы задач в зависимости от полученных свойств. Вот пример:
gantt.attachEvent("onTaskLoading", function (task) {
if (task.$custom_data) {
if (task.$custom_data.Summary == "1") {
task.type = "project";
}
if (task.$custom_data.Milestone == "1") {
task.type = "milestone";
}
// delete task.$custom_data;
}
return true;
});
Related sample: Gantt. Импорт файлов Primavera P6. Получение типа задачи из свойств
Существует два API-эндпоинта для обработки экспортных/импортных сервисов Primavera P6:
Эндпоинт можно задать с помощью свойства server в объекте конфигурации экспорта:
gantt.importFromPrimaveraP6({
server:"https://export.dhtmlx.com/gantt",
data: file,
callback: function(project){
// некоторая логика
}
});
Если эндпоинт не указан, используется стандартный эндпоинт https://export.dhtmlx.com/gantt. Например, следующий вызов работает так же, как и предыдущий:
gantt.importFromPrimaveraP6({
data: file,
callback: function(project){
// некоторая логика
}
});
Для обработки более крупных проектов (более 4MB) можно использовать второй эндпоинт:
gantt.importFromPrimaveraP6({
server:"https://export.dhtmlx.com/gantt/project",
data: file,
callback: function(project){
// некоторая логика
}
});
Этот эндпоинт поддерживает запросы до 40MB и специально предназначен для экспорта и импорта Primavera P6. Учтите, что он применим только для операций, связанных с Primavera P6.
Использование этого эндпоинта для других методов, таких как gantt.exportToPDF({server:"https://export.dhtmlx.com/gantt/project"}), приведет к ошибке сервера.
К началу