"Upsert" just inserts new records from JSON, but not updates existing.
It's my code:
public class myClass {
@future (callout = true)
public static void getCallout(){
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://api.myjson.com/bins/m56qw');
request.setMethod('GET');
HttpResponse response = http.send(request);
if (response.getStatusCode() == 200){
List<Object> jsonList = (List<Object>) JSON.deserializeUntyped(response.getBody());
List<Product2> productList = new List<Product2>();
for(Object o : jsonList){
Map<String, Object> results = (Map<String, Object>) o;
Product2 prod = new Product2();
prod.Cost__c = Integer.valueOf(results.get('cost'));
prod.Warehouse_Key__c = String.valueOf(results.get('sku')); //My key to check a record
productList.add(prod);
}
if(productList != null){
upsert productList; //It just inserted, but not update existing records if I change them
}
}
}
}
What am I doing wrong?
Best Answer
To make upsert update records you have to specify either record Id or External Id. When neither is specified, Salesforce treats the record as new and inserts it.
Example with record Id:
Example with record External Id:
Upserting Records