You need to sign in to do that
Don't have an account?
Mark Z Dean
Apex Specialist: Ingtegration Error - Step 2
Folks,
I am doing step 2 in Apex Specialist superbadge. I passed the challenge but when I run the class from Anonymous Apex, it works fine and it creates the records. When I re-run it, instead of just updating existing records, it creates tens of duplicates. Please help as I am losing sleep over this and its already past midnight :)
This is how the JSON looks like:
Many thanks...
I am doing step 2 in Apex Specialist superbadge. I passed the challenge but when I run the class from Anonymous Apex, it works fine and it creates the records. When I re-run it, instead of just updating existing records, it creates tens of duplicates. Please help as I am losing sleep over this and its already past midnight :)
public with sharing class WarehouseCalloutService { private static final String WAREHOUSE_URL = 'https://th-superbadge-apex.herokuapp.com/equipment'; // complete this method to make the callout (using @future) to the // REST endpoint and update equipment on hand. @future(callout=true) public static void runWarehouseEquipmentSync(){ List<Object> m; List<Product2> ListtoUpdate = new List<Product2>(); List<Product2> prod = [select id, Name, Maintenance_Cycle__c, Lifespan_Months__c, Current_Inventory__c, Replacement_Part__c, Warehouse_SKU__c, Cost__c from Product2 where isActive = true and Warehouse_SKU__c != null]; System.debug('Size of query is ' + prod.size()); Http http = new Http(); HttpRequest request = new HttpRequest(); request.setEndpoint(WAREHOUSE_URL); request.setMethod('GET'); HttpResponse response = Http.send(request); if(response.getStatusCode() == 200) m = (List<Object>) JSON.deserializeUntyped(response.getBody()); for(Object i : m){ Map<String, Object> l = (Map<String, Object>) i; String ExID = (String) l.get('_id'); Boolean Replacement = (Boolean) l.get('replacement'); Integer Quantity = (Integer) l.get('quantity'); String NameofProd = (String) l.get('name'); Decimal MaintPeriod = (Decimal) l.get('maintenanceperiod'); Integer Lifespan = (Integer) l.get('lifespan'); Integer Cost = (Integer) l.get('cost'); String Sku = (String) l.get('sku'); System.debug(ExID); for(Product2 p : prod){ if(Sku == p.Warehouse_SKU__c){ p.Lifespan_Months__c = Lifespan; p.Current_Inventory__c = Quantity; p.Cost__c = Cost; p.Maintenance_Cycle__c = MaintPeriod; // p.Warehouse_SKU__c = Sku; p.Replacement_Part__c = Replacement; System.debug(prod); ListtoUpdate.add(p); } else { Product2 newPr = new Product2(Name=NameofProd, Warehouse_SKU__c= Sku, Lifespan_Months__c=Lifespan, Current_Inventory__c = Quantity, Cost__c = Cost, Maintenance_Cycle__c = MaintPeriod, Replacement_Part__c=Replacement, isActive = TRUE); ListtoUpdate.add(newPr); } } } upsert ListtoUpdate; } }
This is how the JSON looks like:
[{"_id":"55d66226726b611100aaf741","replacement":false,"quantity":5,"name":"Generator 1000 kW","maintenanceperiod":365,"lifespan":120,"cost":5000,"sku":"100003"},{"_id":"55d66226726b611100aaf742","replacement":true,"quantity":183,"name":"Cooling Fan","maintenanceperiod":0,"lifespan":0,"cost":300,"sku":"100004"},{"_id":"55d66226726b611100aaf743","replacement":true,"quantity":143,"name":"Fuse 20A","maintenanceperiod":0,"lifespan":0,"cost":22,"sku":"100005"},{"_id":"55d66226726b611100aaf744","replacement":false,"quantity":5,"name":"Generator 2000 kw","maintenanceperiod":365,"lifespan":120,"cost":6000,"sku":"100006"},{"_id":"55d66226726b611100aaf745","replacement":true,"quantity":142,"name":"Fuse 25A","maintenanceperiod":0,"lifespan":0,"cost":28,"sku":"100007"},{"_id":"55d66226726b611100aaf746","replacement":true,"quantity":122,"name":"Fuse 13A","maintenanceperiod":0,"lifespan":0,"cost":10,"sku":"100008"},{"_id":"55d66226726b611100aaf747","replacement":true,"quantity":90,"name":"Ball Valve 10 cm","maintenanceperiod":0,"lifespan":0,"cost":50,"sku":"100009"},{"_id":"55d66226726b611100aaf748","replacement":false,"quantity":2,"name":"Converter","maintenanceperiod":180,"lifespan":120,"cost":3000,"sku":"100010"},{"_id":"55d66226726b611100aaf749","replacement":true,"quantity":75,"name":"Ball Valve 8 cm","maintenanceperiod":0,"lifespan":0,"cost":42,"sku":"100011"},{"_id":"55d66226726b611100aaf74a","replacement":true,"quantity":100,"name":"Breaker 25A","maintenanceperiod":0,"lifespan":0,"cost":30,"sku":"100012"},{"_id":"55d66226726b611100aaf74b","replacement":true,"quantity":150,"name":"Switch","maintenanceperiod":0,"lifespan":0,"cost":100,"sku":"100013"},{"_id":"55d66226726b611100aaf74c","replacement":true,"quantity":200,"name":"Ball Valve 5 cm","maintenanceperiod":0,"lifespan":0,"cost":30,"sku":"100014"},{"_id":"55d66226726b611100aaf74d","replacement":false,"quantity":8,"name":"UPS 3000 VA","maintenanceperiod":180,"lifespan":60,"cost":1600,"sku":"100015"},{"_id":"55d66226726b611100aaf74e","replacement":false,"quantity":10,"name":"UPS 1000 VA","maintenanceperiod":180,"lifespan":48,"cost":1000,"sku":"100016"},{"_id":"55d66226726b611100aaf74f","replacement":true,"quantity":180,"name":"Breaker 8A","maintenanceperiod":0,"lifespan":0,"cost":10,"sku":"100017"},{"_id":"55d66226726b611100aaf750","replacement":false,"quantity":2,"name":"Cooling Tower","maintenanceperiod":365,"lifespan":120,"cost":10000,"sku":"100018"},{"_id":"55d66226726b611100aaf751","replacement":true,"quantity":165,"name":"Motor","maintenanceperiod":0,"lifespan":0,"cost":150,"sku":"100019"},{"_id":"55d66226726b611100aaf752","replacement":true,"quantity":210,"name":"Breaker 13A","maintenanceperiod":0,"lifespan":0,"cost":20,"sku":"100020"},{"_id":"55d66226726b611100aaf753","replacement":true,"quantity":100,"name":"Radiator Pump","maintenanceperiod":0,"lifespan":0,"cost":500,"sku":"100021"},{"_id":"55d66226726b611100aaf754","replacement":true,"quantity":129,"name":"Breaker 20A","maintenanceperiod":0,"lifespan":0,"cost":25,"sku":"100022"},{"_id":"55d66226726b611100aaf73f","replacement":false,"quantity":10,"name":"UPS 2000 VA","maintenanceperiod":180,"lifespan":60,"cost":1350,"sku":"100001"},{"_id":"55d66226726b611100aaf740","replacement":true,"quantity":194,"name":"Fuse 8A","maintenanceperiod":0,"lifespan":0,"cost":5,"sku":"100002"}]
Many thanks...
Your code doesn't follow all the requirements - upsert is what required and not insert although the challenge will still pass because its looking for the scheduled apex job it appears.