function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
GYAN ANDRUSGYAN ANDRUS 

Below trigger i have denoted the queue id,I want to get the queue nam,e dynamically,Added the trigger,please help me

trigger ParentChildcase on Case (before update) {

List<Case> listCase = [select Id,parentId,status from case where parentId != null  ];
////List<Queues> listqueue = [select Id from Queues where name = 'Welcome_Call_Queue'];
system.debug('listCase'+listCase);
map<Id,list<Case>> mapCase = new map<Id,list<Case>>();
    for(Case objCase : listCase){
         if(objCase.status != 'Closed'){
            List<Case> listCasemap = new List<Case>();
            if(mapCase.containskey(objCase.parentId))
                listCasemap = mapCase.get(objCase.parentId);
            listCasemap.add(objCase);
            mapCase.put(objCase.parentId,listCasemap);
         }
    }
    system.debug('mapCase'+mapCase);
    for(case caseObj:Trigger.New){
          if(caseObj.parentId == null && caseObj.Status == 'Closed'){
            if(mapCase.containskey(caseObj.Id)){
                List<Case> listCasemap = mapCase.get(caseObj.Id);
                if(listCasemap.size() != 0){
                    caseObj.addError('Unclosed Child Records are Present.');
                }               
            }
          }
        system.debug('caseObj.Owner.Name'+caseObj.Owner.Name);
        if(caseObj.OwnerID == '00GO0000001iIbf' && caseObj.Status == 'Closed'){
            caseObj.addError('please own the case and close');
        }          
      }   
}

 
Sunil02KumarSunil02Kumar
Hi Hema,

In order to fetch queue id dynamically, you need to put SOQL on Group object with type as 'Queue' and by specifying developer name of queue. 
For example, you queue name( label in queue detail page ) is "Test 1".  Find the developername of queue (Queue name in queue detail page). In my case the developername is "Test1". Now use below SOQL:

Group CaseQueue=[select id,name,DeveloperName from group where type='Queue' AND developername='Test1'];
system.debug('*****CaseQueue:'+CaseQueue);

Now in you if condition, use it as :
if(caseObj.OwnerID == CaseQueue.id && caseObj.Status == 'Closed'){
      //put your code here
}

Hope this will help you.
[If it solves your problem, please mark it as solution]

Thanks,
Sunil Kumar
 
GYAN ANDRUSGYAN ANDRUS
Thanks,Iam new to trigger,Where to add that query in trigger..Could u please update in my trigger please,
thanks hema
Sunil02KumarSunil02Kumar
Hi Hema,

Updated Trigger Code:

trigger ParentChildcase on Case (before update) {

String QueueDeveloperName='test1';//here specify your queue developer name
Group CaseQueue=[select id,name,DeveloperName from group where type='Queue' AND developername=:QueueDeveloperName];
system.debug('*****CaseQueue:'+CaseQueue);

List<Case> listCase = [select Id,parentId,status from case where parentId != null  ];
////List<Queues> listqueue = [select Id from Queues where name = 'Welcome_Call_Queue'];
system.debug('listCase'+listCase);
map<Id,list<Case>> mapCase = new map<Id,list<Case>>();
    for(Case objCase : listCase){
         if(objCase.status != 'Closed'){
            List<Case> listCasemap = new List<Case>();
            if(mapCase.containskey(objCase.parentId))
                listCasemap = mapCase.get(objCase.parentId);
            listCasemap.add(objCase);
            mapCase.put(objCase.parentId,listCasemap);
         }
    }
    system.debug('mapCase'+mapCase);
    for(case caseObj:Trigger.New){
          if(caseObj.parentId == null && caseObj.Status == 'Closed'){
            if(mapCase.containskey(caseObj.Id)){
                List<Case> listCasemap = mapCase.get(caseObj.Id);
                if(listCasemap.size() != 0){
                    caseObj.addError('Unclosed Child Records are Present.');
                }               
            }
          }
        system.debug('caseObj.Owner.Name'+caseObj.Owner.Name);
        if(caseObj.OwnerID == CaseQueue.id && caseObj.Status == 'Closed'){
            caseObj.addError('please own the case and close');
        }          
      }   
}

Hope this will help you.
[If it solves your problem, please mark it as solution]

Thanks,
Sunil Kumar
 
GYAN ANDRUSGYAN ANDRUS
String QueueDeveloperName='Welcome_Call_Queue';//here specify your queue developer name
Group CaseQueue=[select id,name,DeveloperName from group where type='Queue' AND developername=:Welcome_Call_Queue];
system.debug('*****CaseQueue:'+CaseQueue);
IS this correct
 
Sunil02KumarSunil02Kumar
Below is correct code:

String QueueDeveloperName='Welcome_Call_Queue';//here specify your queue developer name
Group CaseQueue=[select id,name,DeveloperName from group where type='Queue' AND developername=:QueueDeveloperName]; system.debug('*****CaseQueue:'+CaseQueue);

Hope this will help you.
[If it solves your problem, please mark it as solution]

Thanks,
Sunil Kumar