I have the following method:

public static void updateCaseLastEmailStatus(List<EmailMessage> emUpdateCase) {
Id caserecordType = Schema.SObjectType.Case.getRecordTypeInfosByDeveloperName().get('CaseRecordPage').getRecordTypeId();
List<Case> caseUpdate = new List<Case>();
List<Id> listIds = new List<Id>();
for (EmailMessage eMsg : emUpdateCase) {
caseUpdate = new List<Case>([SELECT Last_Email_Status__c,
                            (SELECT Status FROM EmailMessages 
                             ORDER BY CreatedDate DESC LIMIT 1 )
                             From Case WHERE RecordTypeId = :caserecordType AND ID IN:  listIds]);

for(Id caseId : caseUpdate) {
    Case myCase = caseUpdate.get(caseId);
    myCase.Last_Email_Status__c = EMAIL_STATUSES.get(myCase.EmailMessages[0].Status);
update caseUpdate.values();   

When I try to save the file, it gives me the following three error:

Method does not exist or incorrect signature: void get(Id) from the type List

Invalid loop variable type expected Case was Id

Method does not exist or incorrect signature: void values() from the type List

  • pro tip: these kind of issues can be avoided by naming your lists/sets as plurals and your maps like casesById (i.e. thingsByKey)
    – cropredy
    Aug 11, 2021 at 18:37

1 Answer 1


You clearly expected caseUpdate to be a Map<Id, Case>. Remove your line where you declare it and update the line where you assign it to:

Map<Id, Case> caseUpdate = new Map<Id, Case>([/*query*/]);
for (Id caseId : caseUpdate.keySet())

Alternatively (and preferably as it is simpler), just stick with List<Case> and remove any references which expect it to be a Map.

for (Case record : caseUpdate)
    record.Last_Email_Status__c = record.EmailMessages[0].Status;
update caseUpdate;

You must log in to answer this question.

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