Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > Trouble combining arrays in a table

Reply
Thread Tools

Trouble combining arrays in a table

 
 
ferraro.joseph@gmail.com
Guest
Posts: n/a
 
      07-27-2006
Hi,

I'm querying Salesforce.com via their AJAX toolkit and outputting query

results into a table. Currently, their toolkit does not possess the
ability to do table joins via their structured query language, which
forces me to do the join manually via arrays.


Right now, I'm having trouble getting these query results (which are in

arrays) to combine effectively (mainly towards the end where I'm
outputting into the tables).


Any help would be greatly appreciated!


Thanks


My code looks like so:


<!--THIS QUERIES A LIST OF ACCOUNTS LABELED AS 'A LIST'--!>
var queryResult = sforceClient.query("Select ID, Name,
Prospect_Status__c, SystemModstamp, Portfolio_Rank__c From Account
where Prospect_Status__c = 'A List' and OwnerID = '{!User_ID}'");


var accountIdCriteria = "Where ";
for (var i=0;i<queryResult.records.length;i++) {accountIdCriteria +=
"AccountId = '" + queryResult.records[i].get("Id") + "'";
if (i < queryResult.records.length - 1) {accountIdCriteria += " or "};



}


<!--THIS QUERIES THE CONTACT TABLE FOR CONTACTS RELATED TO THE RETURNED

ACCOUNTS--!>
var contactQuery = sforceClient.query("Select Id, FirstName, LastName,
AccountId From Contact " + accountIdCriteria);

var contactIdCriteria = "Where ";
var contactsById = [];
for (var i=0; i<contactQuery.records.length;i++) {
contactIdCriteria += "(ContactId = '" +
contactQuery.records[i].get("Id") + "'" + " and IsPrimary = true)";
if (i < contactQuery.records.length - 1) {
contactIdCriteria += " or "};
contactsById[contactQuery.records[i].get("Id")] =
contactQuery.records[i];



}


<!-- THIS QUERIES THE PRIMARY CONTACTS FROM THE ACCOUNTCONTACTROLE
TABLE--!>
var roleQuery = sforceClient.query("Select ContactId from
AccountContactRole " + contactIdCriteria);

for (var i=0;i<roleQuery.records.length;i++) {
var roleRecord = roleQuery.records[i];
var primaryContactByAccountId = [];
var contactRecord = contactsById[roleRecord.get("ContactId")];
if (contactRecord) {
primaryContactByAccountId[contactRecord.get("AccountId")] =
contactRecord;



}
}


var output = "<table class='sortable' id='table1'>";
output += "<tr>";
output += "<th>Account</th>";
output += "<th>Portfolio</th>";
output += "<th>Last Activity</th>";
output += "<th>Primary Contact</th>";
output += "</tr>";

for (var i=0; i < queryResult.records.length; i++)
{
var Account = queryResult.records[i];
var primaryContact = primaryContactByAccountId[Account.get("Id")];
var lastRow = "";
lastRow = primaryContact.get("LastName");
output += "<tr>";
output += "<td><a href='/"+Account.get("Id")+"' target='NEW'>" +
Account.get("Name") + "</a></td>";
output += "<td>" + Account.get("Portfolio_Rank__c") + "</td>";
output += "<td>" + Account.get("SystemModstamp") + "</td>";
output += "<td> NEED TO PUT PRIMARY CONTACTS HERE </td>";
output += "</tr>";



}


output += "</table>";
document.getElementById("ResultsHolder").innerHTML = output;

 
Reply With Quote
 
 
 
 
RobG
Guest
Posts: n/a
 
      07-28-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> Hi,
>
> I'm querying Salesforce.com via their AJAX toolkit and outputting query
>
> results into a table. Currently, their toolkit does not possess the
> ability to do table joins via their structured query language, which
> forces me to do the join manually via arrays.
>
>
> Right now, I'm having trouble getting these query results (which are in
>
> arrays) to combine effectively (mainly towards the end where I'm
> outputting into the tables).


You should post an example of the objects that are being returned, then
someone might show you how to combine the arrays in the objects to
create a table. I am not going to try to reverse-engineer the objects
from your usage.

[...]

> var output = "<table class='sortable' id='table1'>";
> output += "<tr>";


Using the += compound operator to concatenate strings is notoriously
slow in some browsers, you are probably better to use an Array and join
it:

var output = ['<table class="sortable" id="table1">'];
output.push('<tr>')


> output += "<th>Account</th>";
> output += "<th>Portfolio</th>";
> output += "<th>Last Activity</th>";
> output += "<th>Primary Contact</th>";
> output += "</tr>";
>
> for (var i=0; i < queryResult.records.length; i++)
> {
> var Account = queryResult.records[i];
> var primaryContact = primaryContactByAccountId[Account.get("Id")];
> var lastRow = "";


There is no need to declare the variables on every loop (it doesn't
hurt, it's just pointless). Declare them once just before the loop,
then just set their value inside. If there are many rows, it will be
faster to get the length of queryResult.records just once - and set
lastRow once per loop, not twice (lastRow does not seem to be used
anywhere - should it be?):

var Account, primaryContact, lastRow;
var j = queryResult.records.length;
for (var i=0; i < j; i++) {
Account = queryResult.records[i];
primaryContact = primaryContactByAccountId[Account.get("Id")];
lastRow = primaryContact.get("LastName");

> lastRow = primaryContact.get("LastName");
> output += "<tr>";


[...]

> document.getElementById("ResultsHolder").innerHTML = output;


... = output.join('');

What does output look like when you get to here, does it appear to be
valid HTML?

In most browsers, inserting a table using DOM will be just as fast,
much more reliable, standards compliant and less code than your use of
innerHTML. e.g.

var table, thead, row, cell, cellText;
table = document.createElement('table');
table.className = 'sortable';
table.id = 'table1'
thead = table.createTHead();
row = thead.insertRow(-1);

for ( colTitle in {'Account':'', 'Portfolio':'',
'Last Activity':'','Primary Contact':''}){
cell = row.insertCell(-1);
cell.appendChild(document.createTextNode(colTitle) );
}

var account, primaryContact, lastRow, alink;
var j = queryResult.records.length;
for (var i=0; i<j; i++){
account = queryResult.records[i];
primaryContact =
primaryContactByAccountId[account.get("Id")];
lastRow = primaryContact.get("LastName");
row = table.insertRow(-1);
cell = row.insertCell(-1);
alink = document.createElement('a');
alink.href = '/' + Account.get("Id");
alink.target = 'NEW';
alink.appendChild(document.createTextNode(accountN ame.get('Name'));
cell.appendChild(alink);
for (cellText in { Account.get("Portfolio_Rank__c"):'',
Account.get("SystemModstamp"):'',
"PUT PRIMARY CONTACTS HERE":''} ){
cell = row.insertCell(-1);
cell.appendChild(document.createTextNode(cellText) );
}
document.getElementById("ResultsHolder").appendChi ld(table);


Untested of course, but you should get the idea.


--
Rob

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Trouble with Pushing Arrays to Arrays Derek Cannon Ruby 5 04-17-2010 03:34 PM
Multidimensional arrays and arrays of arrays Philipp Java 21 01-20-2009 08:33 AM
Combining three arrays of hashes into one? Keith Lee Perl Misc 8 02-22-2006 12:53 AM
Combining object arrays mike Javascript 10 09-18-2005 02:20 PM
combining two arrays tgiles@gmail.com Perl Misc 8 03-03-2005 06:17 PM



Advertisments