Direkt zum Hauptbereich

Posts

Es werden Posts vom März, 2014 angezeigt.

"AggregateResult" als Unterstützung im Service Bereich

Eine sehr hilfreiche Funktionalität bieten die sogenannten APEX Aggregate Functions (hier etwas ausführlicher dargestellt http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_agg_fns.htm ) Mit dem Einsatz der entsprechenden Funktion lässt sich z.B. die Anzahl offener Tickets pro Queue berechnen, ohne dabei die aufwändigen Schleifen zu drehen. COUNT(id)cnt  Anzahl Tickets MIN(CreatedDate)lmd  das Datum des ältesten Tickets SELECT  OwnerId, COUNT(id)cnt, MIN(CreatedDate)lmd  FROM   Case   WHERE  isClosed =  false   GROUP   BY  OwnerId Verpackt in eine Funktion sieht der Code wie folgt aus. Die Sortierung von Ergebnissen  sortResultsByQueueName  habe ich auskommentiert, da diese im letzten Post "Sortieren von Listeneinträgen einfach gemacht" ausführlich beschrieben wurde.      /***************      getQueues      **/      public  PageReference getQueues(){        // get number of tickets per queue sorted       lstQueueDetails =  n

Sortieren von Listeneinträgen einfach gemacht

Im letzten Blog-Post habe ich beschrieben, wie die Gruppenzugehörigkeit eines Salesforce-Benutzers per APEX berechnet werden kann. Die berechneten Gruppen und Queues lassen sich auf einer Visualforce Seite darstellen. Wie kann ich die Ergebnisse sortiert darstellen? Der folgende Code-Ausschnitt zeigt eine Lösung basierend auf dem rekursiven Aufruf der Sortierfunktion. INPUT - die unsortierte Liste mit eigenen Objekten OUTPUT - die nach  QueueName sortierte Liste     /*------------------     sortResultsByQueueName     */     private list <QueueDetail> sortResultsByQueueName( list <QueueDetail> lstUnsorted){     // the unsorted list contains just 1 value or is empty     if (lstUnsorted.isEmpty() || lstUnsorted.size() <= 1){           return lstUnsorted;         } else {              List<QueueDetail> lstLess = new List<QueueDetail>();              List<QueueDetail> lstGreater = new List<QueueDetail>();  

Gruppenzugehörigkeit mit APEX berechnen

Eine Visualforce Page zeigt alle Queues, die den aktuell angemeldeten User enthalten. Das ist die Aufgabe. Es ist nicht besonders schwer, die entsprechende SOQL Abfrage zu bilden. Etwas komplizierter wird es dann, wenn einige Queues verschachtelte Gruppen enthalten, zu deren Mitgliedern unter anderem der aktuelle User gehört. Die folgende Klasse enthält eine Methode, welche die Gruppenzugehörigkeit eines Salesforce Benutzers berechnet. Die Methode  computeUserGroups  wird rekursiv aufgerufen, bis oberste Ebene, z.B. Queue erreicht ist. Das Set  setGIds enthält alle für den angemeldeten Benutzer relevanten Gruppen und Queue IDs. public without sharing class userGroups{   public Set <Id> setGIds;       /*   CONSTRUCTOR  * /   public   userGroups (ApexPages.StandardSetController stdController){     uId = UserInfo.getUserId();              //*** User's queue membership **************/      setGIds = new set <Id>();                computeUs

Batch - Aufbau

Hin und wieder kommt es vor, dass viele Daten im Hintergrund aktualisiert werden müssen. Es ist keine Zauberei, einen Batch dafür zu schreiben. Viel mehr kommt es auf die Technik an. Schließlich muss jeder Batch auch getestet werden. Da Batches asynchron laufen, also zeitversetzt, und nicht unmittelbar nach dem Start, wird die Überprüfung der Testergebnisse nicht einfach sein. Daher ist es empfehlenswert, die komplette Logik in eine weitere Klasse auszulagern. So können die einzelnen Methoden und Funktionen dieser Klasse sowohl vom Batch benutzt, als auch im Testlauf geprüft werden. Schematisch dargestellt sieht der Aufbau wie folgt aus: Batch - Löschen von Daten ( f42_Batch_DeleteData) global class f42_Batch_DeleteData implements Database.Stateful, Database.Batchable<SObject>, Schedulable{ public f42_Batch_DeleteDataHelper batchHelper; public String soql;  /* Constructor */  /*********************/  public f42_Batch_DeleteData(){   batchHelper