Available only in PRO Edition
Diese Funktion ist ausschließlich in der PRO-Edition verfügbar.
Die Bibliothek enthält die auto_scheduling-Erweiterung, mit der Gantt Aufgaben automatisch basierend auf deren Beziehungen planen kann.
Beispielsweise nehmen wir zwei Aufgaben, die durch eine Abhängigkeit verbunden sind, wobei die zweite Aufgabe direkt nach Abschluss der ersten beginnt. Wenn sich der Zeitplan der ersten Aufgabe ändert, aktualisiert die automatische Planung das Startdatum der zweiten Aufgabe entsprechend. Dies hilft, den Projektzeitplan einzuhalten, indem Aufgabenbeziehungen definiert werden, ohne dass die Daten jeder Aufgabe manuell angepasst werden müssen.
Um die automatische Planung zu aktivieren, aktivieren Sie das auto_scheduling Plugin mit der gantt.plugins-Methode:
gantt.plugins({
auto_scheduling: true
});
Setzen Sie anschließend die auto_scheduling-Eigenschaft auf true:
gantt.config.auto_scheduling = true;
Related sample: Auto Scheduling extension
Auch bei aktivierter automatischer Planung können Aufgaben bei Bedarf weiterhin manuell geplant werden.
Die Aufgabenplanung kann zwei Ansätze verfolgen: Vorwärts- und Rückwärtsplanung. Diese hängen von bestimmten Konfigurationseinstellungen ab:
Die Vorwärtsplanung ist der Standardmodus, mit gantt.config.schedule_from_end auf false gesetzt.
// Vorwärtsplanung ist aktiv
gantt.config.schedule_from_end = false;
In diesem Modus werden Aufgaben ab dem Projektstartdatum oder dem frühesten Aufgabenbeginn geplant, mit dem Ziel, Aufgaben so früh wie möglich zu beginnen, sofern keine anderen Einschränkungen bestehen.
Optional können Sie das Projektstartdatum mit gantt.config.project_start definieren:
gantt.config.project_start = new Date(2019, 2, 1);
Related sample: Auto-Schedule From Project Start & Constraints
Bei der Rückwärtsplanung werden Aufgaben ab dem Projektendedatum geplant. Um dies zu nutzen, setzen Sie gantt.config.schedule_from_end auf true und geben Sie das Projektendedatum mit gantt.config.project_end an:
gantt.config.schedule_from_end = true;
gantt.config.project_end = new Date(2019, 4, 1);
Hier werden Aufgaben so spät wie möglich geplant, wobei die letzte Aufgabe am Projektendedatum endet.
Related sample: Auto-Schedule From Project End (backward)
Mit dhtmlxGantt können Sie zusätzliche zeitliche Einschränkungen für Aufgaben anwenden.
Zeitliche Einschränkungen gelten nur für Aufgaben und Meilensteine. Projekte sind davon nicht betroffen.
Einschränkungen können über das Constraint-Steuerelement in der Lightbox einer Aufgabe gesetzt werden.
gantt.config.lightbox.sections = [
{ name:"description", height:38, map_to:"text", type:"textarea", focus:true},
{ name:"constraint", type:"constraint" }, { name:"time", type:"duration", map_to:"auto" }
];
Einschränkungen können auch über separate Spalten im Grid für Einschränkungstyp und -datum mit Inline-Editoren angegeben werden.
Verwenden Sie entsprechend die Spaltennamen constraint_type und constraint_date.
const constraintTypeEditor = {
type: "select", map_to: "constraint_type", options: [
{ key: "asap", label: gantt.locale.labels.asap },
{ key: "alap", label: gantt.locale.labels.alap },
{ key: "snet", label: gantt.locale.labels.snet },
// weitere Optionen
]
};
const constraintDateEditor = {
type: "date",
map_to: "constraint_date",
min: new Date(2019, 0, 1),
max: new Date(2020, 0, 1)
};
gantt.config.columns = [
{ // vorherige Spalte},
{
name:"constraint_type", align:"center", width:100, template:function (task){
return gantt.locale.labels[gantt.getConstraintType(task)];
}, resize: true, editor: constraintTypeEditor
},
{
name:"constraint_date", align:"center", width:120, template:function (task) {
//template logic
},
resize: true, editor: constraintDateEditor
},
{ name: "add", width: 44 }
];
Related sample: Auto-Schedule From Project Start & Constraints
Es stehen mehrere zeitliche Einschränkungen zur Auswahl:
1. So früh wie möglich – Für unabhängige Aufgaben mit aktiviertem strict-Modus startet die Aufgabe mit dem Projektbeginn. Ohne strict-Modus startet sie am angegebenen Datum. Bei abhängigen Aufgaben beginnt die Aufgabe, sobald alle Vorgänger abgeschlossen sind.
2. So spät wie möglich – Unabhängige Aufgaben enden mit dem Projektende. Abhängige Aufgaben enden, wenn ihr direkter Nachfolger beginnt.
Weitere Einschränkungen gelten unabhängig vom Aufgabentyp:
3. Beginnt nicht vor – Aufgabe beginnt am oder nach dem angegebenen Datum.
4. Beginnt nicht nach – Aufgabe beginnt am oder vor dem angegebenen Datum.
5. Endet nicht vor – Aufgabe endet am oder nach dem angegebenen Datum.
6. Endet nicht nach – Aufgabe endet am oder vor dem angegebenen Datum.
7. Muss beginnen am – Aufgabe beginnt genau am angegebenen Datum.
8. Muss enden am – Aufgabe endet genau am angegebenen Datum.
Unabhängige Aufgaben sind solche ohne Vorgänger oder Nachfolger – keine Verknüpfungen oder Beziehungen, die sie oder ihre übergeordneten Aufgaben mit anderen verbinden.
Mit Lag- und Leadzeiten lassen sich komplexere Abhängigkeiten zwischen Aufgaben definieren.
Lag ist eine Verzögerung nach Abschluss eines Vorgängers, bevor der Nachfolger beginnt. Lead ist eine Überlappung, bei der der Nachfolger beginnt, bevor der Vorgänger abgeschlossen ist.
Es gibt zwei Arten von Nachfolger-Aufgaben:
Aufgaben, die vor dem Ende ihres Vorgängers beginnen (Lead). Zum Beispiel bedeutet ein Lead von 1 Tag, dass der Nachfolger einen Tag vor dem Ende des Vorgängers beginnt.
Aufgaben, die nach einer Verzögerung nach dem Abschluss des Vorgängers beginnen (Lag). Zum Beispiel bedeutet ein Lag von 1 Tag, dass der Nachfolger einen Tag nach dem Ende des Vorgängers beginnt.
Lag- und Leadwerte werden in der link.lag-Eigenschaft des Link-Objekts gesetzt:
Standardmäßig haben Abhängigkeitsverknüpfungen einen Lag von 0.
Gantt bietet keine integrierte Benutzeroberfläche zum Bearbeiten von Lag oder anderen Link-Eigenschaften, aber Sie können dies selbst implementieren, indem Sie den Hinweisen im verwandten Kapitel folgen.
Related sample: Edit-lag Popup
Um die automatische Planung für eine bestimmte Aufgabe zu deaktivieren und sie manuell zu planen, setzen Sie die auto_scheduling-Eigenschaft der Aufgabe auf false:
var task = gantt.getTask(id);
task.auto_scheduling = false;
Alternativ können Sie die automatische Planung für eine Aufgabe mit dem onBeforeTaskAutoSchedule-Event-Handler blockieren:
gantt.attachEvent("onBeforeTaskAutoSchedule",function(task, start, link, predecessor){
if(task.completed) {
return false;
}
return true;
});
Standardmäßig behandelt die automatische Planung abgeschlossene Aufgaben (mit Fortschrittswert 1) genauso wie unvollständige Aufgaben.
Sie können dieses Verhalten ändern, indem Sie die Option auto_scheduling_use_progress aktivieren:
gantt.config.auto_scheduling_use_progress = true;
gantt.init("gantt_here");
Mit dieser Einstellung werden abgeschlossene Aufgaben aus dem kritischen Pfad und der automatischen Planung ausgeschlossen.
Weitere Details finden Sie auf der API-Seite.
Hier sind die verfügbaren Methoden und Eigenschaften:
Aktivieren Sie die automatische Planung, indem Sie die Eigenschaft auto_scheduling auf true setzen:
gantt.config.auto_scheduling = true;
Standardmäßig werden Aufgaben nur neu geplant, wenn ein neues Datum eine Einschränkung verletzt. Um Aufgaben immer auf das frühestmögliche Datum zu verschieben, aktivieren Sie die Eigenschaft auto_scheduling_strict:
gantt.config.auto_scheduling_strict = true;
Beachten Sie, dass diese Einstellung in den Versionen 6.1.0 - 7.1.3 nur funktioniert, wenn die Option auto_scheduling_compatibility aktiviert ist.
Die Eigenschaft auto_scheduling_initial steuert, ob die automatische Planung beim Laden der Daten ausgeführt wird. Standardmäßig ist sie auf true gesetzt:
gantt.config.auto_scheduling_initial = true;
Die Eigenschaft auto_scheduling_project_constraint bestimmt, ob Aufgaben ohne eigene Einschränkung diese vom übergeordneten Projekt erben:
gantt.config.auto_scheduling_project_constraint = true;
Um den gesamten Projektzeitplan neu zu berechnen, verwenden Sie die Methode autoSchedule:
gantt.autoSchedule();
Um ab einer bestimmten Aufgabe neu zu berechnen, übergeben Sie deren ID an dieselbe Methode:
gantt.autoSchedule(taskId);
Um zu prüfen, ob eine Aufgabe ungeplant ist, verwenden Sie die Methode isUnscheduledTask mit dem Aufgabenobjekt:
var isUnscheduled = gantt.isUnscheduledTask(task);
Um alle zirkulären Referenzen im Diagramm zu finden, verwenden Sie die Methode findCycles:
gantt.findCycles();
Um zu prüfen, ob eine Verknüpfung zirkulär ist, verwenden Sie die Methode isCircularLink:
var isCircular = gantt.isCircularLink(link);
Um die Liste der Aufgaben und Links zu erhalten, die mit einer bestimmten Aufgabe verbunden sind, können Sie die Methode getConnectedGroup verwenden:
gantt.getConnectedGroup(18);
// => {links:["16", "17", "18"], tasks:[18, 17, 19, 20]}
Im Folgenden finden Sie die Liste der verfügbaren Events:
// bevor die automatische Planung startet
gantt.attachEvent("onBeforeAutoSchedule",function(taskId){
// eigene Logik hier
return true;
});
// nachdem die automatische Planung abgeschlossen ist
gantt.attachEvent("onAfterAutoSchedule",function(taskId, updatedTasks){
// eigene Logik hier
});
// bevor eine bestimmte Aufgabe neu geplant wird
gantt.attachEvent("onBeforeTaskAutoSchedule",function(task,start,link,predecessor){
// eigene Logik hier
return true;
});
// nachdem eine bestimmte Aufgabe neu geplant wurde
gantt.attachEvent("onAfterTaskAutoSchedule",function(task,start,link,predecessor){
// eigene Logik hier
});
// wenn eine zirkuläre Referenz erkannt wird und die automatische Planung nicht fortgesetzt werden kann
gantt.attachEvent("onCircularLinkError",function(link, group){
// eigene Logik hier
});
// wenn während der automatischen Planung zirkuläre Verknüpfungen gefunden werden
gantt.attachEvent("onAutoScheduleCircularLink",function(groups){
// eigene Logik hier
});
Wenn das Datum einer Aufgabe durch Ziehen mit der Maus oder über das Lightbox geändert wird, erhält die Aufgabe automatisch einen von zwei Einschränkungstypen: entweder start no earlier than+%start date% oder finish no later than+%end date%, abhängig vom gewählten Planungsansatz.
Das bedeutet, dass eine Aufgabe nicht früher als das über die Benutzeroberfläche festgelegte späteste Datum geplant wird. Dieses Verhalten kann für Benutzer, die mit Einschränkungen nicht vertraut sind, unerwartet sein, insbesondere da Einschränkungen standardmäßig nicht im Diagramm angezeigt werden.
Um Einschränkungen anzuzeigen, können Sie deren Anzeige mit der Methode addTaskLayer aktivieren.
Related sample: Auto-Schedule From Project Start & Constraints
Dieses Verhalten unterscheidet sich von der automatischen Planungslogik in Gantt-Versionen vor v6.1 und gilt als korrekt, da es der automatischen Planung in MS Project entspricht.
Wenn Sie das frühere Verhalten bevorzugen, können Sie zur automatischen Planung vor Version 6.1 zurückkehren, indem Sie Einschränkungen deaktivieren:
gantt.config.auto_scheduling_compatibility = true;
Zurück nach oben