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
GMASJGMASJ 

Search based on keyword list

Hi, 

  In below code I am hard coding RW: and FW: in the loop to compare and replace please suggest me how to  user keywords. 
public static void processUpdate(list<Case> cseLst) {
        String FWSubject;
        String RWSubject;
        String CaseSubject;
        list<Case> caseLst = new list<Case>();
       
        for (Case c : cseLst) {       
            if(c.subject <> null){     
                // Remove FW and RW from case subject to get exact string
                if(c.subject.Contains('FW:')){
                    FWSubject = c.subject.replaceAll('FW:','');
                    System.debug('FQ Trim String :' + FWSubject);
                    CaseSubject = FWSubject;     
                } else if(c.subject.Contains('RW:')){ 
                    RWSubject = c.subject.replaceAll('RW:','');
                    System.debug('RW Trim String :' + RWSubject);   
                    CaseSubject = RWSubject;

   }
}

Thanks
GMASJ
DheerajKumar@SalesforceDheerajKumar@Salesforce
Hi GMASJ,

You can pass set of keyWords in the method which you want to remove from subject.

Calling :
List<Case> caseList = new List<Case>{
    new Case(Subject = 'FW:Test Subject 1'),
    new Case(Subject = 'RW:Test Subject 2')
};
processUpdate(caseList, new Set<String>{'FW:', 'RW:'});
Update Code:
public static void processUpdate(list<Case> cseLst, Set<String> keyWords) {
        String CaseSubject;
        Map<String, String> keyWordSubjectMap = new Map<String,String>();
        list<Case> caseLst = new list<Case>();
       
        for (Case c : cseLst) {       
            if(c.subject <> null){     
               for(String keyWord : keyWords) {
                    if(c.Subject.contains(keyWord)) {
                        CaseSubject = c.subject.replaceAll(keyWord,'');
                        keyWordSubjectMap.put(keyWord, CaseSubject);
                        break;
                	}
                }
            }
        }
        System.debug('MAP' + keyWordSubjectMap);
}

If above code will solve your problem then mark this as best answer. Let me know if there any further help required on the same.

Thanks
Dheeraj Kumar
GMASJGMASJ
Hi Deeraj, 

 I tried using your code in below case list I am passing 4 subject values but only 2 are getting printed do you know what is the issue in the code. 
List<Case> caseList = new List<Case>{
    new Case(Subject = 'FW:Test Subject 1'),
    new Case(Subject = 'RW:Test Subject 2'),
    new Case(Subject = 'FW:Sudhir'), 
    new Case(Subject = 'FW:Samarth')     
};
    
processUpdate(caseList, new Set<String>{'FW:', 'RW:'});

public static void processUpdate(list<Case> cseLst, Set<String> keyWords) {
        String CaseSubject;
        Map<String, String> keyWordSubjectMap = new Map<String,String>();
        list<Case> caseLst = new list<Case>();
       
        for (Case c : cseLst) {       
            if(c.subject <> null){     
               for(String keyWord : keyWords) {
                    if(c.Subject.contains(keyWord)) {
                        CaseSubject = c.subject.replaceAll(keyWord,'');
                        keyWordSubjectMap.put(keyWord, CaseSubject);
                        //break;
                	}
                }
            }
        }
        System.debug('MAP' + keyWordSubjectMap);
}

Thanks
GMASJ
DheerajKumar@SalesforceDheerajKumar@Salesforce
Hi GMASJ,

You can use below code which is storing the keyword as key in map and all the subject which are against that key will be stored as list in map.
 
public static void processUpdate(list<Case> cseLst, Set<String> keyWords) {
        String CaseSubject;
        Map<String, List<String>> keyWordSubjectListMap = new Map<String,List<String>>();
        list<Case> caseLst = new list<Case>();
       
        for (Case c : cseLst) {       
            if(c.subject <> null){
                for(String keyWord : keyWords) {
                    if(c.Subject.contains(keyWord)) {
                        CaseSubject = c.subject.replaceAll(keyWord,'');
                        List<String> subjectList = keyWordSubjectListMap.containsKey(keyWord) ?
                            keyWordSubjectListMap.get(keyWord) : new List<String>();
                        subjectList.add(CaseSubject);
                        keyWordSubjectListMap.put(keyWord, subjectList);
                        break;
                    }
                }
            }
        }
        System.debug('MAP' + keyWordSubjectListMap);
}

Hit Kudos if this solve you problem and if this is what you are looking for then please mark it as a solution for other benefits.

Thanks
Dheeraj Kumar
GMASJGMASJ
Thanks Dheeraj it worked i have one last in same requirement of keyword if keyword is " FW: RW:" it should only replace RW is there a way to do this 

Thanks
GMASJ
sai krishna 162sai krishna 162
Have a question for you , If the keyword is "FW: RW:", how  do you want your  output map to look like?

example:
List<Case> caseList = new List<Case>{
    new Case(Subject = 'FW:Test Subject 1'),
    new Case(Subject = 'RW:Test Subject 2'),
    new Case(Subject = 'FW:Sudhir'), 
    new Case(Subject = 'FW: RW:Samarth')

Output 1: MAP{FW:=(Test Subject 1, Sudhir,  Samarth), RW:=(Test Subject 2)}  ???
                                                                   or
Output 2: MAP{FW:=(Test Subject 1, Sudhir), RW:=(Test Subject 2, Samarth)}  ???