-1

Preparing a class that can post certain fields on opportunity in JSON format but running into the error "Initial term of field expression must be concrete SOject: Id"

public class oppTrigClass {
    public class oppRecord {
        public string oppId {get;set;}
        public string ownerId{get;set;}
        public date cDate{get;set;}
        public string stage{get;set;}
    }
    //
    @future(callout = true)
    public static void postOppInfo(list<Id> oppIds){
        //Create JSON generator
        JSONGenerator gen = JSON.createGenerator(true);
        gen.writeStartArray();
            for(Id oppId : oppIds){
                gen.writeStartObject();
                gen.writeStringField('Opportunity id', oppId);
                gen.writeStringField('Stage', oppId.StageName);
                //gen.writeStringField('owner id', oppId.ownerId);            
                //gen.writeDateField('close date', oppId.cDate);
                gen.writeEndObject();
            }
        gen.writeEndArray();
        string jsonOpps = gen.getAsString();
        system.debug('Opportunities:' + jsonOpps);
    }
}

Can someone please suggest how to overcome this error. Thanks

1
  • This should have been easy enough to fix searching Google for just a minute. It's probably one of the most common questions here on SFSE, Developer Forums, and elsewhere.
    – sfdcfox
    Jul 31, 2015 at 3:15

1 Answer 1

2

You need to query for the records:

@future(callout = true)
    public static void postOppInfo(list<Id> oppIds){
        Map<ID,Opportunity> opps = New Map<ID,Opportunity([Select ID, StageName, CloseDate, OwnerID From Opportunity Where ID IN :oppIds]);
        //Create JSON generator
        JSONGenerator gen = JSON.createGenerator(true);
        gen.writeStartArray();
            for(Id oppId : opps.keySet()){
                gen.writeStartObject();
                gen.writeStringField('Opportunity id', oppId);
                gen.writeStringField('Stage', opps.get(oppId).StageName);
                //gen.writeStringField('owner id', opps.get(oppId).ownerId);            
                //gen.writeDateField('close date', opps.get(oppId).CreatedDate);
                gen.writeEndObject();
            }
        gen.writeEndArray();
        string jsonOpps = gen.getAsString();
        system.debug('Opportunities:' + jsonOpps);
    }
0

You must log in to answer this question.

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