Die dhtmlxGantt-Bibliothek unterstützt das Exportieren von Daten aus dem Gantt-Diagramm nach Primavera P6 sowie das Importieren von Daten aus Primavera P6 in das Gantt-Diagramm.
Dieser Service ist kostenlos nutzbar, allerdings enthält die exportierte Datei ein Wasserzeichen der Bibliothek unter der GPL-Lizenz. Der Erwerb einer Lizenz entfernt das Wasserzeichen während des gültigen Supportzeitraums (12 Monate für alle PRO-Lizenzen).
Mehrere Exportdienste stehen zur lokalen Installation auf Ihrem Computer zur Verfügung, sodass Sie das Gantt-Diagramm direkt nach Primavera P6 exportieren können. Beachten Sie, dass Exportdienste nicht im Gantt-Paket enthalten sind. Detaillierte Informationen zu den Nutzungsbedingungen finden Sie im entsprechenden Artikel.
Der Exportdienst hat Einschränkungen hinsichtlich der Verarbeitungszeit und der Anfragegröße.
Wenn der Exportvorgang länger als 20 Sekunden dauert, wird er abgebrochen und die folgende Fehlermeldung erscheint:
Error: Timeout trigger 20 seconds
Wenn mehrere Benutzer gleichzeitig Gantt-Diagramme exportieren, kann die Verarbeitung länger dauern als üblich. Die für jede Exportanfrage eines Benutzers aufgewendete Zeit wird jedoch separat gezählt – dies ist erwartetes Verhalten.
Ein gemeinsamer API-Endpunkt https://export.dhtmlx.com/gantt verarbeitet alle Exportmethoden (exportToPDF, exportToPNG, exportToMSProject usw.) mit einer maximalen Anfragegröße von 10 MB.
Es gibt außerdem einen dedizierten API-Endpunkt https://export.dhtmlx.com/gantt/project für die MSProject und Primavera P6 Export-/Importdienste (exportToMSProject / importFromMSProject / exportToPrimaveraP6 / importFromPrimaveraP6). Dieser Endpunkt unterstützt eine maximale Anfragegröße von 40 MB.
Für den Export großer Diagramme steht ein eigenständiges Exportmodul zur Verfügung. Dieses Modul ist kostenlos, wenn Sie eine Commercial-, Enterprise- oder Ultimate-Lizenz besitzen, oder kann separat über diesen Link erworben werden.
Weitere Informationen zur Nutzung des Exportmoduls mit MS Project finden Sie in dieser Anleitung. Das Modul unterstützt Export/Import sowohl für MS Project als auch für Primavera P6.
Die Gantt-Komponente kann Verknüpfungen, Aufgaben und Ressourcen nach Primavera P6 exportieren.
Um Daten aus dem Gantt-Diagramm nach Primavera P6 zu exportieren, gehen Sie wie folgt vor:
gantt.plugins({
export_api: true
});
Für Gantt-Versionen vor 8.0 müssen Sie https://export.dhtmlx.com/gantt/api.js auf Ihrer Seite einbinden, um den Online-Exportdienst zu aktivieren, zum Beispiel:
<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>
gantt.exportToPrimaveraP6();
Diese Methode sendet eine Anfrage an den entfernten Dienst, der entweder eine XML-Projektdatei generiert und zurückgibt oder eine URL zum Herunterladen der Datei bereitstellt.
Related sample: Export data : MS Project, PrimaveraP6, Excel & iCal
Beim Export nach Primavera ist es wichtig, dass die Summary-Eigenschaft für Projektaufgaben true zurückgibt, um eine korrekte Funktion zu gewährleisten:
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: Custom properties for WBS tasks (PrimaveraP6's Summary tasks)
Die Antwort des Exportdienstes ist ein JSON-Objekt mit folgender Struktur:
{
data: {},
config: {},
resources: [],
worktime: {}
}
Die Methode exportToPrimaveraP6() akzeptiert ein Objekt mit mehreren optionalen Eigenschaften:
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;
}
}
});
Diese Eigenschaften entsprechen denen der Project entity. Eine Liste unterstützter Eigenschaften finden Sie hier. Werte können fest oder Funktionen sein, die während des Exports ausgeführt werden.
gantt.exportToPrimaveraP6({
tasks: {
'StartVariance': function (task) {
if (task.startVariance)
return task.startVariance;
else
return 0;
},
'PercentWorkComplete': function (task) {
return (task.progress + 0.1);
},
'Custom': function (task) {
return 'Custom value';
},
'Custom 2': 'My Custom value'
}
});
Diese Eigenschaften beziehen sich auf die Task entity; eine Liste unterstützter Eigenschaften ist verfügbar. Werte können fest oder Funktionen sein, die für jede Aufgabe während des Exports aufgerufen werden.
Es wird erwartet, dass start_date und end_date sowohl Datum als auch Uhrzeit enthalten (%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. Export custom data
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"}
]
});
Ressourcentypen können "work", "cost" oder "material" sein. Ressourcen-Zuweisungen werden über die Eigenschaft ResourceAssignments in der Aufgaben-Konfiguration angegeben:
var users = [// resources
{key:'0', label: "N/A"},
{key:'1', label: "John"},
{key:'2', label: "Mike"},
{key:'3', label: "Anna"}
];
gantt.exportToPrimaveraP6({
resources: users
.filter(function(u){
if(u.key === '0')//Standardoption überspringen
return false;
return true;
})
.map(function(u){
return {
id: u.key,
name: u.label,
type: "work"
};
}),
tasks: {
ResourceAssignments: function(task){ return task.user; } }
});
Die Eigenschaft ResourceAssignments kann eine Funktion sein, die ein Aufgabenobjekt erhält und entweder einen String/eine Zahl oder ein Array von Strings/Zahlen zurückgibt:
tasks: {
ResourceAssignments: function(task){
return [task.user, task.office];
}
}
Related sample: Export Gantt with resources to Primavera P6
gantt.exportToPrimaveraP6({
server:"https://myapp.com/myexport/gantt"
});
Um eine XML- oder XER-Datei zu konvertieren, senden Sie eine POST-Anfrage an den Exportdienst mit folgenden Angaben:
Die Anfrageparameter umfassen:
Beispiel:
<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">Get</button>
</form>
Alternativ kann die Client-seitige API wie folgt verwendet werden:
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
Hier sollte file ein File-Objekt sein, das eine XML- oder XER-Projektdatei enthält.
gantt.importFromPrimaveraP6 erfordert Unterstützung für die HTML5 File API.
Die Antwort gibt ein JSON-Objekt mit folgender Struktur zurück:
{
data: {},
config: {},
resources: [],
worktime: {}
}
Sie können die erwartete Dauereinheit festlegen, indem Sie einen durationUnit-String ("minute", "hour", "day", "week", "month", "year") an den Server senden.
<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">Get</button>
</form>
oder
gantt.importFromPrimaveraP6({
data: file,
durationUnit: "hour",
callback: function(project){}
});
Um bestimmte Projektfelder abzurufen, senden Sie den projectProperties-Parameter mit einem Array der gewünschten Felder an den Server. Dadurch werden Eigenschaften aus der Project-Entität in die config-Eigenschaft der Antwort extrahiert. Unterstützte Eigenschaften sind aufgelistet.
<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">Get</button>
</form>
oder
gantt.importFromPrimaveraP6({
data: file,
durationUnit: "hour",
projectProperties: ["Author", "Title"],
callback: function(project){
var config = project.config;
alert(config.$custom_properties.Author);
}
});
Um bestimmte Aufgabenfelder zu importieren, senden Sie den taskProperties-Parameter mit einem Array der gewünschten Felder an den Server. Dadurch werden Eigenschaften aus den Task-Entitäten extrahiert. Unterstützte Eigenschaften sind verfügbar.
<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">Get</button>
</form>
oder
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;
});
So ermitteln Sie den Aufgabentyp: Aufgaben mit dem Label Project haben die Eigenschaft Summary: "1"
, während Aufgaben mit dem Label Milestone die Eigenschaft Milestone: "1"
besitzen. Beim Importieren der Daten helfen diese Eigenschaften, den Aufgabentyp zu bestimmen.
Die Importfunktion wird wie folgt aufgerufen:
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);
}
}
});
Nach dem Import können Sie die Aufgabentypen anhand dieser Eigenschaften wie folgt festlegen:
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. Import Primavera P6 files. Get task type from properties
Für die Export-/Importdienste von Primavera P6 stehen zwei API-Endpunkte zur Verfügung:
Sie können den Endpunkt über die server-Eigenschaft im Export-Konfigurationsobjekt angeben:
gantt.importFromPrimaveraP6({
server:"https://export.dhtmlx.com/gantt",
data: file,
callback: function(project){
// some logic
}
});
Wenn kein Endpunkt angegeben wird, wird standardmäßig https://export.dhtmlx.com/gantt verwendet. Der folgende Aufruf verhält sich genauso wie oben:
gantt.importFromPrimaveraP6({
data: file,
callback: function(project){
// some logic
}
});
Um große Projekte zu verarbeiten, die das 4MB-Limit überschreiten, können Sie den zweiten Endpunkt verwenden:
gantt.importFromPrimaveraP6({
server:"https://export.dhtmlx.com/gantt/project",
data: file,
callback: function(project){
// some logic
}
});
Dieser Endpunkt akzeptiert Anfragen bis zu 40MB und unterstützt sowohl den Export als auch den Import für Primavera P6. Er ist speziell für Exporte und Importe von Primavera P6 vorgesehen.
Beachten Sie, dass andere Methoden wie gantt.exportToPDF({server:"https://export.dhtmlx.com/gantt/project"}) zu einem Serverfehler führen.
Zurück nach oben