cancel
Showing results for 
Search instead for 
Did you mean: 

javascript sort function

chrisokelly
Champ on-the-rise
Champ on-the-rise
Hi guys,

I am developing a dashlet webscript to display tickets from RT in Alfresco. The dashlet is working fine, my next step is to add sorting to it. I have attempted to do so, but I get an error message:

Failed to execute script 'classpath*:alfresco/site-webscripts/org/alfresco/components/dashlets/showRTTickets.get.js': 08050000 TypeError: Cannot find function sort. (jar:file:/opt/alfresco-4.0.d/tomcat/shared/lib/showRTTickets.jar!/alfresco/site-webscripts/org/alfresco/components/dashlets/showRTTickets.get.js#7)

As far as I can see my syntax is fine, I'm pulling my hair out here. My sort function looks like:
function ticketSort(tickets, sortBy, sortType)
   {
   var result={};
   switch(sortBy)
      {
      case "id": //integer sort
      result = tickets.sort(function(a, b){return a.id-b.id;});
      break;
      case "queue": //string sort
      result = tickets.sort(function(a, b){
         var stringA=a.queue.toLowerCase(), stringB=b.queue.toLowerCase();
         if (stringA < stringB)
            return -1;
         if (stringA > stringB)
            return 1;
         return 0;
      });
      break;
      case "owner": //string sort
      result = tickets.sort(function(a, b){
         var stringA=a.owner.toLowerCase(), stringB=b.owner.toLowerCase();
         if (stringA < stringB)
            return -1;
         if (stringA > stringB)
            return 1;
         return 0;
      });
      break;
      case "creator": //string sort
      result = tickets.sort(function(a, b){
         var stringA=a.creator.toLowerCase(), stringB=b.creator.toLowerCase();
         if (stringA < stringB)
            return -1;
         if (stringA > stringB)
            return 1;
         return 0;
      });
      break;
      case "subject": //string sort
      result = tickets.sort(function(a, b){
         var stringA=a.subject.toLowerCase(), stringB=b.subject.toLowerCase();
         if (stringA < stringB)
            return -1;
         if (stringA > stringB)
            return 1;
         return 0;
      });
      break;
      case "status": //string sort
      result = tickets.sort(function(a, b){
         var stringA=a.status.toLowerCase(), stringB=b.status.toLowerCase();
         if (stringA < stringB)
            return -1;
         if (stringA > stringB)
            return 1;
         return 0;
      });
      break;
      case "priority": //integer sort
      result = tickets.sort(function(a, b){return a.priority-b.priority});
      break;
      case "created": //date sort
      result = tickets.sort(function(a,b) {
         var dateA=new Date(a.created), dateB=new Date(b.created);
         return dateA-dateB;
      });
      break;
      case "due": //date sort
      result = tickets.sort(function(a,b) {
         var dateA=new Date(a.due), dateB=new Date(b.due);
         return dateA-dateB;
      });
      break;
      case "lastupdated": //date sort
      result = tickets.sort(function(a,b) {
         var dateA=new Date(a.lastUpdated), dateB=new Date(b.lastUpdated);
         return dateA-dateB;
      });
      break;
      }
   if (sortType == "desc")
      return results.reverse();
   else
      return results;
   }

I get the impression that the sort function is missing in Rhino perhaps, similar to the xmlhttprequest function. I actually implemented the xmlhttprequest object by adding a jar file and a bean just last week, does anyone know of one for the sort function (My google-fu could not dig one up)? Or is there perhaps a function in the Alfresco API somewhere to provide a similar mechanism (all that I could find was search related)?
3 REPLIES 3

romschn
Star Collaborator
Star Collaborator
Hi,

Are you using the data table to display the data onto your dashlet? If so then no need to write the custom sort method.

When you are setting up the datasource and defining the columns, put sortable:true attribute and it will use YUI sorting. No need to write a custom sort method.

Hope this helps,

Thanks

chrisokelly
Champ on-the-rise
Champ on-the-rise
No, I just create a normal HTML table using freemarker

romschn
Star Collaborator
Star Collaborator
I would suggest to use the datatable.