I have a problem with selecting specific custom queue in apex code.

For example I have:

        Case c = (Case) controller.getRecord();
        String queueName = c.Owner.Name;

        if (queueName != 'ATM_queue') { 
           //DO SOMETHING

Thanks for any advice.

2 Answers 2


There's no direct relationship between Owner and DeveloperName, because it is a Name object. If you really want to check by developer name, you'll have to query for it:

if(c.ownerid.getsobjecttype() == Group.SobjectType) {
  Group queue = [select developername from group where id = :c.ownerid];
  if(Queue.DeveloperName == 'atm_queue') {

As an alternative, you could also create a formula field to return the value, something like owner:queue.developername, and then you can check that value instead.

  • +1 for formula field as it saves queries, Downside(Only 20 object references on a case and that can be bit tricky) Nov 19, 2018 at 15:05

I'm not sure if you specifically need Developer Name or if you can use friendly name instead, but the Owner.Name field is populated when the Owner is a queue - but it uses the display name. So if your queue is called "ATM Queue" then the Owner.Name will be ATM Queue and your if statement would be:

if(queueName != 'ATM Queue'){
    // Do Something

Additionally, to make sure that the owner IS a queue before you assign the queueName string, you should do a Owner Check to see if the Owner is a User or a queue, like this:

String queueName;
String ownerId;
Case c = (Case) controller.getRecord();
ownerId = c.OwnerId;
    queueName = c.Owner.Name;

if (queueName != 'ATM Queue') { 
  • 4
    if(c.OwnerId.getSobjectType() == Group.SobjectType) is more self-documenting instead of relying on the key prefix.
    – sfdcfox
    Nov 19, 2018 at 14:54
  • I actually didn't even know that you could use .getSObjectType() in that context, that's very good information, thanks! Nov 19, 2018 at 14:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .