[{"id":"29a4ab0f-edd1-45e1-87df-0b8b4bb068b3","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"64b61a79-5817-4746-b591-28d4d5462c0a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6edef660-641f-4cd8-84f6-571130f37ae2","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"89a3ee5c-06c4-49c4-ac61-8325ba4bcca1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"1e898427-e706-440e-9077-b35c7a5b8f46","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"4266ec12-a87a-444b-a8af-beff39a7defe","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fd867fe6-72e0-4e45-bbac-edc72e608b08","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fad338cd-7c96-48b9-a12d-1b979ba886b2","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6fb42249-b832-4656-9137-35d9948bea1c","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6e353a93-c1d4-4387-bad5-4a07fd18ed3a","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"acbe820e-65b4-4bd6-bcf3-a9d5b16163da","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"167a076a-6a93-49f6-8bf8-adee9abd9817","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7fb1e240-d39d-4391-986f-c2d40adfb011","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"09cc5e9f-99c9-4258-b69c-ca5bb09a6b16","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"0b4ea8fb-4e7b-4028-9393-d1177a68ec17","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"35b8ea08-9ca6-49eb-a021-0c806de4ff96","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7bace066-1638-4034-82eb-0db8c15f5bd1","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7ec5ea8e-419f-40aa-b67d-301fa3e7b025","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"38f78942-4ca0-4631-a2d8-32dcfd6157a6","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fc1d5e2a-5d1c-4479-ac87-c726c03d49aa","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"dd70702b-48a7-4896-b92d-db78ff9e52b0","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"cda2a866-9746-4790-9942-13c450ece8a1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"3239f53b-81be-4d67-ae63-7ca0d6ce0f91","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"74c2daa1-efb0-4d3e-bd0c-8d11b297c92d","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"a4268f67-693d-4933-9e22-a77d68880a13","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9f17896b-55b4-4627-8b6d-b01fdabdffe7","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"e45c5458-c148-4de7-a471-e2e3808d841e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ac44f25f-d7e5-46a3-a247-33e23e20e956","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"feb10296-b21e-4506-8d7e-567ed4dda994","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ebba2e23-2c8d-4948-8cca-91ce71b3183d","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ebdc80a9-26fc-4420-af7f-e576e4f12820","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"2cb68b65-34df-4322-911c-ead14627af13","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"0f2df6ef-74f6-42d5-a6ff-fb830bac6bc1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"1feb74f5-775b-4809-80bb-1757ff6070f9","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d8afaaaf-0174-4a14-8ba1-59043a985e91","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7fd72fd2-933b-4816-81d1-b9e9d86b7c2c","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9cf8d438-a37d-4dea-b0dd-e15d187e19ed","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"01561aea-2cd9-4883-a29a-1a7b9df2e432","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ec2f2f29-d5a6-4fa0-aa61-353d48af9d1b","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"efb477ff-7d55-4163-a55e-a3c64415f6a4","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"c2302058-2cde-443c-a67f-e77cfd399c2e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"a61a4e1a-eaea-4814-a424-e3c1ca6e3818","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"cb0d722f-fb48-45b5-a612-ff2df9b2e56e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"50d0749d-1dde-4d8d-8963-e605f3a89b7a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"900c820c-2909-4065-be81-72d3ca7733de","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fac7dd69-11b1-42ee-8c1e-a41c97f4c3ee","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9a357d48-c648-4ddb-8c79-2dc97bea6bc9","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d5de4b91-714d-4c4c-8619-4b88fae85046","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"3741b662-b556-4859-8720-4c79fd48d48a","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"72db3e84-44c5-4d07-86b1-5f866a897e83","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"2a701ccf-5692-4ff9-9e44-62d6ec379397","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d2087e5d-f90d-4827-a383-ff828bd65c69","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"bbf41a2c-98d3-4b54-82fb-a51c8441957e","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"477eb38f-0505-42fc-85ee-7456d81833e8","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d9f37084-fcee-49d5-a192-8c41ee5615ed","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"067eb4be-9082-4153-8754-3bd0106a16ef","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"e943752e-d665-4133-ab1e-b6089d61b68a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d573ae98-998d-4070-b089-620789e0738b","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]}]
        
(Showing Draft Content)

Task Operations

You can perform various task operations to manage project schedules in a GanttSheet as discussed below.

Add Normal Task

You can add or insert a normal task into a specified location. When inserting a task without specifying its level, it will be positioned before the target task, and the adjacent tasks will determine its level:

  • If the previous task is a summary task, the newly inserted task becomes its child.

  • If the previous task is collapsed by outline, the inserted task will align with the target task's level. If not, the inserted task's level will correspond to the level of the task immediately before it.

Note: SpreadJS does not allow you to insert a task before the root task. The root task is a read-only task and its field values are not editable.

The following image depicts an example of inserting a new task whose duration is 1 day and it doesn’t have any predecessors.


GS-AddTask


You can add or insert a new task using the addTasks or insertTasks methods of the GC.Spread.Sheets.GanttSheet.Project class as shown in the following code sample.

// Add a new task
function addTask(ganttSheet) {
    ganttSheet.suspendPaint()
    var project = ganttSheet.project;
    var selections = ganttSheet.getSelections();
    var insertedRow = Math.min(...selections.map(r => r.row), project.tasks.length)
    var rowCount = selections.map(r => r.rowCount).reduce((pre, current) => { return pre + current });
    var taskData = createTaskDataList(rowCount, () => ({ name: "<New Task>" }));
    project.insertTasksByRow(insertedRow, taskData); 
    ganttSheet.resumePaint();
}
function createTaskDataList(count, initializer) {
    var array = new Array(count);
    for (var index = 0; index < count; index++) {
         array[index] = initializer();
    }
    return array;
}

Add Summary Task

A summary task is a parent of other tasks. You can group related tasks for a clearer view and better project management.

The following image shows a new summary task.


GS-AddSummaryTask


To insert a summary task into a GanttSheet, use the insertTasks method as shown in the following code sample.

// Add a new summary task.
function addSummary(ganttSheet) {
    ganttSheet.suspendPaint()
    var project = ganttSheet.project;
    var selectedRange = ganttSheet.getSelections()[0];
    var insertedRow = selectedRange.row;
    var insertedTaskNumbers = ganttSheet.getTaskByRow(insertedRow).taskNumber || project.count;
    var selectedTasks = getSelectedRowIndexes().map((row) => ganttSheet.getTaskByRow(row)).filter((row) => !!row);
        if (selectedTasks.length == 0) {
            project.insertTasks(insertedTaskNumbers, [{ name: "<New Summary Task>" }, { name: "<New Task>" }]);
            project.indentTasks(insertedTaskNumbers + 1);
        } else {
            project.insertTasks(insertedTaskNumbers, { name: "<New Summary Task>" }, selectedTasks[0].level);
            project.indentTasks(selectedTasks.map((t) => t.taskNumber));
        }
        ganttSheet.setSelection(insertedRow, -1, 1, -1);
        ganttSheet.resumePaint();
}
function getSelectedRowIndexes() {
    var rows = [];
    var selections = ganttSheet.getSelections();
    for (var range of selections) {
        for (var row = range.row; row < range.row + range.rowCount; row++) {
            rows.push(row);
        }
    }
    return rows;
}

Add Milestone Task

One important element in a Gantt chart is a milestone, which represents a task of zero duration displaying an important achievement in a project timeline.

The following image shows inserting a new milestone task of zero duration. When you set a milestone task, the date text will be displayed with a milestone icon in the Gantt chart area.


GS-AddMilestoneTask


You can insert a milestone task into a GanttSheet using the insertTasksByRow method as shown in the following code sample.

// Add a new milestone task.
function addMilestone(ganttSheet) {
var project = ganttSheet.project;
var selections = ganttSheet.getSelections();
var rowCount = selections.map(r => r.rowCount).reduce((pre, current) => { return pre + current });
var insertedRow = Math.min(...selections.map(r => r.row), project.tasks.length);
var taskData = createTaskDataList(rowCount, () => ({ name: "<New Milestone>", duration: 0 }));
project.insertTasksByRow(insertedRow, taskData);
ganttSheet.setSelection(insertedRow, -1, rowCount, -1);
}

Resize Task

GanttSheet allows you to resize a scheduled task using the Spread Designer UI. When the mouse pointer turns to an arrow with a line, as shown in the image below, you can drag and drop the task to adjust its duration.


GS-ResizeTasks

Move Task

When the task schedule mode is set to "Manual", Spread allows you to move the task in the GanttSheet project using the moveInWeeks and moveInWorkingDays APIs.

Note: The root task is read-only, so its field values cannot be edited.

Remove Task

You can delete a task from the GanttSheet, if not in use. Note that Spread does not allow you to delete the root task from the GanttSheet. If you delete the summary task or the task range that contains it, all the children tasks under that summary task will also be deleted.

You can delete a task or task range using the following methods:

  • removeTasks

  • removeTasksByRange

  • clearTasks

  • clearTasksByRange

The following example code shows how to delete tasks using the removeTasks method.

// Delete a task.
function deleteTask(ganttSheet) {   
    var project = ganttSheet.project;   
    var rowIds = getSelectedTaskNumbers();   
    project.removeTasks(rowIds);
}

Indent/Outdent Task

Each task has a corresponding level in GanttSheet, starting with the root task at level 0. You can indent or outdent a selected task to adjust the level of the task. When you indent a task, it adds a level and makes the previous task a summary task. However, when you outdent a task, it reduces the task level by 1 and makes the selected task as a summary task.

The following GIF depicts the indenting and outdenting of a task level.


GS-indent-outdent


You can adjust the level of one or multiple tasks at a time. To indent and outdent tasks, use the following methods of GC.Spread.Sheets.GanttSheet.Project class:

  • indentTasks

  • indentTasksByRange

  • outdentTasks

  • outdentTasksByRange

The following code sample allows you to change a task level in GanttSheet using the indentTasks and outdentTasks methods.

// Indent a task.        
function indentTask(ganttSheet) {            
var project = ganttSheet.project;            
var rowIds = getSelectedTaskNumbers();            
project.indentTasks(rowIds);        
}        
// Outdent a task.       
function outdentTask(ganttSheet) {            
var project = ganttSheet.project;            
var rowIds = getSelectedTaskNumbers();            
project.outdentTasks(rowIds);        
}

You can link tasks in a GanttSheet to establish the relationship with the predecessors. To do this, use the addDependency method and create dependencies between tasks in a project with the fromTaskNumber and toTaskNumber parameters. There are four different types of task dependencies as listed in the table below.

Task Dependency Types

Sample Image

FS (Finish to Start)

GS-dependencytype-FS

SS (Start to Start)

GS-dependencytypes-SS

FF (Finish to Finish)

GS-dependencytypes-FF

SF (Start to Finish)

GS-dependencytypes-SF

You can set the desired dependency type using the GC.Spread.Sheets.TaskDependencyType API. The default type is FS (Finish to Start). You can also unlink tasks to remove dependencies by using the removeDependency method.

The following image depicts an example of linked and unlinked tasks.


GS-link-unlink


The following example code shows how to link and unlink tasks in a GanttSheet.

// Link tasks.
function linkTask(ganttSheet) {
        var project = ganttSheet.project;
        var links = [];
        var selections = ganttSheet.getSelections();
        var previous = -1;
        for (var range of selections) {
                if (previous != -1) {
                    links.push([previous, range.row]);
                }
                for (var row = range.row + 1; row < range.row + range.rowCount; row++) {
                    links.push([row - 1, row]);
                }
                previous = range.row + range.rowCount - 1;
            }
            if (links.length <= 0) {
                return;
            }
            project.suspendSchedule();
            for (var link of links) {
                var [fromTaskNumber, toTaskNumber] = link;
                try {
                    project.addDependency({ fromTaskNumber, toTaskNumber });
                } catch { }
            }
            project.resumeSchedule();
        }
// Unlink tasks.
function unlinkTask(ganttSheet) {
            var project = ganttSheet.project;
            var taskNumbers = getSelectedTaskNumbers();
            var dependencies = [];
            if (taskNumbers.length == 1) {
                var task = project.getTaskByRow(taskNumbers[0]);
                dependencies = [...task.predecessorDependencies, ...task.successorDependencies];
            } else {
                var taskNumberSet = {};
                for (var taskNumber of taskNumbers) {
                    taskNumberSet[taskNumber] = true;
                }
                dependencies = project.dependencies.filter(dp => taskNumberSet[dp.from.taskNumber] && taskNumberSet[dp.to.taskNumber]);
            }
            if (dependencies.length >= 1) {
                project.removeDependency(dependencies);
            }
        }

Notes:

  • A Summary task cannot be linked to a child node.

  • Duplicate links cannot be added to tasks if they are already linked together.

  • Link lines cannot intersect.

    For example, if summary task 2 is linked to summary task 8, a child node of summary task 2 can be linked to a child node of summary task 8. But the child node of summary task 8 cannot be linked to the child node of summary task 2.

  • Summary tasks' predecessor dependency can only be FS (Finish to Start) or SS (Start to Start).

Change Task Progress Status

GanttSheet displays the task progress as a percentage in the complete field that ranges from 0 to 100. For this, you need to ensure that your source data includes the "complete" field. When the complete field is added, the progress bar is visible inside the taskbar in the Gantt chart view as shown in the image below.


GS-Progressbar


You need to hover the taskbar and drag the progress bar to change the complete value inside the taskbar. Note that the completion percentage of a common task can be manually changed in GanttSheet. Spread Designer also provides buttons for rapid task completion adjustments to 0%, 25%, 50%, 75%, and 100%.

However, the summary task completion is automatically calculated based on the formula mentioned below:

Summary task completion percentage = Total actual duration of tasks / Total estimated duration of tasks * 100%

When you reschedule, the summary task calculation will be completed, and therefore adding/deleting/indenting/outdenting and changing the duration and completion of subtasks will result in rescheduling.

The following code sample creates a GanttSheet with the "complete" field.

// Create a new GanttSheet and define the columns for the Gantt chart view.
var ganttSheet = spread.addSheetTab(0, "GanttSheet1", GC.Spread.Sheets.SheetType.ganttSheet);
    var view = myTable1.addView("myView1", [
                { value: "taskNumber", caption: "NO.", width: 60 },
                { value: "name", caption: "Task Name", width: 200 },
                { value: "duration", caption: "Duration", width: 90 },
                { value: "predecessors", caption: "Predecessors", width: 120 },
                { value: "complete", caption: "% Complete", width: 120 }

    ]);

You can use the complete property of the GC.Spread.Sheets.GanttSheet.Task class to set or get task completion percentages. Additionally, you can use the completeThrough property to set or get the date value indicating the progress reported up to a specific point of a task. The following example code shows how to set or get complete andcompleteThroughproperties in a GanttSheet.

var task = ganttSheet.getTaskByRow(10);
// Get complete.
console.log(task.complete);
// Set complete.
task.complete = 0.5;
// Get complete through.
console.log(task.completeThrough);
// Set complete through.
task.completeThrough = task.finish;