public class GoogleOrderPubSubQueueable implements Queueable, Database.AllowsCallouts { public List orderList; public GoogleOrderPubSubQueueable(List order){ this.orderList=order; } public void execute(QueueableContext context) { //GCP Authentication GCPAuthManagementService gms = new GCPAuthManagementService(); GCP_Key__mdt serviceAccount = gms.getGCPServiceAccount('Salesforce_PubSub_Orders'); GCPAuthManagementService.GoogleAuthResponse gmsg = new GCPAuthManagementService.GoogleAuthResponse(); gmsg = gms.getGCPAuthToken(serviceAccount); String selectFields = serviceAccount.query_fields__c; List fields = selectFields.split(','); String sobType = serviceAccount.object__c; JSONGenerator gen = JSON.createGenerator(true); gen.writeStartObject(); gen.writeFieldName('records'); gen.writeStartArray(); for (SObject sob : Database.query('' + ' select ' + String.join(fields, ',') + ' from ' + sobType + ' where id IN: orderList' )) { gen.writeStartObject(); for (String field : fields) { Object value = sob.get(field); // if no value returned, exclude from JSON if (value != null) gen.writeStringField(field, String.valueOf(value)); } gen.writeEndObject(); } gen.writeEndArray(); gen.writeEndObject(); String body = gen.getAsString(); System.debug('body-' + body); // send order to google pubsub as message HttpRequest req = new HttpRequest(); req.setEndpoint(serviceAccount.audience__c); req.setHeader('Content-Type', 'application/json'); req.setHeader('Authorization', 'Bearer ' + gmsg.id_token); req.setMethod('POST'); req.setbody(body); Http http = new Http(); HTTPResponse response = http.send(req); system.debug('HTTP Request: ' + req); system.debug('HTTP Response: ' + response.getBody()); } }