Available only in PRO Edition

Auto Scheduling

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.

Verwendung

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.

Vorwärts-/Rückwärtsplanung

Projektplanungsstrategien

Die Aufgabenplanung kann zwei Ansätze verfolgen: Vorwärts- und Rückwärtsplanung. Diese hängen von bestimmten Konfigurationseinstellungen ab:

  • schedule_from_end - (boolean) bestimmt den Planungstyp
  • project_start - (Date) legt das Projektstartdatum fest; wird als Standardstartdatum bei Vorwärtsplanung verwendet, Standardwert ist null
  • project_end - (Date) legt das Projektendedatum fest; wird als Standardaufgabenzeit bei Rückwärtsplanung verwendet, Standardwert ist null

Vorwärtsplanung

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

Rückwärtsplanung

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)

Zeitliche Einschränkungen für Aufgaben

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.

Hinzufügen von Einschränkungen über die Lightbox

Einschränkungen können über das Constraint-Steuerelement in der Lightbox einer Aufgabe gesetzt werden.

Integrierter Datepicker für Einschränkungen

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" }
];

Hinzufügen von Einschränkungen über Inline-Editoren

Einschränkungen können auch über separate Spalten im Grid für Einschränkungstyp und -datum mit Inline-Editoren angegeben werden.

Einschränkungs-Spalten

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

Einschränkungstypen

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.

Festlegen von Pufferzeiten (Lag und Lead) zwischen Aufgaben

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:

  • Lag: positive ganze Zahl
  • Lead: negativer Lag-Wert

Standardmäßig haben Abhängigkeitsverknüpfungen einen Lag von 0.

Bearbeiten von Link-Werten aus der UI

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

Automatische Planung für bestimmte Aufgaben deaktivieren

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;
});

Abgeschlossene Aufgaben planen

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.

API-Übersicht

Hier sind die verfügbaren Methoden und Eigenschaften:

Aktivierung

Aktivieren Sie die automatische Planung, indem Sie die Eigenschaft auto_scheduling auf true setzen:

gantt.config.auto_scheduling = true;

Strikter Modus

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.

Initiale automatische Planung

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;

Vererbung von Projekteinschränkungen

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;

Projekt neu berechnen

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);

Prüfen, ob eine Aufgabe ungeplant ist

Um zu prüfen, ob eine Aufgabe ungeplant ist, verwenden Sie die Methode isUnscheduledTask mit dem Aufgabenobjekt:

var isUnscheduled = gantt.isUnscheduledTask(task);

Erkennung von zirkulären Referenzen

Um alle zirkulären Referenzen im Diagramm zu finden, verwenden Sie die Methode findCycles:

gantt.findCycles();

Prüfen, ob ein Link zirkulär ist

Um zu prüfen, ob eine Verknüpfung zirkulär ist, verwenden Sie die Methode isCircularLink:

var isCircular = gantt.isCircularLink(link);

Verbundene Aufgaben und Links abrufen

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]}

Liste der Events

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
});

Versionskompatibilität

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