Salesforce.com S-Control Dashboard Example
February 28th, 2007 by James Sullivan | Filed under Salesforce.com.I created my first S-Control for a Dashboard. Since I looked everywhere for an example before I got started and found nothing, I wanted to post it here for anyone else searching to find. It takes a list of the asset records and gives a percentage of each grouped by name. I created it because I couldn’t get my report total formulas to do the same for me. It was a fun way to try it out as well:>!– http://www.gnu.org/licenses/gpl.txt --<
<html>
<head>
<link xhref="/dCSS/Theme2/default/common.css" mce_href="/dCSS/Theme2/default/common.css" type="text/css" media="handheld,print,projection,screen,tty,tv" rel="stylesheet" >
<link xhref="/dCSS/Theme2/default/custom.css" mce_href="/dCSS/Theme2/default/custom.css" type="text/css" media="handheld,print,projection,screen,tty,tv" rel="stylesheet" >
<link xhref="/dCSS/Theme2/default/setup.css" mce_href="/dCSS/Theme2/default/setup.css" type="text/css" media="handheld,print,projection,screen,tty,tv" rel="stylesheet" >
<link xhref="/css/assistive.css" mce_href="/css/assistive.css" type="text/css" media="aural,braille,embossed" rel="stylesheet" >
<script type=”text/javascript” xsrc=”/js/functions.js” mce_src=”/js/functions.js”></script>
<script xsrc=”/soap/ajax/8.0/connection.js” mce_src=”/soap/ajax/8.0/connection.js”></script>
<script type=”text/javascript”>
function run(){
var assets = doQuery(“select Id,Name from Asset where InstallDate < TODAY and UsageEndDate > TODAY”);
var vers = new Array();
var totalcount = 0;
for(var i=0;i<assets.length;i++){
var bean = assets[i];
var vers_found = 0;
for(var j=0;j<vers.length;j++){
if(vers[j][0] == bean.Name){
vers_found = 1;
vers[j][1]++;
}
}
if(!vers_found){
var insertdone = 0;
for(var k=0;k<=vers.length;k++){
if(!insertdone){
if( k == vers.length || vers[k][0] > bean.Name ){
vers.splice(k,0,[bean.Name,1]);
insertdone = 1;
}
}
}
if(vers.length==0) vers.push([bean.Name,1]);
}
totalcount++;
}
//alert(vers);
t = document.createElement(“table”);
t.setAttribute(“border”,”1″);
t.setAttribute(“width”,”180″);
t.setAttribute(“align”,”center”);
tr = document.createElement(“tr”);
td = document.createElement(“td”);
td.innerHTML = “<b>Name</b>”;
tr.appendChild(td);
td = document.createElement(“td”);
td.innerHTML = “<b>%</b>”;
tr.appendChild(td);
t.appendChild(tr);
for(var i=0;i<vers.length;i++){
tr = document.createElement(“tr”);
td = document.createElement(“td”);
td.innerHTML = vers[i][0];
tr.appendChild(td);
td = document.createElement(“td”);
td.innerHTML = Math.round( ( vers[i][1] / totalcount) * 100) + ” %”;
tr.appendChild(td);
t.appendChild(tr);
}
document.getElementById(“output”).appendChild(t);
}
function doQuery(sql){
var returnvalue = new Array();
var result = sforce.connection.query(sql);
var queryMore = true;
while(queryMore){
var records = result.getArray(“records”);
for(var i = 0; i < records.length; i++) {
returnvalue.push(records[i]);
}
if( result.getBoolean(“done”) ){
queryMore = false;
} else {
result = sforce.connection.queryMore(result.queryLocator);
}
}
return returnvalue;
}
</script>
</head>
<body onload=”run()”>
<div id=”output”></div>
</body>
</html>






Thanks for posting your example!
Steve it’s my pleasure. I get a lot of value from sites like yours (gokubi) so I’m glad to offer something back as well.