0

I have the following List from which I want to pass the UserId field into a set

string filter ='select UserId from OpportunityTeamMember';
       List < sObject > filterList = database.query(filter);
        System.debug('test: ' + filterList);
        Set<Id> filterIds = (new Map<Id,sObject>(filterList)).keySet().clone();

I end up with the OpportunityTeamMember Id's in the Set. If I tried to do this by a loop

Set<Id> filterIds = new Set<Id>(); 
for(sObject recObj: filterList){
    filterIds.add(recObj.UserId);   
}

But then I get Variable does not exist: UserId

How do I get the UserId's into the Set

Thanks in advance

2 Answers 2

4

you need to cast the object from SObject to OpportunityTeamMember, something like this:

Set<Id> filterIds = new Set<Id>(); 
for (sObject recObj: filterList) {
    OpportunityTeamMember otm = (OpportunityTeamMember) recObj;
    // after casting the SObject, you can access any of its properties:
    filterIds.add(otm.UserId);
}
2

For completeness, sometimes using the get method defined in the base SObject class can be a better way to go. In this case that would be:

Set<Id> filterIds = new Set<Id>(); 
for(sObject r: filterList){
    filterIds.add((Id) r.get('UserId');   
}

and note the need to cast the field value to the correct type of Id.

Or with a bit more compile-time checking and clarity for the user if the code will only ever be used for one type:

Set<Id> filterIds = new Set<Id>(); 
for(sObject r: filterList) {
    filterIds.add((Id) r.get(OpportunityTeamMember.UserId);   
}

Or in your case just go for static SOQL with the type information clearly specified:

Set<Id> filterIds = new Set<Id>();
for (OpportunityTeamMember otm : [
    select UserId
    from OpportunityTeamMember
    where ...
]) {
    filterIds.add(otm.UserId);
}

Or if you really want to find every unique OpportunityTeamMember.UserId, do most of the work in the database for speed and to reduce the chance of hitting governor limits:

Set<Id> filterIds = new Set<Id>();
for (AggregateResult ar : [
    select UserId uid
    from OpportunityTeamMember
    group by UserId
]) {
    filterIds.add((Id) ar.get('uid');
}

You must log in to answer this question.

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