jquery increment

Hi All,

I have two lists called "Analyst" and "Log".
I am trying to find out how many times each analyst was assigned an assignment and represent the data in a google chart table like so "https://developers.google.com/chart/interactive/docs/gallery/table".
My actual production list contains 2000+ items.

I want to use jquery to accomplish the counting but I'm sort of stuck.

Here's what I have so far:

var anArray = new Array();
var anIndex=[];


//push names of analyst into an array to use later
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Analyst",
	CAMLViewFields: "<ViewFields><FieldRef Name='Title'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Title' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 
			anArray.push($(this).attr("ows_Title"));			
      });
     }
	 //initialize "anIndex" array to zero
	 
  });

$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Log",
	CAMLViewFields: "<ViewFields><FieldRef Name='Days'></FieldRef><FieldRef Name='Analyst'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Days' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 		
		
//As you loop through the array, if 'Analyst' name equals what's in the array, then increment
		for (var x=0; x<anArray.length; x++)
		{
			if ($(this).attr("ows_Analyst") == anArray[x])
			{
				anArray[x] += 1;
			}
		}		
		
      });
     }
  });

Open in new window


Does what I have so far look right?  For some reason, it seems like it won't work because, anArray[x] is never initialized to zero.

Any ideas/suggestions/comments would be great.

My analyst list:
http://isaac.issharepoint.com/Lists/Analyst/AllItems.aspx

My log list:
http://isaac.issharepoint.com/Lists/Log/AllItems.aspx

Thanks!
LVL 5
IsaacSharePoint Client Side DeveloperAsked:
Who is Participating?
 
Rainer JeschorConnect With a Mentor Commented:
Hi,
sorry but this does not really look OK as you use a simple one dimensional array with just one value.
And in the later processing you try to replace the content (which is initially the analyst name) by trying to increment it.

You can either use an array of Arrays or an array of objects (which I prefer):

var anArray = new Array();

//push names of analyst into an array to use later
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Analyst",
	CAMLViewFields: "<ViewFields><FieldRef Name='Title'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Title' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 
			anArray.push({
				Analyst: 	$(this).attr("ows_Title"),
				Count:		0
				});			
      });
     }
  });

$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Log",
	CAMLViewFields: "<ViewFields><FieldRef Name='Days'></FieldRef><FieldRef Name='Analyst'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Days' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 		
		
//As you loop through the array, if 'Analyst' name equals what's in the array, then increment
		for (var x=0; x<anArray.length; x++)
		{
			if ($(this).attr("ows_Analyst") == anArray[x].Analyst)
			{
				anArray[x].Count += 1;
			}
		}		
      });
     }
  });

Open in new window


Sorry I have currently no dev environment at Hand, therefore the above code has to be tested (its written "blind").

HTH
Rainer
0
 
IsaacSharePoint Client Side DeveloperAuthor Commented:
Here's what I have but does not work.

http://isaac.issharepoint.com/Shared%20Documents/pieChart.aspx

Here's the code:
<!-- Step 1 - Load libraries -->
<script type="text/javascript" src="http://isaac.issharepoint.com/Script/jquery-1.8.2.min.js" language="javascript"></script>
<script type="text/javascript" src="http://isaac.issharepoint.com/Script/jquery.SPServices-0.7.2.min.js" language="javascript"></script>
<script type="text/javascript" src="http://isaac.issharepoint.com/Script/utilityFunctions.js" language="javascript"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>


<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("buildChartFunc");
//The Google Visualization library implements several classes and methods that you'll need to manipulate all charts
google.load("visualization", "1", {packages:["corechart"]});

//$(document).ready(function() { 
function buildChartFunc()
{

var Over30=0;
var Under30=0;

var anArray = new Array();

   // Initialize data object to hold chart data
    var dataAn = new google.visualization.DataTable();
    dataAn.addColumn('string', 'Month');
    dataAn.addColumn('string', 'Analyst');
    dataAn.addColumn('number', 'Correspondence Closed Over 30');
	
<!-- Step 2 - Prepare your data -->	
//push names of analyst into an array to use later
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Analyst",
	CAMLViewFields: "<ViewFields><FieldRef Name='Title'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Title' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 
			anArray.push({
				Analyst: $(this).attr("ows_Title"),
				Count:	 0
				});			
      });
     }
  }); 
  
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Log",
	CAMLViewFields: "<ViewFields><FieldRef Name='Days'></FieldRef><FieldRef Name='Analyst'></FieldRef></ViewFields>",
	CAMLQuery: "<Query><OrderBy><FieldRef Name='Days' /></OrderBy></Query>",
    completefunc: function (xData, Status) {
	//alert(xData.responseXML.xml);
      $(xData.responseXML).SPFilterNode("z:row").each(function() { 		
//As you loop through the array, if 'Analyst' name equals what's in the array, then increment
		for (var x=0; x<anArray.length; x++)
		{
			if ($(this).attr("ows_Analyst") == anArray[x].Analyst)
			{
				anArray[x].Count += 1;
			}
		}				
      });
     }
  });
  
   $.each(anArray, function (index, value) {																													
        dataAn.addRow([anArray[index].Analyst,anArray[index].Count]);
    }); 

	  
	 // Create and draw the visualization.
        new google.visualization.ColumnChart(document.getElementById('visualization')).
            draw(dataAn,
                 {title:"Conformance Log",
                  width:900, height:400,
                  hAxis: {title: "Analyst"}}
            );	  

}
</script>
<table>
	<tr><td><div id="visualization" style="width: 650px; height: 400px;"></div></td></tr>
</table>

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.