1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 | <apex:page controller="GanttChartCtrl">
<apex:form >
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['gantt']});
google.charts.setOnLoadCallback(drawChart);
function daysToMilliseconds(days) {
return days * 24 * 60 * 60 * 1000;
}
var Name = '{!Name}';
Name = Name.replace("[","");
Name = Name.replace("]","");
var NameArr=Name.split(',');
var startDate = '{!SDate}';
startDate = startDate.replace("[","");
startDate = startDate.replace("]","");
var startDateArr=startDate.split(',');
var endDate = '{!EDate}';
endDate = endDate.replace("[","");
endDate = endDate.replace("]","");
var endDateArr=endDate.split(',');
var duration = '{!Duration}';
duration = duration.replace("[","");
duration = duration.replace("]","");
var durationArr=duration.split(',');
var tstatus = '{!tStatus}';
tstatus = tstatus.replace("[","");
tstatus = tstatus.replace("]","");
var tstatusArr=tstatus.split(',');
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task ID');
data.addColumn('string', 'Task Name');
data.addColumn('string', 'Resource');
data.addColumn('date', 'Start Date');
data.addColumn('date', 'End Date');
data.addColumn('number', 'Duration');
data.addColumn('number', 'Percent Complete');
data.addColumn('string', 'Dependencies');
for (var i = 0; i < NameArr.length; i++) {
var color='';
console.log('###Status :'+tstatusArr[i]);
if(tstatusArr[i].trim() == 'Completed'){
color='sports';
}
if(tstatusArr[i].trim() == 'In Progress'){
color='winter';
}
if(tstatusArr[i].trim() == 'Not Started'){
color='autumn';
}
var j=i+1;
var sd=startDateArr[i].replace('-',',');
sd=sd.replace('-',',');
var ed=endDateArr[i].replace('-',',');
ed = ed.replace('-',',');
data.addRow([NameArr[i], NameArr[i],color,new Date(sd), new Date(ed), daysToMilliseconds(durationArr[i]), 0, null]);
}
var options = {
height: 400,
gantt: {
trackHeight: 30
}
};
var chart = new google.visualization.Gantt(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div"></div>
</body>
</html>
</apex:form>
</apex:page>
|
22 Comments
Hi Kapil,
ReplyDeleteThanks for all your help, i was already created a gantt chart for my org by following your guide, it was working till last 15 days but suddenly i tried today in productions the page is not showing anything and it is kind of blank , however the page is working correctly on sandboxes do you have any idea on it?
Appreciate your help.
Thanks
Hi Raj,
DeleteGlad to hear that it helped you ! Are you using it in a child page ? If it's working fine in sandbox could you please deploy that VF page separately once and try to run in directly !
Also let me know if you get any error so we could get specific cause of this issue.
The page is working properly in sandbox and i am using it as a vf tab , but suddenly since yesterday whenever a user is accessing the tab in production the page loads and shows blank .
DeleteDo you have same data for the page in Sandbox also ? Could you please check the console once ?
DeleteHi sir,
ReplyDeletecan you please tell me is drag and drop is possible in this google gantt chart ? if yes how to do it ?
Thanks in advance !
Hi, yes you can. It's just javascript and you can add drag and drop in it. Checkout this video for drag & drop scripts https://youtu.be/vhY7hhxo-dY
DeleteThanks ! I am new to aura component and I have one doubt that for drag and drop is only Aura is option ? because you created Gantt chart in VF so I am little bit confused.
DeleteIts pure javascript, you can have it wherever you want :)
DeleteMany thanks sir !
DeleteHey thanks a lot for the Tutorial! Really helpful.
ReplyDeleteDo you know if there is a chance to add to the Visualforce page the legends labels (with colours) of the resource that i am grouping by?
Thanks for your time!
Hi can you please help how to change the colors of the bar , and also how to add completion percentage , when i am adding any value after fetching data from the query its not loading the gantt chart. Your quick response would be highly appreciated.
ReplyDeleteHi, are you getting any error in console for the same?
Deleteif i add the percentage complete the gantt chart is not getting dispalyed. I added like this
Deletevar percentComplete = '{!percentComplete}';
percentComplete = percentComplete.replace("[","");
percentComplete = percentComplete.replace("]","");
var percentCompleteArr = percentComplete.split(',');
var taskPercent = percentCompleteArr[i];
data.addRow([NameArr[i], NameArr[i],color,new Date(sd), new Date(ed), daysToMilliseconds(durationArr[i]), taskPercent , null]);
and also added the field in apex class.
and for color change its not taking the colors im giving its getting overriden bt the colors provided by google gantt chart
i am facing the same issue that you faced in the video of colorchange of the bars depending on the status change is there a fix for it ?
DeleteMake sure you are passing a number value and not with % symbol. Also I would suggest you to check it once by giving manual value of percentage complete and see if you are getting expected result.
DeleteThis comment has been removed by the author.
DeleteThis comment has been removed by the author.
DeleteThis comment has been removed by the author.
ReplyDeleteAnd also the color change thing is also not working , any suggestions for that
ReplyDeleteHi Kapil..I found a solution for the color change depending on the task status values, hope it will help others as well.
ReplyDeleteIn the above code the following needs to be added for it
var container = document.getElementById('chart_div');
var chart = new google.visualization.Gantt(container);
var observer = new MutationObserver(function (mutations) {
Array.prototype.forEach.call(container.getElementsByTagName('path'), function(bar, index) {
if (data.getValue(index, 2) =='Not Started') {
bar.setAttribute('fill', '#FFFF00');
console.log('Not Started');
}
});
});
observer.observe(container, {
childList: true,
subtree: true
});
chart.draw(data, options);
}
basically passing the value of status in 'Resource' and comparing and adding the color for it
DeleteAwesome, thanks for sharing it here Komal. It will definitely help others.
Delete