Apex Random Function vs Real Random

Record Routing has become an art these days where companies want to route record in the most optimized ways. Some options are available when round robin routing.

1. Using SOQL offSet
2. Using Apex Random Function
3. Writing your own Round Robin Function

Using SOQL Offset

User randomUserSelected =  Database.query('Select Id from User Limit 1 Offset' + Math.floor(Math.random() * getListActiveUser.size()).intValue());

Using Apex Random Function

User randomUserSelected = getListActiveUser[Math.floor(Math.random() * getListActiveUser.size()).intValue()];

Writing your Own Round Robin Function

I wrote my own Round Robin Function that uses DateTime of the last record assigned to a specific rep. I then order bu the Last_Record_Received__c field in ascending order and reps with no assignment (Last_Record_Received__c==null) will get assigned first.
This is how my query looks like

 List returnActiveUserForRecord = Database.query(soqlUserQuery + ' where IsActive=true and ' + salesRepRoutingFieldName + '=true Order By Last_Record_Received__c ASC NULLS FIRST');

After each record assignment you must update the Last_Record_Received__c with the current DateTime. See code sample below:

user.Last_Record_Received__c= DateTime.Now();
update user;

With Option 3 you will get real round robin as each rep will get the same amount of records as I use the TimeDate as a flag of who last got a record. This helps with the more equal distribution of records that option 1 and 2 does not give you.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s